diff --git a/popcorn/Assets/I2.meta b/popcorn/Assets/I2.meta new file mode 100644 index 00000000..f99fcf83 --- /dev/null +++ b/popcorn/Assets/I2.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1d7621515c2d74e7a8f2db137b44b187 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization.meta b/popcorn/Assets/I2/Localization.meta new file mode 100644 index 00000000..2d64d466 --- /dev/null +++ b/popcorn/Assets/I2/Localization.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b53dfc19b95344006a04855337ef5e7a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Examples.meta b/popcorn/Assets/I2/Localization/Examples.meta new file mode 100644 index 00000000..00a80b10 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b27ce6c46dc8ff04790d01f2841f08b5 +folderAsset: yes +timeCreated: 1463338425 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Examples/Common.meta b/popcorn/Assets/I2/Localization/Examples/Common.meta new file mode 100644 index 00000000..09f5d9b5 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Common.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c42cba3c502e146419547110ed07f40c +folderAsset: yes +timeCreated: 1463338425 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Examples/Common/Audio.meta b/popcorn/Assets/I2/Localization/Examples/Common/Audio.meta new file mode 100644 index 00000000..6626ea80 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Common/Audio.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 17818511482aa1f47a39555401c41978 +folderAsset: yes +timeCreated: 1463338425 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Examples/Common/Audio/frances.wav b/popcorn/Assets/I2/Localization/Examples/Common/Audio/frances.wav new file mode 100644 index 00000000..627bd317 Binary files /dev/null and b/popcorn/Assets/I2/Localization/Examples/Common/Audio/frances.wav differ diff --git a/popcorn/Assets/I2/Localization/Examples/Common/Audio/frances.wav.meta b/popcorn/Assets/I2/Localization/Examples/Common/Audio/frances.wav.meta new file mode 100644 index 00000000..7e9bf5e8 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Common/Audio/frances.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: e68e601305e6218408e8208f956472c7 +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/popcorn/Assets/I2/Localization/Examples/Common/Audio/ingles.wav b/popcorn/Assets/I2/Localization/Examples/Common/Audio/ingles.wav new file mode 100644 index 00000000..c3c39c07 Binary files /dev/null and b/popcorn/Assets/I2/Localization/Examples/Common/Audio/ingles.wav differ diff --git a/popcorn/Assets/I2/Localization/Examples/Common/Audio/ingles.wav.meta b/popcorn/Assets/I2/Localization/Examples/Common/Audio/ingles.wav.meta new file mode 100644 index 00000000..c4fc3d75 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Common/Audio/ingles.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: d43b462874fb2a14aaca956682ba3596 +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/popcorn/Assets/I2/Localization/Examples/Common/COMIC.TTF b/popcorn/Assets/I2/Localization/Examples/Common/COMIC.TTF new file mode 100644 index 00000000..c4bd6c1e Binary files /dev/null and b/popcorn/Assets/I2/Localization/Examples/Common/COMIC.TTF differ diff --git a/popcorn/Assets/I2/Localization/Examples/Common/COMIC.TTF.meta b/popcorn/Assets/I2/Localization/Examples/Common/COMIC.TTF.meta new file mode 100644 index 00000000..c8e1c8e2 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Common/COMIC.TTF.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 769d4a2288b99004184236f5fc4469c8 +TrueTypeFontImporter: + externalObjects: {} + serializedVersion: 4 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 0 + characterPadding: 1 + includeFontData: 1 + fontName: Comic Sans MS + fontNames: + - Comic Sans MS + fallbackFontReferences: [] + customCharacters: + fontRenderingMode: 1 + ascentCalculationMode: 2 + useLegacyBoundsCalculation: 0 + shouldRoundAdvanceValue: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Examples/Common/Meshes.meta b/popcorn/Assets/I2/Localization/Examples/Common/Meshes.meta new file mode 100644 index 00000000..46ed1c98 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Common/Meshes.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e2062439689ce7e41a5293a91834e6ec +folderAsset: yes +timeCreated: 1463338425 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Examples/Common/Meshes/Mesh_ES.prefab b/popcorn/Assets/I2/Localization/Examples/Common/Meshes/Mesh_ES.prefab new file mode 100644 index 00000000..34074e27 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Common/Meshes/Mesh_ES.prefab @@ -0,0 +1,83 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &100000 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 400000} + - 33: {fileID: 3300000} + - 65: {fileID: 6500000} + - 23: {fileID: 2300000} + m_Layer: 0 + m_Name: Mesh_ES + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &400000 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100000} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: .849666595, z: 0} + m_LocalScale: {x: 2, y: 2, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 +--- !u!23 &2300000 +Renderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100000} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_LightmapIndex: 255 + m_LightmapTilingOffset: {x: 1, y: 1, z: 0, w: 0} + m_Materials: + - {fileID: 10302, guid: 0000000000000000f000000000000000, type: 0} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_UseLightProbes: 0 + m_LightProbeAnchor: {fileID: 0} + m_ScaleInLightmap: 1 + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!33 &3300000 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100000} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &6500000 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100000} + 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!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: 100000} + m_IsPrefabParent: 1 + m_IsExploded: 1 diff --git a/popcorn/Assets/I2/Localization/Examples/Common/Meshes/Mesh_ES.prefab.meta b/popcorn/Assets/I2/Localization/Examples/Common/Meshes/Mesh_ES.prefab.meta new file mode 100644 index 00000000..bb5dbd14 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Common/Meshes/Mesh_ES.prefab.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: a5c71238940815045b04992831c96352 +NativeFormatImporter: + userData: diff --git a/popcorn/Assets/I2/Localization/Examples/Common/Meshes/Mesh_US.prefab b/popcorn/Assets/I2/Localization/Examples/Common/Meshes/Mesh_US.prefab new file mode 100644 index 00000000..0ee78fc6 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Common/Meshes/Mesh_US.prefab @@ -0,0 +1,84 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &100000 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 400000} + - 33: {fileID: 3300000} + - 136: {fileID: 13600000} + - 23: {fileID: 2300000} + m_Layer: 0 + m_Name: Mesh_US + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &400000 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100000} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1.64078522, z: 0} + m_LocalScale: {x: 1.74000001, y: 2.00999999, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 +--- !u!23 &2300000 +Renderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100000} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_LightmapIndex: 255 + m_LightmapTilingOffset: {x: 1, y: 1, z: 0, w: 0} + m_Materials: + - {fileID: 10302, guid: 0000000000000000f000000000000000, type: 0} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_UseLightProbes: 0 + m_LightProbeAnchor: {fileID: 0} + m_ScaleInLightmap: 1 + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!33 &3300000 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100000} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!136 &13600000 +CapsuleCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100000} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: .5 + m_Height: 2 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !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: 100000} + m_IsPrefabParent: 1 + m_IsExploded: 1 diff --git a/popcorn/Assets/I2/Localization/Examples/Common/Meshes/Mesh_US.prefab.meta b/popcorn/Assets/I2/Localization/Examples/Common/Meshes/Mesh_US.prefab.meta new file mode 100644 index 00000000..7775fcfa --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Common/Meshes/Mesh_US.prefab.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: d243bb55d50b4424cb4d5e5036104aef +NativeFormatImporter: + userData: diff --git a/popcorn/Assets/I2/Localization/Examples/Common/Scripts.meta b/popcorn/Assets/I2/Localization/Examples/Common/Scripts.meta new file mode 100644 index 00000000..48d0b171 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Common/Scripts.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1e3ed655f1379e042a5a2fddd7dd1f4b +folderAsset: yes +timeCreated: 1463338425 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Examples/Common/Scripts/CallbackNotification.cs b/popcorn/Assets/I2/Localization/Examples/Common/Scripts/CallbackNotification.cs new file mode 100644 index 00000000..77e345af --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Common/Scripts/CallbackNotification.cs @@ -0,0 +1,18 @@ +using UnityEngine; + +namespace I2.Loc +{ + + public class CallbackNotification : MonoBehaviour + { + public void OnModifyLocalization() + { + if (string.IsNullOrEmpty(Localize.MainTranslation)) + return; + + string PlayerColor = LocalizationManager.GetTranslation( "Color/Red" ); + + Localize.MainTranslation = Localize.MainTranslation.Replace("{PLAYER_COLOR}", PlayerColor); + } + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Examples/Common/Scripts/CallbackNotification.cs.meta b/popcorn/Assets/I2/Localization/Examples/Common/Scripts/CallbackNotification.cs.meta new file mode 100644 index 00000000..b8379c4c --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Common/Scripts/CallbackNotification.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fc44345ca9310574fa50c645e6a7254f +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/popcorn/Assets/I2/Localization/Examples/Common/Scripts/Example_ChangeLanguage.cs b/popcorn/Assets/I2/Localization/Examples/Common/Scripts/Example_ChangeLanguage.cs new file mode 100644 index 00000000..f8d54774 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Common/Scripts/Example_ChangeLanguage.cs @@ -0,0 +1,32 @@ +using UnityEngine; + +namespace I2.Loc +{ + public class Example_ChangeLanguage : MonoBehaviour + { + public void SetLanguage_English() + { + SetLanguage("English"); + } + + public void SetLanguage_French() + { + SetLanguage("French"); + } + + public void SetLanguage_Spanish() + { + SetLanguage("Spanish"); + } + + + public void SetLanguage( string LangName ) + { + if( LocalizationManager.HasLanguage(LangName)) + { + LocalizationManager.CurrentLanguage = LangName; + } + } + + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Examples/Common/Scripts/Example_ChangeLanguage.cs.meta b/popcorn/Assets/I2/Localization/Examples/Common/Scripts/Example_ChangeLanguage.cs.meta new file mode 100644 index 00000000..8f266d62 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Common/Scripts/Example_ChangeLanguage.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1cbcdd875c93e1e4fb87f997228fbd7a +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/popcorn/Assets/I2/Localization/Examples/Common/Scripts/Example_LocalizedString.cs b/popcorn/Assets/I2/Localization/Examples/Common/Scripts/Example_LocalizedString.cs new file mode 100644 index 00000000..258a9163 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Common/Scripts/Example_LocalizedString.cs @@ -0,0 +1,63 @@ +using UnityEngine; + +namespace I2.Loc +{ + public class Example_LocalizedString : MonoBehaviour + { + public LocalizedString _MyLocalizedString; // This string sets a Term in the inspector, but returns its translation + + public string _NormalString; // This is regular string to see that the LocalizedString has a custom inspector, but this shows only a textField + + [TermsPopup] + public string _StringWithTermPopup; // Example of making a normal string that show as a popup with all the terms in the inspector + + public void Start() + { + // LocalizedString are strings that can be set to a Term, and when getting its value, return the Term's translation + + // Basic Example of using LocalizedString in the Inspector + // Just change the Term in the inspector, and use this to access the term translation + Debug.Log(_MyLocalizedString); + Debug.Log(LocalizationManager.GetTranslation(_NormalString)); // regular strings need to manually call GetTranslation() + Debug.Log(LocalizationManager.GetTranslation(_StringWithTermPopup)); // same here, given that this string just have a custom inspector + + + + // Example of setting the term in code to get its translation + LocalizedString locString = "Term2"; + string translation = locString; // returns the translation of Term2 to the current language + Debug.Log(translation); + + + + // Assigning a LocalizedString to another LocalizedString, copies the reference to its term + LocalizedString locString1 = _MyLocalizedString; + Debug.Log(locString1); + + + + + // LocalizedString have settings to customize the result + + LocalizedString customString = "Term3"; + Debug.Log(customString); + + LocalizedString customNoRTL = "Term3"; + customNoRTL.mRTL_IgnoreArabicFix = true; + Debug.Log(customNoRTL); + + + LocalizedString customString1 = "Term3"; + customString1.mRTL_ConvertNumbers = true; + customString1.mRTL_MaxLineLength = 20; + Debug.Log(customString1); + + + + + // Copying a LocalizedString also copies its settings + LocalizedString customStringCopy = customString1; + Debug.Log(customStringCopy); + } + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Examples/Common/Scripts/Example_LocalizedString.cs.meta b/popcorn/Assets/I2/Localization/Examples/Common/Scripts/Example_LocalizedString.cs.meta new file mode 100644 index 00000000..1df992dd --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Common/Scripts/Example_LocalizedString.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 60b32d3b3e0ad124aa1fed397539a9ad +timeCreated: 1478239773 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Examples/Common/Scripts/GlobalParametersExample.cs b/popcorn/Assets/I2/Localization/Examples/Common/Scripts/GlobalParametersExample.cs new file mode 100644 index 00000000..b58a325e --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Common/Scripts/GlobalParametersExample.cs @@ -0,0 +1,18 @@ +namespace I2.Loc +{ + + public class GlobalParametersExample : RegisterGlobalParameters + { + public override string GetParameterValue( string ParamName ) + { + if (ParamName == "WINNER") + return "Javier"; // For your game, get this value from your Game Manager + + if (ParamName == "NUM PLAYERS") + return 5.ToString(); + + return null; + } + + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Examples/Common/Scripts/GlobalParametersExample.cs.meta b/popcorn/Assets/I2/Localization/Examples/Common/Scripts/GlobalParametersExample.cs.meta new file mode 100644 index 00000000..e76d8f54 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Common/Scripts/GlobalParametersExample.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bcf154e686692e8468e3813f885633e8 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/popcorn/Assets/I2/Localization/Examples/Common/Scripts/NGUI_LanguagePopup.cs b/popcorn/Assets/I2/Localization/Examples/Common/Scripts/NGUI_LanguagePopup.cs new file mode 100644 index 00000000..98c85bb9 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Common/Scripts/NGUI_LanguagePopup.cs @@ -0,0 +1,29 @@ +using UnityEngine; + +// This class is an example of how to setup a Popup with all the languages in NGUI + +#if NGUI +namespace I2.Loc +{ + + public class NGUI_LanguagePopup : MonoBehaviour + { + public LanguageSource Source; + + void Start () + { + UIPopupList mList = GetComponent(); + mList.items = Source.mSource.GetLanguages(); + + EventDelegate.Add(mList.onChange, OnValueChange); + int idx = mList.items.IndexOf(LocalizationManager.CurrentLanguage); + mList.value = mList.items[idx>=0 ? idx : 0]; + } + + public void OnValueChange () + { + LocalizationManager.CurrentLanguage = UIPopupList.current.value; + } + } +} +#endif \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Examples/Common/Scripts/NGUI_LanguagePopup.cs.meta b/popcorn/Assets/I2/Localization/Examples/Common/Scripts/NGUI_LanguagePopup.cs.meta new file mode 100644 index 00000000..3df5376a --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Common/Scripts/NGUI_LanguagePopup.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 36d92fc19cfafc84d8014a1589d64233 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/popcorn/Assets/I2/Localization/Examples/Common/Scripts/RealTimeTranslation.cs b/popcorn/Assets/I2/Localization/Examples/Common/Scripts/RealTimeTranslation.cs new file mode 100644 index 00000000..c2cf240c --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Common/Scripts/RealTimeTranslation.cs @@ -0,0 +1,132 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace I2.Loc +{ + public class RealTimeTranslation : MonoBehaviour + { + string OriginalText = "This is an example showing how to use the google translator to translate chat messages within the game.\nIt also supports multiline translations.", + TranslatedText = string.Empty; + bool IsTranslating; + + public void OnGUI() + { + GUILayout.Label("Translate:"); + OriginalText = GUILayout.TextArea(OriginalText, GUILayout.Width(Screen.width)); + + GUILayout.Space(10); + + GUILayout.BeginHorizontal(); + if (GUILayout.Button("English -> Español", GUILayout.Height(100))) StartTranslating("en", "es"); + if (GUILayout.Button("Español -> English", GUILayout.Height(100))) StartTranslating("es", "en"); + GUILayout.EndHorizontal(); + + GUILayout.Space(10); + + GUILayout.BeginHorizontal(); + GUILayout.TextArea("Multiple Translation with 1 call:\n'This is an example' -> en,zh\n'Hola' -> en"); + if (GUILayout.Button("Multi Translate", GUILayout.ExpandHeight(true))) ExampleMultiTranslations_Async(); + GUILayout.EndHorizontal(); + + + GUILayout.TextArea(TranslatedText, GUILayout.Width(Screen.width)); + + GUILayout.Space(10); + + + if (IsTranslating) + { + GUILayout.Label("Contacting Google...."); + } + } + + public void StartTranslating(string fromCode, string toCode) + { + IsTranslating = true; + + // fromCode could be "auto" to autodetect the language + GoogleTranslation.Translate(OriginalText, fromCode, toCode, OnTranslationReady); + + // can also use the ForceTranslate version: (it will block the main thread until the translation is returned) + //var translation = GoogleTranslation.ForceTranslate(OriginalText, fromCode, toCode); + //Debug.Log(translation); + } + + void OnTranslationReady(string Translation, string errorMsg) + { + IsTranslating = false; + + if (errorMsg != null) + Debug.LogError(errorMsg); + else + TranslatedText = Translation; + } + + public void ExampleMultiTranslations_Blocking() + { + // This shows how to ask for many translations + var dict = new Dictionary(); + GoogleTranslation.AddQuery("This is an example", "en", "es", dict); + GoogleTranslation.AddQuery("This is an example", "auto", "zh", dict); + GoogleTranslation.AddQuery("Hola", "es", "en", dict); + + if (!GoogleTranslation.ForceTranslate(dict)) + return; + + Debug.Log(GoogleTranslation.GetQueryResult("This is an example", "en", dict)); + Debug.Log(GoogleTranslation.GetQueryResult("This is an example", "zh", dict)); + Debug.Log(GoogleTranslation.GetQueryResult("This is an example", "", dict)); // This returns ANY translation of that text (in this case, the first one 'en') + Debug.Log(dict["Hola"].Results[0]); // example of getting the translation directly from the Results + } + + public void ExampleMultiTranslations_Async() + { + IsTranslating = true; + + // This shows how to ask for many translations + var dict = new Dictionary(); + GoogleTranslation.AddQuery("This is an example", "en", "es", dict); + GoogleTranslation.AddQuery("This is an example", "auto", "zh", dict); + GoogleTranslation.AddQuery("Hola", "es", "en", dict); + + GoogleTranslation.Translate(dict, OnMultitranslationReady); + } + + void OnMultitranslationReady(Dictionary dict, string errorMsg) + { + if (!string.IsNullOrEmpty(errorMsg)) + { + Debug.LogError(errorMsg); + return; + } + + IsTranslating = false; + TranslatedText = ""; + + TranslatedText += GoogleTranslation.GetQueryResult("This is an example", "es", dict) + "\n"; + TranslatedText += GoogleTranslation.GetQueryResult("This is an example", "zh", dict) + "\n"; + TranslatedText += GoogleTranslation.GetQueryResult("This is an example", "", dict) + "\n"; // This returns ANY translation of that text (in this case, the first one 'en') + TranslatedText += dict["Hola"].Results[0]; // example of getting the translation directly from the Results + } + + #region This methods are used in the publisher's Unity Tests + + public bool IsWaitingForTranslation() + { + return IsTranslating; + } + + public string GetTranslatedText() + { + return TranslatedText; + } + + public void SetOriginalText( string text ) + { + OriginalText = text; + } + + #endregion + + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Examples/Common/Scripts/RealTimeTranslation.cs.meta b/popcorn/Assets/I2/Localization/Examples/Common/Scripts/RealTimeTranslation.cs.meta new file mode 100644 index 00000000..34c932c7 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Common/Scripts/RealTimeTranslation.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c09397e14dc19fb4ab38f8216b0759a4 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: -450 + icon: {instanceID: 0} + userData: diff --git a/popcorn/Assets/I2/Localization/Examples/Common/Scripts/RegisterBundlesManager.cs b/popcorn/Assets/I2/Localization/Examples/Common/Scripts/RegisterBundlesManager.cs new file mode 100644 index 00000000..36df424c --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Common/Scripts/RegisterBundlesManager.cs @@ -0,0 +1,43 @@ +using System; +using UnityEngine; +using Object = UnityEngine.Object; + +namespace I2.Loc +{ + public class RegisterBundlesManager : MonoBehaviour, IResourceManager_Bundles + { + public void OnEnable() + { + if (!ResourceManager.pInstance.mBundleManagers.Contains(this)) + { + ResourceManager.pInstance.mBundleManagers.Add(this); + } + } + + public void OnDisable() + { + ResourceManager.pInstance.mBundleManagers.Remove(this); + } + + public virtual Object LoadFromBundle(string path, Type assetType) + { + // load from a bundle using path and return the object + return null; + } +} + + + // To use bundles, create a class similar to this one + // and add it to one of your scenes + // + + /*public class CustomBundlesManager : RegisterBundlesManager + { + public override Object LoadFromBundle(string path, System.Type assetType ) + { + // load from a bundle using path and return the object + return null; + } + } + */ +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Examples/Common/Scripts/RegisterBundlesManager.cs.meta b/popcorn/Assets/I2/Localization/Examples/Common/Scripts/RegisterBundlesManager.cs.meta new file mode 100644 index 00000000..485f76d7 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Common/Scripts/RegisterBundlesManager.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 63c602586209c154886c6df1d347f847 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/popcorn/Assets/I2/Localization/Examples/Common/Scripts/ToggleLanguage.cs b/popcorn/Assets/I2/Localization/Examples/Common/Scripts/ToggleLanguage.cs new file mode 100644 index 00000000..60df36b9 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Common/Scripts/ToggleLanguage.cs @@ -0,0 +1,29 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace I2.Loc +{ + public class ToggleLanguage : MonoBehaviour + { + void Start () + { + Invoke("test", 3); + } + + void test() + { + //-- to move into the next language ---- + + List languages = LocalizationManager.GetAllLanguages(); + int Index = languages.IndexOf(LocalizationManager.CurrentLanguage); + if (Index<0) + Index = 0; + else + Index = (Index+1) % languages.Count; + + //-- Call this function again in 3 seconds + + Invoke("test", 3); + } + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Examples/Common/Scripts/ToggleLanguage.cs.meta b/popcorn/Assets/I2/Localization/Examples/Common/Scripts/ToggleLanguage.cs.meta new file mode 100644 index 00000000..64affd46 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Common/Scripts/ToggleLanguage.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 55bf2bd9f27244a03a94e8e907db26cc +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/popcorn/Assets/I2/Localization/Examples/Common/Window.png b/popcorn/Assets/I2/Localization/Examples/Common/Window.png new file mode 100644 index 00000000..46138913 Binary files /dev/null and b/popcorn/Assets/I2/Localization/Examples/Common/Window.png differ diff --git a/popcorn/Assets/I2/Localization/Examples/Common/Window.png.meta b/popcorn/Assets/I2/Localization/Examples/Common/Window.png.meta new file mode 100644 index 00000000..4a4c74ad --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Common/Window.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 8d412f782b72d2d49a240c947362048f +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/popcorn/Assets/I2/Localization/Examples/Resources.meta b/popcorn/Assets/I2/Localization/Examples/Resources.meta new file mode 100644 index 00000000..24aad211 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Resources.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b3af20bac176afc48863451560409acb +folderAsset: yes +timeCreated: 1463338425 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Examples/Resources/ARIAL SDF.asset b/popcorn/Assets/I2/Localization/Examples/Resources/ARIAL SDF.asset new file mode 100644 index 00000000..ff04b901 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Resources/ARIAL SDF.asset @@ -0,0 +1,1701 @@ +%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: ARIAL SDF + m_EditorClassIdentifier: + hashCode: 353930246 + material: {fileID: 21268714557401158} + materialHashCode: 604955127 + m_Version: 1.1.0 + m_SourceFontFileGUID: 56c59f4ecd2348d41abca4cc46a07e11 + m_SourceFontFile_EditorRef: {fileID: 12800000, guid: 56c59f4ecd2348d41abca4cc46a07e11, + type: 3} + m_SourceFontFile: {fileID: 12800000, guid: 56c59f4ecd2348d41abca4cc46a07e11, type: 3} + m_AtlasPopulationMode: 1 + m_FaceInfo: + m_FaceIndex: 0 + m_FamilyName: Arial + m_StyleName: Regular + m_PointSize: 90 + m_Scale: 1 + m_LineHeight: 103.49121 + m_AscentLine: 81.47461 + m_CapLine: 65 + m_MeanLine: 47 + m_Baseline: 0 + m_DescentLine: -19.072266 + m_SuperscriptOffset: 81.47461 + m_SuperscriptSize: 0.5 + m_SubscriptOffset: -19.072266 + m_SubscriptSize: 0.5 + m_UnderlineOffset: -12.832031 + m_UnderlineThickness: 6.591797 + m_StrikethroughOffset: 18.8 + m_StrikethroughThickness: 6.591797 + m_TabWidth: 25 + m_GlyphTable: + - m_Index: 66 + m_Metrics: + m_Width: 52.421875 + m_Height: 5.71875 + m_HorizontalBearingX: -1.359375 + m_HorizontalBearingY: -12.171875 + m_HorizontalAdvance: 50.046875 + m_GlyphRect: + m_X: 10 + m_Y: 10 + m_Width: 54 + m_Height: 6 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 171 + m_Metrics: + m_Width: 69.046875 + m_Height: 9.015625 + m_HorizontalBearingX: 10.5 + m_HorizontalBearingY: 9.015625 + m_HorizontalAdvance: 90 + m_GlyphRect: + m_X: 83 + m_Y: 10 + m_Width: 70 + m_Height: 10 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 959 + m_Metrics: + m_Width: 79.234375 + m_Height: 40.25 + m_HorizontalBearingX: -3.078125 + m_HorizontalBearingY: 53.125 + m_HorizontalAdvance: 76.15625 + m_GlyphRect: + m_X: 172 + m_Y: 10 + m_Width: 81 + m_Height: 42 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 910 + m_Metrics: + m_Width: 19.828125 + m_Height: 53.75 + m_HorizontalBearingX: 0.828125 + m_HorizontalBearingY: 66.625 + m_HorizontalAdvance: 20.65625 + m_GlyphRect: + m_X: 10 + m_Y: 35 + m_Width: 21 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 971 + m_Metrics: + m_Width: 45.390625 + m_Height: 29.625 + m_HorizontalBearingX: -3.078125 + m_HorizontalBearingY: 42.5 + m_HorizontalAdvance: 47.328125 + m_GlyphRect: + m_X: 50 + m_Y: 39 + m_Width: 47 + m_Height: 31 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 978 + m_Metrics: + m_Width: 69.25 + m_Height: 48.421875 + m_HorizontalBearingX: 1.71875 + m_HorizontalBearingY: 61.296875 + m_HorizontalAdvance: 70.96875 + m_GlyphRect: + m_X: 272 + m_Y: 10 + m_Width: 70 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 3 + m_Metrics: + m_Width: 0 + m_Height: 0 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 0 + m_HorizontalAdvance: 25 + m_GlyphRect: + m_X: 0 + m_Y: 0 + m_Width: 0 + m_Height: 0 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 51 + m_Metrics: + m_Width: 49.1875 + m_Height: 64.421875 + m_HorizontalBearingX: 6.9375 + m_HorizontalBearingY: 64.421875 + m_HorizontalAdvance: 60.03125 + m_GlyphRect: + m_X: 116 + m_Y: 71 + m_Width: 51 + m_Height: 65 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 59 + m_Metrics: + m_Width: 59.0625 + m_Height: 64.421875 + m_HorizontalBearingX: 0.390625 + m_HorizontalBearingY: 64.421875 + m_HorizontalAdvance: 60.03125 + m_GlyphRect: + m_X: 186 + m_Y: 71 + m_Width: 60 + m_Height: 65 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 995 + m_Metrics: + m_Width: 38.546875 + m_Height: 24.078125 + m_HorizontalBearingX: -3.078125 + m_HorizontalBearingY: 36.953125 + m_HorizontalAdvance: 35.46875 + m_GlyphRect: + m_X: 50 + m_Y: 89 + m_Width: 40 + m_Height: 25 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 998 + m_Metrics: + m_Width: 44.296875 + m_Height: 56.6875 + m_HorizontalBearingX: 3.03125 + m_HorizontalBearingY: 50.1875 + m_HorizontalAdvance: 47.328125 + m_GlyphRect: + m_X: 10 + m_Y: 133 + m_Width: 45 + m_Height: 58 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 935 + m_Metrics: + m_Width: 50.765625 + m_Height: 44.65625 + m_HorizontalBearingX: -3.078125 + m_HorizontalBearingY: 57.53125 + m_HorizontalAdvance: 47.6875 + m_GlyphRect: + m_X: 361 + m_Y: 10 + m_Width: 52 + m_Height: 46 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1020 + m_Metrics: + m_Width: 50.796875 + m_Height: 55.359375 + m_HorizontalBearingX: 3.25 + m_HorizontalBearingY: 66 + m_HorizontalAdvance: 54.046875 + m_GlyphRect: + m_X: 432 + m_Y: 10 + m_Width: 52 + m_Height: 56 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 989 + m_Metrics: + m_Width: 42.453125 + m_Height: 69.125 + m_HorizontalBearingX: 3.125 + m_HorizontalBearingY: 69.734375 + m_HorizontalAdvance: 45.578125 + m_GlyphRect: + m_X: 361 + m_Y: 75 + m_Width: 43 + m_Height: 70 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 952 + m_Metrics: + m_Width: 50.84375 + m_Height: 51.5 + m_HorizontalBearingX: -3.078125 + m_HorizontalBearingY: 64.375 + m_HorizontalAdvance: 47.765625 + m_GlyphRect: + m_X: 265 + m_Y: 79 + m_Width: 52 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1003 + m_Metrics: + m_Width: 37.703125 + m_Height: 38.671875 + m_HorizontalBearingX: -3.078125 + m_HorizontalBearingY: 49.921875 + m_HorizontalAdvance: 40.515625 + m_GlyphRect: + m_X: 265 + m_Y: 151 + m_Width: 39 + m_Height: 39 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 938 + m_Metrics: + m_Width: 26.1875 + m_Height: 36.78125 + m_HorizontalBearingX: 4.171875 + m_HorizontalBearingY: 49.65625 + m_HorizontalAdvance: 30.359375 + m_GlyphRect: + m_X: 74 + m_Y: 155 + m_Width: 27 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 915 + m_Metrics: + m_Width: 24.4375 + m_Height: 45.96875 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 57.65625 + m_HorizontalAdvance: 25.40625 + m_GlyphRect: + m_X: 10 + m_Y: 210 + m_Width: 25 + m_Height: 47 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 951 + m_Metrics: + m_Width: 50.84375 + m_Height: 51.5 + m_HorizontalBearingX: -3.078125 + m_HorizontalBearingY: 64.375 + m_HorizontalAdvance: 47.765625 + m_GlyphRect: + m_X: 120 + m_Y: 155 + m_Width: 52 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 942 + m_Metrics: + m_Width: 40.734375 + m_Height: 46.84375 + m_HorizontalBearingX: 3.25 + m_HorizontalBearingY: 38.671875 + m_HorizontalAdvance: 43.984375 + m_GlyphRect: + m_X: 54 + m_Y: 212 + m_Width: 41 + m_Height: 48 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1011 + m_Metrics: + m_Width: 25.046875 + m_Height: 47.28125 + m_HorizontalBearingX: -3.078125 + m_HorizontalBearingY: 41.046875 + m_HorizontalAdvance: 21.96875 + m_GlyphRect: + m_X: 191 + m_Y: 155 + m_Width: 26 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 962 + m_Metrics: + m_Width: 55.421875 + m_Height: 58.53125 + m_HorizontalBearingX: -3.078125 + m_HorizontalBearingY: 71.40625 + m_HorizontalAdvance: 52.34375 + m_GlyphRect: + m_X: 503 + m_Y: 10 + m_Width: 57 + m_Height: 60 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 979 + m_Metrics: + m_Width: 27.15625 + m_Height: 52.46875 + m_HorizontalBearingX: -3.078125 + m_HorizontalBearingY: 65.34375 + m_HorizontalAdvance: 24.078125 + m_GlyphRect: + m_X: 423 + m_Y: 85 + m_Width: 29 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1012 + m_Metrics: + m_Width: 25.046875 + m_Height: 47.28125 + m_HorizontalBearingX: -3.078125 + m_HorizontalBearingY: 41.046875 + m_HorizontalAdvance: 21.96875 + m_GlyphRect: + m_X: 579 + m_Y: 10 + m_Width: 26 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1006 + m_Metrics: + m_Width: 36.6875 + m_Height: 41.53125 + m_HorizontalBearingX: 2.203125 + m_HorizontalBearingY: 34.625 + m_HorizontalAdvance: 38.890625 + m_GlyphRect: + m_X: 624 + m_Y: 10 + m_Width: 37 + m_Height: 42 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 983 + m_Metrics: + m_Width: 27.15625 + m_Height: 53.75 + m_HorizontalBearingX: -3.078125 + m_HorizontalBearingY: 66.625 + m_HorizontalAdvance: 24.078125 + m_GlyphRect: + m_X: 680 + m_Y: 10 + m_Width: 29 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 956 + m_Metrics: + m_Width: 79.234375 + m_Height: 23.59375 + m_HorizontalBearingX: -3.078125 + m_HorizontalBearingY: 36.46875 + m_HorizontalAdvance: 76.15625 + m_GlyphRect: + m_X: 579 + m_Y: 78 + m_Width: 81 + m_Height: 25 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 39 + m_Metrics: + m_Width: 53.265625 + m_Height: 64.421875 + m_HorizontalBearingX: 6.9375 + m_HorizontalBearingY: 64.421875 + m_HorizontalAdvance: 65 + m_GlyphRect: + m_X: 471 + m_Y: 89 + m_Width: 55 + m_Height: 65 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 82 + m_Metrics: + m_Width: 43.734375 + m_Height: 48.78125 + m_HorizontalBearingX: 2.984375 + m_HorizontalBearingY: 47.71875 + m_HorizontalAdvance: 50.046875 + m_GlyphRect: + m_X: 323 + m_Y: 164 + m_Width: 45 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 88 + m_Metrics: + m_Width: 37.84375 + m_Height: 47.734375 + m_HorizontalBearingX: 5.75 + m_HorizontalBearingY: 46.671875 + m_HorizontalAdvance: 50.046875 + m_GlyphRect: + m_X: 387 + m_Y: 164 + m_Width: 39 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 69 + m_Metrics: + m_Width: 40.46875 + m_Height: 65.484375 + m_HorizontalBearingX: 5.890625 + m_HorizontalBearingY: 64.421875 + m_HorizontalAdvance: 50.046875 + m_GlyphRect: + m_X: 236 + m_Y: 209 + m_Width: 42 + m_Height: 67 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 79 + m_Metrics: + m_Width: 7.921875 + m_Height: 64.421875 + m_HorizontalBearingX: 5.75 + m_HorizontalBearingY: 64.421875 + m_HorizontalAdvance: 20 + m_GlyphRect: + m_X: 545 + m_Y: 89 + m_Width: 9 + m_Height: 65 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 72 + m_Metrics: + m_Width: 43.015625 + m_Height: 48.78125 + m_HorizontalBearingX: 3.296875 + m_HorizontalBearingY: 47.71875 + m_HorizontalAdvance: 50.046875 + m_GlyphRect: + m_X: 114 + m_Y: 227 + m_Width: 44 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 58 + m_Metrics: + m_Width: 82.84375 + m_Height: 64.421875 + m_HorizontalBearingX: 1.09375 + m_HorizontalBearingY: 64.421875 + m_HorizontalAdvance: 84.953125 + m_GlyphRect: + m_X: 10 + m_Y: 279 + m_Width: 83 + m_Height: 65 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 68 + m_Metrics: + m_Width: 42.984375 + m_Height: 48.78125 + m_HorizontalBearingX: 3.25 + m_HorizontalBearingY: 47.71875 + m_HorizontalAdvance: 50.046875 + m_GlyphRect: + m_X: 728 + m_Y: 10 + m_Width: 44 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 87 + m_Metrics: + m_Width: 22.765625 + m_Height: 63.578125 + m_HorizontalBearingX: 1.578125 + m_HorizontalBearingY: 62.96875 + m_HorizontalAdvance: 25 + m_GlyphRect: + m_X: 191 + m_Y: 223 + m_Width: 24 + m_Height: 64 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 70 + m_Metrics: + m_Width: 40.65625 + m_Height: 48.78125 + m_HorizontalBearingX: 3.515625 + m_HorizontalBearingY: 47.71875 + m_HorizontalAdvance: 45 + m_GlyphRect: + m_X: 112 + m_Y: 296 + m_Width: 42 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 75 + m_Metrics: + m_Width: 38.015625 + m_Height: 64.421875 + m_HorizontalBearingX: 5.9375 + m_HorizontalBearingY: 64.421875 + m_HorizontalAdvance: 50.046875 + m_GlyphRect: + m_X: 10 + m_Y: 363 + m_Width: 39 + m_Height: 65 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 76 + m_Metrics: + m_Width: 7.90625 + m_Height: 64.421875 + m_HorizontalBearingX: 5.984375 + m_HorizontalBearingY: 64.421875 + m_HorizontalAdvance: 20 + m_GlyphRect: + m_X: 68 + m_Y: 363 + m_Width: 9 + m_Height: 65 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 81 + m_Metrics: + m_Width: 37.921875 + m_Height: 47.71875 + m_HorizontalBearingX: 5.9375 + m_HorizontalBearingY: 47.71875 + m_HorizontalAdvance: 50.046875 + m_GlyphRect: + m_X: 791 + m_Y: 10 + m_Width: 39 + m_Height: 48 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 74 + m_Metrics: + m_Width: 41.125 + m_Height: 66.65625 + m_HorizontalBearingX: 2.90625 + m_HorizontalBearingY: 47.71875 + m_HorizontalAdvance: 50.046875 + m_GlyphRect: + m_X: 849 + m_Y: 10 + m_Width: 43 + m_Height: 67 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 86 + m_Metrics: + m_Width: 38.765625 + m_Height: 48.78125 + m_HorizontalBearingX: 2.765625 + m_HorizontalBearingY: 47.71875 + m_HorizontalAdvance: 45 + m_GlyphRect: + m_X: 728 + m_Y: 79 + m_Width: 40 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 85 + m_Metrics: + m_Width: 25.359375 + m_Height: 47.71875 + m_HorizontalBearingX: 5.84375 + m_HorizontalBearingY: 47.71875 + m_HorizontalAdvance: 29.96875 + m_GlyphRect: + m_X: 679 + m_Y: 84 + m_Width: 27 + m_Height: 48 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 89 + m_Metrics: + m_Width: 42.8125 + m_Height: 46.671875 + m_HorizontalBearingX: 1.140625 + m_HorizontalBearingY: 46.671875 + m_HorizontalAdvance: 45 + m_GlyphRect: + m_X: 787 + m_Y: 79 + m_Width: 43 + m_Height: 47 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 71 + m_Metrics: + m_Width: 40.46875 + m_Height: 65.484375 + m_HorizontalBearingX: 3.078125 + m_HorizontalBearingY: 64.421875 + m_HorizontalAdvance: 50.046875 + m_GlyphRect: + m_X: 573 + m_Y: 122 + m_Width: 41 + m_Height: 67 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 57 + m_Metrics: + m_Width: 58.9375 + m_Height: 64.421875 + m_HorizontalBearingX: 0.390625 + m_HorizontalBearingY: 64.421875 + m_HorizontalAdvance: 60.03125 + m_GlyphRect: + m_X: 911 + m_Y: 10 + m_Width: 60 + m_Height: 65 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 33 + m_Metrics: + m_Width: 42.671875 + m_Height: 43.625 + m_HorizontalBearingX: 4.921875 + m_HorizontalBearingY: 53.5625 + m_HorizontalAdvance: 52.5625 + m_GlyphRect: + m_X: 911 + m_Y: 94 + m_Width: 44 + m_Height: 45 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 18 + m_Metrics: + m_Width: 25 + m_Height: 66.609375 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 65.515625 + m_HorizontalAdvance: 25 + m_GlyphRect: + m_X: 633 + m_Y: 122 + m_Width: 25 + m_Height: 68 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 31 + m_Metrics: + m_Width: 42.671875 + m_Height: 43.625 + m_HorizontalBearingX: 4.921875 + m_HorizontalBearingY: 53.5625 + m_HorizontalAdvance: 52.5625 + m_GlyphRect: + m_X: 787 + m_Y: 145 + m_Width: 44 + m_Height: 45 + m_Scale: 1 + m_AtlasIndex: 0 + m_CharacterTable: + - m_ElementType: 1 + m_Unicode: 95 + m_GlyphIndex: 66 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 8230 + m_GlyphIndex: 171 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 65215 + m_GlyphIndex: 959 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 65166 + m_GlyphIndex: 910 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 65227 + m_GlyphIndex: 971 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 65234 + m_GlyphIndex: 978 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 32 + m_GlyphIndex: 3 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 80 + m_GlyphIndex: 51 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 88 + m_GlyphIndex: 59 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 65251 + m_GlyphIndex: 995 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 65254 + m_GlyphIndex: 998 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 65191 + m_GlyphIndex: 935 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 65276 + m_GlyphIndex: 1020 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 1604 + m_GlyphIndex: 989 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 65208 + m_GlyphIndex: 952 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 65259 + m_GlyphIndex: 1003 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 65194 + m_GlyphIndex: 938 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 1577 + m_GlyphIndex: 915 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 65207 + m_GlyphIndex: 951 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 65198 + m_GlyphIndex: 942 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 65267 + m_GlyphIndex: 1011 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 65218 + m_GlyphIndex: 962 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 65235 + m_GlyphIndex: 979 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 65268 + m_GlyphIndex: 1012 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 65262 + m_GlyphIndex: 1006 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 65239 + m_GlyphIndex: 983 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 65212 + m_GlyphIndex: 956 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 68 + m_GlyphIndex: 39 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 111 + m_GlyphIndex: 82 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 117 + m_GlyphIndex: 88 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 98 + m_GlyphIndex: 69 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 108 + m_GlyphIndex: 79 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 101 + m_GlyphIndex: 72 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 87 + m_GlyphIndex: 58 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 97 + m_GlyphIndex: 68 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 116 + m_GlyphIndex: 87 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 99 + m_GlyphIndex: 70 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 104 + m_GlyphIndex: 75 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 105 + m_GlyphIndex: 76 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 110 + m_GlyphIndex: 81 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 103 + m_GlyphIndex: 74 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 115 + m_GlyphIndex: 86 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 114 + m_GlyphIndex: 85 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 118 + m_GlyphIndex: 89 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 100 + m_GlyphIndex: 71 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 86 + m_GlyphIndex: 57 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 62 + m_GlyphIndex: 33 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 47 + m_GlyphIndex: 18 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 60 + m_GlyphIndex: 31 + m_Scale: 1 + m_AtlasTextures: + - {fileID: 28601538341639112} + m_AtlasTextureIndex: 0 + m_UsedGlyphRects: + - m_X: 0 + m_Y: 0 + m_Width: 73 + m_Height: 25 + - m_X: 73 + m_Y: 0 + m_Width: 89 + m_Height: 29 + - m_X: 162 + m_Y: 0 + m_Width: 100 + m_Height: 61 + - m_X: 0 + m_Y: 25 + m_Width: 40 + m_Height: 74 + - m_X: 40 + m_Y: 29 + m_Width: 66 + m_Height: 50 + - m_X: 262 + m_Y: 0 + m_Width: 89 + m_Height: 69 + - m_X: 106 + m_Y: 61 + m_Width: 70 + m_Height: 84 + - m_X: 176 + m_Y: 61 + m_Width: 79 + m_Height: 84 + - m_X: 40 + m_Y: 79 + m_Width: 59 + m_Height: 44 + - m_X: 0 + m_Y: 123 + m_Width: 64 + m_Height: 77 + - m_X: 351 + m_Y: 0 + m_Width: 71 + m_Height: 65 + - m_X: 422 + m_Y: 0 + m_Width: 71 + m_Height: 75 + - m_X: 351 + m_Y: 65 + m_Width: 62 + m_Height: 89 + - m_X: 255 + m_Y: 69 + m_Width: 71 + m_Height: 72 + - m_X: 255 + m_Y: 141 + m_Width: 58 + m_Height: 58 + - m_X: 64 + m_Y: 145 + m_Width: 46 + m_Height: 57 + - m_X: 0 + m_Y: 200 + m_Width: 44 + m_Height: 66 + - m_X: 110 + m_Y: 145 + m_Width: 71 + m_Height: 72 + - m_X: 44 + m_Y: 202 + m_Width: 60 + m_Height: 67 + - m_X: 181 + m_Y: 145 + m_Width: 45 + m_Height: 68 + - m_X: 493 + m_Y: 0 + m_Width: 76 + m_Height: 79 + - m_X: 413 + m_Y: 75 + m_Width: 48 + m_Height: 73 + - m_X: 569 + m_Y: 0 + m_Width: 45 + m_Height: 68 + - m_X: 614 + m_Y: 0 + m_Width: 56 + m_Height: 61 + - m_X: 670 + m_Y: 0 + m_Width: 48 + m_Height: 74 + - m_X: 569 + m_Y: 68 + m_Width: 100 + m_Height: 44 + - m_X: 461 + m_Y: 79 + m_Width: 74 + m_Height: 84 + - m_X: 313 + m_Y: 154 + m_Width: 64 + m_Height: 69 + - m_X: 377 + m_Y: 154 + m_Width: 58 + m_Height: 68 + - m_X: 226 + m_Y: 199 + m_Width: 61 + m_Height: 86 + - m_X: 535 + m_Y: 79 + m_Width: 28 + m_Height: 84 + - m_X: 104 + m_Y: 217 + m_Width: 63 + m_Height: 69 + - m_X: 0 + m_Y: 269 + m_Width: 102 + m_Height: 84 + - m_X: 718 + m_Y: 0 + m_Width: 63 + m_Height: 69 + - m_X: 181 + m_Y: 213 + m_Width: 43 + m_Height: 83 + - m_X: 102 + m_Y: 286 + m_Width: 61 + m_Height: 69 + - m_X: 0 + m_Y: 353 + m_Width: 58 + m_Height: 84 + - m_X: 58 + m_Y: 353 + m_Width: 28 + m_Height: 84 + - m_X: 781 + m_Y: 0 + m_Width: 58 + m_Height: 67 + - m_X: 839 + m_Y: 0 + m_Width: 62 + m_Height: 86 + - m_X: 718 + m_Y: 69 + m_Width: 59 + m_Height: 69 + - m_X: 669 + m_Y: 74 + m_Width: 46 + m_Height: 67 + - m_X: 777 + m_Y: 69 + m_Width: 62 + m_Height: 66 + - m_X: 563 + m_Y: 112 + m_Width: 60 + m_Height: 86 + - m_X: 901 + m_Y: 0 + m_Width: 79 + m_Height: 84 + - m_X: 901 + m_Y: 84 + m_Width: 63 + m_Height: 64 + - m_X: 623 + m_Y: 112 + m_Width: 44 + m_Height: 87 + - m_X: 777 + m_Y: 135 + m_Width: 63 + m_Height: 64 + m_FreeGlyphRects: + - m_X: 40 + m_Y: 25 + m_Width: 33 + m_Height: 4 + - m_X: 106 + m_Y: 29 + m_Width: 56 + m_Height: 32 + - m_X: 0 + m_Y: 99 + m_Width: 40 + m_Height: 24 + - m_X: 255 + m_Y: 61 + m_Width: 7 + m_Height: 8 + - m_X: 99 + m_Y: 79 + m_Width: 7 + m_Height: 66 + - m_X: 64 + m_Y: 123 + m_Width: 42 + m_Height: 22 + - m_X: 44 + m_Y: 200 + m_Width: 20 + m_Height: 2 + - m_X: 413 + m_Y: 65 + m_Width: 9 + m_Height: 10 + - m_X: 614 + m_Y: 61 + m_Width: 56 + m_Height: 7 + - m_X: 461 + m_Y: 75 + m_Width: 32 + m_Height: 4 + - m_X: 326 + m_Y: 69 + m_Width: 25 + m_Height: 85 + - m_X: 313 + m_Y: 141 + m_Width: 38 + m_Height: 13 + - m_X: 413 + m_Y: 148 + m_Width: 48 + m_Height: 6 + - m_X: 435 + m_Y: 148 + m_Width: 26 + m_Height: 875 + - m_X: 377 + m_Y: 222 + m_Width: 646 + m_Height: 801 + - m_X: 226 + m_Y: 145 + m_Width: 29 + m_Height: 54 + - m_X: 287 + m_Y: 223 + m_Width: 736 + m_Height: 800 + - m_X: 287 + m_Y: 199 + m_Width: 26 + m_Height: 824 + - m_X: 104 + m_Y: 202 + m_Width: 6 + m_Height: 15 + - m_X: 0 + m_Y: 266 + m_Width: 44 + m_Height: 3 + - m_X: 224 + m_Y: 213 + m_Width: 2 + m_Height: 810 + - m_X: 224 + m_Y: 285 + m_Width: 799 + m_Height: 738 + - m_X: 167 + m_Y: 217 + m_Width: 14 + m_Height: 806 + - m_X: 102 + m_Y: 269 + m_Width: 2 + m_Height: 17 + - m_X: 163 + m_Y: 296 + m_Width: 860 + m_Height: 727 + - m_X: 163 + m_Y: 286 + m_Width: 18 + m_Height: 737 + - m_X: 0 + m_Y: 437 + m_Width: 1023 + m_Height: 586 + - m_X: 86 + m_Y: 355 + m_Width: 937 + m_Height: 668 + - m_X: 86 + m_Y: 353 + m_Width: 16 + m_Height: 670 + - m_X: 669 + m_Y: 61 + m_Width: 1 + m_Height: 13 + - m_X: 715 + m_Y: 74 + m_Width: 3 + m_Height: 949 + - m_X: 781 + m_Y: 67 + m_Width: 58 + m_Height: 2 + - m_X: 435 + m_Y: 163 + m_Width: 128 + m_Height: 860 + - m_X: 563 + m_Y: 79 + m_Width: 6 + m_Height: 33 + - m_X: 980 + m_Y: 0 + m_Width: 43 + m_Height: 1023 + - m_X: 964 + m_Y: 84 + m_Width: 59 + m_Height: 939 + - m_X: 435 + m_Y: 199 + m_Width: 588 + m_Height: 824 + - m_X: 435 + m_Y: 198 + m_Width: 188 + m_Height: 825 + - m_X: 667 + m_Y: 112 + m_Width: 2 + m_Height: 911 + - m_X: 715 + m_Y: 138 + m_Width: 62 + m_Height: 885 + - m_X: 839 + m_Y: 86 + m_Width: 62 + m_Height: 49 + - m_X: 840 + m_Y: 86 + m_Width: 61 + m_Height: 937 + - m_X: 840 + m_Y: 148 + m_Width: 183 + m_Height: 875 + - m_X: 667 + m_Y: 141 + m_Width: 110 + m_Height: 882 + 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: 1024 + m_AtlasHeight: 1024 + m_AtlasPadding: 9 + m_AtlasRenderMode: 4165 + m_glyphInfoList: [] + m_KerningTable: + kerningPairs: [] + m_FontFeatureTable: + m_GlyphPairAdjustmentRecords: + - m_FirstAdjustmentRecord: + m_GlyphIndex: 51 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: -1.625 + m_YAdvance: 0 + m_SecondAdjustmentRecord: + m_GlyphIndex: 3 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: 0 + m_YAdvance: 0 + m_FeatureLookupFlags: 0 + - m_FirstAdjustmentRecord: + m_GlyphIndex: 57 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: -6.6875 + m_YAdvance: 0 + m_SecondAdjustmentRecord: + m_GlyphIndex: 68 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: 0 + m_YAdvance: 0 + m_FeatureLookupFlags: 0 + - m_FirstAdjustmentRecord: + m_GlyphIndex: 57 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: -4.96875 + m_YAdvance: 0 + m_SecondAdjustmentRecord: + m_GlyphIndex: 72 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: 0 + m_YAdvance: 0 + m_FeatureLookupFlags: 0 + - m_FirstAdjustmentRecord: + m_GlyphIndex: 57 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: -1.625 + m_YAdvance: 0 + m_SecondAdjustmentRecord: + m_GlyphIndex: 76 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: 0 + m_YAdvance: 0 + m_FeatureLookupFlags: 0 + - m_FirstAdjustmentRecord: + m_GlyphIndex: 57 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: -4.96875 + m_YAdvance: 0 + m_SecondAdjustmentRecord: + m_GlyphIndex: 82 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: 0 + m_YAdvance: 0 + m_FeatureLookupFlags: 0 + - m_FirstAdjustmentRecord: + m_GlyphIndex: 57 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: -3.34375 + m_YAdvance: 0 + m_SecondAdjustmentRecord: + m_GlyphIndex: 85 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: 0 + m_YAdvance: 0 + m_FeatureLookupFlags: 0 + - m_FirstAdjustmentRecord: + m_GlyphIndex: 57 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: -3.34375 + m_YAdvance: 0 + m_SecondAdjustmentRecord: + m_GlyphIndex: 88 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: 0 + m_YAdvance: 0 + m_FeatureLookupFlags: 0 + - m_FirstAdjustmentRecord: + m_GlyphIndex: 58 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: -3.34375 + m_YAdvance: 0 + m_SecondAdjustmentRecord: + m_GlyphIndex: 68 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: 0 + m_YAdvance: 0 + m_FeatureLookupFlags: 0 + - m_FirstAdjustmentRecord: + m_GlyphIndex: 58 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: -1.625 + m_YAdvance: 0 + m_SecondAdjustmentRecord: + m_GlyphIndex: 72 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: 0 + m_YAdvance: 0 + m_FeatureLookupFlags: 0 + - m_FirstAdjustmentRecord: + m_GlyphIndex: 58 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: -1.625 + m_YAdvance: 0 + m_SecondAdjustmentRecord: + m_GlyphIndex: 82 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: 0 + m_YAdvance: 0 + m_FeatureLookupFlags: 0 + - m_FirstAdjustmentRecord: + m_GlyphIndex: 58 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: -1.625 + m_YAdvance: 0 + m_SecondAdjustmentRecord: + m_GlyphIndex: 85 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: 0 + m_YAdvance: 0 + m_FeatureLookupFlags: 0 + - m_FirstAdjustmentRecord: + m_GlyphIndex: 58 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: -1.625 + m_YAdvance: 0 + m_SecondAdjustmentRecord: + m_GlyphIndex: 88 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: 0 + m_YAdvance: 0 + m_FeatureLookupFlags: 0 + fallbackFontAssets: [] + m_FallbackFontAssetTable: [] + m_CreationSettings: + sourceFontFileName: + sourceFontFileGUID: 56c59f4ecd2348d41abca4cc46a07e11 + pointSizeSamplingMode: 0 + pointSize: 90 + padding: 9 + packingMode: 0 + atlasWidth: 1024 + atlasHeight: 1024 + characterSetSelectionMode: 7 + characterSequence: + 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 &21268714557401158 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ARIAL Atlas 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: 28601538341639112} + 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: 10 + - _LightAngle: 3.1416 + - _MaskSoftnessX: 0 + - _MaskSoftnessY: 0 + - _OutlineSoftness: 0 + - _OutlineUVSpeedX: 0 + - _OutlineUVSpeedY: 0 + - _OutlineWidth: 0 + - _PerspectiveFilter: 0.875 + - _Reflectivity: 10 + - _ScaleRatioA: 0.9 + - _ScaleRatioB: 0.73125 + - _ScaleRatioC: 0.73125 + - _ScaleX: 1 + - _ScaleY: 1 + - _ShaderFlags: 0 + - _Sharpness: 0 + - _SpecularPower: 2 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _TextureHeight: 1024 + - _TextureWidth: 1024 + - _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 &28601538341639112 +Texture2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ARIAL Atlas + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 2 + m_Width: 1024 + m_Height: 1024 + m_CompleteImageSize: 1048576 + m_TextureFormat: 1 + m_MipCount: 1 + m_IsReadable: 1 + 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: 1048576 + _typelessdata: 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004080a0a121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212120706040100000000000000000000000002070a0c0d13131313131313130d0c0a070200000000000000000000000002060a0c0d13131313131313130d0c0a070200000000000000000000000002070a0c0d13131313131313130d0d0b070200000000000000000000000000030606080808080808080808080707060300000000000000000104060708080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080706040000000000000000000000000000000000000000000000000000000000000000000000010200000306070707080808080808080808080808080808080808080808080808080808080808080808080808080808080808080705020000000000000000000000000000030606080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080807070501000000000000000000000000000407090a0b0b0b0b0a0a0a090908070706040000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306060808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080807060401000000000000000000000000000000000000000000000000000305060706040100000000000000000000000000000000000000000000000000000000000000000000000000030506090b0d0f10111211100e0b07070501000000000000000000000000000000000000000000000000000000000306060808080808080808080808080808080808080808080808080808080606030000000000000000000000000000000000000000000000000000000000000306070706060300000000000000000000000000000000000000000000000000000000000000000000000000000000010407071313131313131311100e0b060000000000000000000000000000010406131313131313131311110e0b060100000000000000000000000000000000000000000000000000040607090c0e10111112121111100e0c0907060400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0e101113131313131313130a0a08040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b101416171f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1413110d0801000000000000000000070d1316191a20202020202020201a1917130e0700000000000000000000070d1216191920202020202020201a1917130e0800000000000000000000070e1317191a20202020202020201a1917130e0801000000000000000000060b0f121315151515151515151514141312100b060604030608080d11131415151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151312100c07000000000000000000000000000000000000000000000000000000020507080a0c0e0f060c10121314141415151515151515151515151515151515151515151515151515151515151515151515151515151515151514120e090300000000000000000000060b0f121315151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151413110d0802000000000000000000050b1013161718181717171716161515141312100c070d0b090706040100000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f1213151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151413100d0701000000000000000000000000000000000000000000060b0f12131413110d0801000000000000000000000000000000000000000000000000000000000000000105060b0f121315181a1c1d1e1e1e1d1b181413110d0802000000000000000000000000000000000000000000000000060b0f121315151515151515151515151515151515151515151515151515151513120f0b06000000000000000000000000000000000000000000020507080b060c1012131413120f0b060a070604000000000000000000060606060606060600000000000000000000000000000001080d111314202020202020201e1d1b17120b040000000000000000000001070d111320202020202020201e1d1b17120c0400000000000000000000000000000000000000000003070c10131416181b1d1d1e1f1f1e1e1d1b19161312100c07030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b11171b1d1e2020202020202020171614100b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810171c2023242b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b21201d19130c04000000000000010a12191e2325262d2d2d2d2d2d2d2d2626231f19120a01000000000000010a12191e2325262d2d2d2d2d2d2d2d2726231f19120a02000000000000010a12191f2326262d2d2d2d2d2d2d2d2726231f19120a02000000000000020a11171c1f202121212121212121212121201f1c171413110f121515191d20212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121201f1c18120b03000000000000000000000000000000000000000000020608090e12141517191a1c1d171c1f20212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121211e1a140d0500000000000000020a11171c1f20212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121201e19130d0500000000000000080f161c2022232424242424242323222221201f1c181c1a18161413100d0705020000000000000000000000000000000000000306070808080605030000000000000000000000020a11171c1f202121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212120201d18120c04000000000000000000000000000000000000020a11171b1f2021201d19130c040000000000000000000000000000000000000000000000000000000205080d1114171b1f20222427292a2b2b2b2a282521201d19130f0a040000000000000000000000000000000000000000020a11171c1f20212121212121212121212121212121212121212121212121212121201f1c17110a02000000000000000000000000000000000003090e121415181b171c1f2020201f1c171a171413100c070100000306080913131313131313120706040100000000000000000000040c13191d202d2d2d2d2d2d2d2d2b2a27231d160e050000000000000000040c13181d202d2d2d2d2d2d2d2d2b2a27231d160e06000000000000000000000000000000000000060c1012181d1f20232528292a2b2c2c2b2a29272523201f1c1812100b060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e161d22272a2b2d2d2d2d2d2d2d2d2423201c17100800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008111a22282d3031383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838382d2c29241e160d0400000000000a131c242a2f3233393939393939393933322f2a241c130a0000000000000a131c232a2f3233393939393939393933322f2a241c140a0000000000000a131c242a2f3233393939393939393934332f2b241c140a0100000000020b141c22282b2d2e2e2e2e2e2e2e2e2e2e2e2d2b282320201d1b1f212224292c2d2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2d2c28231c150c0300000000000000000000000000000000000105090f1214151a1e2021232527282a23282c2d2d2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2d2a251f170f050000000000020b141c22282b2d2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2d2a251e170e05000000000008111921272c2f30313131313130302f2f2e2e2d2c28232827252320201d1814120e09030000000000000000000000000003060c10121315151513120f0b060000000000000000020b141c22282b2d2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2d2c29241d160d04000000000000000000000000000000050b0b141b22272b2d2d2c29241e160d0400000000000000000000000000000000000000000000000105080e1114191e2022272b2d2f313335373738383734322e2d2a251e1b150d08020000000000000000000000000000000000020b141c22282b2d2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2d2b28221c140b020000000000000000000000000000060b0f141a1e2122252723282c2d2d2d2b28222623201f1d1812100b0a0f131516202020202020201f1413110d080100000000000000040d161e24292c39393939393939393736332e2820170e04000000000000040d161d24292c39393939393939393837332e2820180e04000000000000000000000000000000060b11171c1f24292c2d2f323436373838383837363432302d2c28231f1c17110c070000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1720272e333637393939393939393931302d28211a11080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005101a242c33393c3d454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545453a39352f281f160c0100000007121c252e353b3f404646464646464646403f3b352e261c12070000000007121c252e353b3e404646464646464646403f3b362e261c12080000000007121c262e353b3f404646464646464646403f3b362e261c1208000000000a141d262d3338393b3b3b3b3b3b3b3b3b3b3a3a38342e2d2c29262b2e2f2f35393a3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3a38342e271e150b00000000000000000000000000000002080d11151a1f2122252a2d2e30323435362e34383a3a3a3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3a36312921170d03000000000a141d262d3338393b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3a3936302920170d02000000050f19232b33383c3d3e3e3e3e3d3d3d3c3c3b3a3a38342e353432302d2c2924211e1a14100b05000000000000000000060b0f12171c1f20212121201f1b17110a020000000000000a141d262d3338393b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3a39352f281f160c01000000000000000000000000040a0f161c1d262d3337393a39352f281f160c04070707040100000000000000000000000000000002080d1114191e20252a2d2d3337393c3e40424344454443413e3a3936302b272019130c04000000000000000000000000000000000a141d262d3338393b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3938332d261d140a000000000000000000000000020a11171c1f262a2d2e31342e34383a3a3938332d33302d2c29241d1c16161b1f22232d2d2d2d2d2d2d2c21201d19130c040000000000010c1620282f3539464646464646464644433f39322920160b0000000000010c161f282f3539464646464646464644433f39322a20160c01000000000000000000000000020a11171c23282c2f35383a3c3f414344444545444443413f3c3a38342e2b28231c18120b030000000000000000000000000000000000000000000000000000000000000000000000000000000710202932393f434446464646464646463d3c39332c231a10050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222c363e44494a525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252524745413a31281e13080000020d19242e3740474b4d53535353535353534d4b4740382e24190e020000020d19232e3740464b4c53535353535353534d4b4740382e24190e020000020e19242e3840474b4d53535353535353534d4c4740382e24190e02000006111c262f383f4446484848484848484848474746443f3f3a393532373b3c4041454748484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484644403930271c120700000000000000000000000001070d13191d20262b2e2f30363a3b3d3f414243443f444647474748484848484848484848484848484848484848484848484848484848484848484848484848484848484846423b33291f140900000006111c262f383f444648484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484746413a32291e13080000000b16212b353d44484a4b4b4a4a4a4a49494848474644404342403e3c3a39352f2d2b261f1c160f0a040000000000020a11171b1f23282c2d2e2e2e2d2b27221b140b020000000006111c262f383f4446484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484745403931281d12070000000000000000000000070f161b21272c2f383f44464745413a31281e1311131413110d0801000000000000000000000000040c13191d20252a2d3036393b3f4446484b4d4f50515151504e4b4746413a373229241e160e07000000000000000000000000000006111c262f383f444648484848484848484848484848484848484848484848484848484846443f382f261c110600000000000000000000060b141c22282b31363a3b3e41443f44464746443f42403d3a38352f2c272120272b2e2f39393939393939392d2c29241e160d040000000008131e28323a41455353535353535353514f4b443b32281d12060000000007131d28313a40455353535353535353514f4b443c32281d12060000000000000000000000070b141c22282e34383a404547494b4e50505152525151504e4c494644403a38342e28231c150c0700000000000000000000000000000000000000000000000000000000000000000000000000040f1922323b444a4f5153535353535353534a49443e352c21170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c28333e485055575e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e54514c433a2f24190d010007131e2a35404952575960606060606060605957524a40352a1f1307000006121e2a35404951575960606060606060605a58524a40362a1f1307000007131f2a35404a52575960606060606060605a58524a40362b1f130700000b17222d38424a5053545454545454545454545453504a4c4745403c4347484d4c5154545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545453514a42392e23180c0000000000000000000000040c13181e24292d31373a3b3f4246484a4c4d4f50514a5053545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454534d453b31251a0e0200000b17222d38424a5053545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454524c443a3025190d010004101c27333d474f5456575757575757565655555453514a504f4d4b494745403b3a37312c28211b160b06000000030b141b22272b2e34383a3b3b3b3937332d261d140a000000000b17222d38424a50535454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545453514b43392f24180d010000000000000000020a101921272c33383e4149505354524c433a2f24191d2021201d19130c04000000000000000000010a0e161e24292d3036393b41464749505355575a5c5d5e5e5e5d5b5854524c47433c35302820191008000000000000000000000000000b17222d38424a505354545454545454545454545454545454545454545454545454545453504a42382d22170b000000000000000000090f181d262d33383b4246484b4e504a50535353504a4f4d4a4745403938332d2b32383b3c46464646464646453a39352f281f160c010000010d19242f3a444c525f606060606060605e5b564d44392e23170b000000010d18242f3a434b515f606060606060605e5c564e44392e23170b000000000000000000000910191d262d33383f44464b515356585b5c5d5e5f5f5e5d5c5a585653514a46443f38342e271e1910060000000000000000000000000000000000000000000000000000000000000000000000000a16212b34444d555b5e606060606060606057554f473e33281c1002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814202d3944505a61646b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b605d554c4135291d1104000a16232f3b47525b63666c6c6c6c6c6c6c6c66635c52473b2f23170a00000a16232f3b46515b63666c6c6c6c6c6c6c6c66635c52473b2f23170a00000a17232f3b47525c63666c6c6c6c6c6c6c6c67645c52473b2f23170b00030f1c28333f4a545b606161616161616161616161605c545853514b484e535559555d606161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161605c544a4034281c1004000000000000000000070d161d24293035393c4347484c4d525456585a5b5d5e545c606061616161616161616161616161616161616161616161616161616161616161616161616161616161616161615e574d42362a1e120500030f1c28333f4a545b606161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161615e564c41362a1e1105000713202c38444f5960636464646464636362626161605c545d5b5a585653514b4846423c38332c272117110a02030c151d262d3337393f444648484846443f382f261b11060000030f1c28333f4a545b6061616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161605d554b4035291d100400000000000000000a141c222b32383d44484f535b60605d564c41352924292c2d2c29241e160d0400000000000000000a131c20283035393b4146474c5254535b60626466686a6a6b6b6a6765615e56544e45413a322b221a12080000000000000000000000030f1c28333f4a545b60616161616161616161616161616161616161616161616161616161605b544a3f33281c0f030000000000000109121b212a2f383f44464d5355585a5d545c6060605b545c595653514b48443d39343d43474953535353535353524745413a31281e1308000004111d2935414c565d6c6c6c6c6c6c6c6c6a675f564b3f33271b0e02000004111d2935404b555d6c6c6c6c6c6c6c6c6b6760564b3f33271b0e00000000000000000009121b222b2f383f444a5053555d60626567696a6b6b6b6b6a69676563605c5453504a444039302b2217110a02000000000000000000000000000000000000000000000000000000000000000000030f1b27323d46555f676a6c6c6c6c6c6c6c6c6461594f44392d1f1409000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1623303c4955616c70787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878786d675d5145392c201306000c1925323f4b57636d737979797979797979736e63574b3f3226190c00000c1925323e4b57636d737979797979797979736e63584b3f3226190c00000c1926323f4b57636e737979797979797979736e64584c3f3326190d0006121f2b3844505b666c6e6e6e6e6e6e6e6e6e6e6d6d666965605d5554585f62666a676d6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6d665c5144382c1f120600000000000000000910191f282f353a4146474e535558575e6163656768696a6b666d6d6d6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e695e53463a2d2114070006121f2b3844505b666c6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6d685e5246392d201307000916222f3c4854606b70717171717070706f6f6e6d6d666b6a68676563605d5555534d48443e383227221b140b0b151e272f383f44464a505354545453504941382d22170b000006121f2b3844505b666c6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6d675d5145392c2013060000000000000008121c262e343d43484f545961656c6d685d52453d322f35393a39352f2820160c0100000000000007121c252e323a4146474d5254565e6165656c6f717375767778777674716d68626058524c443d342c241a12080000000000000000000006121f2b3844505b666c6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6c665b5044382b1f120600000000000009131b242d333c424a5053575f6164676a6b666d6d6c666a696663605d55554f49453e464e5456606060606060605f54524c433a2f24190d01000713202c3945525d6876797979797979797771675b4f43362a1d100400000613202c3945515d6776797979797979797772675c4f43372a1d11000000000000000009121b242d343d424a50545c6063676d6f7274767777787877777674726f6d6664605c54514a423d3427221b140b02000000000000000000000000000000000000000000000000000000000000000007131f2c38434e586771777979797979797979706c6155493b3025190e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707e848585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585847a6d6054473a2d211407000d1a2633404d596673808686868686868686807366594d4033261a0d00000d192633404c5966737f86868686868686868073665a4d4033271a0d00000d1a2633404d5966738086868686868686868073675a4d4034271a0d000613202d394653606c787b7b7b7b7b7b7b7b7b7a7a797876726d676260626a6f7376797a7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b786d6053463a2d2013070000000000000009131b222b313a40454c5254585f626568696e7072747576777879797a7a7a7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b6e6154483b2e211508000613202d394653606c787b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7a6d6154473a2e211407000a1723303d4a5663707d7e7e7d7d7d7d7c7c7b7b7a797877767573716f6d6765615f57554f48433d332d261d15121c27303941495053545c60616161605b53493f33271b0f03000613202d394653606c797b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b796d6053473a2d201407000000000000020e19242e3840464f545960636b70787a6d60584e43383a41454745413a32281e13080000000000020d19242e3740444c5254565e6165686e7175797b7e80828384848483817e7a756f6a605d564e463e362c241a11070000000000000000000613202d394653606c787b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b786c605346392d201306000000000008111b252d363f464e545b6064696e7174777879797a7979777573706d676360595550474e5860626c6c6c6c6c6c6c6c605d564c4135291d1104000714212d3a4754606d7a8686868686868684776a5e5144372b1e110400000714202d3a4753606d798686868686868684776b5e5144382b1e110000000000000007101b242d363f464e545b60666d7075797c7e818383848585848483817f7c7975716d66605c544e463f332d261d140a00000000000000000000000000000000000000000000000000000000000000000915222e3b4854606a778386868686868686867e7064564d42362a1b11060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1824313e4b5764717e8a9191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191877a6d6054473a2d211407000d1a2633404d596673808c9393939393938c807366594d4033261a0d00000d192633404c5966737f8c9393939393938d8073665a4d4033271a0d00000d1a2633404d596673808c9393939393938d8073675a4d4034271a0d000714212e3a4754616d7a87878787878787878787878685827f79726d6a6f767c8083858787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787877b6e6255483b2f22150800000000000008121b252d343d434b51565d61656a6e7275787b7d7f80828384858586878787878787878787878787878787878787878787878787878787878787878787878787878787878787878786796c5f5346392c2013000714212e3a4754616d7a87878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878175685c4f4235291c0f00101c2936434f5c697682898a8a8a8a8a89898888878685848382807e7c7a76726e69636159544f443f382f271f18232e39424a535b6064666d6e6e6e6c655b5044372b1f1205000714212e3a4754616d7a878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787877e7164574b3e3124180b00000000000007131f2a36404a525960636b70767d8382756a60544744484c5254524c443a2f24190b020000000007131e2a35404952565d6165686e72767a7e8285888a8d8f90919191908e8b86827c746d68605850483e362c23190f0500000000000000000714212e3a4754616d7a8787878787878787878787878787878787878787878787878787877a6d6154473a2e21140700000000040d1a232d373f4850585f666c70767b7e81838485868686858482807d7975706b64615a5354606a6f79797979797979786d685d5245392c201306000714212d3a4754606d7a8793939393939184776a5e5144372b1e110400000714202d3a4753606d7a8693939393939184776b5e5144382b1e11000000000000020b19222d363f48505860666c72797d8286898b8e8f9091929291908f8d8b8985827e78726d66605851443f382f261b110600000000000000000000000000000000000000000000000000000000000004111d2935404b55626f7c89959393939393938f8275695e5246382d22170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1824313e4b5764717e8a979e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e93877a6d6054473a2d211407000d1a2633404d596673808c999f9f9f9f998c807366594d4033261a0d00000d192633404c5966737f8c999f9f9f9f998d8073665a4d4033271a0d00000d1a2633404d596673808c999f9f9f9f9a8d8073675a4d4034271a0d000714212e3a4754616d7a879494949494949494949a93918f8b857f75757c82888c90929894949494949494949494949494949494949494949494949494949494949494949494949494949494949494949494949494949494887b6e6255483b2f221508000000000007101a242d373f474f555d60686d72777b7f828587898b8d8e9091919298939494949494949494949494949494949494949494949494949494949494949494949494949494949494949286796c5f5346392c2013000714212e3a4754616d7a879494949494949494949494949494949494949494949494949494949494949494949494949494949494949494949494948f8275685c4f4235291c0f000713202d3a4653606d787c8084888c909595959494989291908e8d8b8986837f7b76706b6360595049413931271e2834404a545c656c7177797b7b7b796c605346392d201306000714212e3a4754616d7a8794949494949494949494949494949494949494949494949494949494949494949494949494949494949494949494949494949494948a7e7164574b3e3124180b0000000000000a17232f3b47525c636b6f767d838a90897c6f62594f4f54565d605d564c4135291d140a000000000a16232f3b47525b63686d71767b7f83868b8e92979596989b9d9e9e9d9a99928f88817a6f6a615a50483e352b21170c03000000000000000714212e3a4754616d7a8794949494949494949494949494949494949494949494949494877a6d6154473a2e211407000000010c161f2b353f49515a626a6e787d82888b8d90919298939892918f8c8985827d77716c625f58626f7c86868686868686867a6d6054473a2d211407000714212d3a4754606d7a87939f9f9f9d9184776a5e5144372b1e110400000714202d3a4753606d7a86939f9f9f9e9184776b5e5144382b1e110000000000000a141d2b343f48505a626a6f787e858a8e9298989a9c9d9e9e9e9e9d9c9a9898928f8a847f786f6a635b504941382d22170e0400000000000000000000000000000000000000000000000000000000000613202c3945515d6774818e9aa79f9f9f9f9f92867b6e6153493f33271b0f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1824313e4b5764717e8a979d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d93877a6d6054473a2d211407000d1a2633404d596673808c99a6acaca6998c807366594d4033261a0d00000d192633404c5966737f8c99a6acaca6998d8073665a4d4033271a0d00000d1a2633404d596673808c99a6acaca69a8d8073675a4d4034271a0d000714212e3a4754616d7a8794a0a1a1a1a1a1a1a1a49f9e9c97928b8281898f94999d9fa3aaa1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a195887b6e6255483b2f22150800000000040e19222c363f49515960676d737a7f83888b8f929796989a9b9c9d9e9fa2aaa0a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a19f9286796c5f5346392c2013000714212e3a4754616d7a8794a0a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a19b8f8275685c4f4235291c0f0006121f2b3844505c666d6f73777b7f83888c9095999e9f9e9d9b9a989993908c88837d766f6b605b534b43393026303844515c666d777e83868787867a6d6053473a2d201407000714212e3a4754616d7a8794a0a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1978a7e7164574b3e3124180b0000000000000d1926323f4b58636e737c828990959c8f82766b6054596063686d685d52453d2f261b11060000000c1925323f4b57636d737a7e83868b8e8c8a88878788898b8e91969a9fa2a39f9b938e847c716c615a50473d33291e150b000000000000000714212e3a4754616d7a8794a0a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a094877a6d6154473a2e21140700000007131d28313d47515b626c717c838a8f94979a9d9e9fa2aaa29f9d9c9998928e89837e766f6a606674818e93939393998d8073685d5245392c201306000714212d3a4754606d7a8793a0acaa9d9184776a5e5144372b1e110400000714202d3a4753606d7a8693a0acaa9e9184776b5e5144382b1e11000000000006111b262f3c46505a626c717c838b91979b9fa3aaa7a9a9a8a7a8a8a9a9a7aaa29f9b96918b837c726d605b53493f332720160c02000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a85929facacacacafa3998c7f72655b5044372b1f130800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1824313e4b5764717e8a9090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090877a6d6054473a2d211407000d1a2633404d596673808c99a6b3b3a6998c807366594d4033261a0d00000d192633404c5966737f8c99a6b2b3a6998d8073665a4d4033271a0d00000d1a2633404d596673808c99a6b3b3a69a8d8073675a4d4034271a0d000714212e3a4754616d7a8794a0adaeaeaeaeaeb6afacaba9a29f948f8e939c9fa6a9acaeb4aeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea195887b6e6255483b2f221508000000000a15202b343e48515b626b6f797f858b9095989b9ea1a9a5a7a8a9aaabacaeb4adadaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeac9f9286796c5f5346392c2013000714212e3a4754616d7a8794a0adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea89b8f8275685c4f4235291c0f0003101c28343f4a545c6063676a6f73777b7f83888c91969b9fa2aaaba49f9c9895908a837c726c655d554b42382e38424f59606d78818a90929993867a6d6053473a2d201407000714212e3a4754616d7a8794a0adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea4978a7e7164574b3e3124180b0000000000010d1a2734404d5a677380898f949d9f9f94897d706360626b70777a6d60594f41382d22170b0000000d1a2633404d59667380878b8a8784827f7d7c7b7b7c7c7f8184898d92989fa2a59e9691867e716c61594f453b30271c12070000000000000714212e3a4754616d7a8794a0adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeada094877a6d6154473a2e2114070000010d18242f3a434f59626d727e8690959c9fa6a7aaaba7a4a2a2a1a2a3aaa29f9b95908a837c726d6d7985929f9f9f9f92867b6e61564c4135291d1104000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e110400000714202d3a4753606d7a8693a0adaa9e9184776b5e5144382b1e1100000000000b17222d38414e58626c717e8790959ea1a9acaaa9a29f9c9b9b9b9b9c9ea2a9a9aba8a19e9590877f746c655b50443e32281e130800000000000000000000000000000000000000000000000000000006121f2b37434e5865717e8b98a2aeaba9abb0ab9e9184786c6053463a3024190d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724303d4a5763707d83848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848483796d6054473a2d211407000d1a2633404d596673808c99a6acaca6998c807366594d4033261a0d00000d192633404c5966737f8c99a6acaca6998d8073665a4d4033271a0d00000d1a2633404d596673808c99a6acaca69a8d8073675a4d4034271a0d000714212e3a4754616d7a8794a0a6a6a6a6a6a6a6a7a8aaacada69e9c9b9ea5abb0b4aeaca9a7a6a7a8aaacaeb4b6b9bbc0bcb4aeaba7a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a7a8aaacaeb4b7bbbabaaea195887b6e6255483b2f221508000000030f1b27323c46505a626d727d848c92989da0a7a8abadb3b1b4aeacabaaa9a8a7a7a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a7abadb2b9ac9f9286796c5f5346392c2013000714212e3a4754616d7a8794a0a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6aaabb1b9bababababeb6afaca89b8f8275685c4f4235291c0f00000b17232e38424a505356585f6266696e72777b8084898e92989da0a8aca9a79f9d9590877f776d675d544a3f343f4a54616b74818e939d9fa393867a6d6053473a2d201407000714212e3a4754616d7a8794a0a6a6a6a7a7a8a9acaeb4b6b8bcb7afaaa8a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a7a8a9aaacafb5b9bbc0bab1a4978a7e7164574b3e3124180b0000000000000a1723303d4a5663707d89949fa6aba69d9083766c6a6f767d8382766b6053493f33271c120700000a1723303d4a5663707d83807e7b787572706f6e6e6f707275787c80868d92989ea6a19892877e706b60574d42392e23180c0300000000000714212e3a4754616d7a8794a0a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6aaa094877a6d6154473a2e211407000004111d2935414b55606b727f8b9298a0a7abada8a19e9a979695959596999b9fa2a09d9490867f786f7c8898a2aea99d908376695e52433a2f24190d01000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e110400000714202d3a4753606d7a8693a0adaa9e9184776b5e5144382b1e1100000000030f1b27333f4953606a717e8b92999fa7ada7a09d989792908f8e8e8f909297989c9fa6aca7a099938c80776c605a50443a3024190d0200000000000000000000000000000000000000000000000000000814212e3a47535f6a7683909daaa69f9c9fa6aca096897d7063564c4135291d1105000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916232f3c4855616b70777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777776d675d5145392c201306000d1a2633404d596673808c99a0a0a0a0998c807366594d4033261a0d00000d192633404c5966737f8c99a0a0a0a0998d8073665a4d4033271a0d00000d1a2633404d596673808c99a0a0a0a09a8d8073675a4d4034271a0d000714212e3a4754616d7a8794999999999999999a9a9b9ea0a8abaaa8a8aaafb4aeaaa39f9c9a999a9b9d9fa3aba9acafb5b4aaa29f9a99999999999999999999999999999999999999999a9a9b9d9fa3aaaab0b8bbaea195887b6e6255483b2f22150800000006131f2b37434e58616c727f8791969fa2aaacb1aeaba9a6a4aaa39f9e9d9c9b9b9a9a9a99999999999999999999999999999999999999999999999999999999999999999a9ea1a8b2ac9f9286796c5f5346392c2013000714212e3a4754616d7a87949999999999999999999999999999999999999999999999999999999999999999999d9fa7b1bcc8c0bab1aca49f9c998f8275685c4f4235291c0f000006111c2630383f4446494e5355575f61666a6e73777c81868b91969c9fa6ababa79f99928c82796d665c50443f44505c66707d8a939da5aca093867a6d6053473a2d201407000714212e3a4754616d7a8794999a9a9a9a9b9b9d9fa2aaaaacb1afa59e9b999999999999999999999999999999999999999a9a9b9c9e9fa3abacafb5bdb1a4978a7e7164574b3e3124180b0000000000000916232f3c4855616b7683909ca6a69f9c948a7d70757c828990897d70655b5044392e23180c00000916222f3c4854606b707774716e69686663626161626365656c6f747a80868f949fa3a39992877d70695e544a40342820150a00000000000714212e3a4754616d7a87949999999999999999999999999999999999999999999da094877a6d6154473a2e21140700000613202c3945515d67707d87939fa2aab1a8a19e96918d8a898888898a8c8f92989d9f9f99928c827a7e8b97aab3a6998c807366574d4231281e130800000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e110400000714202d3a4753606d7a8693a0adaa9e9184776b5e5144382b1e110000000005121f2b3744505b656f7c87929fa3abaaa29f95918c888583828181828385878b90949ea0a8aba49f928d80736c61564c4135291e14080000000000000000000000000000000000000000000000000004101c2834404a54626e7b88959fab9f948f949fa7a89b8e8175685d5246392d20160a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202c38444f5961636a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a605d554b4135291d1104000d1a2633404d596673808c9393939393938c807366594d4033261a0d00000d192633404c5966737f8c9393939393938d8073665a4d4033271a0d00000d1a2633404d596673808c9393939393938d8073675a4d4034271a0d000714212e3a4754616d7a878c8c8c8c8c8c8c8c8d8d8f91969c9fa6b0b5b6b1aaa29f98928f8d8d8d8f909299999d9fa4ababa298928d8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8d8d8e8f9092989c9ea6aeb6aea195887b6e6255483b2f2215080000000815222e3b4754606a717e889299a1a8aeacaaaaa29f9c999795989291908f8e8e8d8d8d8d8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8e9196a1adac9f9286796c5f5346392c2013000714212e3a4754616d7a878c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c90959fabb8c0bbafa8a09a938f8c8c8275685c4f4235291c0f0000000a141e262e34383a3c4347484d5355575f62666b6f747a7f848a90949c9fa6acaba39f948f82786d605b51454653606d7884919ea5acaaa093867a6d6053473a2d201407000714212e3a4754616d7a878d8d8d8d8d8d8e8f909298989da0a7ac9e938e8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8d8d8d8e8f9192999b9fa4abb5b1a4978a7e7164574b3e3124180b0000000000000714202c38444f5963707d89949f9c948f89827c7b82898f949d9083786c60544a4034281c1004000714202c38444f5960636a6764615e5759575554545556535b6062686d737b828b9299a1a39992857b6e665c51443c31261b0f05000000000714212e3a4754616d7a878c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c919594877a6d6154473a2e2114070003101c28343f4a54606d79849199a4aeb1a79f96918a84807e7c7b7b7c7d7f82858a90959ea19f948f84828f9ca9b6ac96897c706356493d3023160c0100000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e110400000714202d3a4753606d7a8693a0adaa9e9184776b5e5144382b1e11000000000613202d394653606c78839099a3aea9a298928b847f7b78767574757576787b7e838a91969fa6afa49c928a7e71685d52463b3025190e0200000000000000000000000000000000000000000000000006121f2c3844515c6673808d9aa7ab9c8f838f95a0ac9f92867a6d6154473d32271b0f0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c28333e474f55575d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d54514b433a2f24180d01000d1a2633404d596673808686868686868686807366594d4033261a0d00000d192633404c5966737f86868686868686868073665a4d4033271a0d00000d1a2633404d5966738086868686868686868073675a4d4034271a0d000714202d3a4753606d7980808080808080808080818284888f949fa6b0b1a7a098928c8682818081828486898c9093999da09f92858080808080808080808080808080808080808080808081828386898f949da4aeaea195887b6e6255483b2f22150800000713202c38444f59626f7c86929aa3abaaa7a09d9998928f8d8b898786848382828181808080808080808080808080808080808080808080808080808080808080808080808184919eabac9f9286796c5f5346392c2013000714202d3a4753606d79808080808080808080808080808080808080808080808080808080808080808080808083909daab6b5afa59d9591878280807e7164574b3e3124180b000000020c141c23282b2d31373a3c4246484e5355596063686d72787d838990949da0a8aea69e948e81756d62574d4b5564707d8a96a0a7a09d9993867a6d6053473a2d201407000714202d3a4753606d798080808080808081828385888c90959b9f9b8e81808080808080808080808080808080808080808080818284868a8e9399a3abb5a4978a7e7164574b3e3124180b00000000000004101c27333d4854606b76828f949089827c757f878f939c9fa0958a7e71665c5144382c1f12060004101c27333d474f54565d5a5754524d4c4a4948484949495053565e61696e767f879297a0a1979083786d60584e43372b21160b000000000714202d3a4753606d798080808080808080808080808080808080808080808080839194877a6d6154473a2e2114070006121f2b3844505c66737f8c96a1abb2a99f9590847d7874716f6f6e6f707275797d838a91979f9f96918f949eaaafa49a877a6e6154473b2e2114080000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e110400000714202d3a4753606d7a8693a0adaa9e9184776b5e5144382b1e1100000004101d2935404b5564717d8a95a0abada29792867f78726e69696868686869696e72767d8490949fa7aea49e92857a6d61564c41362a1e11050000000000000000000000000000000000000000000000000713202d3a4653606d7985929eaba3998a7d83909daaa3988b7f7265584e43382b1d1307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b16212c353e44484a515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151514745413a31281d130700000613202d394653606c787979797979797979786c605346392d20130600000613202d394653606c777979797979797979786c605346392d20130600000613202d394653606c787979797979797979796c605346392d2013060006131f2c3945515d676d737373737373737373737475777c828f949faba8a09591867f7a767473747577797c7f83868b90959b9892857f7973737373737373737373737373737373737373747577797d828d929da8aea195887b6e6255483b2f22150800000916222f3c4854606b76828f99a3aca69e9c95918c888582807e7c7a7978777675747473737373737373737373737373737373737373737373737373737373737373797e82879196a1adac9f9286796c5f5346392c20130006131f2c3945515d676d73737373737373737373737373737373737373737373737373737373737373737379808d959fabb3aba39f938e837c757373716c6155493d3023170a00000000020a11171c1f20262b2e31363a3c4247484f54565d60656c70767d838a91969fa2aaa69e938b7f72695e52515c6775828f9ba69f95908d8c867a6d6053473a2d2014070006131f2c3945515d676d73737373737374747576797c7f83898f939a92878079737373737373737373737373737373737373747576777a7d81879299a3afa4978a7e7164574b3e3124180b000000000000000b16212c38444f59636f7d8989837d766f707d8a949ea5aba79e9184796d6053463a2d20130700000b16212b353d44484a504d4a4746423f3d3c3b3b3c3d3f44464c52575e616d727c859196a09f958c80736a5f53473e33281c100400000006131f2c3945515d676d7373737373737373737373737373737373737373737376828f94877a6d6154473a2e211407000713202d3a4653606d7984919ea8b2ada19790837a706c6664636262626366676d71777e8590949ea19e9c9ea6b0ac9f9386796d6053463a2d2013070000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e110400000714202d3a4753606d7a8693a0adaa9e9184776b5e5144382b1e1100000006131f2c3845515d6776828f9ca7b1a89f92857c726c66615f575c5b5b5c575e61656b707a829095a0aaada2978d8174685e5246392d201407000000000000000000000000000000000000000000000005121e2a36424d5764717d8a97a1ac9f928679808c99a8aa9d9083776a6054473a2f24180d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005101a232c33383c3d444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444443a39352f281f160c01000006121f2b3844505b666c6d6d6d6d6d6d6d6d6c665b5044382b1f1206000005121f2b3744505b656c6d6d6d6d6d6d6d6d6c665b5044382b1f1206000006121f2b3844505b666c6d6d6d6d6d6d6d6d6c665b5044382b1f12060004101d2935404b555d606666666666666666666767686a6f78828f9caaa09691837b726d6867666768676d6f72767a7f83888e9297928c857f79726d6766666666666666666666666666676768666d7075808d9aa6aea195887b6e6255483b2f22150800000a1723303d4a5663707d89949fa8a09e948f89847f7c797673716f6e6c656a696868676767666666666666666666666666666666666666666666666666666c717a80858b909399a1a8b2ac9f9286796c5f5346392c20130004101d2935404b555d606666666666666666666666666666666666666666666666666666666666666c707b828d929da7b1a9a299928b81796f6b666664615a5045392d211508000000000000060b1012131a1f21262a2d31373a3d44484c52535b60636b70767d848c92989fa6a59f92867b6e615853606d7986929f9f948f83808080796d6053463a2d2013070004101d2935404b555d60666666676767676868666d6f72777c82878f94928d847e78706b6666666666666666666666666667676869676d70757d87929faca4978a7e7164574b3e3124180b0000000000000005101c27333d4854606b74807d76706b626b7683909ca6a69f9c948b7f7265584c3f3225190c0000050f1a232b33383c3d44413e3b3a3630302f2e2e2f2d33373a41464d535b626a6f7b849195a09f92877c6f62594f44382c20160a00000004101d2935404b555d606666666666666666666666666666666666666666666a76839094877a6d6154473a2e21140700091623303c4956636f7c8997a1adb4aa9e91857a6d68605b545655555657555c60646c717a828f949ea7a9aab0b8ab9f928578665c5044382b1f12060000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e110400000714202d3a4753606d7a8693a0adaa9e9184776b5e5144382b1e110000000714202d3a4753606d7986929facaca0968a7e716a605b54534d4f4e4e4f4d52545961686d79839098a3aea99f92867a6e6154473b2e23180c00000000000000000000000000000000000000000000000714202d3a46525e6975828f9ca9ac9c8f82767c8896a1aca095897c6f62554b4035291d11040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008111a21282c2f30373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737372d2c29241d160d04000000030f1c28333f4a545b606060606060606060605b544a3f33281c0f030000030f1b27333f49535b606060606060606060605b544a3f33281c0f030000030f1c28333f4a545b606060606060606060605b544a3f33281c0f0300000c18242f39434b51535959595959595959595a5a585f666f7c8996a29891847a6e69605d565a5a555c606366686e72777c81868e9297928c857f79726d67605d56595959595959595a5a5b545c60636d7a8794a0ada195887b6e6255483b2f2215080005111d2a36414c566774818e9aa69f969189827c77736f6c6666646261605b535c5b5b5a5a5a5a5959595959595959595959595959595959595959595a636d737e858d92989c9fa4aba5a8ac9f9286796c5f5346392c201300000c18242f39434b515359595959595959595959595959595959595959595959595959595961676d747e8590949da4aea8a19792877f746d67605959575550483e34281d1105000000000000000003060a0f12151a1e21262b2e32383a41454950535960636b70787f868f949fa3a2988e81756a605663707c8998a2988f82797373736d665c5145382c1f130600000c18242f39434b5153595a5a5a5a5a5a5b545c6062656a6f757c828a9296918a837d76706b64605c545959595959595a5a5a5b555d60636b75828f9ca8a4978a7e7164574b3e3124180b000000000000060b0f16212c38444f59646e74706b636059636f7c89949f9d949089827c6f6256493c2f23160900000008111a21272c2f303734312e2d2a25242221212222272b30363b4246515860696e7a839196a0999082766b6155483d32271b0f000000000c18242f39434b5153595959595959595959595959595a5b5c5b595959576a77849194877a6d6154473a2e211407000c1926333f4c5966727f8c99a9b2aea2988b7e71685e56504a494848494a4b51535a61686d79828f95a0abb5bbb7ab9e9184786b544a3f34281c10030000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e110400000714202d3a4753606d7a8693a0adaa9e9184776b5e5144382b1e11000000091623303c4956636f7c8999a3a6a49d9184776c6158504a4642424142424246484f565d676e7b86929fabaea3998c7f7265554b4034281c1004000000000000000000000000000000000000000000030f1b27333f4953616e7b87939faca49a8b7f727884919eaba79a8e8174675d5145392c20150a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810161c2023242a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a21201d18130c0400000000000b17222d38424a5053535353535353535353504a42382d22170b000000000b17222d3841495053535353535353535353504a42382d22170b000000000b17222d38424a5053535353535353535353504a42382d22170b00000007121d2731394045474d4d4d4d4d4d4d4d4d4d4e4e54606d7a86999f92867b6e685f57524c4d4e4b515356565e61656a6f757b81878f9497928c857f79726d68625f585553504a4d4d4e4d52545c616e7a8794a1b5ab94877b6e6154483b2e211508000713202d3946525e687884919e9f9490847d756f6b6662605b545856545350494f4f4e4e4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4a54616c737f8a92979fa2aaa29f9b989c9e9f9286796c5f5346392c2013000007121d2731394045474d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4c51575e616b7079818a92979fa6aea7a09691857d726d605d554f4d4b49453e362c22170c0000000000000000000000000306090e12151a1e21272c2f35383f44464f545961666d727b828c9299a19e93897c6f625866727f8c999f92867b6e666666605c544b4034281c1004000007121d2731394045474d4d4d4d4d4d4d4e4a5053555860626a6f767e86929e959089837d77716d66625f575653514b4d4d4d4e4d52565d6875828f9ba8a3978a7d7064574a3d3124170a00000000020a11171c1f2027323d47525c64676360595454606b76828f959089837d766f6a6054473b2e22150800000000080f161c2022232a272421201e1a1716151516171b1f252a31363f464e575f686e7a8491979f948a7d7063584e43382b1c110600000007121d2731394045474d4d4d4d4d4d4d4d50545c6064676869686663605e6978859293877a6d6054473a2d211407000e1b2835414e5b6874818e9ba7b4ac9f92857a6d60564c443f3c3c3b3c3d40454750565e676d79839099a4afbbb7aa9d9184776a5e51442e23170b000000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e110400000714202d3a4753606d7a8693a0adaa9e9184776b5e5144382b1e110000000b1825313e4b5864717e8b979b9997968c7f73665a50443f383631353530363a3e444c555f6973808d99a4afab9c908376675c5145382c1f130600000000000000000000000000000000000000000005121f2b3744505b65737f8c99a4ac9f93877b6e74808d9aa8ac9f92857a6d6053473c31261b0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b101416171e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1413110d070100000000000006111c262f383f4446464646464646464646443f382f261c11060000000006111b262f383f4446464646464646464646443f382f261c11060000000006111c262f383f4446464646464646464646443f382f261c1106000000010b151f272f35393a404040404040404040404145515d67798692958b7e71695f564d45414041404546494c5254585f62696e747c828b929897928c857f7a746f6a6662605c545a5a5a565e61666d73808c99a6afa399877a6d6054473a2d211407000714212e3a4754616d7a8796a09590827a706b6360595553504a4b494746443f4342414140404040404040404040404040404040404040404044505c66717e8a919ea1a79f9d98928f8b8f949f9285796c5f5246392c1f130000010b151f272f35393a40404040404040404040404040404040404145474c52555d60696e757d848e939fa2a9afa69f9590847c706b625b514b43403e3d39342c241a10060000000000000000000000000000000205090e12161b1e24292d33373d44484f545c60696e787f879297a09c8f82766a606875818e9b9a8d8073685e545953514b42392e23180c000000010b151f272f35393a40404040404041413f4446494e54585f626c75828f9ba09d949089837d79736e696662605c545a5a5a5b575e61686d7a85929fabab96897c706356493d3023160a000000020b141c22282b2d2e2e35404a52585a56554f484f59626f7c888a837d76706b6260584e43372b1f13060000000000050b101416171d1a171414110e09090808060b0f13191f252a343d454d565e686e7b8591989d9083766a605447382e23170c000000010b151f272f35393a40404040404049515a61666d707375757473706d676e7b879793867a6d6053473a2d20140700101c2936434f5c6976828f9ca9b5a99d908376675d51443a332d2f2f2f2f34383e444c555d676f7c87939facb9b7aa9d9084776a5d5144372a1e06000000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e110400000714202d3a4753606d7a8693a0adaa9e9184776b5e5144382b1e110000000c1926333f4c5966727f8c908f8d8b89877d7063564a3e332d38393939393735323a434d57616e7a87939facac9f9286796d6053463a2d2013070000000000000000000000000000000000000000000613202d394653606c7884919eabab9d908376696f7c8996a1aca2988b7e7165584e43372b1d1207000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000407090a11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111070604010000000000000000000a141d262d3338393a3a3a3a3a3a3a3a3938332d261d140a0000000000000a141d262d3337393a3a3a3a3a3a3a3a3938332d261d140a0000000000000a141d262d3338393a3a3a3a3a3a3a3a3938332d261d140a0000000000030d151d24292c2d333333333333333333343a4753606d7a86999083786c60574d443b352f2e34383a3c4146474e53575e616a6e767e8690949e97918c85817b77736f6d666867666769686e72787f87939facac9f9286796c605346392d201306000915222f3c4855626f7c8895999083796d686059544f4946443f3e3c3b3937332d35353434343333333333333333333333333333333333333a4653606d7884919ea3a49d95908a85827e828f9c9285786c5f5245392c1f12000000030d151d24292c2d3333333333353d4448494d4c4b4b4b4b4c4c5254565e61676d737b818a91969da5adaea59e948f837b6f6a6059514540393131302d28221a12080000000000000000000000000000000000000002060a0f13191b22272b32383e424a50575e666c727d8591969f94897c6f626a7783909d95887b6e62564d4d4645403930271d120700000000030d151d24292c2d333333343434342e34383a3d43484e545a64717e8a999e979e9c95908a85807b77736f6d66686766676769696e727a828f98a2aea399887b6f6255483c2f2215090000000a141d262d3338393b3b3b3b40474c4d4a48443d4754606a73807d77706b636059544e463d32271b0f03000000000000000407090a110e0b0807050200000000000003080d141a222b333b444d565e696f7c86929f95897c6f62544a3f34281c1003000000030d151d24292c2d333333323d47515b636c71797d808282817f7d7a76727d8a979886796c605346392d20130600101d293643505c6976838f9ca9b5a89c8f827569554b4034282322222323292c323a434b55606a74818e9ba9b3b6a99d9083766a5d5043372a1d10040000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e110400000714202d3a4753606d7a8693a0adaa9e9184776b5e5144382b1e110000000d1a2633404d59667380868482807e7c7a706b6054483d4042444546464544423f3b3c46525e6876828f9ca9aea398897c6f6256493c2f231609000000000000000000000000000000000000000004111d2935414c5663707d8996a0aca4998b7f72656c7884919eabaa9d9083766a5f5347392e23180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b141c22282b2d2d2d2d2d2d2d2d2d2d2b28221c140b02000000000000020b141b22272b2d2d2d2d2d2d2d2d2d2d2b28221c140b02000000000000020b141c22282b2d2d2d2d2d2d2d2d2d2d2b28221c140b02000000000000030b12181d1f202626262626262626262e3b4754616e7a87958a7d70655b50453c32292423282c2d3036393c43474d52585f626c717b838c92999e98928d88847f7c79767574737475777a7f848c9399a4afaa9d908377655b5044372b1f1205000a1623303d495663707c899692877c6f675d564f48433d3938332d2f2e2d2b272228282727272726262626262626262626262626262626303d495663707d8996a1a89d928d837d797574818e9b9285786b5f5245382c1f1200000000030b12181d1f2026262627323d474f54565a585857575859565d6064686e737a80868e939ea1a8afafa49c938e827a6e695f584f473f352f272423211d171008000000000000000000000000000000000000000000000001080d11171b1f272c30383f444d545b606b707b8491969b8f827569677885929d9084776a5f5344403a38342e271e150b000000000000030b12181d1f202627272727272723282c2d32383c434754616d7a8693918b91969f9d97918d88837f7c7977757473737476777b7f848f949faaac9f92867a6d6053473a2d201407000006111c262f383f4446484848484848484848484848484e58636e73706c636159544f47433d342b20150a00000000000000000000000004010000000000000000000000000003091019212a323b444d57606a717e8a929a8e8174665c5044382c1f120600000000030b12181d1f2026262c38434f59636d727e848a8d8e8f8e8c8986837f808d9a928679655b5044372b1f1205000f1c2935424f5c6875828f9ba8b5a99c908376675c51453b342e2d2b2626242228303a434e58626f7c8997a1adb6a99c908376695d5043362a1d10030000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e110400000714202d3a4753606d7a8693a0adaa9e9184776b5e5144382b1e110000000714202d3a4753606d7979777573716f6d6860594f474a4d4f5152535352514f4c4846424c5666727f8c99a5b4aa988b7e7165584b3e3225180b00000000000000000000000000000000000000000713202c3945525d6875818e9ba8ac9f93877b6e616573808d99a7ab9f95887c6f62554b4034281c100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000406070808080808080707050100000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171c1f202020202020202020201f1c17110a020000000000000000020a11171b1f202020202020202020201f1c17110a020000000000000000020a11171c1f202020202020202020201f1c17110a02000000000000000001070c1013141a1a1a1a1a1a1a1a23303c4956636f7c899184776b6153493f332a2019181c1f20252a2d32373b42464e535a62696e787f8791969d9f9a95908c888583818080818284878b91959fa4abb2a89a8d81746753493f33271b0f0300091623303c4956636f7c89968e82756a5f554c443d38322d2b28222321201f1b171c1b1b1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a25323f4b5865727e8b98a9a1968d8078716d6775828f9c9184786b5e5145382b1e12000000000001070c1013141a1a202c38444f5960636665646464656668686d71757a80858c92989ea5adb2aba39f928d81796d685e574e463d3529241d151715110c06000000000000000000000000000000000000000000000000000000060b0f161b1e262e343b424a505960696e7a84919693877b6e6d7986979a8d807467584e43322d2c28231d150c030000000000000001070c1013141a1a1a1a1a1a1a171c1f20272c323946525d68778390847e848c92989f9e9a95908c89868381808080818284878c91979fa6b0ac9d908377675d5145382c1f130600000b17222d38424a50535454545454545454545454545454545c636664615a54545454534d453b31251a0e020000000000000000000000000000000000000000000000000000050e171f272f353a41464e58616c74808d949285796d6053463a2d201307000000000001070c1013141a222f3b4854606b727f8a91979a9b9c9b9999928f8b8d929f9285786c5f493f33271b0f03000e1a2734414d5a6774808d9aabb5ac9f9285796d60564d44403b3a373133312f2d2b313c4754606a7885919eabb6a99c8f8376695c504336291d10030000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e110400000714202d3a4753606d7a8693a0adaa9e9184776b5e5144382b1e110000000613202c3945515d676d6c6568666463615e564f5154575a5c5e5f5f5f5f5d5b5855534d4a5764707d8a97a3b0a6998d8073665a4d4033271a0d00000000000000000000000000000000000000000714212d3a4754606d7a86929facab9c908376695e626f7c8895a0aca79a8d8074675c5145382c1f1409000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c1013131515151515151413110d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f1213131313131313131313120f0b06000000000000000000000000060b0f1213131313131313131313120f0b06000000000000000000000000060b0f1213131313131313131313120f0b06000000000000000000000000000406070d0d0d0d0d0d0d1825323e4b5865717e8b8b7f7265594f41382d21180e0c101313191e20262b30363c434750575f666d737c848e939ea1a09d999892908e8d8d8d8f9196989da0a7afb5aca1968a7d7063574a3d2d22170b00000915222f3c4855626f7c88998a7d7164584e433a322c27201f1c17161413120f0b060e0e0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d1925323f4c5865727f8b98a59e9184786d6660667783909d9184776a5e5144372b1e1100000000000000000406070d15222f3b4854606b6f7372717171717374777a7e82868c92979fa2aaafb1a9a199928b80776d675d564d453c342b2318120b0a080500000000000000000000000000000000000000000000000000000000000000030b0c151c23282f383f444f575f686e7b8491988d80746e7a8794978a7d7164574a3e31241f1c18120b0300000000000000000000000406070d0d0d0d0d0d060c1012131b202935414c566774818e877a7980868e939a9f9f9d999892908e8d8d8d8e8f9196989ea1a9b0afa49a8d807366554b4035291d100400030f1c28333f4a545b60616161616161616161616161616161616161616161616161615e574d42362a1e120500000000000000000000000000000000000000000000000000020b172029313940454c5254585a606d78829097897c6f6356493c3023160900000000000000000406101d2935404b55636f7d89919ea1a9a8a8a7aba39f9c989a9d9e9184776b5e51442d22170b00000b1825313e4b5864717e8b99a3afaea2988b7e71685e56514a484642413f3d3b39383337434e586875828f9ba8b5a99c8f8376695c504336291d10030000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e110400000714202d3a4753606d7a8693a0adaa9e9184776b5e5144382b1e1100000004101d2935404b555d60605b535a5856545254555d606367696b6c6c6c6c6a6865615f575556626f7c8995a2afa89b8e8175685b4e4235281b0f0200000000000000000000000000000000000006131f2b37434e5865727f8b98a3aea3998b7e7265565f6a7783909dabab9e9285796d6053463b31261a0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b1012181c1f2021212121212121201d19130c05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003060607070707070707070606030000000000000000000000000000000003050607070707070707070606030000000000000000000000000000000003060607070707070707070606030000000000000000000000000000000000000000000000000c1926333f4c5966727f8c867a6d6154473e2f261b0f06000406080d11151b1f252a31373f454d545c606a6f79818a91979fa4aaa29f9c9b9a999a9c9ea0a8aaacb1bbafa59e9184786c605346392d20130600000714202d3a4753606d798693877b6e6154483c3128201b13120f0b060806050300000201010100000000000000000000000000000b1824313e4b5764717e8a97aa9a8e8174665c606d7986929c908376695d5043362a1d100000000000000000000000091623303c4956636f7d807f7e7e7e7e7f8184868a8f92999fa2a9aeb4afa7a09792877e736c655c554c443b332a2219110701000000000000000000000000000000000000000000000000000000000000000000000000030a11171d262d333d454d565e696f7c86929285796e7b889598887b6e6255483b2f2215100c0700000000000000000000000000000000000000010101000003060a0f1924303f4c5965727f8c897d70737b818790949da0a7a39f9d9b9a999a9a9c9ea0a8abadb2b3a99f93877b6e6155483b2f24180c000006121f2b3844505b666c6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e695e53463a2d211407000000000000000000000000000000000000000000000000000a141d29323b434b51565e616468666d6e7b85928c7f7266594c3f3326190c00000000000000000006131f2c3845515d6776828f9ca3adb2b1b0b1b5aeaca9a5a7a99c8f8376695c504336291d0600000714212e3a4754616d7a86929facb4aa9e91847a6e68605c5455534d4e4c4a4846443f3e404d5a6673808d99a6b3a99c8f8276695c4f4336291c10030000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e110400000714202d3a4753606d7a8693a0adaa9e9184776b5e5144382b1e11000000010d18242f39434b51535350494d4b4d53596063676d70737577787979787775726e69636159626e7b8895a1aea99c8f8376695c504336291d10030000000000000000000000000000000000000815222e3b4754606a7783909daaac9f92867a6d61545865727f8c99a3ada2978a7e7164574d42362a1c1106000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810171c1d23282c2d2e2e2e2e2e2e2e2d2a251e170e050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a848276685d5246392c1d140a000000000001050a0f141a20262b333b424a505860676d747d848d93999fa6aca9a8a7a6a7a8aaacb2b7b8b5aea69e938b7e71665b5044382b1f1206000006131f2c3945515d67778491867a6d6053473a2d20160e0a060300000000000000000000000000000000000000000000000000000916222f3c4955626f7c8898a29a8d8174675a63707c89989b8e8275685b4f4235281c0f00000000000000000000000714212e3a4754616d7a858b8b8a8a8b8c8e9093999b9fa3abadb3b3ada59e9590857d716c605b534b433a32292118100800000000000000000000000000000000000000000000000000000000000000000000000000000000060b141c2228333c444d575f6a717e8b938b7e717c88959285796d6053463a2d2013070000000000000000000000000000000000000000000000000000000000081724313e4a5764717d8a8c7f72696e757c838a90959d9fa7aaa8a7a6a6a7a9aaacb2b8b8b1a9a1978e8175695f53463a2d1d120700000613202d394653606c787b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b6e6154483b2e21150800000000000000000000000000000000000000000000000006111b262f3b444c555d60686d717577797b7b7f8c8e8175685b4e4235281b0f0000000000000000000714202d3a4753606d7a86929facaaa8a5a3a4a7abaeb3b2b4a89b8e8175685b4e4235281b0f02000713202d3946525e6875828f9aa4afada19690837a726d6664615f575b59575553504a4b484b5865727e8b98a5b1a99c8f8276695c4f4336291c10030000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e110400000714202d3a4753606d7a8693a0adaa9e9184776b5e5144382b1e110000000007121d28313940454746443f4450575f626b6f757a7d8082848586868584827f7b76706b61616e7a8794a1adaa9d9084776a5d5144372a1e0600000000000000000000000000000000000004101d2935404b55626f7c8895a0acaa9c8f8275685e5254616e7b86929faca99c8f8276695f5346382e23170c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a111a21282d2e34383a3b3b3b3b3b3b3a3936302920170c0200000000000000000003060608080808080808080808080807070706040000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945525d68707d7f7265564c4135291a0b02000000000000000002090e151a212930383f444e555d606b707a80878f949c9fa4abacaeb4b1b2b2b1b2adaba39f948f81756c62544a3f33281c0f03000004101d2935404b556774818e877a6d6154473a2e21140700000000000000000000000000000000000000000000000000000000000713202d3a4653606d7985929f9c9083766b666c75818e9b9a8d8074675a4d4134271a0e00000000000000000000000713202d3946525e6873808d96979798999b9d9fa4abacafb5b7afa9a29f938e837b706b625a50494139302820170f06000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a1117212a323b454e58626c75828f9083777c8995908477665c5044382b1f120600000000000000000000000000000000000000000000000000000000000a1723303d4a5663707d898e817467616a6f767d838a90959b9fa2aaabacb2b1b2b1b4aeaca79f9792857a6d61574d42362a1e0b0100000714212e3a4754616d7a87878787878787878787878787878787878787878787878786796c5f5346392c20130000000000000000000000000000000000000000000000000b17222d38414c565e676d737a7e82848687888c91908376695d5043362a1d100000000000000000000815222e3b4855616e7b8899a3a69e9c9897979b9fa2aaaeb3a6998d8073665a4d4033271a0d000005111d2a36414c56626f7c87939fa7b1a8a09590857e7974716e696a67666462605b545855535764717d8a97a4b0a99c8f8276695c4f4336291c10030000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e110400000714202d3a4753606d7a8693a0adaa9e9184776b5e5144382b1e1100000000010c161f282f35393a394149505a62696e757c81868a8d8f9192929292908e8b88827d766e696d7a8793a0adab9e9185786b5e52452d22170b00000000000000000000000000000000000006131f2c3845515d6774818d9aa7aea2988a7e7164564c525e6875828f9ca9ac9f93877b6e61544a3f34281c1003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141c232c3339394045464848484848484746413a32291e130800000000000000060b0f121315151515151515151515151514141313100c070e0c0b0907060401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414c56606b70796d6053463a30241907000000000000000000000003090f171e262e343d434b515961686d747c82898f93999c9fa2aaa4a5a5a4a8a19e99928d82796d605a5042382d22170b000000000c18242f3d4a5764707d8a887b6f6255483c2f24180c000000000000000000000000000000000000000000000000000000000006121f2b3844505c6675828f9b9f94897d7473757e88939f988b7e7265584b3f3225180c000000000000000000000005111d2a36414c56606d79849198a2aaa6a7aaacafb5b9b8b0aba59e97928b81796e69605950443f382f271e160d0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111d2935414c565d666d6e7b8692887c7c89968f827568544a3f34281c100300000000000000000000000000000000000000000000000000000000000a1723303d4a5663707d898f8276695860626c70787e83898e92989b9ea1a8a4a5a5aaa29f9c9590857c6f685e52453b31261a0e0000000714212e3a4754616d7a87949494949494949494949494949494949494949494949286796c5f5346392c20130000000000000000000000000000000000000000000000030f1b27333f49535e686e7980868b8e91929995999d9184776a5e5144372b1e110000000000000000000916222f3c4955626f7c8895a39b948f8b8a8b8e92989ca4aeab988b7e7165584b3e3225180b0000010d1925303a4754606a74818e95a0a8b1a7a097928b85817e7b78767472706e6c666765625f5863707d8a96a3b0a99c8f8276695c4f4336291c10030000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e110400000714202d3a4753606d7a8693a0adaa9e9184776b5e5144382b1e110000000000040d161d24292c333f49535b606d717b82898e92989a9c9e9f9f9f9f9d9b98948f8a827b716d7a8693a0adab9f9285786c5f493f33271b0f0300000000000000000000000000000000000714202d3a4753606d7985929fabab9f9285796d6053474d5664717e8a97a2ada49a8d8073665c5044382c1f140900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009121c262e353e44494b515354545454545454524c443a3025190d0100000000020a11171c1f202121212121212121212121212121201f1c181c1b1918161413110d0808060503000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d19242f3a434f5960666d665c514538281e130800000000000000000000000000060c141c2328313a40454f565d606a6f767c82878c8f929896989898979696918e8680786d675d51483f2f261c1106000000000714202d3a4753606d7a868b7e7165554b4035291d10040000000000000000000000000000000000000000000000000000000003101c28343f4a5464707d8a96a19f9287817f8288939aa399897c6f6256493c2f2316090000000000000000000000010d1925303a45515d676f7c869298a0a8acb1b1b2b3adaba69f9c938e857e756d675f574f473f332d261d150c04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c18222c3945525d686d796d73808d8d807d8a968d8073675a4d402e23170b0000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a918477665b545961666c71767c81858a8e9196969798989798928f8a837b6f6a5f564c41332a1f14090000000714212e3a4754616d7a8794a0a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a19f9286796c5f5346392c2013000000000000000000000000000000000000000000000005121f2b3744505b656e7a838d92989b9e9fa3aba59e9184786b5e5145382b1e120000000000000000000815222e3b4855616e7b88949b918c827e7d7e81858d929ca8a399887c6f6255493c2f22160900000008131e2b37434e58606d798390969fa7ada9a29e97928e8a888583817f7d7b797674716e6a6864707d8996a3b0a99c8f8276695c4f4336291c10030000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e110400000714202d3a4753606d7a8693a0adaa9e9184776b5e5144382b1e11000000000000040c161f2b343d44505b656c747e868f949b9fa3aaa8aaa9a7a7a7a8a8a69f9c948f867e72798693a0acac9f928679655b5044372b1f12050000000000000000000000000000000005121e2b37424d5764717e8b97a2ada99b8e8174675d51454753606d7985929fabac9e9184796d6053463b3025190e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e1b242e3840474f55545c60616161616161615e564c41362a1d1105000000020b141c22282b2d2e2e2e2e2e2e2e2e2e2e2e2e2e2d2d2c2823292826242321201d19181513120f0b06060401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28313d474f545c605c544b4034281c10040000000000000000000000000000020a11171f282f353e434c52585f626b6f757b7f8385888a8b8b8c8b8a8884817b746d665d554b41362d1d140a00000000000613202c3945515d6774818e8175675d5145382c1f160b00000000000000000000000000000000000000000000000000000000000b17232e3a4653606d7984919ea399928e8c8e939aa49f92867a6d6053473a2d20140700000000000000000000000008131e2935404b55606a707d8691969da0a7a4a5a9a29f9b949089817b716c605d554d453d3527221b140b03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141e2935414c56606d7a7f736d7a8692857f8b988b7e7265584b3f322518060000000000000000000000000000000000000000000000000000000000000b1824313e4b5764717e8a9286796c60534f545b60646a6f74797d818487898b8c8b8a8986827d766e695f584e443a3021180e030000000714212e3a4754616d7a8794a0adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeac9f9286796c5f5346392c201300000000000000000000000000000000000000000000000613202d394653606c778290959fa2aaaaacafb5ab9e9185786b5e5245382b1f120000000000000000000814212e3b4754616e7a8799978c7f757270717479808d99a69f9286796d6053463a2d201307000000020f1b27323d45515d676e7b8490959fa2a9ada9a19e9a979792908e8c8a888583817e7b787571707d8996a3b0a99c8f8276695c4f4336291c10030000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e110400000714202d3a4753606d7a8693a0adaa9e9184776b5e5144382b1e1100000000000007121d28313d47515b606c77808b92989ea6acabaaa29f9c9b9a9a9b9da0a7a69f9892887f788693a0acafa39986796c605346392d201306000000000000000000000000000000000714212d3a46535f6976838f9ca9ada197897d7063554b4045515c6774818e9aa8ada1978a7d7064564d42362a1b1106000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c16202d36404a52596164666d6e6e6e6e6e6e6d685e5246392d2013070000000a141d262d3338393b3b3b3b3b3b3b3b3b3b3b3b3a3a3a38342e363433312f2d2c29242522201f1b171413110d0706030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f2b353d424b5153514b42392e23180c00000000000000000000000000040a0f161c2022232429313a41454e53596063696e7276797b7d7e7f7f7e7d7b78746e69605c544b433a2f241b0b02000000000004101d2935404b55636f7c8985796d6053473d32271c10000000000000000000000000000000000000000000000000000000000006121f2c3844505c66717e8b96a0a39f9b999b9fa4aa9c8f8376675d5145392c201306000000000000000000000000020d18242f3a434e58616b707c848b90959697989797928e89837d756e69615a514b433b332b2317110a020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c26303846525d68738082766874818e908490968a7d7063574a3d3024170a0000000000000000000000000000000000000000000000000000000000000c1825323f4b5865727e8b99877a6d6054474a5053586062676d7075787a7d7e7f7e7d7c7976706c615f574e463c32281e0f06000000000714212e3a4754616d7a8794a0a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a79f9286796c5f5346392c20130000000000000000000000000000000000000000000004111d2935404b5564717e8b949fa7aeaca9a7a5a4a39e9185786b5e5245382b1f120000000000000000000713202d3a4653606d7986939285786c65646468727f8c99a59d908377665c5145382c1f1306000000000a15202935404b555e696e7b838c92979ea1a9ababa7a9a29f9d9a99979892908d8b8885817e7a7d8996a3b0a99c8f8276695c4f4336291c10030000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e110400000714202d3a4753606d7a8693a0adaa9e9184776b5e5144382b1e110000000000010d18242f39434f59626d74808d929fa2aaada69f9c9892908e8d8d8e9195999ea1a29a938b7f8b98a5b2b5a09386796d6053463a2d20130700000000000000000000000000000003101c28343f4a54616e7b87939facab9e9184786c60534639404b55636f7c8996a0aca99c8f8275695e5246382d22170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28323f48525c636c7076797b7b7b7b7b7b7a6d6154473a2e211407000006111c262f383f444648484848484848484848484847474645404442413f3e3c3a39352f312f2d2b272221201d181312100c0604010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d19232b303940454645403930271d12070000000000000000000000040a0f161b21272c2f30362e2d2f353c43474f54575e6165666d6e7071727271706e6967615f57514a423a31281d1209000000000000010d18242f394854606b77838b7e7164594f44382c1c12070000000000000000000000000000000000000000000000000000000003101c28343f4a54606d7884919ea4aca7a6a8acaea3988c7f7265554b4035291d11040000000000000000000000000007131d28313d464f59616a6f787e83878a8b8b8b8885817c76706b615e57504540393129211911060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d17232e38424e58616d7a8584776a707d8a95909595887b6e6255483b2f2215080000000000000000000000000000000000000000000000000000000000000c1926323f4c5965727f8c94877b6e6154483f44464e54555d606468686e70717272716f6d6764615a534d453c342a20160c00000000000714212e3a4754616d7a8794999999999999999999999999999999999999999b9f9286796c5f5346392c2013000000000000000000000000000000000000000000000613202c3945515d6776838f9ca6aba39f9d9a9897979e9185786b5e5245382b1f1200000000000000000006131f2c3845515c67788491908376665b5b666e7b85929eaa9a8d807467544b4034281c100400000000040d18242f3a434d575e696e787f858d92979b9ea1a9a5a7a9a9a7a5aaa29f9d9a9897928e8a8683909da9b5a99c8f8276695c4f4336291c10030000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e080000000714202d3a4753606d7a8693a0adaa9e9184776b5e5144382b1e11000000000004101d2935404b55606b727f8c929da4aea9a19e94908a86838180818284878c91979fa49f9386939facb9aca09386796d6053463a2d20130700000000000000000000000000000006121f2b3844505c6673808d9aa4afa79a8d8073665b504438394854606b7784919dabac9f92867b6e6153493f33271b0f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d1925303a44505a636e737d83868787878787878175685b4f4235281c0f00000b17222d38424a5053545454545454545454545454545453514b504f4e4c4b49474541403e3b3937332d2d2c2924201f1c1713110d0701000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000711191e272e34383a38342e271e150b0000000000000000000002080d151b21272c33383c3d433b3a373132373d44484d5254545c6062636565656463625f5755534d44403930281f160c000000000000000007121d2c38444f5964717e8b83776b605448392e23180c00000000000000000000000000000000000000000000000000000000000c17232e3844505c66707d89929da6afb2b5b2a89f92867a6d6154473a2f24180d0100000000000000000000000000010c161f2b343e474f585f666d71777a7d7e7f7e7c79746f6b636059524d453e352f271f180f070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f28343f4a545f6a74818d84776a6d7985929da097867a6d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000d1a2733404d5a6673808d95887b6e6255483b383d43474b515357565e61636465656463605c55555047423c332a22190e0500000000000714212e3a4754616d7a878c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8e939286796c5f5346392c2013000000000000000000000000000000000000000000000714202d3a4753606d7a86929fa59e9992908d8b8a8a929185786b5e5245382b1f1200000000000000000004101c2834404b556976828f908377695f656c78828f97a2a298897d7063564a3d2e23180c00000000000007131d28313b454d575e666d727a80858a8e929797999a9c9e9fa3aba4a6a8a7a9a19e9b989290959fabb5a99c8f8276695c4f4336291c10030000000714212d3a4754606d7a8793a0adaa9e9184776b5e51442f24190d0100000714202d3a4753606d7a8693a0adaa9e9184776b5e5144382b1e1100000000000613202c3945515d676f7d87939fa4aea7a097928a837d797674747475777b7f858d939aa39a939aa4afbbada093867a6d6053473a2d2014070000000000000000000000000000000713202d3a4653606d7984919eacaca095887c6f62544a3f3338434f5966737f8c99a4afa3998c7f73655b5044372b1f13080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111d2935414c56626d73808a90939a949494948e8275685b4f4235281c0f00030f1c28333f4a545b606161616161616161616161616160605c545d5c5b59575654524c4d4b4846443f3d3a39352f2d2c2823201d18130e0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c151d23282c2d2c28231d150c03000000000000000000040c131920262b32383d44484a504846423c332b32383b4246484a50535557585859585755534d4846423b342e271e160d040000000000000000010f1b27323d4653606d7984897d7063544a4034281c10040000000000000000000000000000000000000000000000000000000006111c28343f4a54606b74808d949ea5abaca8a0968d8074685e5246392d1d1307000000000000000000000000000000040d19222c353e464e545c6065686e707172716f6d66636059544f46423b3329241d150d0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007131d28313a44505c666f7c878f8376696676828f9c9e928578675d5145392c1f13060000000000000000000000000000000000000000000000000000000000020f1b2835424e5b6875818e95887b6f6255483c2f3237394045474a4c525456585958575653514b49443e37312a211910070000000000000714202d3a4753606d79808080808080808080808080808080808080808080818e9286796c5f5346392c2013000000000000000000000000000000000000000000000815222f3b4855626e7b8899a39d938e8783807f7e7e869184786b5e5145382b1e12000000000000000000000c18232e404d596673808c92877b6e696e77808d949fa99f9285796d6053473a2d201407000000000000010c161f29333b454d545c60686d73797d8185878a8c8e8f91929996989a9c9ea1a8a5aaa39f9d9fa7b1b5a99c8f8276695c4f4336291c10030000000714212d3a4754606d7a8793a0adab9e9185786b564c4135291d110400000714202d3a4753606d7a8693a0adaa9e9184776b5e5144382b1e110000000005121e2a36424d57606d79849199a4afa8a09590857d76706d6768676768696e727980889298a39fa4acb6c0ada093867a6d6053473a2d201407000000000000000000000000000005111e2a36414c5663707d8a96a1adac9d9184776a5f5442382d323d4854616e7b87939facab9e9184786c6053463a3025190d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3946525e68717e8b929c9fa4a1a1a19b8e8275685b4f4235281c0f0006121f2b3844505b666c6e6e6e6e6e6e6e6e6e6e6e6e6d6d6d666b6a6967666462605d565a58555350494a4745413c3a38342e2c29241d1a150e06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b12181c1f201f1c18120b03000000000000000000040e161e242932373d43484f54565d55534d453c31272c30363a3b3f4446484a4b4c4c4b4a4847423c3a363128231c150c04000000000000000000000b161f2c3844515c66727f8c8276665c5144382c1f120600000000000000000000000000000000000000000000000000000000000c17232e38424f59606d78828e939c9f9f9d969184796d60564c41362a1e0c010000000000000000000000000000000007101a232c343c424a5153565e616364656462605c54544f48443d3630292018120b03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000081118242f3a434e58606d7883908e8174676673808c999d9083776a554b4035291d1004000000000000000000000000000000000000000000000000000000000004101c2834404a546a76839094887b6e6155483b2e272b2f35383a3d4146474a4b4c4b4a494745403939332b261f180f070000000000000006131f2c3945515d676d7373737373737373737373737373737373737373737d899286796c5f5346392c201300000000000000000000000000000000000000000000091623303c4956636f7c89969d928d817b767472717c889184776b5e5144382b1e1100000000000000000000071623303d495663707c899790837b787b828d929da6a99c8f8275675c5145382c1f130600000000000000070d172129333b424a51565e61666d7075787b7d7f8183848687898b8d8f919696999c9fa2a9a9afb7b5a99c8f8276695c4f4336291c10030000000714212d3a4754606d7a8793a0adac9f928679685d5245392c20130700000714212d3a4754606d7a8793a0adaa9e9184776b5e5144382b1e11000000000714202d3a46525e6973808c96a0abaaa09690837b706c64605c555a5a565e61676d747e869299a3afb6beb9ada093867a6d6053473a2d20140700000000000000000000000000000714202d3946525e6875828f9ba9afa49a8c7f7366584e432f262d3a46525e6976828f9caaaca096897d7063564c4135291d11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a85929fa4acafb6aea89b8e8275685b4f4235281c0f000613202d394653606c787b7b7b7b7b7b7b7b7b7b7b7b7a7a79797877757472716f6d6869676462605b535654514b4946443f3a39352f2b2620180f0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c10131313100c0700000000000000000000020c16202830353c43474f5459606369615f574d42372b20252a2d2e34383a3b3d3e3f3f3e3d3b3a37312d2a261f18120b03000000000000000000000004101c2834404a54606d7a8581796d6053463a2d201307000000000000000000000000000000000000000000000000000000000006111c26303d45515c666d79818a8f9292908c847b6e675d51443a3025190d00000000000000000000000000000000000008111a222a30394044464c5254575858585553504a48433d38322a251f170e070100000000000000000000000000000000000000000000000000000000000000000000000000000000000406070b0e0b0a08101a232935404b555f6a727f8c958b7e726564717e8a979b8e8275685b4f422f24180c00000000000000000000000000000000000000000000000000000000000006121f2c3844515c6678859199877a6d6154473a2e211d24292c2d3036393b3d3e3f3f3e3c3a38342f2d28221a150e06000000000000000004101d2935404b555d606666666666666666666666666666666666666666707d8a9286796c5f5346392c2013000000000000000000000000000000000000000000000916232f3c4956626f7c8995998d80756e696766727f8c9184776a5e5144372b1e11000000000000000000000713202d3a4653606d79859295908785878f939da4ada1978a7d7164554b4034291c100400000000000007101920272b2e303940444c52545c606468696e7072747678797b7c7e80828487898c8f92979b9ea5afb5a99c8f8276695c4f4336291c10030000000714212d3a4754606d7a8793a0adaea398877a6d6054473a2d21140600000714212e3a4754616d7a8794a0adaa9d9184776a5e5144372b1e1100000004111d2935414c56616e7b86929fa8aea29891847a6e69615a53514b4d4e4d52555d606c717d87929fa7b1bcb9ada093867a6d6053473a2d20140700000000000000000000000000000814212e3b4754616e7a86929facac9f93877b6e6154483c32212a36424d5764717e8b98a2aea89b8e8175685e5246392d20160a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2b37434e5866737f8c98a2aba9a6a6a6a69b8e8275685b4f4235281c0f000714212e3a4754616d7a87878787878787878787878787878685848382817f7e7c7a787673716e6c656663605d555653504a4745403a37312a21180e030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040607060400000000000000000000000008131e28323a41454e545960636b70766e695f53463c31261b1e2023282b2d2f3032323231302f2e2b26211e1a140c0700000000000000000000000000000c18232e3945515d676e7b756d665c5144382c1f12060000000000000000000000000000000000000000000000000000000000000a151e2834404b545c676d757d828585837f796e695f554b4132291e1308000000000000000000000000000000000000000810181e272e34383b4146474a4b4c4b4946443f3c3b38322b231a140d050000000000000000000000000000000000000000000000000000000000000000000000000000000000070c101313181b18171518222b353d45515d676f7c879295887b6e61636f7c89969a8d8073675a4d4034271a070000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7986939386796c605346392d2013181d1f20252a2d2e3031323231302d2c29231d1c170e0903000000000000000000000c18242f39434b51535959595959595959595959595959595959595964717e8b9285796c5f5246392c1f13000000000000000000000000000000000000000000000815222f3b4855626e7b889a92867a6d615e606b7783909083776a5d5044372a1d110000000000000000000006131f2c3845515c6674818d9a9a9391939a9ea6aea89e9185796d6053463a2f23180c000000000000040f19222b32373b3c404547484a4a515357575e6164666769666d6e70717375787a7c7f8285898e939ea9b5a99c8f8276695c4f4336291c10030000000714212d3a4754606d7a8793a0adb4aa95897c6f6256493c2e23170c01000814212e3b4754616e7a8794a1adaa9d9184776a5e5144372b1e110000000613202c3945525d6874808d98a3aea99f92867c6e685e5750464540414142464b515a616b727f8c959fabb8b9ada093867a6d6053473a2d2014070000000000000000000000000007131f2c38444f5966727f8c99a3afab9c908376695e53463a2d2125303b4753606d7985929facac9f92867a6d6154473d32271b0f01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b47535f6a7784919ea79f9d99999999998e8275685b4f4235281c0f000714212e3a4754616d7a8794949494949494949494949493989291908f8e8c8a89878482807e7b797673706d676663605c5453514b47423c332a201509000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d1924303a444c52585f626b6f767d837b6e61584e43372b201614171c1f202224252526252422211e1a15120e090300000000000000000000000000000007121c2935414c555e696e69605c544a4034281c1004000000000000000000000000000000000000000000000000000000000000030c18232e39424b555c606b7076787977726d675f574d433a2f20170d020000000000000000000000000000000000000000060c151c23282c3036393b3d3e3f3e3c4347484948433d352b1e140a00000000000000000000000000000000000000000000000000000000000000000000000000000000060b12181c1f202528252421212a343d47515b606d79839199908377695f626e7b8895988b7f7265584c3f3225190c0000000000000000000000000000000000000000000000000000000000000815222e3b4855616e7b8899918578665b5044382b1f120c101314191e2021232526252423201f1c1812100b0500000000000000000000000007121d2731394045474d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d5966737f8c9285796c5f5246392c1f13000000000000000000000000000000000000000000000714202d3a4753606d7a8693918578685e5c666f7c89958f8275695c4f4236291c0f0000000000000000000004101c2834404b54626f7c88949e9f9e9fa4acb0aca1968c7f72665c5144382c1d12070000000000000a15202b343d4347494b51535557595a575550535457595b545c606163656769686d707275797c818e9ba7b4a99c8f8276695c4f4336291c10030000000714212d3a4754606d7a8793a0adb1a4988b7e7165544a3f34281c120c070715222f3c4855626f7b8895a2aeaa9d9084776a5d5144372a1e110000000714212d3a4754606d7a86929faaada1978c7f726a5f564d453e38342e30363940455059606c7883909da7b1bcada093867a6d6053473a2d201407000000000000000000000000000915222f3b4854606b7784919dabaea3998b7e7265574d42362a1e1f2c3945515d6774818e9ba8aea3988b7f7265584e43382c1d1307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8896a09d95908d8c8c8c8c8c8175685b4f4235281c0f000714212e3a4754616d7a8794a0a1a1a1a1a1a1a1a1a1a0aaa29f9e9d9c9a99979596918f8d8b888583807d7a77736f6d6664605d55534e453c31261a0e01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414c565d606a6f757c82898e81756a5f53473d32271b0f0b101213151718191918171514120e0905020000000000000000000000000000000000000d19242f3a434d575e615e57514a42392e23180c000000000000000000000000000000000000000000000000000000000000000007121d273039434b51596163696c6c6a66605d554d453b31281d0e0500000000000000000000000000000000000000000000030b12181c1f252a2d2e31363c42474e535556544f473d30261c110600000000000000000000000000000000000000000000000000000000000000000000000000020a11171d23282c2d313431302d2a333c464f59626d75818e95978b7f726557616e7b8794978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a9790837669544a3f33281c0f030406080e1114141718191817161413100c07010000000000000000000000000000010b151f272f35393a40404040404040404040404040404040424d576874818e9285786c5f5245392c1f12000000000000000000000000000000000000000000000613202c3945515d6777849192867a6d66666d7882909a8e8174675b4e4134281b0e00000000000000000000000c18232e3947535f6a75828f98a2abacafb5afa49a9184796d60544a4034281c0b010000000000030f1b27323d464e5456555d606264656764615a50484a4c4e4a50535456585a565d606366666d707c8996a3afa89c8f8275695c4f4236291c0f030000000714212d3a4754606d7a8793a0adb4a79b8e8174665c5044382d241d1816151823303d4a5663707d8996a3b0a99d9083766a5d5043372a1d10000004111d2935414b5565717e8b98a2aeab9e9185796d60574e443b332c2823252a2f353e44505b66707d8995a0acb8ada093867a6d6053473a2d20140700000000000000000000000004111d2935414c55636f7c8996a0acac9f92867a6d6154473b31251a1d2935404b5563707c8996a0acaa9d9084776a6054483a2f24180d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b989d928d838080808080807e7164574a3e3124170b000714212e3a4754616d7a8794a0adaeaeaeaeaeaeaeaeadb4aeacabaaa8a7a5a4a8a19e9c9a9798928f8d898683807c7975716d67625f574e42372b1d130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202c3945525d686d757c82898f9493877c6f62584e43372b1d1307030607080a0b0c0c0b0a0808060200000000000000000000000000000000000000000008131e28313b454d5254524d44403930271c120700000000000000000000000000000000000000000000000000000000000000040a0b151e27313940454f55575c5f5f5d5953514b433b33291f160c00000000000000000000000000000000000000000000000000070c1017202930363b42464d53585f626360594f42382e23170b000000000000000000000000000000000000000000000000000000000000000000000000060b141c22282e34383a3e413e3d39333c454e58606b727f8c939e92857a6d6054616e7b879495887c6f6255493c2f2216090000000000000000000000000000000000000000000000000000000000000d192633404c5966737f8c998e8174685b4e412d22170b00000000020507080a0b0c0c0b09070604000000000000000000000000000000000000030d151d24292c2d33333333333333333333333333332f3846535f697784919285786b5f5245382c1f120000000000000000000000000000000000000000000004111d2935404b556774818e998e8078737378808d94998c7f7266594c3f3326190c000000000000000000000007121d2b37434e58616e7b86929fa3abacaba39f93887d70675d5142392e23180c00000000000006131f2b37434e58606269676d6f707274706c6155493d3f413f444648494b4d4c525456545c636f7c8996a2afa89c8f8275695c4f4236291c0f030000000714212d3a4754606d7a8793a0adb8ab9e9285796d60544a3f352f29242222232834404b5465727f8b98a5b2a99c8f8376695c504336291d1000000613202c3945515d6776838f9caab2a8998c8073675c51453c3229211c18191d2429333f4a54606b7783909daab7ada093867a6d6053473a2d2014070000000000000000000000000613202c3945515d6774818e9ba8b2aa9b8f8275685d524639291f1418242f394653606c7884919eaaaca095897c6f62554b4135291d1104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2934404b556875828e9b948d8076737373737373716c6155493c3023170a000714212e3a4754616d7a8794a0a6a6a6a6a6a6a6aaacb1b9bab8b7b6b5b4adaeb2adaba9a6aaa29f9c999992908d8985827e7a756e6a5f53473a2f24180d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a81878f949c9f9a8f82756a6054473a2f24180d0100000000000000000000000000000000000000000000000000000000000000000000010c161f29333b42464746423b342e271e150b00000000000000000000000000000000000000000000000000000000000003090e151b1d262d3338393e44484a4f5252504c47454039312921170d04000000000000000000000000000000000000000000000000000008141f29323b41464d53575f616a6f6f6b60544a3f34281d120700000000000000000000000000000000000000000000000000000000000000000000080f181d262d33394045464b4e4b49453e454d575f6a707d87929f968c7f72675d55616e7b889498877a6d6154473a2e211407000000000000000000000000000000000000000000000000000000000005111d2a36414c566875828f998c7f7266594c3f33261906000000000000000000000000000000000000000000000000000000000000000000000000030b12181d1f20262626262626262626262626222d38424d57616e7b88959184786b5e5145382b1e1200000000000000000000000000000000000000000000010d18242f3d4a5763707d8a97928e838080848d929d9a8a7d7063574a3d3024170a0000000000000000000000000f1b26313c47535f69717e8b92999e9f9e99928c7f736b60554b4030271c12070000000000000815222e3b4754606a6f76787a7b7d7f817e7064564c41352e34383a3b3d3e40414547494a5763707d8a96a3b0a89b8f8275685c4f4235291c0f020000000714212d3a4754606d7a8793a0adb9ada1978a7d70665b50454039352f2f2e2e343c45515c6675818e9ba8b4a89b8e8275685b4f4235281c0f00000714212d3a4754606d7a86929facaca196887b6f62554b40332a2017100c0e1218222d38424f5966737f8c99a9b3ada093867a6d6053473a2d2014070000000000000000000000000714212d3a4754606d7a86929facaea2988a7d7164564c413529170d121f2b3744505b6573808c99a6b0a79a8e8174675d5145392c20150a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515c677784919c9082786c66666666666664615a5045392d211408000714212e3a4754616d7a879499999999999999999da0a7b1bcbfbaafaaa8a1a1a3a5a7a9abadaeaba9aba39f9d9997928e8a86817c6e62554b4035291d1104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202d394653606c7984919a9ea6ac9e93897c6f62554b4035291d11040000000000000000000000000000000000000000000000000000000000000000000000040d17202930363a3b3a363028231c150c030000000000000000000000000000000000000000000000000000000000050d141a20272b2f383f44464b504645404546443f3a39352f281f170f060000000000000000000000000000000000000000000000000000020e1925303b444d52575e61696e757b7d6f665c5044392e23180c01000000000000000000000000000000000000000000000000000000000000000109121a212a2f383f444b5153585b585650454f575f696f7c8692999a9184796d605555626f7b8895928579685e5246392d20130700000000000000000000000000000000000000000000000000000000000713202d3946525e68778491978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000000000000000000000000000000001070c1013141a1a1a1a1a1a1a1a1a1a192328333f4a545e6973808d999084776a5d5144372a1e1100000000000000000000000000000000000000000000000713202d3a4653606d7984919e95908d8d91959d9f93877a6d6154473a2e2114070000000000000000000000010a15202b37424d57626c727f878e9192918e877f736d63594f43392f1e150b000000000000000916232f3c4956626f7c828586888a8c8d8276685e52463a30282b2d2e30322f35393a3e4b5764717e8a97a4b1a89b8e8275685b4f4235281c0f020000000714212d3a4754606d7a8793a0adbeb3a99d9083786c605a514b45403d3c3b3c40454d57606d7985929eabb3a69a8d8073675a4d4034271a0d00000a1724303d4a5763707d8a99a3aeab9e9184786a5f5343392e21180e05000107111c262f3d4855626f7c8897a2adada093867a6d6053473a2d201407000000000000000000000006121f2b37434e5865717e8b98a2aeab9f9285796d6053473a302419070f1b27333f4953616e7b88949fabac9f92857a6d6054473c31261b0f01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a869296897d70665b5959595959575550483e33281c1105000714212e3a4754616d7a878c8c8c8c8c8c8c8c8c9195a0acb8b4aea59e9b949496989a9c9fa2a9a6a8abadacaaa9a29f9b98928e8174675d5145392c2014090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505b66717e8a95a0aca79f9c8f8276675d5145392c201306000000000000000000000000000000000000000000000000000000000000000000000000050e171f252a2d2e2d2a251f18120b030000000000000000000000000000000000000000000000000000000000050f171f252a32373e424a5053585c53514b42392e332d2c29241d160d0600000000000000000000000000000000000000000000000000000005111e2a36414d565e61696e747b818684786d60544b4034281d12070000000000000000000000000000000000000000000000000000000000000009131b242c333c424a50555c60646764615a515960696e7b8591989f93887d70675c5156626f7c89959184776a564c4135291d110500000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a879697877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000406070d0d0d0d0d0d0d0d0b16212b353d44505b666e7b86929c8f8376695c504336291d10000000000000000000000000000000000000000000000006131f2c3845515c66727f8c96a09d99999da0a79d908376685e5246392d20130700000000000000000000040c12181e26313c45505a626d727c81858684817c726d635b51473d31271d0c03000000000000000814212e3b4754616e7a87919795979892867a6d61564c4136312d2c2924292c2d3038424d576673808c99a6b3a79b8e8174685b4e4135281b0e020000000714212d3a4754606d7a8793a0adbab8aca0958c7f726c605d55514b4a4948494b51575f69727e8b97a1adb1a7988b7e7165584b3e3225180b00000d1a2633404d596673808c99abb5a89b8e817568584e4330271d0f06000000000a14202d394653606c7985929fabada093867a6d6053473a2d20140700000000000000000000000815212e3a47535f6a7683909daab2a89b8e8174675c514538281e13080b17222d3846535f697683909caaaea2988b7e7165584e43372b1d1207000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915222f3c4855626f7b88999184786c60544a4d4d4d4d4a49453e362c22170c00000714202d3a4753606d798080808080808080808083919daab3aaa29f938e8787898b8d90929796999c9ea1a9a7aaacabaaa29f92857a6d6053473c31261a0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1c28333f4a54606c7883909da09d959089827a6d6053473a2d20140700000000000000000000000000000000000000000000000000000000000000000000000000050d141a1e2021201e1a140c07000000000000000000000000000000000000000000000000000000000000030d17212931363c43474f545b606469605c544b40342820201d18120c04000000000000000000000000000000000000000000000000000000000714202d3946525e686e747b81878e938b7e71665c5145392f24180c00000000000000000000000000000000000000000000000000000000000009131b252d363e454e545b60676d7174716c615c606b6f7b8491979f958d80746b60554b5663707d89968f8276695c4f433025190d0100000000000000000000000000000000000000000000000000000000000a1724303d4a5763707d8a96928578695e53463a2d211407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c27333d47505a606c78828f989b8e8175685b4e4235281b0f000000000000000000000000000000000000000000000004101c2834404b54606d7984919aa4a6a6aaaca1978b7f7265564c41362a1e1105000000000000000000040d161d24292f353a4146515b626a6f75787978746e6a625b514940352c1f150b00000000000000000714202d3946525e687784919da9a3a3998c7f73685d5246423c3a38342f35393a3c424a535e6976828f9ca9b3a69a8d8073675a4d4034271a0d010000000714212d3a4754606d7a8793a0adb7afaaa79f93887e746d67605d5556555555555c60696e7b85929fa9b3aca095887b6e6155483b2e22150800020f1c2935424f5c6875828f9ba8b2a5998c7f7266594c3f3126150b000000000006121f2b3844505b667683909ca9ada093867a6d6053473a2d2014070000000000000000000004101c2834404b54626f7c88959fabada196897d7063554b403429160c0206111b2a36424d5765717e8b98a2aeaa9d9083766a5f5347392f23180c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a978e8174655b5042404040403e3c39332c241a1005000006131f2c3945515d676d7373737373737373737a85929faca9a198928b817a7b7d7f818385878a8c8f9197979a9da0a8a8aba2988b7e7164574d42372b1c1106000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d3844505b66717e8a9595908a837d766d675d5145392c201306000000000000000000000000000000000000000000000000000000000000000000000000000002090e11141414110e09020000000000000000000000000000000000000000000000000000000000000009141f29333b42464e545961666c71766d665c51453a302419100d070100000000000000000000000000000000000000000000000000000000000814212e3b4754616e7a80868e92999e9184796d60554b4035291d10040000000000000000000000000000000000000000000000000000000007101b252d373f4850575f666c71797e817e716b666d737d859196a1979083796d60594f4b5864717e8b978d8174675a4e4134271b08000000000000000000000000000000000000000000000000000000000003101c28343f4a546673808c998f827569574d42362a1e120500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202c38444f59626c73808d949f998c807366594d4033261a0d0000000000000000000000000000000000000000000000000c18232e3945515d67707d88939fa2a9aaa29a91857a6d6054473a3025190d010000000000000000010c161f282f353a41454c52565e616162686b6c6b67625f58514940372e231a0d03000000000000000005111e2a36414d5666737f8c9aa4afab9e92857a6d605c534d4847454044404547494e545c616e7b87929facb5ab988c7f7265594c3f3226190c000000000714212d3a4754606d7a8793a0adafa59e9b9e9a938b8179726d67656362616264676d727b849197a2adb3a99d908477695f53463a2d2114070004101c2834404a546a7784909daab0a3978a7d7064574a3d3124170a0000000000030f1c28333f4a546774818e9aa7ada093867a6d6053473a2d2014070000000000000000000006131f2c3845515c6674808d9aa7b1ab9e9184786c605346392f23180600000e1a26313b4754606d7a86929facab9f95887c6f62554b4034291c10040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b988b7e716553493f2f33333331302d28221a120800000004101d2935404b555d60666666666666666773808d98a2a9a19792867e756e6e70727476787b7d7f8285878a8d9196979b9ea19c908376695f5346382d22170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c28333f4a54606c7883908a837d76706b605d554b4035291d110400000000000000000000000000000000000000000000000000000000000000000000000000000000020507080705020000000000000000000000000000000000000000000000000000000000000000020e1a25313b454d535860626b70787e83786d60564c4135291f1409000000000000000000000000000000000000000000000000000000000000010e1b2834414e5b6774818d92999fa3a1968b7f72675d5145392c1f1306000000000000000000000000000000000000000000000000000000030d19232d373f49515a616a6e787e858b8e8a7d7273797f879297a19891857b6e675c51474c5966737f8c988c7f7265594c3f3226190c000000000000000000000000000000000000000000000000000000000006121f2b3844505c6676828f998c807366594d4031251a0e0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3c4854606b717e8b929ca6978a7e7164574b3e3124180b00000000000000000000000000000000000000000000000007121d2935404b55616b727f8b92979a9a9892887e70675d514539291e130800000000000000000007121d28313940454c52565e61686e6e695f5e5f5e5b55534e463f37312a21180e030000000000000000020e1925303b4854616e7b87939fabada1978e81756e615e575553514b514b5153565860666d75818e99a3afaea3998a7d7063574a3d3024170a000000000714212d3a4754606d7a8793a0adaa9e938e939e9f938e847f797572706f6e6f7174797f869196a0a9b3ada2978c7f7265574d42362a1e12050006121f2c3844515c667885929fabafa295887c6f6255493c2f2216090000000000000b17222d404d596673808c99a6ada093867a6d6053473a2d201407000000000000000000000713202d3a4653606d7985929eabb1a79a8d8073665b5044382b1f120700000914202c3945515d6775818e9ba8b1a79a8d8074675c5145382c1f14090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d1a2734404d5a6773808d99887c6f6255493c2d2626262423211c17100800000000000c18242f39434b5153595959595959606d7985929faaa19791857c716c616163656769696e707375787b7e8184878b8e92979994887b6e61544a3f33281c0f03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d3844505b65707e847e78706c636059514b433a2f24180d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121e2a36424d575e616a6f767d838b8c7f72685d52453b31261a0e010000000000000000000000000000000000000000000000000000000000000815222e3b4855616e7b87929fabada89e9185796d6053473a2d2014070000000000000000000000000000000000000000000000000000010b151f2b353f49515b626c717c838b91979a92857f80848c9299a19892867c6f695e554b404e5a6774818d978a7d7064574a3d3124170a00000000000000000000000000000000000000000000000000000000000713202d3a4653606d7985929a8a7d7063574a3d302417090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1723303d4a5663707d87929fa4a196887b6e6155483b2e221508000000000000000000000000000000000000000000000000000d18242f39434f59636d727e858b8d8d8b867e716c61554b413529170d020000000000000000010d18242f39434b51565d60686d737a7b6e61594f514e4847474847423c332a1f15090000000000000000000814212d3a46535e6975818e99a3afa99e938c80756e696462605c555e555d6063656a6f78808d939eabb5ac9f92867a6d6053473a2d201407000000000714212d3a4754606d7a8793a0ada89b8e818e95a09d96918b85827e7d7c7b7c7e81858c9298a0a8b2b0a69e92857a6d6054473b31261a0e02000713202d3a4653606d798697a2adaea194877b6e6154483b2e211508000000000000061925323f4c5865727f8b98a5ada093867a6d6053473a2d20140700000000000000000005121e2a36424d5764717e8a97a1adaca095887c6f62544a3f33281c0f03000004111d2935414c5563707d8996a1adab9f9285796d6053473c31261a0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020f1b2835424e5b6875818e93867a6d6053473a2d201a1a171714110c0500000000000007121d2731394045474d4d4d4d4d5764717e8a97a2a29891857b6f6a625a5456585a575e61636669696e7174777b7e8185888c908c8073665b5044382b1f12060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c27333f4953606c7779716c65615a544f45403a31281d130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a46535e696e757c828a909592857a6d60574d42362a1e13080000000000000000000000000000000000000000000000000000000000000714212d3a46535f6974818e99a3a19e96918b7e7265584b3f3225180c000000000000000000000000000000000000000000000000000007121d27313d47515b626d727e8690959ea1a197928b8d91969fa29992867d706a60574d43414c566976828f95887c6f6255493c2f22160900000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c889893867a6d6154473a2e2114070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724303d4a5763707d8a95a0a99e918478695f53473a2d2114080000000000000000000000000000000000000000000000000007121d28313e47515b636c717a7e81817f7a716c625a50433a2f24180500000000000000000004101d2935404b555d60686d737a808582766b605448454c525455534d453c31261a0b02000000000000000005121e2a36424d57626f7c87929fa6afa59c928c817b75716f6d676b6a6b676d6f72777c838d929ca5afb0a69b8f8275675d5145392c201306000000000714212d3a4754606d7a8793a0ada094877a839096a0a19e97928f8b898888888a8d92979fa2aab2afa69e948b7e72675d514539291f140900000714212d3a4754606d7a8793a9b3ada094877a6d6154473a2e2114070000000000000b1825323e4b5865717e8b98a4ada093867a6d6053473a2d2014070000000000000000000714212d3a46535e6976828f9ca9b3ac9d9084776a5f5342382d22170b000000010d19242f3a4653606c7884919eabada2978a7e7164574d42372b1c11060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101d293643505c6976838f918478675d5145382c1f130d0b0a08050000000000000000010b151f272f35393a404040424d576875828e9ba69f92867c6f69605850484a4c4e4d52545759575e616467696e7175787c7f838684796c605346392d20130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d3844505b656c6d66605b535048443d352f281f160c0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b81878f949da0978d8073695f53463a2f24190d01000000000000000000000000000000000000000000000000000000000005121e2a36424d57616e7b86929e97918b847e786d6053463a2d20130700000000000000000000000000000000000000000000000000000c18232f39434f59626d727f8a92989fa7ada9a19e98999ea1a19892877d706b60584e453b46525d6878859197877a6d6054473a2d2114070000000000000000000000000000000000000000000000000000000009101c28343f4a5465727f8c98908377685e5246392d2013070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916232f3c4855616b7783909da1978c7f7266574d42372b1e120600000000000000000000000000000000000000000000000000010c161f2c353f49515a62686d717474726e68625a50483e31281d13070000000000000000000613202c3945515d676d727a80858d92897c6f63594f51565e61615f574d42372b1d140a0000000000000000020e1a25313b47535f6a73808d949fa7aea49c938e86827e7c7a78787778797a7c7f838890959ca4aeb3a99f94897d7063554b4035291d1104000000000714212d3a4754606d7a8793a0ada093867a7a8490959ea5a29f9b9896959495979a9ea1a9aeb1aba59d948f82776c60554b413529180d0300000714212e3a4754616d7a8794a0adada093867a6d6053473a2d2014070000000000000b1824313e4b5764717e8a97a4ada093867a6d6053473a2d2014070000000000000000030f1c28333f4a54616e7b87939facafa49a8c7f7266584e432f261c11060000000008131f2b3844505b6673808d99a7b1a99c8f8276695f5346382e23170c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2a3744515d6a7784908f837669554b4035291d100400000000000000000000000000030d151d24292c2d33333a46535e697884919e9f948b7e716a5f574e463e3d3f414246484a4c4d535457575e6164656c6f73767a7e7b6e6154473b2e211408000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111b27333f49535b60605c545049413e383329241d160d040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915222f3c4855626f7b86929a9fa6a99f92867b6e61564c4135291d11040000000000000000000000000000000000000000000000000000000000020e1a26313b46535f6974818e928c847f79716d665c5044382b1f12060000000000000000000000000000000000000000000000000004101c2934404b55606b727f8b919fa2aab1b9b3adaba5a6a8a09792867d706b61594f463c3a4754616d7a8797918578675d5145392c20130600000000000000000000000000000000000000000000000000000009121b202c3844505c6675828f9a8d807367564c42392e23180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202c38444f5964717e8a969e92857a6d6054473c31261a0e020000000000000000000000000000000000000000000000000000040d1a232e373f4850565d6065676765615e5650483e362c1f160c010000000000000000000714202d3a4753606d797f858c92989c9083766b61555d60686d6e695f53473e2f261c1106000000000000000009141f2b37434e58606d788290959ea5aca59e99928f8b8886858484848586898c90959d9fa7aeb0a9a2978f82766b6055433a2f24180d01000000000714212d3a4754606d7a8793a0a8a093867a6e7b838e939ea0a8a8a5a3a2a1a2a4a7abadadaba79f9d938e82796d655b50433a2f2418060000000714212d3a4754606d7a8793aab4ada093867a6d6053473a2d2014070000000000000b1825313e4b5864717e8b97a4ada093867a6d6053473a2d201407000000000000000006121f2b3844505b6673808c99a4afac9f93877b6e6154483c3221140a0000000000030f1c28333f4a54626e7b88959fabac9f93877b6e61544a3f34281c100300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404b546b7885918e8174685b4e412f24180c000000000000000000000000000000030b12181d1f20262e3b4854616e7b8796a19c8f82766c62584e453c34303230363a3b3d404246484b4d5254535b606266686d716e695e52463a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d384149505353504a443f382f2c272118130c04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3a47535f6a74808d97a2ada9a2998e8175685d5245392c20130700000000000000000000000000000000000000000000000000000000000009141f2a36424d57616e7b87857f79726d66605c544a3f34281c10030000000000000000000000000000000000000000000000000006131f2c3845515c676f7d87929fa3aeb4bcc2beb9b4aea59e9691857c706b61594f473d343c4956636f7c899690837669554c4135291d1104000000000000000000000000000000000000000000000000000006111b242d323a4653606d798592998a7d70635c544a4034281c1004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c28333e4653606c788491948b7e71675d5145392a1f15090000000000000000000000000000000000000000000000000000000008111c252e363f444c5254585a5a5854524c443e362d241a0d04000000000000000000020f1c2935424f5c6875828c92979fa29f948a7d706560676d737a7b6e61594f42382d22170b0100000000000000030f1a26313c44515c666d7a838e939ea1a8aba39f9c97999392919191929896989d9fa7abb1aca69f9792857b6e61594f4431281d130700000000000714212d3a4754606d7a87939b9b9b93867a6d6e79818a91969c9fa2aaa7a8a8a8a8a6a9a29f9b95908981796d675d53493f31281d13070000000613202d394653606c798698a2aeada093877a6d6054473a2d2114070000000000000b1825323e4b5865717e8b98a4ada093867a6d6053473a2d20140700000000000000000613202d394653606c7884919eabb4aa9c908376695e53463a2d2114020000000000000b17222d3847535f6a7683909daaafa49a8d8073665c5044382c1f140900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515c667986928d8073665a4d4033271a070000000000000000000000000000000001070c10131623303d495663707c8996a297897c6f635a50463c332a2529252a2d2e3031363a3b3e42464849505355565e6164615e564d42362a1e110500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111b262f383f444646443f38332d261d1c160d0701000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b37434e58616d7a85929fa29f97928c847a6d6054473a2d211407000000000000000000000000000000000000000000000000000000000000030e1a26313b46535e69707d7a726d67605c54504a42382e23170b0000000000000000000000000000000000000000000000000003101c28343f4a54606d79849199a3afbabfc6bfbab1aaa39f938e847b6f6a60594f473e35323f4c5965727f8c988e8174675b4e412f24190d0100000000000000000000000000000000000000000000000000010c18222d363f444c56636f7c899892867a756d665c5144382c1f12060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b161f2b3844505b66717e8b8f82756c62554c413529180e0300000000000000000000000000000000000000000000000000000000000a131c242d323a4145474b4e4e4c4746413b322d241b120800000000000000000000000a1623303d495663707d89949fa9aea69d9083786c6d727a808582766b61544a3f33281d120700000000000000000a15202834404a545d686d79818a91969da0a7a9a8aba49f9e9e9d9e9fa2aaa5aaabacaba7a09d9490857c6f695e53473d331f160c0100000000000714212d3a4754606d7a878e8e8e8e8e867a6d676d757d848a8f9298989a9b9c9b9b9a9897928e89837d746d675d554b41382d1f160c0100000006121f2b3844505b667985929facaea194877b6e6154483b2e2115080000000000000c1926323f4c5965727f8c98a5ada093867a6d6053473a2d2014070000000000000005111d2935414c5663707d8996a1acaea3988b7e7165574d42362a1e120500000000000006111c2b37424e5765727e8b98a3aeac9e9185796d6053463b30251a0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7986998c7f7366594c403326190d00000000000000000000000000000000000000040b1724313e4a5764717d8a979e9285796c6053463f3b3a3631363535352e34383a3c3e42464847464446494c52545754524d443b3025190e02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d262d3337393a38342e27221b140b0b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1a26313c46525e68727f8c9698928c857f796d685d5245392c2013070000000000000000000000000000000000000000000000000000000000000009141f2a36424d57616b706d67605d55514b443f3830261c11060000000000000000000000000000000000000000000000000006121f2c3844505c66727f8c96a0abb5c0c1bcb4aea79f98928b81796e6960584f473e352a36414c566875828e998c7f7266594c3f33261908000000000000000000000000000000000000000000000000000005111d29343f4850565e66737f8c9991837f82786d6053463a2d201307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1c28333f4a54606d7984857a6e615a50433a2f241906000000000000000000000000000000000000000000000000000000000000010a121b20282f35393a3e41413f3b39363029201b12090000000000000000000000000916222f3b4854606b76828f9ca6a29f97928a7d71797f858c928a7d70665b5044392f23180c0000000000000000030c18232e39424c565d676d757e848b9095999d9fa3aba5a7a8a8a8a8a8a7a6a5a8a19e9a95908a837b6f6a60574d42352c210d040000000000000714202d3a4753606d7981828282828281796d60606b70787d8286898b8d8e8f8f8e8d8b8885817c76706b605c554b433a2f261b0d0400000000030f1c28333f4a546b7784919eaaafa295887c6f6255493c2f2216060000000000010d1a2734404d5a6773808d9aa6ada093867a6d6053473a2d201407000000000000000713202d3946525e6875828e9ba8b2ac9f92867a6d6054473b31251a0e02000000000000000e1a26313c4754606d7a86929facada1978a7d7064574d42362a1b110600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a87948c7f7266594c3f3326190c00000000000000000000000000000000000000000b1825313e4b5864717e8b979d918477685e55504a484642434242414242404546494b4d525454524d453c4146474b4746423b32291f14090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b141b22272b2d2d2b28231c17110a02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15202935414c56606d7984918d86807a726d675d564c4135291d110400000000000000000000000000000000000000000000000000000000000000030e1a25313b454f596163605d55514b454039342e261e140a00000000000000000000000000000000000000000000000000000713202d3a4653606d7984919ea8b2bdbcb8afaaa29f9590867f756d675f574e463d352c2d3946525e68788591978a7d7064574a3d3124170a00000000000000000000000000000000000000000000000000000915212e3a45505a62686d7683909c95918c897d7063564a3d30231706000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d3845515c66727f7d70685e52483f31281e13080000000000000000000000000000000000000000000000000000000000000000090d161e24292c2d323434322e2d2a251e170e09000000000000000000000000000713202c38444f59636f7c89949f98928c857f7a7e848c92979d9083786c60554b4034291c1004000000000000000007121c27303a434c555d606c71797e83888c90929997999a9b9b9c9b9b9b99989696918d89837e776e6960584e453b31231a0f0000000000000006131f2c3945515d676d757575757575756d675c5961666c7075797c7f8081828281807e7c7974706b636059514b433a31281d140a0000000000000b17222d424f5c6975828f9ca8b0a3978a7d7064574a3d2e23170b000000000005111d2935414c566875828f9ba8ada093867a6d6053473a2d201407000000000000000714212e3a4754616d7a86929facb3a99b8f8275685d524539291f140900000000000000000915202c3945525d6875828e9ba9b3a99c8f8275695e5246382d22170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222e3b4855616e7b88948c7f7265594c3f3226190c00000000000000000000000000000000000000000a1724313d4a5764707d8a979f92867a6d67605b5454534d504f4f4e4f4f4b51535558575e61615e574d4138393a3e3b3a36302920170d02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171b1f20201f1c17110b06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d1925303a44515c66707d86807a736d68605c554c443a2f24190d01000000000000000000000000000000000000000000000000000000000000000009141f29333e474f555754514b454039342e28231c140c020000000000000000000000000000000000000000000000000000091623303c4956636f7c8996a1acbab8b1aba59e98928b837c726d605d554d453c342c212e3a4754616d7a879599887b6e6255483b2f22150800000000000000000000000000000000000000000000000000000b1724313d4a56626c717a8087929fa09d988d8073665a4d402e23170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c2834404b54626d72706b60564c41362d1f160c01000000000000000000000000000000000000000000000000000000000000000000040c13191d20212527272521201e19140d05000000000000000000000000000004101c27323d4854606b76828f928d85807a75818b91969ea1a0958b7e71675c5145382c1f13060000000000000000000b151e28313a434b515a61676d71777c7f8386888a8c8d8e8e8f8f8e8e8d8b898784807c77716c655e574e463d33291f11080000000000000004101d2935404b555d6068686868686868605c554f545b6064676d7072747575757573726f6c66636059544f45403930281f160b02000000000000061a2734414d5a6774808d9aa7b2a5998c7f7266544a3f34281c1003000000000713202d3946525e687784919daaada093867a6d6053473a2d20140700000000000006131f2b37434e5865727f8b99a3aeada2978a7d7064564c413529170d03000000000000000004111d2935414c5663707d8a97a1adac9f92867b6e6153493f33271b0f03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c88958b7e7265584b3f3225180c00000000000000000000000000000000000000000815222f3b4855626e7b8897a1998f8279716c6664615e575c5c5b5b5b5c545c60626567696e6e695e53493f332e312e2d2a251f170e05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f12131312100b0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e2834404a54616b707b746e68605d56514b433a32281e1308000000000000000000000000000000000000000000000000000000000000000000030d17212c353e44484a4745413a352f28231d17110a020000000000000000000000000000000000000000000000000000000d192633404c5966737f8c99a8b2b1aba79f9d938f867f786f6a625b514b433b332b22202d3946525e687784909286796d6053463a2d20130700000000000000000000000000000000000000000000000000000b1825323e4b5865717e868d9299a3aca99c8f837669544a3f34281c1003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232e3942515b62656360594f443b30241b0d04000000000000000000000000000000000000000000000000000000000000000000000001080d111314181b1b191414110d0802000000000000000000000000000000000b16212c38434f59626f7c8986807a736d707d89949fa8ada79e9184796d6053473a2d201407000000000000000000030c161f283139404550555c60656a6f7376797c7e7f81818282828281807f7d7a7874706b64605b534d453d342b21170d0000000000000000000c18242f39434b51535b5b5b5b5b5b5b53514b434a5053555c6063656768696868676562605b54544f48443d342e271e160d04000000000000000b1825313e4b5864717e8b97a8b2a89b8f8275665c5044382b1f1409000000040d16212e3a4754616d7a86939facada093867a6d6053473a2d2014070000000000000815222e3b4754606a7783909dabb4ab9f9285796d6053463a2f241907000000000000000000010d1924303a4653606d7985919eabafa3998c7f73655b5044372b1f130800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091623303c4956636f7c89968b7e7165584b3e3225180b00000000000000000000000000000000000000000613202d394653606c7885919e9e948f837d7874706e696a69696868686969666d6f7174777b7b6e655b5044372b2421201e19140d050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000305060706030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c18232e39424f5961696e69615e56524c454039312820160c0100000000000000000000000000000000000000000000000000000000000000000000050f1a232c33383c3d3a39352f29241d18120b0600000000000000000000000000000000000000000000000000000000020e1b2835414e5b6874818e9ba7aba79f9d959089827b726c665f585145403a312a21191d2a36414c5665727f8b918477675c5145382c1f130600000000000000000000000000000000000000000000000000000d1a2733404d5a6673808d989fa3abb5ab9e918478665c5044382b1f12060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d27303f4951565856544f473d32291e12090000000000000000000000000000000000000000000000000000000000000000000000000000010407070b0e0e0c08070501000000000000000000000000000000000000050f1b27323d4754606a717e7a736d68606b76828f9ca6a29f97928c7f7265594c3f3226190c00000000000000000000040d161f282f353e434b5153585f6266666d6f7172747575757575747372706e6867636059535049413b332b22190f0500000000000000000007121d2731394045474f4f4f4f4f4f4f474540393f44464b515356585a5b5c5c5b5a585553504a48443d383328231d150c0400000000000000000815212e3b4854616e7b8796a1acab9f9285796d6053463c31261a110904060d161f2a36424d5764717d8a9aa4afada093867a6d6053473a2d201407000000000004101d2935404b55626f7c8995a0acb2a89a8e8174675c514538281e13080000000000000000000008131f2c3844505c6673808d9aa7b1ab9e9184786c6053463a3025190d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724303d4a5763707d8a968a7e7164574b3e3124180b000000000000000000000000000000000000000005121f2b3744505b6573808d98a29e95918a84817d7b79777675757475757678797c7e81848783796c605346392d201414110e09020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121c27303e474f575e615e57524c45413a342f271f160d0400000000000000000000000000000000000000000000000000000000000000000000000008111a21282c2f302d2c29241d18120c07000000000000000000000000000000000000000000000000000000000000030f1c2936424f5c6975828f9ca29f9b95908a837c756e69605b544e463f352f281f180f1925303a4754616d7a868f827568554b4034281c100400000000000000000000000000000000000000000000000000000b1825323e4b5865717e8b98aaafb5b9ac9f9286796d6053463a2d20130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e2d373f464a4b4948443d352b20170d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a16212b37434e58626c716d68615d59626f7c89949f98928d857f796d6054473a2d2114070000000000000000000000040d161d242931394045474e5355545c6062646667686869686868666563615e5656544f46443f382f292119100700000000000000000000010b151f272f35393a424242424242423a38342f333839404547494c4d4e4f4f4e4d4b4946443f3838322c272118120b030000000000000000000714212d3a46535e697884919eabada297897d7063574d42372b231a141112171f28313a46525e6975828f9bacb6ada093867a6d6053473a2d20140700000000000613202c3945515d6774818e9aa7b1ada196897c7063554b4034281c10040000000000000000000003101c28343f4a54626f7c8895a0acaca096897d7063564c41362a1d11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1824313e4b5764717e8a978a7d7164574a3e3124170b0000000000000000000000000000000000000000030f1b27333f4953616e7b86929fa5a09d96918d8a878584838282818282838486888b8e91867c6f655b5044372b1f12070502000000000000000000000000000104070713131313131313130c0c0a060200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000307090a131313131313131313120807050100000000000000000000000000000000000000000000000000000000000106090b0c131313131313131313130807050200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e2c353e454d5254524d46413b352f29231d150d0400000000000000000000000000000000000000000000000000000000000000000000000000000810161c20232421201d18130c070100000000000000000000000000000000000000000000000000000000000000020f1b2835424e5b6875818e9797928e89837d786f6b615e57504a423c3429241d160d0813202d3946525d6875818c807366594d402e23180c0000000000000000000000000000000000000000000000000000000916232f3c4956626f7c8999a3aeaeaca8a399877a6e6154473b2e2114080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c1b252d343a3d3f3d3b38322b23190e0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040f1b27323d46505a6265615e565254606a75828f928d86807a736d675d5145392c201306000000000000000000000000040c12181f272f34383c4347494b51535557595a5b5b5c5c5b5b5a585654524c4948443d37332d261d170f07000000000000000000000000030d151d24292c2d353535353535352d2c2923282b2f34383a3d3f4142424242403f3c3938332d2c27211c160c07000000000000000000000005121e2a36424d576774808d9aa8b1a99b8e8175695f53463f362a25201d1f2228313a434e58616e7b86929facb9ada093867a6d6053473a2d20140700000000000714202d3a4753606d7a85929fabb7ab9e9184786c605346392e23180c0000000000000000000000000c17232e3847535f6a7783909dabb2a89b8e8175685e5246392d20160a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1825323f4b5865727e8b968a7d7063574a3d3024170a0000000000000000000000000000000000000000000b17222d3846525e68727f8b939da4a8a19e9a979892918f8f8e8e8e8f909193999893877e716a6053493f33271b0f030000000000000000000000000001080d1113142020202020202020191816120d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b101316162020202020202020201f1414110d08020000000000000000000000000000000000000000000000000000070d121618192020202020202020201f1514120e0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c1a232c333b42464746423b363029241e18120b0300000000000000000000000000000000000000000000000000000000000000000000000000000000050b101416171413110d0701000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717e898a8985817c76706c656059534d443f382f2a2218130c0405111d2935414c56626f7c897e7164574a3e312417070000000000000000000000000000000000000000000000000000000713202d3a4653606d7986929faaa39f9b9895897c6f6256493c2f23160900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009131b23292e3132302f2c27211911070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a16202b343f4850565854524c464e58626f7c8786807a736d68605d554b4135291d11040000000000000000000000000001070d151d23292c32373b3c404546494b4c4e4e4f4f4f4f4e4d4c4a4746413d3b38322b27221b140b050000000000000000000000000000030b12181d1f2028282828282828201f1c181c1f23292c2d3032343536353534322f2d2b28221c1b16100b05000000000000000000000000020e1a25313c4956626f7c8995a0acac9f92877b6e615b51483f36302c292b2d333b434c565f6a74808d99a3aebbada093867a6d6053473a2d2014070000000006121e2b37424d5764717e8b98a2aeb1a7998d8073655b5044372b1d120700000000000000000000000006111c2b37434e5865727f8b99a3afac9f92867a6d6154473d32271b0f0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1926323f4c5965727f8c96897d7063564a3d3023170a00000000000000000000000000000000000000000006111b2a36414d56626d74818d929ea2a9aba7aaa29f9d9c9c9b9b9b9c9c9e9f9f918b7f726c61584e41382d22170b00000000000000000000000000040c13191d202d2d2d2d2d2d2d2d2d2625221e18120a010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070f161b2022232d2d2d2d2d2d2d2d2d2c21201e19140d050000000000000000000000000000000000000000000000010911181e2225262d2d2d2d2d2d2d2d2d2c22211e1a140e0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008111a202930363a3b3a36302a251e19130c0701000000000000000000000000000000000000000000000000000000000000000000000000000000000000000407090a070604010000000000000000000000000000000000000000000000000000000000000000000000000a1723303c4955616c717d7e7c7974706b64605b534f46423b332d261d1810070100010d1924303a4754606a76837c6f6255483c2f22150900000000000000000000000000000000000000000000000000000006131f2c3845515c677783909d9f98928f8b89877d7064574a3d3124170a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010911181d2224252322201b160f0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040f19222d363f454a4b4746413d47535f6a717e7b736d68605d56514b433a2f24180d01000000000000000000000000000000030b12181c1f262b2e2e34383a3c3e3f41424242424241403f3d3b3936302f2c271f1b17110a020000000000000000000000000000000001070c1013141c1c1c1c1c1c1c1413100c0f12181c1f2023252728292928272522201f1c1711100b040000000000000000000000000000000915222e3b4754606a7784919da8afa3998f82756d625a5046423b393538393f444d555d686f7c87929fabb5bfada093867a6d6053473a2d201407000000000814212e3a47535f697683909caab4aca095887b6f6253493f33271b0b00000000000000000000000000000f1b26313c4754616d7a86929facaea3998c7f7265594f43382c1d130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2633404d596673808c96897c6f6356493c30231609000000000000000000000000000000000000000000000e1925303b44515b606c78808a92979fa3aaacaeacaaa9a8a8a7a8a8a69f99928b7f736d625a50463d2f261b1106000000000000000000000000040d161e24292c39393939393939393933322f2a231c130a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007111921272c2f30393939393939393939382e2d2a251e170e050000000000000000000000000000000000000000000009131b23292e3132393939393939393939392e2d2b261f180f06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e171f252a2d2e2d2a251f19140d080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212d3945505a616b70716f6d66636059535049413d363128221c140b060000000008131e2b38434e5863707d786d6053463a2d20130700000000000000000000000000000000000000000000000000000004101c2834404b556673808d98928c86827f7c7a706c6155493c3023160a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060d12151818161613100b0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007101b242d343a3d3e3a393637434e58626c716e69615e56524c45413a31281d1307000000000000000000000000000000000001070c10151b1f2123282c2d2f3133343535363535353332302e2d2a2522201b160f0b060000000000000000000000000000000000000000000406070f0f0f0f0f0f0f0706040003070c10131416191a1b1c1c1b1a181613120f0b0600000000000000000000000000000000000006131f2b37434e5865717e8b96a0acab9e948b7f726c625a524d47454044464a50575e676d7a849199a3afbdb9ada093867a6d6053473a2d20140700000003101c28343f4a54626e7b88949fabb5ab9d9083776a5f5341382d22170b00000000000000000000000000000a15202d3946525e6875828f9ca9b3ab9d9184776b6054483a2f24180d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010e1b2734414e5a6774818d95887c6f6255493c2f2216090000000000000000000000000000000000000000000008141f29323f44505b666c747e858e92989c9fa2aaa4a5a5a5a9a29f9b9490877f736d635b51483e342b1d140a000000000000000000000000010c1620282f35394646464646464646463f3e3a352e251c12070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040f19232b32383b3d464646464646464646453b3936302920170b02000000000000000000000000000000000000000006101b252d353a3e3f464646464646464646463b3a37312a21180e03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d141a1e2021201e1a140d08020000000000000000000000000000000000000000000000000000000000000000000000000001040607090a0a0b0b0b0b0a0a090807060400000000000000000000000000000000000000000000000000000000000000000000000005111c28333e48505960636462605c54544f46443f382f2a251f17110a020000000000020f1b27323d4855616b706d665c5145382c1f1306000000000000000000000000000000000000000000000000000000000c18232e3c4956636f7c899286807a75726f6d6861594f44392d2014080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000106090b0c0a09070400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009121b22292e31322e2d2a313c46505a6264615e56524c45413a352f281f160c010000000000000000000000000000000000000000040a0f1315181c1f202224262728282929282827252321201e191613100b03000000000000000000000000000000000000000000000000000002020202020202000000000000000406070a0c0e0f0f0f0f0d0c090606030000000000000000000000000000000000000000030f1b27323d4653606d7984919ea6b0a69f92877e716c615e5753514b5053545b60696e79829096a0abb5bab9ada093867a6d6053473a2d20140700000006121f2c3844505c6673808d9aa6b0afa4998c7f7265584e432f261b1106000000000000000000000000000005111d2a36414c5664707d8a97a1adaca095897c6f63554b4135291d1104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020f1b2835424e5b6875818e95887b6e6255483b2f22150800000000000000000000000000000000000000000000020d172028333f4a545b606c717a81868c90929897989899989797928e89837c726d635b51493f362c22190b0200000000000000000000000008131e28323a41455353535353535353534c4b463f372e23180d02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b16212b353d444849535353535353535353524746413b32291d140a00000000000000000000000000000000000000030d18222d373f464a4c535353535353535353524846423c332a1f14090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090e11141414110e09020000000000000000000000000000000000000000000000000000000000000000000000030608080d11131416161718181818171716151312100c0708070501000000000000000000000000000000000000000000000000000000000000000c17222c363e474f5456575653514b48443d37332d261d1a140b0600000000000000000a16202c38444f596163605c544b4034281c1004000000000000000000000000000000000000000000000000000000000713202d394653606c7884857c736d686562615e564f473e33281c1004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000911181d2124252120202a343e4850565854524d46413a353029241d160d0400000000000000000000000000000000000000000000000306070c1013131618191b1b1c1c1c1c1b1a19171414110d080703000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151f2c3844515c66717e8b949ea9afa39992877e756e6963605d555b6062666c717b8390949fa8a7a9afb7ada093867a6d6053473a2d2014070000000713202d3a4653606d7985919eabb8ac9f93877b6e6154483c3121140a000000000000000000000000000000010d1925303a4653606d7985929eabb1a79b8e8174675d5145392c20150a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c2936434f5c6976828f94877b6e6154483b2e2115080000000000000000000000000000000000000000000000050e17222d38424a505a61686e747a7f8385888a8b8c8c8b8a8885817d786f6a625b514940372d241a1007000000000000000000000000010d19242f3a444c525f6060606060606060595751493f352a1e120600000000000000000000000000000000000000000000000000000000000000000000000000000000000003101b27323d474f54566060606060606060605f54524c443b2f261b11060000000000000000000000000000000000010b151f2a343f495157596060606060606060605f55534d453c31261a0e020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507080705020000000000000000000000000000000000000000000000000000000000000000000001040a0f121515191d20212223242425252424232221201f1c18171414110d0805010000000000000000000000000000000000000000000000000000000005101a242c353d4448494b494645403938322b27221b140b090300000000000000000004101c28333e474f555753514b42392e23180c000000000000000000000000000000000000000000000000000000000006121f2b3844505b66737f7e716a615d565654524c443e352c21170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c11151718141318222d363e45494b4746423b363029241e18130c0400000000000000000000000000000000000000000000000000000000040607090b0c0e0f0f0f0f0f0e0d0c0a080705010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404a54626c75828f97a1aaaba399928b817b74706d676a666c6f72787e8590959fa49f9a9da5afada093867a6d6053473a2d201407000005111e2a36424d5664707d8a97a1adb4aa9c8f8276695e52463a2d2014020000000000000000000000000000000008131f2c3845515c6674808d9aa7b1ac9f92857a6d6054473c32261b0f01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404b556a77839094877a6d6154473a2e21140700000000000000000000000000000000000000000000000006111c262f383f4450565e61686d7276797c7d7e7f7f7e7d7b7975706c655f58514940372e251b12080000000000000000000000000004111d2935414c565d6c6c6c6c6c6c6c6c6c66635b51463a2f22160a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202c38444f5960636c6c6c6c6c6c6c6c6c6b615e564c41382d22170d030000000000000000000000000000000007121d27313c46515b62656c6c6c6c6c6c6c6c6c6c615f574d42372b1e1205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070d10151b1f212224292c2d2f30303132313131302f2e2d2c28232421201e1914110d080200000000000000000000000000000000000000000000000000000008121a232b33383c3d3e3c3a38342e2c271f1b17110a020000000000000000000000000b16212c353e44484a4645403930271d12070000000000000000000000000000000000000000000000000000000000030f1c28333f4a54606d7a776c6058524c494746413a322c231a1005000000000000000000000000000000000000000000000000000000000000000000000000000000000306060808080808080808080807070603000000000000000001040607080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080807060400000000000000000000000000000000000000000000000105090b0b0707101b242d34393d3e3b3a36302a251e19130d07010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232e3942505a616e7a859298a2ababa39f938e86817d7a787778797b7f848b9297a0a49a938e939da9ada093867a6d6053473a2d20140700000714202d3a46525e6975828f9ca9b3aea3988b7e7165574d42362a1e12050000000000000000000000000000000004101c2834404b54626f7c8995a0acaea2988b7e7165584e43372b1d1207000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515c677885919a867a6d6053473a2d201407000000000000000000000000000000000000000000000000000a141d262d333e444c52565e6165666d6f7071727272716e6c6563605b534e463f372e251c130900000000000000000000000000000713202c3945525d68767979797979797979726d63574b3e3225180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3b4854606b70797979797979797979786e685e53493f33271f150b010000000000000000000000000000040e18232f39434e58626d72797979797979797979796e695f53463a2d21140700000000000000000306060808080808080808080807060603000000000000000001040607080808080807060400000000000000000001040607080808080705020000000000000000000000000000000000000000000000000000000000000000000000000000000000060b12181d20262b2e2f2f35393a3c3d3d3e3e3e3e3d3d3c3b3a38342e312e2d2a25201d19130d0802000000000000000000000000000000000000000000000000000008111921272c2f30312f2d2c28231d1b160f0b06000000000000000000000000000005101a232c33383c3d3a38342e271e150b000000000000000000000000000000000000000000000000000000000000000b17222d3845525d686d6c655b5046413c3a39353028201a1108000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f121315151515151515151514141312100b060604030608080d11131415151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151312100c070000000000000000000000000000000000000000000000000000000009121b22292d30312e2d2a251f19130d08020000000000000000000000000000000000000000000000000000000000000000000003050607070706040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004070a0a131313131313130c0c0a060200000000000000000000000000000000000000000000000000000007121c27303e46525e686f7d869299a1a9afa59e98928e898685848485888c91969fa2a39f9388818e9aa7ada093867a6d6053473a2d20140700030f1b27333f4953616e7b86929facb2ac9f92867a6d6054473b30251a0e0200000000000000000000000000000000000c18232e394754606a7784919dabb4aa9d9083766a5f5347392f23180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7986939386796c605346392d20130600000000000000000000000000000000000000000000000000020b141c2228323b41464c5254545c606264656566656462605b53535049413c342d251c130a0100000000000000000000000000000714212d3a4754606d7a86868686868686867f7266594c3f3326190c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1623303d495663707c878686868686868686857a6e655b50443c31271d120700000000000000000000000000020c16202934404b555f6a727f868686868686868686867b6e6155483b2e221508000000000000060b0f1213151515151515151515141413120f0b060603020608080d11131415151515141313100c07090703030606080d1113141515151414110e080200000000000000000000000000000000000000000000000000000000000000000000000000020a11171d24292c32373b3c4041454749494a4b4b4b4b4a4a4948464440403d3b3936302d2a251e19130c050000000000000000000000000000000000000000000000000000070f161c2022232423201f1c1812100b03000000000000000000000000000000000008111a21282c2f302d2c28231d150c030000000000000000000000000000000000000000000000000000000000000006111c2935414c565d60605b53493f35302e2d29251e160e080000000000000000000000000000000000000000000000000000000000000000000000000000020a11171c1f202121212121212121212121201f1c171413110f121515191d20212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121201f1c18120b030000000000000000000000000000000000000000000000000000000911171d21242521201e19140d08020000000000000000000000000000000000000000000000000000000000010407070a060b0f121314141313100c070c0906060300000000000000000000000000000000000000000000000000000000000000000000000000000000050b1014161720202020202020191816120d070000000000000000000000000000000000000000000000000000000b151e2a36414c56606b707d8791969fa6acaaa29f9a9a939191919298999ea0a8a199928b7f7d8996a3ada093867a6d6053473a2d2014070005121f2b3744505b65727f8c99a3a5a5a99b8e8275685d524539291f140900000000000000000000000000000000000007121d2b37434e5866727f8c99a3a5a59f95887c6f62554b4034291c1004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222f3b4855626e7b889a928578655b5044372b1f12050000000000000000000000000000000000000000000000000000020a1117202930363a4146474a5053555758595958575553504946443f382f2a221b130a010000000000000000000000000000000714212d3a4754606d7a879393939393938c7f7266594c3f3326190c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3b4854606b73808c949393939393978f82776c60584e43392f24180f0500000000000000000000000008131e28323a45515c676f7c8692939393939393938b7e71695f53463a2d21140700000000020a11171c1f202121212121212121212121201f1c171312100f121415191d20212121212121201f1c181615130f0f121317191d202121212121201e19140d050000000000000000000000000000000000000000000000000000000000000000000000040b141b22272f35393c4347484d4c5154555657575858575756555453514a4d4a4746413b3936302a251e170e060000000000000000000000000000000000000000000000000000050b1013161618161313100c070000000000000000000000000000000000000000000810161c202324201f1c18120b030000000000000000000000000000000000000000000000000000000000000000000d1924303a444c525453504941382d2421201d19130c040000000000000000000000000000000000000000000000000000000000000000000000000000020b141c22282b2d2e2e2e2e2e2e2e2e2e2e2e2d2b282320201d1b1f212224292c2d2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2d2c28231c150c03000000000000000000000000000000000000000000000000000000060c111517181414110e0902000000000000000000000000000000000000000000000000000000000004080d111314171a171b1f202021201f1c181b191613120f0b06000000000000000000000000000000000000000000000000000000000000000000000000000810171c2023242d2d2d2d2d2d2d2625221e18120a0100000000000000000000000000000000000000000000000000030c1925303b444f59606b707d848f949da0a8acacaca49f9e9d9e9fa3aaaba39f9691877e727d8996a3a8a093867a6d6053473a2d201407000613202d394653606c7884919898989898978a7d7064564c413529170d02000000000000000000000000000000000000000f1b27323d4754616e7b869298989898988d8074675c5145382c1f1306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c1524313e4b5764717e8a979185786b5e493f33271b0f0300000000000000000000000000000000000000000000000000000000060e171e252a3035393a3f4446494a4b4c4c4b4a4846443f3937332d261d18100901000000000000000000000000000000000714212d3a4754606d7a87939f9f9f9f998c7f7266594c3f3326190c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202c38444f59606c78828f97a19f9fa99e948b7f726a5f554b40352921170b0200000000000000000000060f1925303a444f59606d79839098a39f9f9fa1968e81756c62574d42372b1e1205000000020b141c22282b2d2e2e2e2e2e2e2e2e2e2e2d2d2b2822201f1c1a1f212224292c2d2e2e2e2e2e2d2c282323221f1b1c1f202424292c2d2e2e2e2e2d2a251e170e05000000000000000000000000000000000000000000000000000000000000000000040d161d262d33394045474e535559555d606263636465646464636261605c545a5754524c4746413a3630292017110a0200000000000000000000000000000000000000000000000000000407090a0b09070604000000000000000000000000000000000000000000000000050b101416171313100c07000000000000000000000000000000000000000000000000000000000000000000000008131e28323a41454746443f382f261b1413110d08020000000000000000000000000000000000000000000000000000000000000000000000000000000a141d262d3338393b3b3b3b3b3b3b3b3b3b3a3a38342e2d2c29262b2e2f2f35393a3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3a38342e271e150b000000000000000000000000000000000000000000000000000000000005080a0b080705020000000000000000000000000000000000000000000000000000000000070c1013191d2021242722272b2d2d2d2d2c2823282622201f1c17110f0a0300000000000000000000000000000000000000000000000000000000000000000008111a21282c2f303939393939393933322f2a231c130a000000000000000000000000000000000000000000000000000008141e29323d474f59606b6f7a828a91959b9fa2aaa6a7a8a8a8a6a8a19e99928d847d71707d89969b9b9b93867a6d6053473a2d201407000a1623303d495663707c898b8b8b8b8b8b8b85796d6053463a2f24190d01000000000000000000000000000000000000000a15202d3a46525e6976828b8b8b8b8b8b8b857a6d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b151e2b37424e576774808d9a9184776a5e51442d22170b000000000000000000000000000000000000000000000000000000000000050d14191e25292d2e34383a3c3d3e3f3f3f3e3b3937332d2b27221b140b060000000000000000000000000000000000000714212d3a4754606d7a8793a0acaca5998c7f7266594c3f3326190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000003101b27323d44505b666e7a85929aa4afb0a69f92867c6f675d51453e33291d140a000000000000000000020c18212935414c56606b74808d95a0aab4afa49991847a6d605a50453c31261a0e020000000a141d262d3338393b3b3b3b3b3b3b3b3b3b3a3938332d2d2c28262b2e2f2f35393a3b3b3b3b3b3a38342e2f2e2c27282b2d312f35393a3b3b3b3b3936302920170d0200000000000000000000000000000000000000000000000000000000000000040d161f282f383f444b5153585f626669676d6f70707171717170706f6e6d66696764615e5654524c46413a3228231c140c020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000407090a07060400000000000000000000000000000000000000000000000000000000000000000000000000020c1620283035393a3937332d261d140a0705010000000000000000000000000000000000000000000000000000000000000000000000000000000006111c262f383f4446484848484848484848474746443f3f3a393532373b3c4041454748484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484644403930271c1207000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b12181c1f24292c2d30332d3337393a3a3a38342e35322f2d2b28221c1a150f0a0300000000000000000000000000000000000000000000000000000000000005101a232c33383c3d464646464646463f3e3a352e251c120700000000000000000000000000000000000000000000000000020d17202b343d474f5960686e767d84898e9298989a9a9b9c9b9a9896918d86807a6f6b707d898e8e8e8e8e867a6d6053473a2d201407000916232f3c4956626f7d7f7f7f7f7f7f7f7f7d70665c514538281e1308000000000000000000000000000000000000000005111e2a36424d56626f7c7f7f7f7f7f7f7f7f7b6e6154473b2e21140800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d27303947535f6a7783909d9083766a5d5043372a1d060000000000000000000000000000000000000000000000000000000000000002080d13191d2023282c2d2f3132323332312f2d2b27221f1b17110a02000000000000000000000000000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b162128333f4a545e68707d88939fa6b0aea3999183796d605a50453b2f261c110600000000000000000a141e2a333b46525e68707d88939fa7b1b1a79f93877d6f685d52483e332a1f140900000006111c262f383f4446484848484848484848474746443f3e3a383431373a3b404145474848484847464540403c3b38323338393d414145474848484746413b32291e1408000000000000000000000000000000000000000000000000000000000000010c161f28313a414950555d60666a6f7376787a7c7c7d7e7e7e7e7d7d7c7b79777673706e6865615e56524c443e342e261e140b020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e161e24292c2d2d2b27221b140b02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d38424a5053545454545454545454545453504a4c4745403c4347484d4c5154545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545453514a42392e23180c00000000000000000206080813131313131313100f0d0a0500000000000000000000000000000000000000000000000000000000000000000000000000020a11171d23282c2f35393a3d40423f4446474746454043423f3c3938332d2b26201a150b0600000000000000000000000000000000000000000000000000000000000b17212c353e44484a535353535353534c4b463f372e23180d0200000000000000000000000000000000000000000000000000050e19222c353d464f565e616b70787d8185888b8d8e8f8f8e8d8b8884807b746d68626f7c81828282828281796d6053463a2d201307000915222e3b4854606a6f7272727272727272706b61544b403428160c010000000000000000000000000000000000000000020e1925303b47535f6a6f72727272727272726e695e52463a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111b262f39424d57626e7b88959c8f8275695c4f4236291c0f03000000000000000000000000000000000000000000000000000000000000000002080d1113171c1f202224252626252422201f1b17120f0b060000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b17222d38424d56606b73808d949fa9b3aba0958e81746c61574d42382d22170d0400000000000006111c26303b45505a616d7a84919aa4afb4aa9f958c80736b60564c41362d21180e030000000b17222d38424a5053545454545454545454545453504a4b46443f3c4347484c4c5154545454545453514b4d4948433d3f44464a4e4c525454545454524c443b3025190e02000000000000000000000000000000000000000000000000000000000007131d28313a434c535b60676d72777c8082848788898a8a8b8b8a8a898887868482807d7a76726d68615e5650443f3830261d140a000000000000000000000000000306060808080808080808080808080808080808080808080808080808080606030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c13191d2021201f1b17110a0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1c28333f4a545b606161616161616161616161605c545853514b484e535559555d606161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161605c544a4034281c1004000000000003090e121415202020202020201d1c1916100a0300000000000000000000000000000000000000000000000000000000000000000000050b141b22272e34383a4145474a4d4f495053535453514b504e4c4946443f3837312b262017110a02000000000000000000000000000000000000000000000000000004101c28333e474f555760606060606060595751493f352a1e1204000000000000000000000000000000000000000000000000000007101a232c343d444c525961666c7075797c7e8081828281807e7b78736e69605d5f6a6f757575757575756d665c5144382c1f12060007131f2c38434e58606265656565656565656361594f42392e2318040000000000000000000000000000000000000000000009141f2b37434e585f626565656565656565615e564d42362a1e1105000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d38414a545f6973808d9a9a8e8174675b4e4134281b0e01000000000000000000000000000000000000000000000000000000000000000000000105060c101213161718191918171513120f0b060300000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c262f3b444f59606d78829097a2adb1a89d928a7e70695e544a3f33281f160c0100000000040d17232e38424d57626c75818f96a1acb6aea2989083786d60594f443a2f241b0f06000000030f1c28333f4a545b606161616161616161616160605b545753504a474e535559555d606161616161605c555a56544e474a5053575b565d60616161615e564c41362a1e110500000000000000000000000000000000000000000000000000000000010d18242f3a434c555d656c72797f84888c8f9196959696979897979796959992918f8d8a87837f7a736d68615a504a42382f261c110600000000000000000000060b0f121315151515151515151515151515151515151515151515151515151513120f0b060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d11131413120f0b0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505b666c6e6e6e6e6e6e6e6e6e6e6d6d666965605d5554585f62666a676d6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6d665c5144382c1f120600000000060e151a1e21222d2d2d2d2d2d2d292926211c150d040000000000000000000000000000000000000000000000000000000000000000050e171d262d33394045464c5254575a5c535b606060605c555d5b595553504a47433c373128221c140b03000000000000000000000000000000000000000000000000000714202c38444f5961636c6c6c6c6c6c6c66635b51463a2f21160a00000000000000000000000000000000000000000000000000000008111a222b323b41464f545b6063666d6f71737475757573716f6a66615e5752585f6268686868686868605c544a4034281c100400030f1b27323d464e5456585858585858585857554f473e30271d120700000000000000000000000000000000000000000000020f1b26323c464e5355585858585858585854524d443b3025190e02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b27333f49535c666e7b86929f998c7f7266594c3f3326190c000000000000000000000000000000000000000000000000000000000000000000000000000000030607090a0b0c0c0c0b0806050300000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d29323d44505c666e7b85929ea4aeafa59f92857b6e665b50443d31281e1308000000010c161f28343f4a545f69717e8b939ea9b2afa59f92867b6e665c50473d32281e12090000000006121f2b3844505b666c6e6e6e6e6e6e6e6e6e6e6d6c666864605c5454585f62666a676d6e6e6e6e6e6d676a6762605853545b6064676b686d6e6e6e6e685e5246392d2014070000000000000000000000000000000000000000000000000000000004111d2935404b555d676d777f858c9196999c9ea1a8a3a3a4a4a4a4a3a3aba39f9e9c9a9a93908b86807a716c605c544a42382d22170b0300000000000000020a11171c1f20212121212121212121212121212121212121212121212121212121201f1c17110a02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000104070706050300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202d394653606c787b7b7b7b7b7b7b7b7b7a7a797876726d676260626a6f7376797a7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b786d6053463a2d201307000000060f1820262b2e2f393939393939393635322d261f160d03000000000000000000000000000000000000000000000000000000000000050e1720292f383f444b5153565d606366686a656c6d6d6d676b6a686562605b54534e47433c332d261d150d030000000000000000000000000000000000000000000000000a16232f3c4855616b7079797979797979726d63574b3d32271b0f01000000000000000000000000000000000000000000000000000000081019202930363e424a5053545c60626567676869686765625f5854534d454e53555b5b5b5b5b5b5b53514a42392e23180c0000000a16212b343d4348494c4c4c4c4c4c4c4c4a48443e352c1e150b0000000000000000000000000000000000000000000000000a15202a343c4347494c4c4c4c4c4c4c4c4746423b32291f14090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121f2b3744505b656d78828f99a3978a7e7164574b3e3124180b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b172028343f4a545e69707d8a929da7b1ada2978f82786c60584e433a2f24190f06000007131d28313a44505c666e7b86929fa5afb2a89e938b7e71695f544a3f352b20160c00000000000613202d394653606c787b7b7b7b7b7b7b7b7b7a7a797875716d666160626a6e7376797a7b7b7b7b7a797876736f6a625f61666c707477797a7b7b7b7a6e6154473b2e211408000000000000000000000000000000000000000000000000000000040e19222c3945515d676d79828b91979ea0a8a9abadb2afb0afafb0b0b0b0b5afacaaa9aca49f9c98928d857e746d665c544a3f332820150a000000000000020b141c22282b2d2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2d2b28221c140b020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a87878787878787878787878685827f79726d6a6f767c8083858787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787877b6e6255483b2f2215080000030e18212a31373a3b4646464646464643423e3831281f150a0000000000000000000000000000000000000000000000000000000000050e172029323a414950545c6064686d7073757778797a7a7979787675726f6c66625f58534e443f382f271f150d030000000000000000000000000000000000000000000005111d2a36414c5663707d868686868686867f7266584e43382c1d120700000000000000000000000000000000000000000000000000000000070e171e252a2f383f44464a505355585a5b5c5c5b5a5855534e4846423c4347484f4f4f4f4f4f4f4644403930271c1207000000040f19222b32383b3c3f3f3f3f3f3f3f3f3d3c38332c231a0c03000000000000000000000000000000000000000000000000040e18222a32373b3c3f3f3f3f3f3f3f3f3b3a36302920170d02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202d394653606c78818e949fa996897c6f6356493c30231609000000000000000000000000000000000000000003060608080808080808080707060400000000000000000000000000000000000104060708080808080706040100000000000000000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e17232e38424d57616b74808d959fa9b3a99f948c7f736a60554c41352921180c03050e18242f3a434e58606d78839098a2aeb5aba1968e81756c61574d42382e23190d0400000000000714212e3a4754616d7a87878787878787878787878684827e78716c6a6f767b7f8385878787878787868583807c766f6a6c70787d818486878787878276695d5043362a1d100000000000000000000000000000000000000000000000000000000a15202d3944505a606d79838f949ea1a9acafacaaa8a5a4a3a3a2a3a3a4a5a7a9abacb2b6afacaaa29f98928a81786d665b50443c31261a0f0300000000000a141d262d3338393b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3938332d261d140a0000000000000000000104070713131313131313131313131313131313131313131313131313131211100e0d0a08070502000000000000000000000000000000000000000000000000000000000000000000000407090a131313131313130f0e0c09040000000000000000000000000714212e3a4754616d7a879494949494949494949a93918f8b857f75757c82888c90929894949494949494949494949494949494949494949494949494949494949494949494949494949494949494949494949494949494887b6e6255483b2f22150800000915202a333c42474853535353535353504e49423a31261c1005000000000000000000000000000000000000000000000000000000020b172029323b444c535b60666d71767a7d8082848586868786868583817f7c79736f6a625f58504a423931271f150b010000000000000000000000000000000000000000000713202d3946525e6875828f93939393939184776a605448392f24180c0000000000000000000000000000000000000000000000000000000000050d14191d262d3338393f4446494b4d4e4f4f4e4d4b4847433c3a3631373a3c424242424242423a38342e271e150b000000000007101921272c2e2f3232323232323232302f2c28211a1108000000000000000000000000000000000000000000000000000007101820262b2e2f32323232323232322e2d2a251f170e0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a84919ea5a197877a6d6154473a2e211407000000000000000000000000000000000000060b0f12131515151515151514141312100c070706030000000000000000030608070d10131414151515151413110d08010000000000000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c26303b454f59606d78839097a2adb0a69f92877c6f675d51453e33291e150a0b17202935404b55606a737f8c959faab4afa39991847a6d605a50453b30261c11070000000000000714212e3a4754616d7a879494949494949494949993918f8a847e75757c82888c90929894949494949792908d89837c72747d848a8e9192999494908376695d5043362a1d100000000000000000000000000000000000000000000000000000030f1b27323c4955616c75818e959ea6adababa49f9d9b9997979696969797989a9c9ea1a8a7abadb2aeaaa29f938e81786c60584e43372b2015090000000006111c262f383f444648484848484848484848484848484848484848484848484848484846443f382f261c110600000000000001080d111314202020202020202020202020202020202020202020202020201f1f1e1d1b19171514120e0906040100000000000000000000000000000000000000000000000000000000040b10131616202020202020201c1b19150f0902000000000000000000000714212e3a4754616d7a8794a0a1a1a1a1a1a1a1a49f9e9c97928b8281898f94999d9fa3aaa1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a195887b6e6255483b2f22150800020e1a26313c454e5355606060606060605c5a544c42382d21160a0000000000000000000000000000000000000000000000000000000a141d29333b444d565e656c71797e82868a8d8f9092939993999292908e8c8885807c756e6a605b544b433931271d12070000000000000000000000000000000000000000000714212e3a4754616d7a86929f9f9f9fa096897c6f62554b4035291d1004000000000000000000000000000000000000000000000000000000000002080b141c22282b2e34383a3c3e4041424242403e3c3a37312d2a262b2e2f353535353535352d2c28231c150c03000000000000070f161b1f222325252525252525252423201c16100800000000000000000000000000000000000000000000000000000000070e151b1f2122252525252525252521201e19140d0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515d67707d89939e9e928578685e5246392d20130700000000000000000000000000000000020a11171c1f20212121212121212121201f1c18171312100c0600000002050a0f131516181d2020212121212121201d19130c0400000000000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151e29333e45515c666e7b85929fa4aeafa39991847a6d605a50453b30261c11141d29323b45515d676f7c87929fa7b1b0a69f92877d6f685d52483e33291e150a000000000000000714212e3a4754616d7a8794a0a1a1a1a1a1a1a1a49f9e9b96918a8281878f94999d9fa2aaa1a1a1a9a29f9d9a9490877f818a91959a9e9fa3ab9c908376695d5043362a1d10000000000000000000000000000000000000000000000000000006131f2b37434e5864707d8a939ea7aca79f9d9993908e8c8a8a8989898a8a8c8d8f9196979a9ea1a8abadaea59d938c7f736a5f53473c31261a0e020000000b17222d38424a505354545454545454545454545454545454545454545454545454545453504a42382d22170b0000000000040c13191d202d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c2c2b2a2928262421211e1a1413100d070100000000000000000000000000000000000000000000000000070f161b2022232d2d2d2d2d2d2d282825201b140c030000000000000000000714212e3a4754616d7a8794a0adaeaeaeaeaeb6afacaba9a29f948f8e939c9fa6a9acaeb4aeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea195887b6e6255483b2f2215080006121e2b37424e575f6c6c6c6c6c6c6c6c69665e54493e3226190d010000000000000000000000000000000000000000000000000006111b262f3b454d565e686d777e848a8f9299999b9d9e9fa4a0a39f9e9d9b9897918d87827c726c665d554b43392f24180d030000000000000000000000000000000000000006131f2b37434e5865727f8c99a3aeacb2a89a8e8174675d5145392c1f140900000000000000000000000000000000000000000000000000000000000000020a11171c1f23282c2d2f32343435363534322f2e2b26211e1b1f212228282828282828201f1c18120b030000000000000000040a0f1315161919191919191919171614100b05000000000000000000000000000000000000000000000000000000000000040a0f13151619191919191919191414110e09020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2935404b55616b75818e979c8f837669564c41362a1d1105000000000000000000000000000000020b141c22282b2d2e2e2e2e2e2e2e2e2e2d2c282324201f1c17110b06090e11151b1f222324292c2d2e2e2e2e2e2d2c29241e160d04000000000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c17212834404b545f69717e8a929da7b1aba0968e81756c61574d42382e23171b262f3b44505a606d79849199a3afb3aa9f948c80736b60564c41362d21180c03000000000000000714212e3a4754616d7a8794a0adaeaeaeaeaeb5afacaba8a19e938f8e939a9ea6a9acaeb4aeaeaeb3adaba9a69f99928c8e939da0a8aaacafa99c908376695d5043362a1d1000000000000000000000000000000000000000000000000000000815222e3b4754606a7783909da5a8a09e95908b8684817f7e7d7c7c7d7d7e7f818284878a8d91969a9fa2a9ada59f92867c6e62574e42372b1e12060000030f1c28333f4a545b60616161616161616161616161616161616161616161616161616161605b544a3f33281c0f03000000040d161e24292c3939393939393939393939393939393939393939393939393939393837363533312e2d2a2520201d18120f0a040000000000000000000000000000000000000000000007111921272c2f30393939393939393534312c251e150c0200000000000000000714212e3a4754616d7a8794a0a6a6a6a6a6a6a6a7a8aaacada69e9c9b9ea5abb0b4aeaca9a7a6a7a8aaacaeb4b6b9bbc0bcb4aeaba7a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a7a8aaacaeb4b7bbbabaaea195887b6e6255483b2f221508000814212e3a47535f6a76797979797979797670665a4e4235291c0f03000000000000000000000000000000000000000000000000000b17222d38414d575e686e7a828b91969c9fa3aba8aaa9a7a6a5a6a6a8a9a8a9a19e9a938f877f786d675d554b4035291f150b010000000000000000000000000000000000000815222e3b4754606a7783909dabb5bfb8ab9f9285796d6053473b31251a0e000000000000000000000000000000000000000000000000000000000000000000060b0f12171c1f2022252728292928272522211f1b15120f1215151c1c1c1c1c1c1c1312100c07000000000000000000000000030709090c0c0c0c0c0c0c0c0a09070400000000000000000000000000000000000000000000000000000000000000000000030608090c0c0c0c0c0c0c0c08070502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18242f39434f59616d7a85929a8d8073675a4d403025190d010000000000000000000000000000000a141d262d3338393b3b3b3b3b3b3b3b3a3a38342e302d2c28231c1711141a1e20272b2e2f2f35393a3b3b3b3b3b3a39352f281f160c010000000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050f18232e39424d57616c74808d95a0aab2a89e938a7e71695f544a3f342820222d38414d56616c74818e96a0abb5aea2989083786d60594f433a2f241b0f0600000000000000000714212e3a4754616d7a8794a0a6a6a6a6a6a6a6a7a8aaacaca59e9b9b9fa4acb0aeaca9a7a6a6a6a6a7a8abadaba39f989b9ea5acacaaa8a9a99c908376695d5043362a1d1000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8895a0a69f96918a837f7b7775727170706f707071727476787b7e8084898d92979ea1a9a3998f82766a5f53473a2e211408000006121f2b3844505b666c6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6c665b5044382b1f12060000010c1620282f353946464646464646464646464646464646464646464646464646464645444341403d3b3a36312d2c29241d1b150e090300000000000000000000000000000000000000040f19232b32383b3d4646464646464642413d3730271e140900000000000000000714212e3a4754616d7a8794999999999999999a9a9b9ea0a8abaaa8a8aaafb4aeaaa39f9c9a999a9b9d9fa3aba9acafb5b4aaa29f9a99999999999999999999999999999999999999999a9a9b9d9fa3aaaab0b8bbaea195887b6e6255483b2f221508000815222f3b4855626e7b868686868686868276695c504336291d1003000000000000000000000000000000000000000000000000030f1b27333f49535e696e7a838f949ea1a8acaca9a29f9c9a9999999a9b9d9fa3abaca49f99928c82796d675d51453e31271d1207000000000000000000000000000000000004101c2834404b55626f7c8895a0acb9b7b9aea2988a7e7164574d42362a1b11060000000000000000000000000000000000000000000000000000000000000000000003060c10121316181a1b1c1c1b1a181515120f0a05030608090f0f0f0f0f0f0f07060400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d27313d46525e68717e8b948a7d7164574a3e3124170800000000000000000000000000000006111c262f383f4446484848484848484747464440413d3a38342e27221b1f252a2d32373b3c4040454747484848484745413a31281e13080000000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d27303b45505a606d79839098a2aeafa59f92867b6e665c50443d322827333f49535e68707e8a939da8b2afa59f92857b6e665c50473d31281e12090000000000000000000714212e3a4754616d7a8794999999999999999a9a9b9ea0a8abaaa8a8acafafaba39f9c9a999999999a9c9ea1a9acaca5a7a9aba49f9d9b9d9f9c908376695d5043362a1d1000000000000000000000000000000000000000000000000000000d192633404c5966737f8c99a59e948f847e77726e69686664646363636464656769696e7174787c80858b91969fa39f94887b6e6255483b2f24190d01000613202d394653606c787b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b786c605346392d201306000008131e28323a41455353535353535353535353535353535353535353535353535353525251504e4c4a4846423e3a39352f2b26201a140b060000000000000000000000000000000000000b16212b353d444849535353535353534f4d48423930251b0f04000000000000000714212e3a4754616d7a878c8c8c8c8c8c8c8c8d8d8f91969c9fa6b0b5b6b1aaa29f98928f8d8d8d8f909299999d9fa4ababa298928d8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8d8d8e8f9092989c9ea6aeb6aea195887b6e6255483b2f221508000815222f3b4855626e7b8893939393938f8376695c504336291d100300000000000000000000000000000000000000000000000005121f2b3744505b656e7b8491959fa6adaaa39f9b97928f8d8d8c8c8d8e9092999da0a7aba39f948f82796d605a5043392f24180c000000000000000000000000000000000006131f2c3845515c6774818d9aa7b1acaaacb2aa9c8f8276695e5346382d22170b00000000000000000000000000000000000000000000000000000000000000000000000000030607090b0d0e0f0f0f0d0b0908060300000000000002020202020202000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b151f2a36414c56626c76828f877b6e6154473b2e2114080000000000000000000000000000000b17222d38424a505354545454545454545453514a4d4a46443f38332d262a30363a3d4347494c4b5153545454545454524c433a2f24190d0100000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e29333e45515c676e7b86929fa5afaea2989083786d60594f443a30303944505b656e7a85929ea5afb2a89e938a7e71695e544a3f342b1f160c000000000000000000000714212e3a4754616d7a878c8c8c8c8c8c8c8c8d8d8f91969c9fa6b0b4b6afa59d99928f8d8c8c8c8d8d8f92979ea1a8b2afa59e9993908f90939a908376695d5043362a1d1000000000000000000000000000000000000000000000000000000f1c2835424f5b6875828e9b9e938f8279716c65615e565957575656565757595a575e6164656c6f74797f848d9299a29a8d807367564c4135291d1104000714212e3a4754616d7a8787878787878787878787878787878787878787878787878787877a6d6154473a2e21140700010d19242f3a444c525f6060606060606060606060606060606060606060606060605f5f5e5d5c5b595754534d4b4745403937312a261f17110a0200000000000000000000000000000004101b27323d474f5456606060606060605b59534b42372c201509000000000000000714202d3a4753606d7980808080808080808080818284888f949fa6b0b1a7a098928c8682818081828486898c9093999da09f92858080808080808080808080808080808080808080808081828386898f949da4aeaea195887b6e6255483b2f221508000815222f3b4855626e7b88959f9f9f9c8f8376695c504336291d1003000000000000000000000000000000000000000000000005111e2a36424d56606c77828f96a0a8b0a79f98928e89858281807f7f808184868b91959fa4aca69f948e81746c61554b4035291d1004000000000000000000000000000000000713202d3a4653606d7985929faba8a09ea0a8ac9f93877b6e6153493f33271b0f030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001050707110b0706040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d1925303a44505a616e7b868477695e52463a2d2014070000000000000000000000000000030f1c28333f4a545b60616161616161616161605c545a5753504a443f382f363b4246474e545659555d606161616161605d564c4135291d110400000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c040404040404040404030302000000000000000000000000000000000000000000000000000000000000000000000000000000030c18212934404b555f69717e8a939da7b1aa9f958d80736b60564c413539424e58606c77828f97a1adb5aba0968e81746c61574d42382e22190d04000000000000000000000714202d3a4753606d7980808080808080808080818284888f949fa6b0aca49f928e86828080808080808285899196a1a9a59e938f878382838893908376695d5043362a1d100000000000000000000000000000000000000000000000000000111d2a3744505d6a7783909d978f81786d67615a54524d4c4b4a49494a4a4b4c4e4d5254535b6063676d7279808792979e918477685d5245392c201307000714212e3a4754616d7a8794949494949494949494949494949494949494949494949494877a6d6154473a2e2114070004111d2935414c565d6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b6a69686664615e575753514b47433c363127221b140b0400000000000000000000000000000713202c38444f5960636c6c6c6c6c6c6c68655d53483d3125190c0000000000000006131f2c3945515d676d737373737373737373737475777c828f949faba8a09591867f7a767473747577797c7f83868b90959b9892857f7973737373737373737373737373737373737373747577797d828d929da8aea195887b6e6255483b2f221508000815222f3b4855626e7b8895a1aca99c8f8376695c504336291d100300000000000000000000000000000000000000000000000714202d3a46525e69727f8b949fa8b0a69e959086817c7976747372737375777a7e838c939aa4afa69e938a7e71675d5145392c1f140800000000000000000000000000000005121e2a36424d5764717e8a97a2aca0969196a0aca49a8c7f73655b5044372b1f1308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d1113141e181413100c070100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e29323f47535f69737f807367564d42362a1e1105000000000000000000000000000006121f2b3844505b666c6e6e6e6e6e6e6e6e6d6d66696763605c545049413b42464d52545860626669676d6e6e6e6e6e6d685d5245392c20130600000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f33261911111111111111111110100f0e0d0c0a08070502000000000000000000000000000000000000000000000000000000000000000000060f18232f39434d57616c74818e95a0aab1a79f93877d70685d52463f404b545f6a727f8b949fa9b3afa3999184796d605a50453b30261c1007000000000000000000000006131f2c3945515d676d737373737373737373737475777c828f949faba49a938b817a7674737373737475787d849197a29e938e817b7775767d87908376695d5043362a1d100000000000000000000000000000000000000000000000000000111e2b3844515e6b7784919e92857a6d665d55504746423f3e3d3d3c3d3d3e3f41424647495053555d60676d737d85929993867a6d6054473a2d211407000714212e3a4754616d7a8794a0a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a094877a6d6154473a2e211407000713202c3945525d687679797979797979797979797979797979797979797979797979797877767473706e696864605d55534e46423b332d261d160d05000000000000000000000000000916222f3b4854606b7079797979797979756f65594d4134281b0e0000000000000004101d2935404b555d606666666666666666666767686a6f78828f9caaa09691837b726d6867666768676d6f72767a7f83888e9297928c857f79726d6766666666666666666666666666676768666d7075808d9aa6aea195887b6e6255483b2f221508000815222f3b4855626e7b8895a1aea99c8f8376695c504336291d10030000000000000000000000000000000000000000000004101c2834404b55616e7b86929fa6b0a79e938f837b746f6c65676666666768686d72798088939fa5afa59e9184796d6053473b3025190e0200000000000000000000000000000714202d3a46525e6976828f9ca9a89e9184919ea7ac9e9184786c6053463a2f24190d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050c13191d20212a25201f1d18120e090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d17202b37424d57606d787b6e6255483b3025190e0200000000000000000000000000000613202d394653606c797b7b7b7b7b7b7b7a7a79787674706d66605b534c454d53575e61666a6f7376787a7a7b7b7b7b7a6d6054473a2d21140700000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f33261e1e1e1e1e1e1e1e1e1d1d1d1c1b1a19171414110e0907050100000000000000000000000000000000000000000000000000000000000007121d27313c45505a606d79839198a2aeafa49991847a6d615b514645515c666f7c86929fa6b0b0a69f92877c6f675d51483e33291e140a00000000000000000000000004101d2935404b555d606666666666666666666767686a6f78828f9ca69f93887e746d68676666666667656c707b85929f968e81776e69686b75828f8376695d5043362a1d100000000000000000000000000000000000000000000000000000111e2b3844515e6b778491998b7e71685e544b433e3a3630313130303031313230363a3b3f44464b51555d606b707d86929a897d7063564a3d3023170a000714212e3a4754616d7a8794a0adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeada094877a6d6154473a2e211407000714212d3a4754606d7a8686868686868686868686868686868686868686868686868685858483817f7d7b7874716d67625f58534d443f382f281f170e050000000000000000000000000a1623303d495663707c868686868686868175685b4f4235281c0f00000000000000000c18242f39434b51535959595959595959595a5a585f666f7c8996a29891847a6e69605d565a5a555c606366686e72777c81868e9297928c857f79726d67605d56595959595959595a5a5b545c60636d7a8794a0ada195887b6e6255483b2f221508000815222f3b4855626e7b8895a1aea99c8f8376695c504336291d10030000000000000000000000000000000000000000000006131f2c3845515c6773808c98a2aeab9f958f81786e6a62605b535a59595a565d60666d737f8b939eabada1968b7e7265564d41362a1e110500000000000000000000000000000815212e3b4854616e7b87939faca0968a7d8a95a0aca196897d7063554c4135291d11040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e161e252a2d2e37322d2c29241d1a14100b04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e1a26313c44515c666d6e6a5f53473a2e1f14090000000000000000000000000000000714212e3a4754616d7a878787878787878787868583807d79716c655e5651575f61696e73787c7f82858687878787877f7266594c3f3326190c00000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f332a2a2a2a2a2a2a2a2a2a2a2a29292827252321201e1a1413110d080200000000000000000000000000000000000000000000000000000000010b151f2a333e45515d676f7c86929fa5afaba1968f82756d62584e4f59606d79839098a3aeb3a99f948c7f736a60554b41362c21170c02000000000000000000000000000c18242f39434b51535959595959595959595a5a585f666f7c89969f948c7f726c615e565959595a535b606973808d999184796d655e596774818d8376695d5043362a1d100000000000000000000000000000000000000000000000000000111e2a3744515d6a77849092867a6d60564c423a312d2a252424232323242426252a2d2d33373940454b5159606b73808d988b7e7265584b3f3225180c000714212e3a4754616d7a8794a0a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6aaa094877a6d6154473a2e211407000714212d3a4754606d7a879393939393939393939393939393939393939393939a93929291908f8e8c8a8785817e7a746f6a615f575049413a312920170d0400000000000000000000000a1623303d495663707c8993939393938e8275685b4f4235281c0f000000000000000007121d2731394045474d4d4d4d4d4d4d4d4d4d4e4e54606d7a86999f92867b6e685f57524c4d4e4b515356565e61656a6f757b81878f9497928c857f79726d68625f585553504a4d4d4e4d52545c616e7a8794a1b5ab94877b6e6154483b2e211508000815222f3b4855626e7b8895a1aea99c8f8376695c504336291d1003000000000000000000000000000000000000000000000713202d3a4653606d7985929eaaaea3999083786d665f575350494d4c4c4d4c52545c606d75818e99a4afa89d908377685e5246392d201407000000000000000000000000000713202c38444f5966737f8c99a4aa9d91847784919daaa89b8e8174675d5145392c20150900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c1620283036393a443e3a38352f2a251f1c16100c07010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009151f2834404a545c60625f574e42372b1e0d020000000000000000000000000000000714212e3a4754616d7a87949494949494949a9392908d8a847e776d685e5d60696e747b8084898c8f9297949494948c7f7266594c3f3326190c00000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f373737373737373737373737373636353332302e2d2a2521201d19130f0a04000000000000000000000000000000000000000000000000000000030d18212935404b555f6a717e8b939ea8b2a89e938b7e726a5f5456606b73808d95a0aab4ada2979082786d60584e433a2f241a0f05000000000000000000000000000007121d2731394045474d4d4d4d4d4d4d4d4d4d4e4e54606d7a8699999082786c605a524c4d4d4d4d49505764707d8a988b7e72675d535c6675828f8376695c504336291d100000000000000000000000000000000000000000000000000000101d293643505c6976838f8f8276685d52443a3028201e1918171616171718191a1e2022272b2f353940454f59626f7b88958c7f7266594c3f3326190c000714212e3a4754616d7a87949999999999999999999999999999999999999999999da094877a6d6154473a2e211407000714212d3a4754606d7a87939f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa49f9f9f9e9d9c9b999797918e8a85817c756e69605b534c433b322920160c03000000000000000000000a1623303d495663707c89969f9f9f9b8e8275685b4f4235281c0f0000000000000000010b151f272f35393a404040404040404040404145515d67798692958b7e71695f564d45414041404546494c5254585f62696e747c828b929897928c857f7a746f6a6662605c545a5a5a565e61666d73808c99a6afa399877a6d6054473a2d211407000815222f3b4855626e7b8895a1aea99c8f8376695c504336291d1003000000000000000000000000000000000000000000000b1824313e4b5764717e8a97a1adac9f92877c6f665c544e46443f403f404041454a515b616e7b87939facaca095877a6e6154473b2e211408000000000000000000000000000916222f3b4854606b7784919eaba99a8d8073808d99a8ac9f92867a6d6054473c31261a0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28323a414647514b4745403936312c271f1d18120e09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c18232e39424a515355534e453c31261a0e000000000000000000000000000000000714212e3a4754616d7a8794a0a1a1a1a1a1a49f9e9c9a96918b827a6e69676d737b81868c9196999c9ea1a9a1a1998c7f7266594c3f3326190c00000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c4444444444444444444444444443434241403f3d3b3a36302e2d29241e1b160e09030000000000000000000000000000000000000000000000000000060f18242f39434e58626c75818e96a0aaafa59f92867c6e665c5d68707d88939fa7b1afa59f92857b6e665c50463d31281d1208000000000000000000000000000000010b151f272f35393a404040404040404040404145515d6779869293877c6f665b504641404040403f4a5663707d899285796d605554606d79858f8275695c4f4236291c0f00000000000000000000000000000000000000000000000000000e1b2835414e5b6874818e8d817467564c4132281e16110e090a0a090a0a0b090e1114171b1f24292f353d4753606d7a86938d8073665a4d4033271a0d000714212e3a4754616d7a878c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c919594877a6d6154473a2e211407000714212d3a4754606d7a8793a0acacacacacacacacacacacacacacacacacacb6afacacacabaaa9a7a6a9a19e9b98928e87827b726c655d554c443b32281e150b000000000000000000000a1623303d495663707c8996a3aca89b8e8275685b4f4235281c0f000000000000000000030d151d24292c2d333333333333333333343a4753606d7a86999083786c60574d443b352f2e34383a3c4146474e53575e616a6e767e8690949e97918c85817b77736f6d666867666769686e72787f87939facac9f9286796c605346392d201306000815222f3b4855626e7b8895a1aea99c8f8376695c504336291d100300000000000000000000000000000000000000000005121e2a36424d576874818e9ba9a8a99b8e81756a5f544b423c37332d33333035394046525e697683909da9b1a7978a7d7064574a3d3124170a00000000000000000000000004111d2935404b5563707c8996a0aca197897c707c8896a0aca2988b7e7165574d42372b1c11060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d1925303a444c52545d5853514b46423b38322c29241d1a14100b040100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121c2730394044464847423c332a201509000000000000000000000000000000000714212e3a4754616d7a8794a0adaeaeaeb6afacaba9a8a19e948f837b6e6f7980868e92999ea1a8a9abadb3aea5998c7f7266594c3f3326190c00000000000000000714212d3a4754606d7a8793a0adb2a5998c7f726659515151515151515151515151515050504f4e4d4c4a4746423e3a3935302c27211a150e06000000000000000000000000000000000000000000000000000007121d27313c46505a606d79849198a3aeaea2989083796d60606d7a84919aa4afb2a89d938a7e71695e544a3f342b1f160c0000000000000000000000000000000000030d151d24292c2d333333333333333333343a4653606d7986998e81756a5f544a3f363033332d3e4a5764717d8a8e8174675d515b66717d8a8e8175685b4e4235281b0f00000000000000000000000000000000000000000000000000000d192633404c5966737f8c8c7f7366594c402f26160c050200000000000000000205060b0f12181d242d3a4754606d7a87938d8074675a4d4134271a0e000714202d3a4753606d798080808080808080808080808080808080808080808080839194877a6d6154473a2e211407000714212d3a4754606d7a8793a0adb9b9b1aba9a7a7a7a7a7a7a7a7a7a7a7a7a7a7a8a8a8a9aaacaeb5b3adabaaa29f9a938f867f776d675e564c443a30271c12070000000000000000000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f00000000000000000000030b12181d1f202626262626262626262e3b4754616e7a87958a7d70655b50453c32292423282c2d3036393c43474d52585f626c717b838c92999e98928d88847f7c79767574737475777a7f848c9399a4afaa9d908377655b5044372b1f1205000815222f3b4855626e7b8895a1aea99c8f8376695c504336291d10030000000000000000000000000000000000000000000714202d3a46525e6978849197999b9d97897c6f63584e4239302b272226262b2e3137424d576875818e9ba8b2a5988b7f7265584c3f3225190c0000000000000000000000000613202c3945515d6774818e9ba8ab9e9285796d7784919eaaaa9c908376695f5347382e23170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111d2a36414c565e616a65605d55534d48443d39352f2a251f1c16100d070100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e272e34383a3b3a37312a21180e03000000000000000000000000000000000714212e3a4754616d7a8794a0a6a6a6a6a7a8aaacafb2ada69e9591847a7c848d92999fa3abacb2b3afadb5b2a5998c7f7266594c3f3326190c00000000000000000714212d3a4754606d7a8793a0adb2a5998c7f72665d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5c5c5b5a585654524d4b4746413a38322b261f180f0900000000000000000000000000000000000000000000000000010b151f2a343f45515d676f7c86929fa5afaaa0958c80736a6c75818e96a1acb5aba0968e81746c61574d42382e22190d04000000000000000000000000000000000000030b12181d1f202626262626262626262e3a4754616d7a8795887c6f62584e42382d252626323f4b5865727e8b8a7d70635558606c7883908d8073675a4d4034271a0d00000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a8c7f7265594c3f32261906000000000000000000000000000003070c14212e3b4754616e7a87948d8073675a4d4034271a0d0006131f2c3945515d676d7373737373737373737373737373737373737373737376828f94877a6d6154473a2e211407000714212d3a4754606d7a8793a0adbcb1a79f9d9a9a9a9a9a9a9a9a9a9a9a9a9a9a9b9b9c9d9e9fa3aba7abadb2aeaca49f98928c82796e685e564c42392e23180d0400000000000000000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f000000000000000000000001070c1013141a1a1a1a1a1a1a1a23303c4956636f7c899184776b6153493f332a2019181c1f20252a2d32373b42464e535a62696e787f8791969d9f9a95908c888583818080818284878b91959fa4abb2a89a8d81746753493f33271b0f03000815222f3b4855626e7b8895a1aea99c8f8376695c504336291d10030000000000000000000000000000000000000000000815212e3b4854616e7b87898a8c8e909285796c6053463c3027252a2d2e31373a3c4347505b6575828e9ba8b3a6998c807366594d4033261a0d0000000000000000000000000714202d3a4753606d7a85929faca99a8e81746673808c99a7ab9f94887b6e62544a3f34281c1003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3946525e686d77716d67615e57544f4745403936312c27201d18120e0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c151c23282c2d2f2e2b2620180f0600000000000000000000000000000000000714212e3a4754616d7a879499999999999a9b9d9fa4abacb0a8a09691848691969fa3abafb1acaaa6a2a0a9aba5998c7f7266594c3f3326190c00000000000000000714212d3a4754606d7a8793a0adb2a5998c7f726a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a696968666563615e575854524c48433d37312a211b120a01000000000000000000000000000000000000000000000000030d18222935414b555f6a727f8b939ea8b1a79f92877c6f707d8a939ea8b2afa3999184796d605a50453b30261c1007000000000000000000000000000000000000000001070c1013141a1a1a1a1a1a1a1a222f3c4955626f7c889083776a6054463c2f261c1a2734404d5a6773808d867a6d60555f6a727f8b958b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000814212e3b4754616e7b878c807366594d402d22170b000000000000000000000000000000000815222f3b4855626e7b88958d8073665a4d4033271a0d0004101d2935404b555d606666666666666666666666666666666666666666666a76839094877a6d6154473a2e211407000714212d3a4754606d7a8793a0adb8ab9f95908e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8f90919299979a9ea1a8aab0afaaa39f948f837a6e685d544a4034281f160c01000000000000000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f00000000000000000000000000000406070d0d0d0d0d0d0d1825323e4b5865717e8b8b7f7265594f41382d21180e0c101313191e20262b30363c434750575f666d737c848e939ea1a09d999892908e8d8d8d8f9196989da0a7afb5aca1968a7d7063574a3d2d22170b00000815222f3b4855626e7b8895a1aea99c8f8376695c504336291d10030000000000000000000000000000000000000000000714202d3a46525e69767a7c7e808284868276655b5044372c2d3036393b3e4347484e5359606c7884919eabb2a6998c7f7366594c403326190d000000000000000000000006121e2b37424d5765717e8b98a2ada197897d70636e7b8895a0aca6998d8073665c5044382b1f1308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a837e79736e6963605953514b46423b38332c29241d1a14100b040100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b12181c1f2022211e1a150e060000000000000000000000000000000000000714212e3a4754616d7a878c8c8c8c8c8c8d8e9093999da0a7aea8a096919298a0a8aeafaca7a09d9996939c9fa6998c7f7266594c3f3326190c00000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7777777777777777777777777777777777767675747372706e696865615d56544f47423c332d241c130a00000000000000000000000000000000000000000000000000061018242f3a434e58626d75818f96a1abaea3999083777a85919ea5afb0a69f92877c6f675d51483e33291e140a0000000000000000000000000000000000000000000000000406070d0d0d0d0d0d0d1824313e4b5764717e8a8c7f7265584e43342a1d141c2936434f5c6976828f8376675d5d676f7c869299897c706356493d3023160a00000000000000000000000000000000000000000000000000000714202d3946525e6877848d81746753493f33271b0f03000000000000000000000000000000091623303c4956636f7c89968c7f7366594c403326190d00000c18242f39434b5153595959595959595959595959595a5b5c5b595959576a77849194877a6d6154473a2e211407000714212d3a4754606d7a8793a0adb6a99d90838181818181818181818181818181818282838486888a8d91969c9ea6acb2aea69f9590837a6d665c51443e31281e1308000000000000000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f00000000000000000000000000000000000000000000000c1926333f4c5966727f8c867a6d6154473e2f261b0f06000406080d11151b1f252a31373f454d545c606a6f79818a91979fa4aaa29f9c9b9a999a9c9ea0a8aaacb1bbafa59e9184786c605346392d20130600000815222f3b4855626e7b8895a1aea99c8f8376695c504336291d100300000000000000000000000000000000000000000005121e2a36424d575e676d6f71737577797a6d6053493f35393a3d4146474b4e5355585f626b717e8b96a1acb4aa988b7e7265584b3f3225180c00000000000000000000000814212d3a47535f697683909caaab9e9285796d606a7783909dabab9e9184796d6053463a3024190d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a878b85807b75706b65605d55534d48443d39352f2a261f1c16110d070100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c1012131514120e0903000000000000000000000000000000000000000714202d3a4753606d7980808080808080808184868b91959fa2aaa8a09d9fa3aab1aca49f9b95918c89878f949f988c7f7265594c3f3226190c00000000000000000714212d3a4754606d7a8793a0adb8ab9e9185838484848484848484848484848484848383838281807f7d7b7875716d68636059534d453f362e251c13090000000000000000000000000000000000000000000000000007131d28313c46515b606d7a849199a3aeab9f948b7e818e97a1adb3a99f948c7f726a60554b40362c21170c020000000000000000000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c877b6e6154473c3221180b1e2a3744515d6a77848d80736755606d7a84919892867a6d6053473a2d201407000000000000000000000000000000000000000000000000000005111e2a36414d566774808d8276655b5044372b1f12050000000000000000000000000000000a1724313d4a5764707d8a978b7f7265584c3f3225190c000007121d2731394045474d4d4d4d4d4d4d4d50545c6064676869686663605e6978859293877a6d6054473a2d211407000714212d3a4754606d7a8793a0adb2a5998c7f74747474747474747474747474747575757677797b7d8184898f949da0a8afb0a7a0959082786d60594f433a2f24190d020000000000000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f00000000000000000000000000000000000000000000000714212d3a4754606d7a848276685d5246392c1d140a000000000001050a0f141a20262b333b424a505860676d747d848d93999fa6aca9a8a7a6a7a8aaacb2b7b8b5aea69e938b7e71665b5044382b1f120600000815222f3b4855626e7b8895a1aea99c8f8376695c504336291d1003000000000000000000000000000000000000000000020e1a25303b454d555d6062646668666d6d685d52413b4145474a4c525457585f62666a6e747d86929fa8b2aea398897c6f6356493c302316090000000000000000000003101c28343f4a54616e7b88949faba89a8d8174665c65727f8c99a3ada196897d7063564c4135291d11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8797928d87827d77716d67615e57544f4745403936312c27201d18130e0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000406070808060200000000000000000000000000000000000000000006131f2c3945515d676d737373737373737475777a7f848b9298a0a8acaaacaeafa79f9a938e8984807c7a828f9c978b7e7164584b3e3125180b00000000000000000714212d3a4754606d7a8793a0adb9ada197919090909090909090909090909090909090908f8f8e8d8b898785817e7a756f6b615f57504840372e251b1007000000000000000000000000000000000000000000000000010c161f2a343f45525d686f7c87929fa6b0a69f928587939fa9b3ada2978f82786c60584e433a2f241a0f05000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a848276695e52463a2d20140a1723303d4a5663707d867d70645764717d8a959c8f8276675d5145392c2013060000000000000000000000000000000000000000000000000000020e1925303d495663707c8985796c605346392d2013090000000000000000000000000000000b1825323e4b5865717e8b978a7e7164574b3e3124180b0000010b151f272f35393a40404040404049515a61666d707375757473706d676e7b879793867a6d6053473a2d201407000714212d3a4754606d7a8793a0adb2a5998c7f72676767676767676767676767676868696a666d6e7174787d828991969ea5afb1a79f948d80746c61564c4135291f14090000000000000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f00000000000000000000000000000000000000000000000613202c3945525d68707d7f7265564c4135291a0b02000000000000000002090e151a212930383f444e555d606b707a80878f949c9fa4abacaeb4b1b2b2b1b2adaba39f948f81756c62544a3f33281c0f0300000815222f3b4855626e7b8895a1aea99c8f8376695c504336291d10030000000000000000000000000000000000000000000009141f29333b434b5154565759545c60605d564c46484b515457565e6164676a6f72777b81879298a2aeb6ac9f92867a6d6053473a2d2014070000000000000000000006121f2b3844505c6673808d99a6aca196897c6f6354616e7b86929faca89b8e8175685d5246392d20150a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a87949e99928f89837e79736e6963605953514b46423b38332c29241d1a140f0b0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2935404b555d60666666666666666768686d72787e869195a0a7b1b5aba49f959087827c77736f7784919e99897c6f6356493c3023160900000000000000000714212d3a4754606d7a8793a0adbeb2a9a19e9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c9c9b99989697918e8b86827c766e69625a514940372d23190d04000000000000000000000000000000000000000000000000040d18222935414c56606a727f8c949ea8aea29892939aa4afafa59f92857b6e665b50463d31281d120800000000000000000000000000000000000000000000000000000000000000000000000613202c3945525d68707d7f7265574d42362a1e110916222f3c4854606b74807a6e6154606c788390968a7e7164554b4035291d10040000000000000000000000000000000000000000000000000000000813202d3a4653606d7985887b6e6255483b31251a0e0100000000000000000000000000000d1a2633404d596673808c968a7d7063574a3d3024170a000000030d151d24292c2d333333323d47515b636c71797d808282817f7d7a76727d8a979886796c605346392d201306000714212d3a4754606d7a8793a0adb2a5998c7f72665b5b5b5b5b5b5b5b5b5b5b5b5b5b5c545c606264656c70767d848f939ea5afb0a69d928a7d70685d52453b30251a0e0100000000000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f000000000000000000000000000000000000000000000004111d2935414c56606b70796d6053463a30241907000000000000000000000003090f171e262e343d434b515961686d747c82898f93999c9fa2aaa4a5a5a4a8a19e99928d82796d605a5042382d22170b0000000815222f3b4855626e7b8895a1aea99c8f8376695c504336291d100300000000000000000000000000000000000000000000030d172129313a414547494b4d4a505354524c4d5355555d606467686e7174787b7f83888e9299a2aab4afa49a8e8175675d5145392c201306000000000000000000000713202d3a4653606d7984919eabab9e9184786c60535e6876828f9caaac9f92867a6d6154473c31261b0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0a39f9b95908b85807b75706b65605d55534d48443d39352f2a261f1b17110d0701000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18242f39434b5153595959595959595a565e61666d727b839095a0a8afa499938c837c756f6a666e7b88969f9286796d6053473a2d20140700000000000000000714212d3a4754606d7a8793a0adbabbb2adabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9a9a8a7a6a5a9a19e9b99928f89827b716c635b51493f352b1f160c01000000000000000000000000000000000000000000000000071019242f3a444e58606c77828f96a1abaaa29f9fa4acb2a89d938a7e71695e544a3f342b1f160c00000000000000000000000000000000000000000000000000000000000000000000000004111d2935414c56606b70796d6053463b30251a0e0714202c38444f59606d796e685e525b656f7c879184786d6053463a2f24180d0100000000000000000000000000000000000000000000000000000006121f2b3844505c6674818b7f7265574d42362a1d120700000000000000000000000000010e1b2834414e5b6774818e95887c6f6255493c2f22160900000000030b12181d1f2026262c38434f59636d727e848a8d8e8f8e8c8986837f808d9a928679655b5044372b1f1205000714212d3a4754606d7a8793a0adb2a5998c7f7266594e4e4e4e4e4e4e4e4e4e4e4e4f4f4a505355535b60636b6f79818e939ea7b1aea49e91847a6d60574d42362a1e130800000000000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f0000000000000000000000000000000000000000000000010d19242f3a434f5960666d665c514538281e130800000000000000000000000000060c141c2328313a40454f565d606a6f767c82878c8f929896989898979696918e8680786d675d51483f2f261c11060000000815222f3b4855626e7b8895a1aea99c8f8376695c504336291d10030000000000000000000000000000000000000000000000050f171f282f35393a3c3e403f44464d5254575f6165676d7074777a7e8184888c90959a9fa3abb4b0a69f93877c6f62554b4035291d100400000000000000000005111d2935414c5663707d8a96a1ada7998c8073655b505664717e8a98a2aea3988b7f7265584e43372b1c120700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794aaacaca7a09d97928d87827d77726d67615f57544f4745403a36312b27221b18130e0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d2731394045474d4d4d4d4d4d4d4d4c52545c60696e7a839096a1ab9f93877f776f6a626066737f8c999c8f8276675c5145382c1f130600000000000000000714212d3a4754606d7a8793a0adbabab2adabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacaeb4b1b3adababa39f9b948f867e736d635b51473d31281d13070000000000000000000000000000000000000000000000000008131e28323d44505b656d7a849199a3afaeacacafb5aba0968e81746c61574d42382d22190d04000000000000000000000000000000000000000000000000000000000000000000000000010d19242f3a434f5960666d665c514538291f140902101c27333d44515c666d665e564c53606a74818a7d70665c5044382b1d12070000000000000000000000000000000000000000000000000000000003101c28343f4a54626f7c888376695e5346392f23180c0000000000000000000000000003101c2936434f5c6976828f94877b6e6154483b2e211508000000000001070c1013141a222f3b4854606b727f8a91979a9b9c9b9999928f8b8d929f9285786c5f493f33271b0f03000714212d3a4754606d7a8793a0adb2a5998c7f7266594c414141414141414141414242423f4446484950535960676d78818e959faab4ada1968d8073695e52463a2f24190d01000000000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f00000000000000000000000000000000000000000000000008131e28313d474f545c605c544b4034281c10040000000000000000000000000000020a11171f282f353e434c52585f626b6f757b7f8385888a8b8b8c8b8a8884817b746d665d554b41362d1d140a000000000815222f3b4855626e7b8895a1aea99c8f8376695c504336291d1003000000000000000000000000000000000000000000000000050d161d24292c2d313a41454e53575e6166696e72767a7d8184878a8e9196999d9fa7acafb4aea69f948d80746a605443392f24180d010000000000000000000713202d3946525e6875828e9ba9aba095887b6e62534953606d7985929facaa9d9083776a5f5347392e23180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a87989ea0a8acaca9a29f99938f89837e79736e6963605953514b46423b37332d29241d1a150f0b06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b151f272f35393a404040404040404141464a50575f686e7a849199a3988b7e736c655f58606d7984919e988b7e7164554b4034291c100400000000000000000714212d3a4754606d7a8793a0adbdb2a8a19e9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9e9fa2aaa5a8abaeb4aeaca69f98928b7f736d62594f433a2f24180d02000000000000000000000000000000000000000000000000010c162027333f49535e686f7d87929fa8b2b8b9bbaea3999184796d605a50453b2f261c1007000000000000000000000000000000000000000000000000000000000000000000000000000008131e28313d474f545c605c544b403428170d080d141a212834404a545c605c544c444e58616d7a81746c61544a3f34281c0c0100000000000000000000000000000000000000000000000000000000000b17232e3847535f6a7683867b6e61554b4034291c110600000000000000000000000005111d2935414c566a7784919786796d6053463a2d20130700000000000000000406101d2935404b55636f7d89919ea1a9a8a8a7aba39f9c989a9d9e9184776b5e51442d22170b00000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f34343434343434343435352e34383a3b3f44464f555d666d79839098a2aeb2a89f92867b6e61554c4135291d1104000000000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f000000000000000000000000000000000000000000000000010c161f2b353d424b5153514b42392e23180c0000000000000000000000000000000000060d161d2429313a41454e53596063696e7276797b7d7e7f7f7e7d7b78746e69605c544b433a2f241b0b02000000000815222f3b4855626e7b8895a1aea99c8f8376695c504336291d100300000000000000000000000000000000000000000000000000040c1318212a333c434b51585f62696e72777b7f83868a8d9195979a9ea1a8aaabb1b4aeaaa39f948f82796d60584e4331281d1207000000000000000000000714212e3a4754616d7a86929facab9d9083776a5f5345515d6774818e9ba8ab9f95887c6f62544a4034281c1004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a868c91969b9fa4abadaba49f9b95908b85807b75706b65605d55534d46443f38352f2b261f1b17110d080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d151d24292c2d333333333333333035383f444d565e686f7d87929f9b8e81746c61585c66717e8a969f92857a6d6054473a2f23180c0000000000000000000714212d3a4754606d7a8793a0adb9ada1969190909090909090909090909090909090909091929895989b9fa2aaacb2b0aaa29f918b7f726b60554b4035291f140800000000000000000000000000000000000000000000000000040d17222d38414c56606b737f8c96a0acb9c5b9ac9f92877c6f675d51483e33291d140a000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f2b353d424b5153514b42392e23180d13191f252a2d2e39424a5153514a423d46525e686d746f645a5042382e23170b00000000000000000000000000000000000000000000000000000000000006111c2b37434e5864717e8a8073675c5145382e23170b0000000000000000000000000713202d3946525e68798592928578675c5145382c1f130600000000000000000006131f2c3845515d6776828f9ca3adb2b1b0b1b5aeaca9a5a7a99c8f8376695c504336291d0600000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f332828282828282828282823282c2d2d33373d434b545c676e7b86929fa8b2aea3988d8074675d5145392c201409000000000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f00000000000000000000000000000000000000000000000000040d19232b303940454645403930271d1207000000000000000000000000000000000000040c13181f282f353c43474f54575e6165666d6e7071727271706e6967615f57514a423a31281d120900000000000815222f3b4855626e7b8895a1aea99c8f8376695c504336291d100300000000000000000000000000000000000000000000000000000a151e29333c454d555d606a6f757b7f83888c8f92999a9da0a8a7abadb2b5aeacaaa29f98928c82796d675c51463c321f160c0100000000000000000006131f2b37434e5865727f8b99a3aea3998c7f7265584e434b5563707d8996a1ada79a8d8073665c5144382c1f1408000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202c3945525d686d7a7f84898f93999ea1a9abaca7a09d97928d87827d77726d67615f5753504945413a37312b27221b19130e0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b12181d1f202626262626262625292e343c444d56606b727f8c939d938a7d706a61606d7984919e998d8073675d5145392c1d12070000000000000000000714212d3a4754606d7a8793a0adb8ab9e9184838383838383838383838383838383838384848587898b8e92989ea1a8afb4aea39f92877d6f675d51453b3025190e000000000000000000000000000000000000000000000000000006111b262f3a444f59606c7984919eaab7bfb2a5998c7f726a60554b40362c21170b0200000000000000000000000000000000000000000000000000000000000000000000000000000000040d19232b303940454645403930271d13191e252a30363a3b3d3940444644403935414c565e6168645d53473e30261c1106000000000000000000000000000000000000000000000000000000000000000f1b26323c4653606d798585796d60544a3f34281c120700000000000000000000000714212e3a4754616d7a87989084776a554b4034281c10040000000000000000000714202d3a4753606d7a86929facaaa8a5a3a4a7abaeb3b2b4a89b8e8175685b4e4235281b0f02000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f33261b1b1b1b1b1b1b1b1c171c1f2022272b3139424b555f69727f8b96a0acb4aa9f92857a6d6054473b31261a0e020000000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f00000000000000000000000000000000000000000000000000000711191e272e34383a38342e271e150b000000000000000000000000000000000000000001070d161e242932373d44484d5254545c6062636565656463625f5755534d44403930281f160c0000000000000815222f3b4855626e7b8895a1aea99c8f8376695c504336291d10030000000000000000000000000000000000000000000000000006111c26303b454d575f676d747c82868c9095989c9fa3abaaacb1b4b3adababa39f9c98928d867f786d675d554b40342b200d04000000000000000000000815212e3b47535f6a7783909dabac9f92867a6e6154473c4653606c7884919eabab9e9285796d6053463b3025190d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414c565d686d72787d82878d92979c9fa6acaca9a29f99938f89847e7a746e6963605b53514b47423c37332d29241e1a150f0b06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070c1013141a1a1a1a1a1a1a191c2328323b444f59626d75818f959f92857c716c6a727f8c969f92867b6e61554b4135291d0b010000000000000000000714212d3a4754606d7a8793a0adb2a5998c7f77777777777777777777777777777777777778797a7c7e82858b91969da5aebaafa3999184796d60564d41362a1c1106000000000000000000000000000000000000000000000000010c161f28333f4a545e69717e8a96a0acb9beb1a4988b7e716a5f554b40352921180d0300000000000000000000000000000000000000000000000000000000000000000000000000000000000711191e272e34383a38342e271e181e242930363b4246484948443d3a38342e303a444c52545b59534b41352c1e140a00000000000000000000000000000000000000000000000000000000000000000a151f2c3845515c67727f8b7e71665c5044392e23180c00000000000000000000000916222f3c4955626f7c88958f8275695c4f422e23180c000000000000000000000815222e3b4855616e7b8899a3a69e9c9897979b9fa2aaaeb3a6998d8073665a4d4033271a0d00000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190e0e0e0e0e0e0f060c101213171b1f272f39434d57606d7984919ea9b3aea2988b7f7265574d42362a1e12050000000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f000000000000000000000000000000000000000000000000000000070c151d23282c2d2c28231d150c0300000000000000000000000000000000000000000000040c131920262b32383b4246484a50535557585859585755534d4846423b342e271e160d040000000000000815222f3b4855626e7b8895a1aea99c8f8376695c504336291d1003000000000000000000000000000000000000000000000000000c17232e38424d575f696e7981878f92999da0a7a9acaeb5b6afacaaa9a29f9b99928f8b85807b736d665d554b43392e22190e0000000000000000000004101c2834404b54626f7c8895a0acaa9c8f8276685e52463944505b6673808d99a7ada1978a7d7064564c41362a1e1105000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d19242f3a444c565d61656c70757b80858a90949a9fa2aaacaba49f9c95918b85807b75706c65605d55534d46443f38352f2b261f1c17110a020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000406070d0d0d0d0d0d080d11172029323d46515b606d798390959792867e76717c86929f988e8174695e53433a2f24180d000000000000000000000714212d3a4754606d7a8793a0adb2a5998c7f726a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6b686d6f7275797e848e939da4aeb5aba0968d8073685e5246382d22170b00000000000000000000000000000000000000000000000007131d28313a44505b666e7b85929fa8b2bdbeb8ac9f92867c6f675d51453e332a1f150b010000000000000000000000000000000000000000000000000000000000000000000000000000000000070c151d23282c2d2c28231d1d242930353a41464d525456544f473d31282328323a4146474e4d4841392f231a0c02000000000000000000000000000000000000000000000000000000000000000004101c2834404b55606d7a8584786d60544a4034281c1106000000000000000000000b1724313e4a5764717d8a978e8174675b4e4134281b07000000000000000000000916222f3c4955626f7c8895a39b948f8b8a8b8e92989ca4aeab988b7e7165584b3e3225180b00000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c01010101010200000306060b0f151d27313b44515c66717e8b97a2adb4aa9d908376695f53463a2d2114070000000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f00000000000000000000000000000000000000000000000000000000030b12181c1f201f1c18120b0300000000000000000000000000000000000000000000000001080d151b21272c30363a3b3f4446484a4b4c4c4b4a4847423c3a363128231c150c04000000000000000815222f3b4855626e7b8895a1aea99c8f8376695c504336291d100300000000000000000000000000000000000000000000000003101c28343f4a545e696e7b848e939a9fa3abacb1b6b3adabaca49f9d9997928e8b86827e7a746e69605c544b433a30271d10070000000000000000000006131f2c3845515c6674808d9aa7aea2988b7e7164564c41363f4a54626f7b8895a0aca99b8f8275685e5246392d20150a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28323a444c52535b6063696e73797e83888e92989da0a7acaca7a09d97928d87827d78726d67615f5753504945413a37312b28221c140b0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060e17202b343f45515d676d7a83909598928a837e8390989f92867b6e61574d4231281d1307000000000000000000000714212d3a4754606d7a8793a0adb2a5998c7f72665d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d565d606265676d7179818d929da6b0b2a89f92867b6e61544a3f33281c0f0300000000000000000000000000000000000000000000050f18242f3a434e58606c78829097a2adbab8b1b3aea2989183796d605a50463c31271d1207000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b12181c1f201f1c181f282f353a41454c52575e616360594f43392f2a2d2e3035393a41403c372f271d1108000000000000000000000000000000000000000000000000000000000000000000000c18232e3945515d67737f8b7e71665c5144382e23170c000000000000000000000c1926333f4c5966727f8c998c7f7366594c403326190d000000000000000000000815222e3b4855616e7b88949b918c827e7d7e81858d929ca8a399887c6f6255493c2f22160900000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c000000000000000000000000030b151f2834404a54606d7985929fabb8ab9f95887b6e6155483b2e23180c0000000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f000000000000000000000000000000000000000000000000000000000000070c10131313100c0700000000000000000000000000000000000000000000000000000000040a0f161b1f252a2d2e34383a3b3d3e3f3f3e3d3b3a37312d2a261f18120b0300000000000000000815222f3b4855626e7b8895a1aea99c8f8376695c504336291d100300000000000000000000000000000000000000000000000006121f2c3844505c666e7b8491969fa4acafb5afaca9a9a19e9b9a93908d8985827e7a76716d67615e57504a423a31281e150b00000000000000000000000713202d3a4653606d7985929eabac9f92867a6d6053473b303847535f6a7783909dabac9f92867a6e6154473c32271b0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c162028323a4146495053575e61666d71767c81868b91959b9fa3abaca9a29f9a938f89847f7a746e6963605b53514c47423c38332d261d140a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e19222935404b555e686d7a838f949f94908b90959f978d8073695e53453b311f160c01000000000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266595050505050505050505050505050514c525456555d60676d74808d949eabb5aea2988c8073665b5044382b1f1206000000000000000000000000000000000000000000020b17212935404b55606a737f8c949fa9b3aeaca5a7acaaa0958e81746c62584e43392f24180f0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c10131313131d28313a40454c52565e61696e706b60554b403536393b3d3c38333534302b251d150b000000000000000000000000000000000000000000000000000000000000000000000007121d2935414c55606d7a8584796d60544a3f34281c10030000000000000000010e1b2834414e5b6774818e978b7e7164584b3e3125180b000000000000000000000814212e3b4754616e7a8799978c7f757270717479808d99a69f9286796d6053463a2d20130700000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c00000000000000000000000000030d18232e3945515c6774818d9aa9b3b1a7988c7f7265544b4034281c100400000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f000000000000000000000000000000000000000000000000000000000000000004060706040000000000000000000000000000000000000000000000000000000000000000040a0f141a1e2023282b2d2f3032323231302f2e2b26211e1a140c07000000000000000000000815222f3b4855626e7b8895a1aea99c908376695d5043362a1d0600000000000000000000000000000000000000000000000004101c2834404a54606d78839096a0a8afb2adaba39f9c9997918e8a8783807c7975716d6864605d55524d443f3830281f160c030000000000000000000005111e2a36424d5664717d8a97a1ada99b8e8175675d5145392b37434e5865727f8c99a3afa3998c7f7265584e43372b1d120700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d1620283035383f44464d53545c60646a6f747a7f84898e92999ea1a9abaca49f9c96918b85807b76706c65605d55534d46443f382f261c11060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071018242f3a434c565e686d79828c92999c979d9f9e92857a6d60574d4233291f0d0400000000000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c4444444444444444444444444444414547494b51555d606c78828f99a3aeb4aa9e9184786c605346392d2013060000000000000000000000000000000000000000000a141d29333b45515d676f7c87929fa6b0aaa29f989ba3aca79d938b7e716a5f554b40352921180d0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000406070d18242f3a434b51565d60686d747b7d70675d51453b4146474a48443d352b20201a130b030000000000000000000000000000000000000000000000000000000000000000000000000d19242f3a45515d67727f8b7f72665c5044382c1f1206000000000000000004101d2935404b556976838f96897c6f6356493c30231609000000000000000000000713202d3a4653606d7986939285786c65646468727f8c99a59d908377665c5145382c1f130600000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c000000000000000000000000000007121c2834404b55626f7c8997a2adb5a99c8f8276665c5145382c1f130600000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090e1214171c1f202224252526252422211e1a15120e090300000000000000000000000815222f3b4855626e7b8895a1aea99d9083766a5d50432e23170b00000000000000000000000000000000000000000000000006121f2c3844515c66727f8b959fa8b2afa8a19e9992908c8885817e7a7773706d6664605d5653514b46423b342e2d28221a1108000000000000000000000714202d3a46525e6975828f9ca9ada1978a7d7063554b403529313c4754616e7a86929facab9d9083776a605447392e23180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e161e24292d33373b42464b5153585f62676d72777d82868c91969c9fa6abaca8a09d98928d87827d78726d67625f5753504a42382d22170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007131d28313a444c565e676d777f8791959ea19f948b7e71685d52453b3121170d0000000000000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3737373737373737373737372f35393a3c40454b515b666e7b86929facb9ada197897c6f6356493c30231606000000000000000000000000000000000000000006111c262f3b45505a606d79849199a3afaea298928b919ba5afa59f92867c6e675d51453e332a1f150b0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935404b555d60686d737a808685796d60564c454c525456544f473d32281e1308000000000000000000000000000000000000000000000000000000000000000000000000000008131e2935414b55606d798484796d6053463a2d201307000000000000000006131f2c3845515d6778849199877b6e6154483b2e2115080000000000000000000006131f2c3845515c67788491908376665b5b666e7b85929eaa9a8d807467544b4034281c100400000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c0000000000000000000000000000000c18232e3a4653606d7985929fabb8ac9f9285796d6053463a2d20130700000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000205060b101213151718191918171514120e090502000000000000000000000000000815222f3b4855626e7b8895a1aeaa9d9084776a544a3f34281c100300000000000000000000000000000000000000000000000713202d3a4653606d7985919ea7b1afa59e96918b86837f7c7874716d686663605c5454524c4947464142403d3c39332c231a10050000000000000000000814212e3b4754616e7b86929facab9e9285796d6053463a2f242d3946525e6876828f9caaaca095887c6f62554b4034281c10040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c13191b22272b3136394045464e53555d60656b70757b80848a8f949a9fa2aaacaaa29f9a938f8a847f7a746e6963605b544a3f33281c0f030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f29323a444c555d656c737c848b9297999083776c60564c4133291f0f050000000000000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f332a2a2a2a2a2a2a2a2a2a2a24292c2d2f3539404a545f6974818e9aaab4b2a9998c7f7366594c402e23170c00000000000000000000000000000000000000040d17222d38424d57616c74818e96a0abb1a79f92867e8b939ea9aea2989083796d605a50453c31271d12070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945515d676d737a80868d928c7f72685d5252565e616360594f443a3024190d0300000000000000000000000000000000000000000000000000000000000000000000000000010d18242f3a45515c67707d7c6f665c5044382c1f120600000000000000000714202d3a4753606d7a86939286796d6053463a2d2013070000000000000000000004101c2834404b556976828f908377695f656c78828f97a2a298897d7063564a3d2e23180c0000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c00000000000000000000000000000007121f2b3844505c6675828e9ba8b5aea298897c6f6256493c2f23160900000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030607080a0b0c0c0b0a08080602000000000000000000000000000000000815222f3b4855626e7b8895a1aeab9e918578665c5044382b1f120600000000000000000000000000000000000000000000000a1724303d4a5763707d8a97a1adb0a69e938e847f7a76726f6c6564615e565653504a5053575654524c4f4d4a49443e362c22170b000000000000000007131f2c38434f5966727f8c99a3afa89a8d8074665c5044382c1d2a36414c5664717e8a98a2aea79a8d8174675c5145382c1f140900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d11171b1f252a2e34383c43474c5154596063696e73797d82888d92989da0a7acaca49f9c96918b85807b76706c665b5044382b1f1206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d172029323a434c535b606a6f787f858b8f877c6f655b50433a2f21170d000000000000000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f33261d1d1d1d1d1d1d1d1d1d191d202124292f38424d5763707d8998a3aeb5a99c8f827669544a3f34281c10030000000000000000000000000000000000010c161f28333f4a545e69717e8a939da8b2aba0958c7f75818e97a1adaaa0958e81746c61574d43392f23180f0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d797f858d92989f92857a6d60565d60686e706b60564c4135291f1409000000000000000000000000000000000000000000000000000000000000000000000000000007131d2834404b55606b706f6a5f544a3f34281c100300000000000000000915222f3c4855626f7b889a918477665c5044382b1f120600000000000000000000000c18232e404d596673808c92877b6e696e77808d949fa99f9285796d6053473a2d2014070000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c00000000000000000000000000000003101c28343f4a5465727f8c98a5b2b4aa988b7e7265584b3f3225180c00000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222f3b4855626e7b8895a1aeac9f9286796d6053463a2d20130700000406070604000000000000000000000000000000010e1b2734414e5a6774818d9aa9b3ab9e938e8179726d686662605b5354524c49464a545b606462615e565c5a575550483e33281c1004000000000000000915222f3b4854606b7784919dabaca096897c6f62544a3f34281c25303b4753606d7985929fabab9f9285796d6053463b30251a0e020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f141a1d23282c32373a4145474f54565e61666d71767b80858b90959b9fa3abaca8a09e98928d87827d786c605346392d20130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e172029313a4149505860666d72797e827f736a5f53493f31281e0f05000000000000000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326191111111111111111080d111314181d262f3c4753606d7a86929facb7ab9e918478665c5044382c1f1206000000000000000000000000000000000007121d28313944505b666e7b85929fa5afafa3999083786d7a85929ea5afa79d938a7e71695f554b40342921180c03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d192633404c5966737f8c92979fa2a2978d80736860686d737a7d70685d52453b30251a0e0300000000000000000000000000000000000000000000000000000000000000000000000000010c18232e39434f596063625f584e42382e23170c0000000000000000000a1724313d4a5764707d8a978f827669544a3f34281c10030000000000000000000000071623303d495663707c899790837b787b828d929da6a99c8f8275675c5145382c1f13060000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c000000000000000000000000000000000b17232e3d4a5663707d8996aab4b4a79a8d8174675a4e4134271b0700000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f00000000000000000000000000000000000000000000000000000004060707060503000000000000000000000000000000000000000000000000000000000000000000010507080808080808070604000000000000000000000000000000000000000000000000000000000815222f3b4855626e7b8895a1aeafa399887b6e6155483b2e221508070c10131313100c070000000000000000000000000003101d2a3643505d697683909ca9afa3998f82776d67615e56555350494746413d44505b666c716f6e686a686764615a5044392d20140800000000000004101d2935404b55636f7c8996a0acaa9e9184776a605442382e23171f2c3845515d6774818e9ba8ada2978a7e7164574d42362a1e12050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e12181c1f262b2f35393d44484d52545c60646a6e74797e83898e92999ea1a8abaaa29f9a938f8a8074675a4d4134271a0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e171f282f383f444e545c60676d7176736d63584e41382d1f160c00000000000000000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c0404040404040400010407070c141f2c3845515d677784919daab7ac9f9286796d6053463a2d20130700000000000000000000000000000000050e18242f39434e58606c78828f97a2adb1a79f92877c6f68717e8a939da7afa59f92867b6e675c51453e332a1e150b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a85929fa9ada99f92867a6e6d727a8085857a6d60574d42362a20150a000000000000000000000000000000000000000000000000000000000000000000000000000007121d27303d474f555655544e463c30261c11060000000000000000000c1926333f4c5966727f8c998d8174675a4e412e23170b0000000000000000000000000713202d3a4653606d79859295908785878f939da4ada1978a7d7164554b4034291c10040000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c000000000000000000000000000000000614212e3a4754616d7a8798a2aeb6a99c8f8376695c50432f24180d01000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f00000000000000000000000000000000000000000003060809070c1012131413120f0b06060603000001030406060606060601000000000000000000000000000002080d11141414141414141413100c0701000000000000000000000000000000000000000000000000000815222f3b4855626e7b8895a1aeb5ab978a7d7064574a3d2f24190f12181c1f201f1c18120b03000000000000000000000005111e2b3844515e6b7784919eaaac9f92877b6e655d55524c4946443f3a3936394653606c787e7c7a79777573706c6155493c3023160a0000000000000613202c3945515d6774818e9aa8b1a7998c807366584e4330261c111d2935404b5563707d8996a1ada99c8f8276695e52463a2d20160a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c10151b1e24292c32383b42464a5053585f62676d72777c81868c91969d9fa7aeaca49f9a8d8174675a4e4134271b0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d161d262d333d424a51555c60656966635b51463c2f261b0d0400000000000000000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c00000000000000000000000004101d2935404b55697683909ca9b6afa399877a6d6154473a2e211407000000000000000000000000000000020b17202935404b55606a727f8c949fa9b3aba0958d80736a616c74818e95a0aaaea2989083796d605a50453b30271d12070000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202c3945525d6873808c97a2a29f97928c8073797f858d928d8073695e52463c31261b0f0300000000000000000000000000000000000000000000000000000000000000000000000000000b151e2c353d44484a4947433c342a1e150a000000000000000000010e1b2834414e5b6774818e988c7f7265594c3f3226190600000000000000000000000006131f2c3845515c6674818d9a9a9391939a9ea6aea89e9185796d6053463a2f23180c000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c000000000000000000000000000000000713202d3946525e687985929facb7aa9e9184776b554b4035291d1104000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f00000000000000000000000000000000000000040a0f12151519181c1f2020201f1b171613120f0b060d10101313131313130d0d0b0702000000000000000000050d14191e20212121212121201f1d18120b030000000000000000000000000000000000000000000000000815222f3b4855626e7b8895a1aeb3a6998c807366564c4135291d1b1d23282c2d2c28231d150c030000000000000000000005121e2b3845515e6b7884919eabaa9d918477695f534b46413c3937332d2e343f4a54626f7c888987858482807e7064574a3d3124170a0000000000000714202d3a4753606d7a85929fabab9f95887b6e6155483d3222150c18242f394653606c7884919eabac9f93877b6e6154483d32271b0f010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f13191d20272c3036383f44464e53555d60656b6f757a7f848a90959fabb6afa79a8d8174675a4e4134271b0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b141b2227303940444b5153585c5957514940342a1d140a0000000000000000000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c000000000000000000000000000c18242f424f5c6875828f9ba8b5b5ab94877b6e6154483b2e2115080000000000000000000000000000000a141d29323b45515d676f7c87929fa6b0aea3999083796d605a606d79839198a2aeaaa0958d80746c61574d42392e23180f06000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414c56606d7a85929f97928c857f7a7e848c92979f92867b6e61584e43372b1f12060000000000000000000000000000000000000000000000000000000000000000000000000000030c1a232c33383c3d3c3b37322a22190c0300000000000000000004111d2935414c5669768390978a7d7064574a3d3124170a00000000000000000000000004101c2834404b54626f7c88949e9f9e9fa4acb0aca1968c7f72665c5144382c1d1207000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c0000000000000000000000000000000005111d2a36414c566b7784919eaab7ac9f928579675d5145392c201306000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f0000000000000000000000000000000000070c10151b1f21222623282c2d2d2d2b272223201f1c17111a1c1d2020202020201a1917130e0801000000000000050e171e252a2d2e2e2e2e2e2e2d2c29241d150d0300000000000000000000000000000000000000000000000815222f3b4855626e7b8895a1aeb6a99c908376685d5245392e26272b2e34383a38342e271e150b0000000000000000000004111e2b3744515e6a7784919daaa99d908376665c51443e3a38342f34383a4045505c66727f8c959892908f8d8174675a4e4134271b0e010000000005121e2a36424d5764717e8b98a2aeab9d908376695f53463a2d211407121f2b3844505b6673808d99a7afa4998c7f7266594f43382c1d12070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080d11161c1f252a2e34383c43474b5153596063686d72787d83909daab6b4a79a8d8174675a4e4134271b0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171e272e34394045474b4f4c4b4640372e22180b020000000000000000000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c00000000000000000000000004101d2935404b556976838f9ca9b6b3a994877a6d6154473a2e211407000000000000000000000000000006111b262f3b44505a606d79849199a3aeb0a69f92867c6f675c515d676f7c86929fa5afa79d928a7e71695f544b40342821170c0300000000000000000000000000000000000000000000000000000000000000000000000000000000010d1924303a45525d68737f8c928c857f7a737f8b91969ea2a3988e81746a5f53473a2e21150800000000000000000000000000000000000000000000000000000000000000000000000000000008111a21272c2f302f2e2b2620191007000000000000000000000713202c3945525d687885929a887b6f6255483c2f221509000000000000000000000000000c18232e3947535f6a75828f98a2abacafb5afa49a9184796d60544a4034281c0b01000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c00000000000000000000000000000000010d19253043505d697683909ca9b6aea298867a6d6053473a2d201407000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f000000000000000000000000000000030b12181c1f262b2e2f322e34383a3a3937332d302d2b28221c26292a2d2d2d2d2d2d2726231f19120a0200000000020d1720293036393b3b3b3b3b3b3a38352f271f150b01000000000000000000000000000000000000000000000815222f3b4855626e7b8895a1aeb9ac9f92867a6d60554b40373132383940454645403930271d1207000000000000000000020f1c2935424f5c6875828f9ba8ab9e9285796d60585048474540444045464b515a606d7884919ea29f9d9a8b7e7164584b3e3125180b00000000000714212d3a46535f697683909caaafa3998b7f7265574d42372b1e12050f1c28333f4a54626e7b8895a0abab9e9184776b605448392f24180d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d11171c1f252a2e34383c43474b5153586062686d72787d8187929facb9b4a79a8d8174675a4e4134271b0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c151c23282f34383a3e43403e3b352e251c1006000000000000000000000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c090909090909090909090a070c131f2c3845515d677784909daab7ada297867a6d6053473a2d20140700000000000000000000000000030d17222d38414d56616c74818e96a0abb3a99f948c7f726a5f554b555f6a717e8b939ea7aea49f92857b6e665c51453e33291e150b000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e2935414c56606d798585807a736d6d7a85929fa8ada99f93877c6f6255483c2f22150900000000000000000000000000000000000000000000000000000000000000000000000000000000080f161c20232322221f1b150e0700000000000000000000000714212d3a4754606d7a879793867a6d6053473a2d2014070000000000000000000000000007121d2b37434e58616e7b86929fa3abacaba39f93887d70675d5142392e23180c00000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c0000000000000000000000000000000000081c2935424f5c6875828f9ba8b5b4aa94877a6e6154473b2e211408000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f0000000000000000000000000001080c151d23282c31373a3c3f424044464746443f403d3938332d2832363739393939393934332f2b241c140a0100000008141e29323b41464747474747474745403931271d1207000000000000000000000000000000000000000000000815222f3b4855626e7b8895a1aebbafa3998b7e72675c5147423f4043474b5153514b43392e23180c020000000000000000000c1926333f4c5966727f8c99a6ada2978b7e716a615a5553514b504b5153555c606c737f8c96a0acac9f93877b6e6154473b2e21140800000000030f1c28333f4a54616e7b87939facac9f92867a6d6154473c31261a0e020b17222d3847535f6a7783909dabaca096897c6f63554b4035291d1004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001040a0f13191c22282b3136394045464e53555d60656a6f747a7f84898f9299a3afb2acaa9a8d8174675a4e4134271b0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b12181d23292c2d323633322f2a231c130a00000000000000000000000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f33261915151515151515151516161617181d26303a4753606d7a86929facb8ab9f928578675c5145382c1f1306000000000000000000000000010b151f27333f49535e69707e8a939da8b2ada2979082786c60584e434e58626d75818e95a0aaaea2989083786d605a50453b30271c120700000000000000000000000000000000000000000000000000000000000000000000000000000000020d19242f3a45515d67707d7a736d68676873808c97a1a29f97928c8175685b4e4235281b0f0200000000000000000000000000000000000000000000000000000000000000000000000000000000050b101416171615130f0a040000000000000000000000000916232f3c4956626f7c8995918478675d5145392c1f130600000000000000000000000000000f1b26313c47535f69717e8b92999e9f9e99928c7f736b60554b4030271c120700000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c00000000000000000000000000000000020f1b2835424e5b6875818e9ba8b4aea194887b6e6155483b2e221508000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f000000000000000000000000040c13191e272e34383c4347484c4f4a5153535350494d4946443f38343e4243464646464646403f3b362e261c12080000010d1925303b444c5254545454545453514b43392f24180c000000000000000000000000000000000000000000000815222f3b4855626e7b8895a1aec0b5ab9e9184796d605b534d4c4d4e54555c605c554b4034281f14090000000000000000000815222f3b4855626e7b88949faca99f92857c716c6562605c555d555c6062676d737e87929fa8b2a89c908376685e5246392d2014070000000006121f2b3844505b6673808c9aa4afaa9c8f8275685e5246392a1f14090006111c2b37434e5865727f8b99a3afa89a8e8174675d5145392c20140900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070d11161b1e252a2d33383b42464b5153585f62676d71777c81868c91969b9fa3abaca8a09d988d8174675a4e4134271b0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c12181c1f2025292625231e19120a0100000000000000000000000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326222222222222222222222223232423292f38424e5863707d8999a3afb6a99d9083766a554b4034291c100400000000000000000000000007121d27313944505b656e7b85929ea5afafa59f92857b6e665b50463c46505a606d79839198a2aeaaa0958d80746c61574d42392e23180f050000000000000000000000000000000000000000000000000000000000000000000000000000000008131e2935404b55606b706d68696e746d6d7a85929e98928c857f796d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000407090a0908060300000000000000000000000000000b1825313e4b5864717e8b978f837669554b4035291d100400000000000000000000000000000a15202b37424d57626c727f878e9192918e877f736d63594f43392f1e150b0000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c00000000000000000000000000000000020e1b2835414e5b6874818e9ba7b4aea295887b6f6255483c2f221509000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f0000000000000000000000060d161e242930394045464e5355595b545c6060605b535a5653504a443f4a4e505353535353534d4c4740382e24190e020005111e2a36414c565e616161616161605d554b4035291d10040000000000000000000000000000000000000000000815222f3b4855626e7b8895a1aeb5afaca0968d80736d625f575959586062676d675c51453b30251a0e0200000000000000000814212e3a47535f6a76828f9aa4ada29792857e76726f6d676a6a6a676d6f737980879299a3afaca0968a7e7164564d41362a1e1105000000000613202d394653606c7884919eacaea2988a7e7164564c41362a180e0300000f1a26313c4754616d7a86929facac9f92857a6d6053473b31261a0e02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f13181d20272c3036383f44464d53545c60646a6f74797e83898e92989ea0a8acaba49f9c96918b867e7165584b3e3225180b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070c101314181c191916120d07000000000000000000000000000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f332f2f2f2f2f2f2f2f2f2f2f2f2f30302f3439404a545f6a75818e9babb5b4aa9a8d8174675a4e412f23180c000000000000000000000000050e18242f39434e58606c77828f97a2adb2a89e938a7e71695e544a3f343f45515d676f7c86929fa5afa79d928a7e70695f544a40342821170c030000000000000000000000000000000000000000000000000000000000000000000000000000000c18232e39424a51596063686d747b81796d727f8c928d85807a736d675d5145392c20130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2733404d5a6673808d998e8174675b4e412f24180c000000000000000000000000000000040e1a26313c45505a626d727c81858684817c726d635b51473d31271d0c030000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c00000000000000000000000000000000010e1b2734414e5a6774818d9aa7b4afa295887c6f6255493c2f221609000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f000000000000000000000610181f282f353e424b5153585f6265686b666d6d6c65696663605b54504a555b5d6060606060605a58524a40362b1f1307000714202d3946525e686e6e6e6e6e6e6d675d5145382c1f14090000000000000000000000000000000000000000000815222f3b4855626e7b8895a1b5aba39f9f9d928c7f756e69676666686a6f75796d60574d42362a1e1105000000000000000006121f2b37434e58626f7c87939fa6a9a297928a837f7b7a7877777778797c80848c9299a3abafa39e9184796d6053463b3025190e0200000004111d2935414c5663707d8996a1adac9f9285796d6053473a302519070000000a15202d3946525e6875828f9caaaea2988b7e7164574d42362a1e120500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c10151b1d24292c32383a41464a5053575e61666d71767b80858b90959b9fa3aaaca9a29e99938f89847f7a716d62564a3d3124170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000406070b100d0c0a060200000000000000000000000000000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3c3c3c3c3c3c3c3c3c3c3c3c3c3c3d3d3e40454b515c666f7c87929facb9aea2988a7d7064574a3d312417070000000000000000000000020b17202935404b555f6a727f8c949fa9b3aba1968e81756c61574d42382d35404b555f6a717e8b939da7aea49f92857b6e665c51443e33291e150a000000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404a545c60676d737a80868c80736d798485807a736d68605d554b4035291d11040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a546875828f988c7f7265594c3f322619070000000000000000000000000000000009151f2a333f48515b626a6f75787978746e6a625b514940352c1f150b000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c00000000000000000000000000000000010e1b2834414e5b6774818e9aa7b4aea195887b6e6255483b2f221508000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f000000000000000000061018222a313a414550545c60656a6f72757779797a79787673706c66605c545f666a6c6c6c6c6c6c67645c52473b2f23170b000814212e3b4754616e7a7a7a7a7a7a796d6053473b3025190e0200000000000000000000000000000000000000000815222f3b4855626e7b8895a1afa3999292989c918c827b7674727375787c818276695e52463a2d20150a0000000000000000020f1a26313c4754606a74808d949fa6a9a29e95908c8886858483848486888c91969fa3abaca49f91897d70665c514438291f1408000000000713202c3945525d6875818e9ba8a8a99b8e8174675d514539291e130800000005111e2a36414c5664717e8a98a2a8aa9c8f8376695f53463a2d2114070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c12181c1f262b2f35393d43484c52545b6063696e73797e83888d92989da0a7acaca7a09d97928d87827d78726d67625a50453a2e21150900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c484848484848484848484848484949494a4b4b51555d606d78829099a3afb6ac9f92867a6d6053473a2d20140700000000000000000000000a141d29323b45515d676f7c86929fa6b0afa39991847a6d605a50453b2f262f39434e58616c74818e95a0aaada2979083786d60594f453b30261c11060000000000000000000000000000000000000000000000000000000000000000000000000006121f2c3844515c666d72797f858d9292867a6d6f7c7a736d68605d56514b433a2f24180d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2c3844505c66778491968a7d7063574a3d3024170a00000000000000000000000000000000030e18212d363f4951585f62686b6c6b67625f58514940372e231a0d03000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c00000000000000000000000000000000020e1b2835414e5b6874818e9ba7b4aea194877b6e6154483b2e211508000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f0000000000000000060f18222a343c434c525a61666d72777b7f8284858686868583807c78726d6660667176797979797979736e64584c3f3326190d00111e2b3744515e6a77838787878787807367564d42362a1e110500000000000000000000000000000000000000000815222f3b4855626e7b8895a1ac9f928785929f9c948f8783807f808184898e877b6e6154473d32271b0f0000000000000000000915202b37434e58606d78828f949fa3aba79f9d98999391919090919299999ea1a8aca8a09a938c7f736b60544a403428170d02000000000714212d3a4754606d7a86929b9b9b9b97897d7063554b4035291d1004000000010d1925303a4753606d7985929b9b9b9b93877b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b12181d23282c31373a4145474f54565e61666c70757b80858a90949a9fa2aaacaba39f9b95908b85807b75706c65605d5550483f34291d11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001040607090a0b0c0c0d0d0c0c0b0a090807060300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adb2a5998c7f72665955555555555555555555555555555556565758555c60676d75808e949fabb5afa49a8e8174675d5145392c2013060000000000000000000006111b262f3b444f59606d79839199a3aeb1a79f92877d6f675d51483e33291d28313c46505a606d79839098a2aea99f958d80736c61574d42382e23170f050000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d787f858c92989f988d80746b6f6e68615e56524c45403a31281d130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d79869299887b6e6255483b2f2215080000000000000000000000000000000000060f1b242d373f464e53555b5e5f5e5b55534e463f372e251c110800000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c00000000000000000000000000000000020f1c2835424f5b6875828e9ba8b5b4aa94877a6e6154473b2e211408000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f00000000000000030c18212a343c464e565d606c71797e83888c8e9192989993928f8d89847f786f6a6a76838686868686868073675a4d4034271a0d000d1a2734404d5a6773808d949494908377695e52463a2d20140600000000000000000000000000000000000000000815222f3b4855626e7b8895a1ac9f9286808c96a19e9a93908d8c8c8e9196998c7f7266584e43372b1d12070000000000000000030f1b27323d44515c666d79828c92999fa3aba9aba49f9e9d9d9d9e9fa3abababa8a09e9691887f736d63594f42392e23180500000000000c1825323f4b5865727e8b8e8e8e8e8e8e85786d6053463a2f24180c000000000008131f2c3845515d6774818e8e8e8e8e8e8c807366594d4033261a0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c151d23282e34383c43474b5154596063686d72787d82878d92979c9fa6ababa9a19e99928e89837e79736e6963605b53514c433f362d22180c01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010507080d111314161718191919191919181716151312100b060706030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266626262626262626262626262626262626263636566676d7179818e929da6b0b3aa9f93877c6f62554b4035291d1104000000000000000000030d17222d38414c56616c74808d95a0abb4aa9f958c80736b60554c41362c21171f2a343e45515d676e7b86929fa4aea79d928a7d70695e544a3f342821170c0200000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a8591979fa2aa9f92867b6e63615e56524c45413a352f281f160c0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915222f3c4855626f7b88999286796d6053463a2d2013070000000000000000000000000000000000030c151d2328343c4347484d53555b54524c443c332d251c130a0000000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c0000000000000000000000000000000003101c2936434f5c6976828f9ca9b5aea298867a6d6053473a2d201407000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f000000000000000b151e2a333c464e585f686d757e848b9095989b9e9fa2a49f9e9c9996918b837c716c768390939393938d8073675a4d4034271a0d000a1723303d4a5663707d8998a2a095877b6e6154473b2d22170b00000000000000000000000000000000000000000815222f3b4855626e7b8895a1ac9f92867984919aa4a49f9d9a99999b9ea19d9184776a605447392e23180c0000000000000000000a16202834404a545d676d7880878e92999c9fa3aaa6a7a8a8a8a7a6a5a8a19e9a96918b847d726d635b51473d30271c120700000000000d192633404c5966737f828282828282827f72665c5044382b1d1207000000000004101d2935404b55626f7c828282828282828073675a4d4034271a0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e272e34394045464e53555d60656b6f757a7f848a8f93999ea1a9abaca69f9c97918c86817c77716d67615e5753504945413a312d241b1106000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d111314191d202122242526262626262525242321201f1c17161312100c06030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adb2a5998c7f726f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f7070717375797e848e939da5afbaaea2988e81756a5f53433a2f24180d010000000000000000010b151f27333f49535e68707d8a929da8b1aea2989083786d60594f433a2f241a0f18222935404b555f69717e8a929da7aea49f92857b6e665c50443e33291e140a000000000000000000000000000000000000000000000000000000000000000000000006131f2c3945515d67727f8c97a1adaaa2988e8174675d524c46413a352f29241d160d040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a97918477665c5044382c1f160c01000000000000000000000000000000000b151e272e343a41454c52575f6168615e564c41362a1f1409000000000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c0000000000000000000000000000000004101d2935404b556a7783909daab6ac9f928579675d5145392c201306000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f00000000000007121d27303c454e585f6a6f7a818a91969d9fa7a8aaa9a6a5a6a7a9a8a09e9590867e717683909d9f9f9a8d8073675a4d4034271a0d000714202d3a4753606d7986929fa7978b7e7164544a3f33281c0f03000000000000000000000000000000000000000815222f3b4855626e7b8895a1ac9f9286797d88939fa6aca9a7a5a6a8abaca095897c6f62544b4034281c10040000000000000000040c18232e39424b555d666d737c82868c90929898999a9b9c9b9b9a989696918d89847f79706b635b514940352b1e150b0000000000000c1925323e4b57636d7375757575757575726d62544a3f34281c0b010000000000000c18242f394754606a6f75757575757575736e64584c3f3326190d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d27303940454b5153585f62676d72777c81868c91969c9fa4abacaaa29f9a94908a847f7a756f6b65605d55534d46443f38352f281f1b120900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f13191d202124292c2d2f31323233333332323231302e2d2b282323201f1c1712100b06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adb3a79a8d807c7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7c7c7c7d7e7f82858b91969ea5afbaaea49f92857b6e61584e4331281d130700000000000000000007121d27313944505b656e7a85929ea4aeafa59f92867b6e665c50473d31281e12081018242f39434d57616c74808d959fa9ada2979083786d60594f453b30261c11060000000000000000000000000000000000000000000000000000000000000000000004101d2935404b55606d7984919ea39f98928c857a6d6053473b353029241e18130c04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d162633404d596673808c998f82756954524a4031281d130700000000000000000000000000000007121d27303940454c51565e61696e746d685e52463b31251a0e030000000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c000000000000000000000000000000000613202c3945515d677885929eabb7aa9d9084776a554b4035291d1104000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f0000000000000c18232e39434d575f6a6f7c848f939ea0a8abaaa29f9c9a99999a9c9fa3a7a09892877e7683909da9a69a8d8073675a4d4034271a0d0006131f2c3845515c6776828f9ca89b8e8175665b5044382b1f1206000000000000000000000000000000000000000815222f3b4855626e7b8895a1a89f92867974808d949ea6adb3b2b3b4b3ada79a8d8074665c5145382c1f130600000000000000000007121c273039434b545c606a6f757b7f8386898b8d8e8e8f8e8e8d8b8a8784817d78726d676059514940372e231a0c030000000000000a16232f3b46515b63666868686868686865625b5142382e23170b0000000000000007121d2b37434e5860626868686868686867645c52473b3023170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232e39424b51555c60646a6f747a7e83898e92999ea0a8acaca8a09e98928e88837e79736e6863605953514b46423b37332d29241e160d0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d151b1e25292d2e2f35393a3c3d3e3f3f40403f3f3e3d3c3b3a38342e302d2c28231f1c17110c0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adb5a99d928d88888888888888888888888888888888888889898a8b8c8e92979ea1a8afb4aea49c928a7e71695e52463c311f160c010000000000000000050e18232f39434e58606c77828f97a1adb2a99e938b7e71695f544a3f342b1f160c0007121d27313c45505a606d78839097a2ada99f958d80736b61574d42382e23170e05000000000000000000000000000000000000000000000000000000000000000000000c18242f3945515c67727f8b9698928d857f796d675d51453929251e19130d0701000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f2934404b556875828f9a8d807467635c52433a2f24180d0100000000000000000000000000000c18232e39424b51555d60686e747b817a6d61574d42362a2015090000000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c000000000000000000000000000000000714202d3a4753606d7a8697a1adb5a89c8f8275695c4f422f24180d01000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f000000000004101c2834404b555f696f7c8591969ea5aca8a19e98928f8d8c8c8d8f92999ea1a39992877c83909da9a69a8d8073675a4d4034271a0d0004101c2934404b5565727f8b98a89e9285796c605346392d201308000000000000000000000000000000000000000815222f3b4855626e7b88959b9b9b9286796d78828f949ea2a9a8a8a7a9a19e989285796d6053463a2d201307000000000000000000000b151e283139424a50585f62696e7276797c7f808182828281807f7d7a7874706c66605c554f4740372e251c11080000000000000006121e2a3540495157595b5b5b5b5b5b5b585651493f30261c110600000000000000010f1b27323d464e54565b5b5b5b5b5b5b5a58524a40362b1f130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404b545c60676d71767c81858b90959b9fa3abacaca49f9c96918c86817c76716d66615e56544f4745403936312b27221b19130c04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c131920272b3035393a3e414547494a4b4c4c4c4c4c4c4b4a494846443f3f3c3a38342e2b28231c18120b030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adb9aea49d9a95959595959595959595959595959595959595969698999b9fa2a9acb2afaaa29f928d80736c61574d42342a200d040000000000000000020d17202934404b555f6a727f8c949fa9b3aca1968f81756c62574d42382e22190d0400010b151f2a333e45515c666e7b85929fa4aea79f93887d70695e544a3f342820170d0200000000000000000000000000000000000000000000000000000000000000000007121d2934404b55606d7984918e86807a736d675d554b40352919130d0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007131d28313a45515c67778491988b7e72736e63554b4135291d11040000000000000000000000000004101c2834404b545c60676d737a80868d8074695e53463c31261a0f0100000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c000000000000000000000000000000000916232f3c4956626f7c8995a9b3b4a79a8d8174675a4e4134271b0700000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f0000000005101a232c3845515c676e7b859197a0a8aca49f96918b8682807f7f8083868b91979da399918483919daaa69a8d8073675a4d4034271a0d00000c18232f3b4855626e7b8896a1a297897c6f6256493c3024190d010000000000000000000000000000000000000815222f3b4855626e7b888e8e8e8e8e8679666d79828b92979a9b9b9a9897918d8680796d6053473a2d20140700000000000000000000030c161f2830383f444e53575e6165666d6f727374757575747372706e686763605b54514b433d352e251c130a0000000000000000020d19232e3740464b4c4f4f4f4f4f4f4f4b4a463f372d1e140a0000000000000000000a15202b343d4347494f4f4f4f4f4f4f4d4c4740382e24190e0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515c666d73797e83888d92989da0a7acaca9a29f9a938f8a847f7a746f6a64605c54524c48433d38352f2a251f1b17110d0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060e161e242932373a4146474b4c51545557585959595959585857565453504a4c4946443f3a38342e28231d150c0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adbab6aea9a7a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a3a3a4a6a8abadb3adaba59e98928b80746e635a50453b3022180e00000000000000000008141e29323b45515c676f7c86929fa6b0afa49a91847a6d615a50453c30261c1007000000030d18212834404b545f69707d8a929da6afa49a92857b6e665c50443d32291f1408000000000000000000000000000000000000000000000000000000000000000000010c18232f3945515c67727f86817b736d68605d554b433a2f24180802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d18242f3a434b53606d7a8692978a7e7e8073675d5145392c2013060000000000000000000000000006131f2c3845515c666d727a80868d9292867b6e61584e43372b1e130800000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c000000000000000000000000000000030f1b27333f495365717e8b98a4b1b4aa988b7e7165584b3e3225180b00000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f000000000b16212b37434e58606d79839097a1a9aba39a938d847e797673727374767a7f858e939ba196919195a0aca69a8d8073675a4d4034271a0d00000714212e3a47535f697884919ea9998c7f7366564c4135291d11040000000000000000000000000000000000000814212e3b4754616e7b818282828282817568676d787f858a8d8e8f8e8c8985807b736d675d5145392c1f13060000000000000000000000040d161e262e343c43474d5254545c606265666768696868676563615e565653504a454039302b231c130a0100000000000000000007121c252e353b3e40424242424242423f3d3a342d251b0c02000000000000000000040f19222b32373b3c42424242424242403f3b362e261c1208000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7980858a90949a9fa2aaacaca7a09d97928d87827d78726d68625f5853514a46413b38322c29241d1a140f0b060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061018202830353d43474c525458555d6062646565666666656565646361605c54595653504a46443f38342e271e17110a020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adb2b2b2b2b2aeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafb0b6afacaba8a9a29f9a938f867e746e645c52483e33291f10060000000000000000010d1925303b444f59606d79839098a3aeb1a79f93887d70685d52483f332a1e150a0000000000060f18232e39424d57616c73808d949fa9aca1979082786d60594f443b3025190e0200000000000000000000000000000000000000000000000000000000000000000007121d2834404b55606d787b746e69615e56514b433a31281d13070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935404b555d626f7c88999a908a8b877a6d6054473a2d211407000000000000000000000000000713202d3a4653606d797f858c92989f988e81746a5f53473a2f24190d01000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c00000000000000000000000000000005121f2b3744505b6574818e9ba7b4aea298887b6f6255483c2f22150900000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f00000004101c28333b4754606a74808d95a0a9aca39992888079716d6767666667686d7279818c919ba19e9da0a7b1a69a8d8073675a4d4034271a0d000006121e2b37424d576774818d9aab9d908376685d5245392c2013070000000000000000000000000000000000000714202d3a46525e696e757575757575756f655d666d72797d808282817f7c79736e69605d554b4035291d1004000000000000000000000000040c141c232831373b4246484b515356585a5b5b5c5b5b5a585754524c4a46443f38342e271e1a110a0100000000000000000000000a131c232a2f32333535353535353532312e29231b1309000000000000000000000007101920272b2e2f353535353535353433302b241c140a01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8792979c9fa6acadaba39f9b95908b85807b76706c66605d56534e4644403936302c271f1d18120e0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f18222a323a41464e54565e616468676d6f707172727373727271706f6e6d66686663605c5453504a4540393028221c140b0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a4a4a4a3aca49f9e9c9997928e88827b716c645c524a40362c21170d00000000000000000005111e2a36414c56616b74808d95a0aaa5aaa0958d80736b60564c41362d21180c0300000000000007121d27303b45505a606d78829097a1aca99f948d80736b60564d41362a1e1105000000000000000000000000000000000000000000000000000000000000000000010c18232e3945515c666d6e69615e57524c45403a31281f160c01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945515d676d737e8a97a29a9799897d7063564a3d3023170a000000000000000000000000000714202d3a4753606d7a8591979fa2aa9f92877b6e62564c4135291d1104000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c0000000000000000000000000000030c15202d394653606c7884919eabb8ac9f9285796d6053463a2d20130700000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f0000000714202c38444f59626f7c89929da7afa49a92877e736d67605d555959565d60676d747f8c919ca5aaacb1b3a69a8d8073675a4d4034271a0d0000020e1a26313d4a5764707d8a99a39f92867a6d6054473a2d21140a00000000000000000000000000000000000005111e2a36424d565e6168686868686868655d545c60676d7174757574726f6d66615e57514b43392f24180c0000000000000000000000000000020a111720262b30363a3b404546494c4d4e4f4f4f4e4d4c4a4746413d3938332d28231d150c0800000000000000000000000000010a12191e232526282828282828282524221d18110900000000000000000000000000070f151b1f2223282828282828282726231f19120a0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a1a9ababa9a19e99928e89837e79746e6963605b54524c47433c38342e2a251e1b16100c070100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d18212a343c444c52586062686d7175777a7c7d7e7f7f7f7f7f7f7e7d7c7b797775726f6d6664605c54514b433e332d261d150c03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a879398989898989898989898989898989898989898989898989898979796959a93918f8c8985817c756e69625a524a40382e241a0f050000000000000000000714202d3946525e68707d8a929898989898989083796d60594f443a30241b0f0600000000000000000b151e29333e44505c666e7b85929a9898989893887d70685e5246392d2014070000000000000000000000000000000000000000000000000000000000000000000007121d2834404b545c60615f57524d46413a352f281f160d0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d797f85929faba6ab998c7f7366594c403326190d0000000000000000000000000006131f2c3845515c67727f8b96a1ada9a2998e8275685d5245392c201307000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c00000000000000000000000000000a151e2935414c56626f7c8996a1adb6ac9c8f8276665c5044382b1f120600000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f0000000916232f3c4855616b7682909ca4aea79f93887e716c605c55514b4c4c4c52555d606d727f8c939eaab4bcb3a69a8d8073675a4d4034271a0d0000000914212d3a4754606d7a86929fa3998a7d7164574a3e31261b0f030000000000000000000000000000000000020e1925303b444d52545b5b5b5b5b5b5b59534a50555c6064676868676562605c54534d45403931271d120700000000000000000000000000000000060b151a1f252a2d2e34383a3c3f404142424241403f3d3b3936302d2b28221c18120b0300000000000000000000000000000000070d121619191c1c1c1c1c1c1c181815120c06000000000000000000000000000000040a0f1315161c1c1c1c1c1c1c1a1917130e08010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0aca79f9d97928c86827d77726d67615f5753504a45413a37322c28231c19140f0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b151f2a333c464e565d616a6f757a7e818487888a8b8c8c8c8c8c8b8b8a89878684827f7c7975706d66605c554f443f382f261e150a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a878b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8a8989888684827f7c79746f6a615f57504840382f261c1208000000000000000000000814212e3b4754616e7a858b8b8b8b8b8b8b8b867c6f675c51473d32281e1209000000000000000000030c172128343f4a545e69707d888b8b8b8b8b8b8b857b6e6154473b2e21140800000000000000000000000000000000000000000000000000000000000000000000000c18232e39424b515355534d46423b353029241d160d040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b9297a2adb4a89b8e8175685b4e4235281b0f0200000000000000000000000004101c2934404b55606d7984919ea29f97928c847a6d6054473a2d211407000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c0000000000000000000000000006111c26303845525d6874808d9aa8b2afa49a8b7f7265544a3f34281c100300000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f000005121e2a36424d5763707d8a949fabaca0958d80736c615a514b45403f4041454b515b636d75818e98a2aebab3a69a8d8073675a4d4034271a0d0000000613202c3945515d6776838f9cab9a8e817467584e43372b1f120600000000000000000000000000000000000009141f29323b4246474f4f4f4f4f4f4e4d483f444b5153575a5b5c5b595653504a46423b352f271f150b010000000000000000000000000000000000030a0f141a1e2023282c2d2f323334353635353432302e2d2a25201f1c17110c070000000000000000000000000000000000000002060a0c0d0f0f0f0f0f0f0f0c0b090601000000000000000000000000000000000000030608090f0f0f0f0f0f0f0d0d0b070300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a39f9b95908a85807b75706b65605d55534d46443f3835302b261f1c18120e0802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d27313c464e585f686d757c82868b8e91969597989899999998989897969992918e8c8985827d78726d676159504a423830261c11060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d797f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7e7e7e7e7d7d7c7b7a787573706d66625f58534d453f362f261d140a00000000000000000000000916232f3c4956626f7c7f7f7f7f7f7f7f7f7f7d706a5f554b40352b20160c0000000000000000000000060f17232e38424d57616b707d7f7f7f7f7f7f7f7f7d6f6356493c30231609000000000000000000000000000000000000000000000000000000000000000000000007121d2730394045464846423c363029251e18130c04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a2a9b3b6a99c8f8376695c504336291d1003000000000000000000000000000c18232f3945515c67727f8b9698928d857f796d685d5245392c201307000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c0000000000000000000001040a1117232e38424d57606d7a85929facb8ac9f93877b6e6154483b2e23170b0000000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f00000714202d3a46525e6975828f9ca6b0a79d9083786d605a50454039352f2f353a4045515b616e7a85929fabb5b3a69a8d8073675a4d4034271a0d00000004111d2935414b5566727f8c99a99e9184786a5f53473a2e211507000000000000000000000000000000000000020d17202930363a3b42424242424242403d34394045474a4d4f4f4e4c4946443f38363129241d150d03000000000000000000000000000000000000000002090e1214181c1f20232527282829282827252421201e1913120f0b0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a879498928e88837e79736e6963605953514b47423c38332d29241e1b15100c0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18242f39434e585f6a6f7a81898e92999b9ea0a8a3a4a5a5a6a6a5a5a4a3aba39f9e9b9997928e8a847f79706b605b544a42382e23170d04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515c666d7272727272727272727272727272727272727272727272727272717171706f6e6d67696663605c54534e46423b332d241d140b0200000000000000000000000815222e3b4754606a6f727272727272727272706b60584e43392e23190e0400000000000000000000000006111c26303b454f59616c7072727272727272726f6b6054483b2f2215090000000000000000000000000000000000000000000000000000000000000000000000000b151e272e34383a3b3a37312a251f19130d070100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a97acb3b9b1a99d9083766a5d5043372a1d10040000000000000000000000000007121d2834404b55606d7984918d86807a726d675d564c4135291d1104000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326190c090909090909090a0a070d11151c2328343f4a545f6973808c98a2aeb3a99d908376695e52463a2d1c11060000000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f00000815212e3b4854616e7b87939facaca0958a7d70665c50483e342e292424292f353f46525e6873808c99a3afb3a69a8d8073675a4d4034271a0d000000010d18242f3c4955626f7c8897a1a196887b6f6255483c2f24180c00000000000000000000000000000000000000050e171f252a2d2e353535353535353431282f34383a3e414242413f3c3a38342e2a251f18120b0300000000000000000000000000000000000000000000000205070c10131316191a1b1c1c1c1b1a19171414110e080603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003050605030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a87918c86817c76716d66615e57544f4745403937312b28221c19130f0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2935404b555f6a6f7c848e939b9fa3abaaacb2b0afafaeadaeaeafb0b0b5aeacaaa8a9a29f9b96918c847d746c665c544a3f34281f160c010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404b545c606565656565656565656565656565656565656565656565656565656464636261605c55595653504a47433c363129211b120b0200000000000000000000000006131f2b37434e5860626565656565656565656360594f463c30271d110800000000000000000000000000000a151e29333d47505a616465656565656565656360594f43382c1f1307000000000000000000000000000000000000000000000000000000000000000000000000030c151d23282c2d2e2d2b261f1a140d0802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916232f3c4956626f7c899aa4afaca7a09d9084776a5d5144372a1e110400000000000000000000000000010c18232e3945515c66717f86807a736d68605d554c443a2f24190d01000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3326191515151515151616161718181d20262e343e44505c666e7b86929faab4ada1978b7e7165574d42362a1e0a000000000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f0004101d2935404b5566727f8c99a4afaa9d9084776b61544a3f3628231d18191d242a36414c56616e7b86929facb3a69a8d8073675a4d4034271a0d000000000713202d394653606c7885919ea8988c7f7265554b4035291d100400000000000000000000000000000000000000050d14191e20212828282828282827251d23292c2d3134353534322f2d2c28231c1a140c070100000000000000000000000000000000000000000000000000000000040607090c0d0e0f0f0f0e0d0c0a08070502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f1213120f0b06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a87847f7a746f6a64605c54524d48443d39352f2b261f1c17110d0802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515d676e7c8591969ea5acaeaeaca9a6a4a3a2a1a1a1a2a2a3a5a7a8abadb2b3adaba8a19e96918a80786d665c50443e31281e130800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232e39424b5153585858585858585858585858585858585858585858585858585858585756565553514b4c4946443f3837312a261f170f090000000000000000000000000000030f1b27323d464e545658585858585858585856544f473d342a1e150b000000000000000000000000000000030c17212c353e47505557585858585858585856544f463d32271b0f0300000000000000000000000000000000000000000000000000000000000000000000000000030b12181c1f2022211e1a140e09020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a86939fa49f9c95908a8276695c4f4336291c1003000000000000000000000000000007121d2834404b54606d787b746e68605d56514b433a32281e130800000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f332622222222222222222323242524292c30383f44505a606d78839098a2aeb3a99e9285796d6053473b30251a0e000000000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f0006131f2c3945515d6776838f9cabb2a9998c7f7266594f42382e2418120c0d131925303b46525e6876838f9ca9b3a69a8d8073675a4d4034271a0d0000000005121f2b3744505b6574818e9bab9c8f8276675d5145392c1f1306000000000000000000000000000000000000000002090e1114141c1c1c1c1c1c1b1b1812181c1f2024272829282623201f1c17110e0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0f11171b1f201f1b17110a0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d797d78726d6862605853514b46423b38322c29241d1a150f0b060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2935404b55606d79839197a1a8afabaaa29f9c9a979695949494959696989a9c9ea1a8a8abaeb2ada8a19e928d81786d605a50433a2f24190d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d2730394045464c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b4b4b4b4a4a4948474540403d3a38342e2b26201a140d06000000000000000000000000000000000a15202b343d4347494c4c4c4c4c4c4c4c4c4a48443d352b22180c0300000000000000000000000000000000050f1a232c353e44494a4c4c4c4c4c4c4c4c4948433d342b21160a00000000000000000000000000000000000000000000000000000000000000000000000000000000070c1013131514120e090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945515d677784919e9a938f89837d776c605346392d201306000000000000000000000000000000000c18232e3944515c666d6e69615e56524c454039312820160c0100000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f332f2f2f2f2f2f2f2f2f2f3031322f35393d424a505a626d73808c959faab4ada1978c8073675c514538291f1409000000000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f000714202d3a4753606d7986929facada196887b6e6155483e30261c1207000108141e2a36414d5665727f8c98a5b2a69a8d8073675a4d4034271a0d00000000030f1b27333f495364717e8a99a49f92867a6d6053473a2d20140900000000000000000000000000000000000000000000020507080f0f0f0f0f0f0f0e0c070c101314171a1c1c1b19161312100c0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b10151a1b22272b2d2b27221b140b020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3945515d676d706d66615e56544e4645403936302c27201d18120e090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515d67737f8c95a0a9aca69f9c98928f8d8b898888878888898a8b8d8f9196989b9fa2aaabb0ada49d938d80746c61564c4135291c110600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e272e34383a3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3e3e3e3d3c3b3a38342f302d2c28231c1b150e09030000000000000000000000000000000000040f19222b32373b3c3f3f3f3f3f3f3f3f3f3d3c38332b2319100600000000000000000000000000000000000008111a232c33393c3d3f3f3f3f3f3f3f3f3c3b38322b22190f04000000000000000000000000000000000000000000000000000000000000000000000000000000000000040607080705020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2935404b556774818e969187827d77716c655b5044372b1f12050000000000000000000000000000000007121d2834404a545c60615e57524c45413a352f271f160d040000000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c3f3c3c3c3c3c3c3c3c3c3c3c3d3d3e404145474f545c606c717f8b929ca7b1b1a79e92857a6d61554b4034291c1004000000000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f000a1623303d495663707d8999a3aeab9e918478695f53473a2c1e150a000000020e1925303c4956626f7c8995a9b2a69a8d8073675a4d4034271a0d00000000000b17222d3a4754616d7a86939fa3988a7d7063574a3d31261a0e020000000000000000000000000000000000000000000000000002020202020202010000000406070b0e0f0f0e0c0907060300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d11171c1f262b2d33373937332d261d140a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2935404b555d6064605c54524c47433c38342e2a251f1b16100d070100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7985929ea8a8a09d948f8a8682807e7c7c7b7a7b7b7c7d7e808284888b8e92989c9fa6aaaea59d928a7e71685d5245382e23170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c151d23282c2d3232323232323232323232323232323232323232323232323232323131302f2e2d2c292323201f1c17110f0a03000000000000000000000000000000000000000007101920272b2e2f323232323232323232302f2c2721191108000000000000000000000000000000000000000008111a22282d30313232323232323232302f2c2721191007000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d18242f3d4a5764707d8a91847c75706b64605b53493f33271b0f0300000000000000000000000000000000000c18232e39424a515354534d46413b352f29241d150d04000000000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266594c484848484848484848484949494a4b4d4b51545960666d737e87939fa4aeb3aa9f958b7e71685d5243392f23180c00000000000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f000c1925323f4c5865727f8b98abb4a89b8f827568574d42372b1a0c03000000000814212d3a4754606d7a8797a1ada69a8d8073675a4d4034271a0d00000000000613202d3946525e687683909daa9a8d807467574d42362a1e12050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0f13191c23282b3137383f4446443f382f261b1106000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18242f39434b51535753504a46413a37322c28231d1a14100b0401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a97a2a69f959189827e7a767371706f6e6e6e6f6f70727475787b7e81858b90949c9ea6aca49e92857a6d60544a3f34281c10030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b12181c1f202525252525252525252525252525252525252525252525252525252524232322201f1c18161312100c06000000000000000000000000000000000000000000000000070f151b1f22232525252525252525252322201c160f08000000000000000000000000000000000000000000000810171c202324252525252525252523221f1b160f07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000406070a0e0f0c0706030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a85897d6f6a63605953504941382d22170b00000000000000000000000000000000000007121c2730394044464846423b363029241e18120b0300000000000000000000000714212d3a4754606d7a8793a0adb2a5998c7f7266595555555555555555555555555656575859555d60646b6f78808a9399a4afb6aca2989083776c60564c4131271d120700000000000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f000e1a2734414d5a6774808d9aa7b3a6998d8073665a4d4031261a0d00000000000613202c3945515d677885919eaba69a8d8073675a4d4034271a0d000000000005111d2a36414c566673808c99a99e918477695f53463a2d211407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b10151b1e24292e34383c4347495053504941382d22170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d2731394045474a46443f3836302b271f1c18120e0902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2834414e5b6774818e9aa69f948f837d76716d6767646362616161626363656769696e71757a7e83888f949ea1a8a1978c7f72665c5044382b1f120600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c10131319191919191919191919191919191919191919191919191918181818171716151413100c07070603000000000000000000000000000000000000000000000000000000040a0f131516191919191919191919171613100b05000000000000000000000000000000000000000000000000050b1014161719191919191919191615130f0a04000000000000000000000000000003060608080808080706050300000000000000000000000000000001070c101314171b1c191312100b06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945515d67748085786b6058544f46443f382f261b1106000000000000000000000000000000000000000b151e272e34383a3b3a36312a251e19130c07010000000000000000000000000714212d3a4754606d7a8793a0adb2a5998c7f726662626262626262626262626262626364656668676d70767c838d929fa4abb5afa49a92857b6e655b50443a301f150b0100000000000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f00101c2936434f5c6976828f9ca9b1a4988b7e7165584b3e32251809000000000004111d2935414b556a7783909daaa69a8d8073675a4d4034271a0d0000000000010d1925303c4956636f7c8997a2a096887b6e6155483b2e23180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d11171c1f262b3035383f44464e53535b605b53493f33271b0f03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b151f272f35393a3d3a38342e2a251e1b15100c0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101d2a3743505d6a7683909d9f948f8279706b64605d55585655555455555657585a575f6165676d71767c828991969ea69e9185796d6053463a2d2013060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000406070c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b0b0b0a090807060400000000000000000000000000000000000000000000000000000000000000000000030608090c0c0c0c0c0c0c0c0c0a0907040000000000000000000000000000000000000000000000000000000004080a0a0c0c0c0c0c0c0c0c090907030000000000000000000000000000060b0f121315151515141413120f0b060806020000000000000000040a0f12181d1f2024272926201f1c17110a02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935404b55626e7b807467594f48443d37332d261d140a0000000000000000000000000000000000000000030c151c23282c2d2e2d2a251f19140d080100000000000000000000000000000714212d3a4754606d7a8793a0adb2a5998c7f726f6f6f6f6f6f6f6f6f6f6f6f6f6f6f7070717375777a7d828990959da4afb5afa39f93887d70695f53493f32281e0d030000000000000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f00111d2a3744505d6a7783909daab0a3978a7d7064574a3d3124170a0000000000010d18242f434f5c6976828f9ca9a69a8d8073675a4d4034271a0d0000000000000813202d3a4653606d7985929fa8988b7e7265544a4034281c1004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0f13191c23282b31373a41464a5053585f62656c655b5044372b1f120500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d151d24292c2d312d2b28231c19130f0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121f2b3845525e6b7885919e988f82786d67615953514b4b494948474848494a4b4d4d5355555d60646a6f757d848f949ea197897d7063564a3d2d22170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171c1f20212121212121201f1b171514120e090300000000050b10151b1d24292c2d313436332d2b28231c140c0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d18242f3a47535f696e746e6458473d38332b27221b140b02000000000000000000000000000000000000000000030b12181c1f2021211e1a140d0802000000000000000000000000000000000714212d3a4754606d7a8793a0adb3a79a8d807c7b7b7b7b7b7b7b7b7b7b7b7b7b7c7c7c7d7e808184868a8f949d9fa7aeb3aca49f918c7f736b61574d41382d20160c000000000000000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f00111e2b3744515e6a7784919daaafa396897c706356493d3023160a000000000000071c2935424f5c6875828f9ba8a69a8d8073675a4d4034271a0d00000000000006121f2b3844505c6675828e9ba89b8f8275665c5144382c1f120600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c10151b1e25292e34383c43474c52545c60646a6f74786c605346392d2013060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b12181d1f2024201f1c17110d08020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121f2c3945525f6c7885929f92857b6e665d554f4745403e3d3c3b3b3b3c3c3d3f414246484b5153585f626b7079828e939e9a8d807467544a3f33281c0f030000000000000000000000000004060708080808080808080808080808080808080808080706040100000000000000000000000000000306060808080808080808080807060603000000000000000001040607080808080807060400000000000000000001040607080808080705020000000000000000000000000000000000000000000000000003050607060401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b141c22282b2d2e2e2e2e2e2d2d2b272222211e1a15100b06050b10161c20262b2f35383a3d41423f3a38342e261e140a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007131d2b37424d575f6267645c5247352c271f1b17110a02000000000000000000000000000000000000000000000000070c1012131514120e09030000000000000000000000000000000000000714212d3a4754606d7a8793a0adb5a99d928d88888888888888888888888888888889898a8b8c8e9092999c9fa6abb1b0a9a29a938c7f736d63594f453c2f261b0e04000000000000000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f00121e2b3845515e6b7884919eabafa295897c6f6256493c2f2316090000000000020f1c2835424f5b6875828e9ba8a69a8d8073675a4d4034271a0d00000000000003101c28343f4a5465717e8b98a79f9285796d6053463a2d2013080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d11171c1f262b3035383f44464e53565d61666d70767c818073675a4d4034271a0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070c101314171312100b060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121f2c3945525f6c788592998c7f72695e544b433d39352f302f2e2e2e2f30303231363a3b4045474e535960676d78818e949d908376665b5044382b1f12060000000000000000000004070c10131414151515151515151515151515151515151515151413100d070100000000000000000000060b0f1213151515151515151515141413120f0b060603020608080d11131415151515141313100c07090703030606080d1113141515151414110e0802000000000000000000000000000000000000000000060b0f12131413110d0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d262d3338393b3b3b3b3b3a3937332d2f2e2b261f1c171110171c21272c3137394045474a4e4f4c46443f3830261c110600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010e1a26313c454d53555a58524a4036231c160f0b06000000000000000000000000000000000000000000000000000000000406070807050200000000000000000000000000000000000000000714212d3a4754606d7a8793a0adb9aea49d9a95959595959595959595959595959595969798999b9d9fa3ababb0b1aca69e9792887f736d635b51473e332a1d140a00000000000000000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f00121f2c3845525f6b7885929eabafa295897c6f6256493c2f2316090000000000020f1c2935424f5c6875828f9ba8a69a8d8073675a4d4034271a0d000000000000000b17232e3b4854616e7b8795a0a298897c706356493d3025190d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0f13191c23282c32373a41464a5053585f62686d72787d82888d8174675a4e4134271b0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000406070a07060300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121e2b3845515e6b78849195877b6e61574d4239312c2924232222212222232425262a2d2f35393c43474f555d666d788290989286796c605346392d2013060000000000000000070c1013181c1f20212121212121212121212121212121212121212120201d18120c0400000000000000020a11171c1f202121212121212121212121201f1c171312100f121415191d20212121212121201f1c181615130f0f121317191d202121212121201e19140d05000000000000000000000000000000000000020a11171b1f2021201d19130c04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c262f383f444648484848474746443f3f3b3a37312b28231c1b21282d33383c43474b5153575a5c5953504a42382e23170d040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009151f2a333c4247484d4c4740382e24110b030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adbab6aea9a7a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a3a3a4a6a8aaacafb3adaba7a09d948f857d726d635b514940352c21180b0200000000000000000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f00121e2b3845515e6b7884919eabafa296897c6f6356493c302316090000000000030f1c2936424f5c6975828f9ca8a69a8d8073675a4d4034271a0d000000000000000614202d3a46525e697784909daa998d807366564c41362a1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c10151b1e252a2e34383c43474c52545c60646a6f747a7f848a8f948d8174675a4e4134271b0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2a3744515d6a778490908377695e53453b3027201d181616151415151617181a1e2124292c32373d434b545c666e7b869299877b6e6154483b2e211508000000000000030b12181c1f23292c2d2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2d2c29241d160d040000000000020b141c22282b2d2e2e2e2e2e2e2e2e2e2e2d2d2b2822201f1c1a1f212224292c2d2e2e2e2e2e2d2c282323221f1b1c1f202424292c2d2e2e2e2e2d2a251e170e05000000000000000000000000000000050b0b141b22272b2d2d2c29241e160d04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d38424a50535454545454545350494c4847423c38342e28272c33393d44484e53555d6064676966605c544a3f34281f160c01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030e18212a31373a3b413f3c362e261d1200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adb2b2b2b2b2aeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafb0afb5afacaba8a9a29f9b959089827b706b625b514940372e231a0f060000000000000000000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f00111e2a3744515d6a7784909daaafa396897c706356493d3023160a000000000003101d2a3643505d697683909ca9a69a8d8073675a4d4034271a0d0000000000000005121e2a36424d576773808d9aaa9d908377685e5246392d201406000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d11171c1f262b3036383f44464e53565e61666d71767c81868c91969c9a8d8174675a4e4134271b0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101d293643505c6976838f8e827568574d4233291e15110d070908080809090a090e1214181d20262b313a424a545f6974818e95897c6f6256493c2f2316090000000000060c151d23282c2f34383a3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3a39352f281f160c01000000000a141d262d3338393b3b3b3b3b3b3b3b3b3b3a3938332d2d2c28262b2e2f2f35393a3b3b3b3b3b3a38342e2f2e2c27282b2d312f35393a3b3b3b3b3936302920170d02000000000000000000000000040a0f161c1d262d3337393a39352f281f160c040707070401000000000000000000000000000000000000000000000000000000000000000000000000000000030f1c28333f4a545b60616161616160605b535955534e46443f383432383e44494f55585f62676d707475726d665c50443f31281d130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f181f262b2e2f3433302b241d140b01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a4a4a4a3a3aba39f9e9c9997928e89837d756e696159514940372e251c1108000000000000000000000a1623303d495663707c8996a3a5a59b8e8275685b4f4235281c0f00101d2a3743505d6a7683909da9b0a4978a7d7164574a3e3124170b000000000005111e2a36414c566a7784919daaa69a8d8073675a4d4034271a0d00000000000000020e1a25303d4a5663707d8998a29f93877a6e6154473b2d22170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f13191c23282c32373a41464a5053585f62686d72787d83888e92989ea1a89a8d8174675a4e4134271b0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2834414e5b6774818e8d8074675a4d413127170c04010000000000000000000205070d10151b1f282f39424d57636f7c8999897d7063564a3d3023170a00000000060f181e272e34383a40454747484848484848484848484848484848484848484745403931281d120700000006111c262f383f4446484848484848484848474746443f3e3a383431373a3b404145474848484847464540403c3b38323338393d414145474848484746413b32291e14080000000000000000000000070f161b21272c2f383f44464745413a31281e1311131413110d08010000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505b666c6e6e6e6e6e6d6c656865625f5753504a443f3d44484f555961636a6f74797d81827f786d605a50433a2f24180d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060e151a1e21222726231f19120b0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a87939898989898989898989898989898989898989898989897979796959992918f8c8985817c77706b615e574f473f372e251c130a00000000000000000000000a1623303d495663707c8996989898988e8275685b4f4235281c0f000f1c2835424f5b6875828e9ba8b1a5988b7e7265584b3f3225180900000000000714202d3946525e687885929faba69a8d8073675a4d4034271a0d00000000000000000913202d3a4653606d7985929fa49a8b7e7164544a3f33281c0f03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c10151b1e252a2e34383c43474c52545c60646a6f747a7f848a8f949a9fa2aaaca79a8d8174675a4e4134271b0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b8d8073665a4d4033271a06000000000000000000000000000001040a0d161d27303c4653606d7986928a7d7064574a3d3124170a000000050e18212a30394045464b5153545454545454545454545454545454545454545453514b43392f24180d0100000b17222d38424a5053545454545454545454545453504a4b46443f3c4347484c4c5154545454545453514b4d4948433d3f44464a4e4c525454545454524c443b3025190e020000000000000000020a101921272c33383e4149505354524c433a2f24191d2021201d19130c040000000000000000000000000000000000000000000000000000000000000000000000000613202d394653606c787b7b7b7b7a7a797775726e6a64605c54504a464f545961646b70767c81858a8d8f8c81756c62554b4035291d1104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e1214151a1917130e08010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a878b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8a8a898887868482807c79746f6a636059534d453e352d251c130a0100000000000000000000000a1623303d495663707d898b8b8b8b8b8b8175685b4f4235281c0f000d1a2733404d5a6673808d99a6b3a69a8d8073675a4d4031261a0e02000000000814212e3b4754616e7a8798a2aea69a8d8073675a4d4034271a0d000000000000000006131f2c3845515c6775828f9cac9b8e8175665b5044382b1f120600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d12181c1f272b3036383f44464e54565e61666d71767c81868c91969c9fa6acadaba39f9a8d8174675a4e4134271b0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091623303c4956636f7c898e8174675b4e412e23170c0000000000000000000000000000000000040b151f2c3845515c667884918a7d7164574a3e3124170b0000020d17202a333c424b5153555c606161616161616161616161616161616161616161605d554b4035291d100400030f1c28333f4a545b606161616161616161616160605b545753504a474e535559555d606161616161605c555a56544e474a5053575b565d60616161615e564c41362a1e110500000000000000000a141c222b32383d44484f535b60605d564c41352924292c2d2c29241e160d0400000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8787878787878684827f7b77716d66605c54535960636c70777d82888e92979a9c938b7e71675d5145392c20150a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020608080e0d0b070300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d797f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7e7e7e7e7d7c7c7b797875736f6d66626058554f46423b332c231b130a010000000000000000000000000814212e3b4754616e7b7f7f7f7f7f7f7f7d7063564a3d3023170a000b1825323e4b5865717e8b98aab4a89c8f827569574d42372b1e1205000000000a1723303d4a5663707d8996aab4a69a8d8073675a4d4034271a0d000000000000000004101c2834404b5565727f8b98a89e9285796c605346392d20130800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f14191c23282c32373a41464a5053585f62686d72797d83888e92989ea1a8abaca8a19e99928e898073675a4d4034271a0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a868f827568544a3f34281c1003000000000000000000000000000000000004101c2834404b546a7784918a7d7164574a3e3124170b000009141f29323c454e545c6065676d6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6d675d5145392c2013060006121f2b3844505b666c6e6e6e6e6e6e6e6e6e6e6d6c666864605c5454585f62666a676d6e6e6e6e6e6d676a6762605853545b6064676b686d6e6e6e6e685e5246392d2014070000000000000008121c262e343d43484f545961656c6d685d52453d322f35393a39352f2820160c01000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a87949494949992918f8c88837e78716d66615f616b70767d83898f949a9fa2a9a59e9185796d6053473c31261b0f03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515c666d727272727272727272727272727272727272727272727271717170706f6e6d66696663605c54544e48443d363129211a110901000000000000000000000000000714202d3a46525e696e72727272727272706b6155483c2f231609000916232f3c4956626f7c8998a2aeab9e918578695f53463a2d21140a00000007111e2a36414c5666737f8c99a6b2a69a8d8073675a4d4034271a0d0000000000000000000c18232e3b4855616e7b8896a0a197897c6f6256493c2f24190d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c10151b1e252a2e34383c43474c52545c60646a6f747a7f848a90949a9fa3aaacaca49f9c96918c86817d736e64584b3f3326190d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945525d687683908376665c5044382c1f1206000000000000000000000000000000000004101d2935404b556b7884918a7d7164574a3e3124170b00020e1925303b444e575f666d72777a7a7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b796d6053473a2d201407000613202d394653606c787b7b7b7b7b7b7b7b7b7a7a797875716d666160626a6e7376797a7b7b7b7b7a797876736f6a625f61666c707477797a7b7b7b7a6e6154473b2e211408000000000000020e19242e3840464f545960636b70787a6d60584e43383a41454745413a32281e1308000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0a1aba39f9e9b9895908a847e78706c696e757d838a90959c9fa6aba7a5aaa1978b7f7265584e43372b1f1206000000000000000000000000000000000000000000000000000000000003060607070604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030606070706040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404b545c60656565656565656565656565656565656565656565656565646464636261605c54595653504a48433d38332a251f170f0800000000000000000000000000000005111e2a36424d575e61656565656565656361594f44382c201407000713202d3a4653606d7885929facada197887b6e6155483d2f261c110804071019232d3946525e687683909ca9b3a69a8d8073675a4d4034271a0d0000000000000000000714212d3a47535f697784919ea9998c7f7366564c4135291d11040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080e12181c1f272b3036394044464e54565e61666d71767c81868c91969c9fa6acaba9a29f9a938f8a847f7a75706b645c52473b2f23170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414c566673808c85796d6053463a2d201307000000000000000000000000000000000006131f2c3945515d677885928a7d7164574a3e3124170b0005111e2a36424d565f6a6e797f838687878787878787878787878787878787878787877e7164574b3e3124180b000714212e3a4754616d7a87878787878787878787878684827e78716c6a6f767b7f8385878787878787868583807c766f6a6c70787d818486878787878276695d5043362a1d1000000000000007131f2a36404a525960636b70767d8382756a60544744484c5254524c443a2f24190b020000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0adb5aeacaaa8a79f9d96918b847d76737b828990959d9fa7a9a19e9a989da09d9184776a5f53473a2e21150800000000000000000000000000000000000000000000000406070a060b0f1213141313100c070b08070502000000000000000000000000000000000000000000000000000000000000000000000000000001050707060b0f1213141312100c070808060200000000000006060606060601010000000000000000000000000000000000000000000000000000000000000000000000000c18232e39424b515358585858585858585858585858585858585858585858585858575756555453504a4d4946443f3838322c27211a140d0500000000000000000000000000000000020e1a25303b454d52545858585858585856554f473d33271c10040006121f2c3844505c6676838f9cacb3a9988c7f7265594f42382d221913101218222935404b55616e7a86929facb3a69a8d8073675a4d4034271a0d00000000000000000006121e2b37424d576774818d9aab9c908376685d5245392c201307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d14191d23282c32373b41464a5153586062686d73797e83888e92989ea1a8abaca7a09d97928d87827d78736e68636059524a40362a1f13070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d19242f3c4956636f7c89887c6f6255493c2f24180c00000000000000000000000000000000000714202d3a4753606d7a86978a7d7164574a3e3124170b000714202d3a46525e696e7c848b9093999494949494949494949494949494949494948a7e7164574b3e3124180b000714212e3a4754616d7a879494949494949494949993918f8a847e75757c82888c90929894949494949792908d89837c72747d848a8e9192999494908376695d5043362a1d100000000000000a17232f3b47525c636b6f767d838a90897c6f62594f4f54565d605d564c4135291d140a0000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0a6a6a7a8aaacafaba8a09e95918a8280868f939d9fa7a7a09d97918d8c9196a096887c6f6255483c2f221509000000000000000000000000000000000000000001070c101314171a171c1f2020201f1c181b181414110e09040100000000000000000000000000000000000000000000000000000000000000000002080d11131418171c1f2020201f1c18191514120e0903060a0c0d1313131313130e0d0b080300000000000000000000000000000000000000000000000000000000000000000007121d2730394045464c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b4b4b4b4a49494846443f403c3a38342e2c27211c160e090300000000000000000000000000000000000009141f29333b4246474c4c4c4c4c4c4c4a48443d352c21160b000003101c28343f4a5465727f8c9aa4afaa9d9083776b60544a3f332a251f1c1f2429343c45515d67727f8c99a3afb3a69a8d8073675a4d4034271a0d000000000000000000020e1a26313d4a5764707d8a99a39f92867a6d6054473a2d21140a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e171f252a2e34383d43474c52545c60646a6f747a7f848a90949b9fa3aaacaaa39f9b95908b85807b76706d66615e56544f4740382e24190e020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000813202d3a4653606d79858b7e7165554b4035291d1004000000000000000000000000000000000815222f3b4855626e7b88958a7d7164574a3e3124170b000814212e3b4754616e7b8591959d9fa4aba1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1978a7e7164574b3e3124180b000714212e3a4754616d7a8794a0a1a1a1a1a1a1a1a49f9e9b96918a8281878f94999d9fa2aaa1a1a1a9a29f9d9a9490877f818a91959a9e9fa3ab9c908376695d5043362a1d100000000000000d1926323f4b58636e737c828990959c8f82766b6054596063686d685d52453d2f261b110600000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a879499999a9a9b9d9fa3aba9aba7a09d948f8d92989ea6a7a09d95908a85817f84919d988b7e7265584b3f3225180c000000000000000000000000000000000000050b1012181d1f20242622282b2d2d2d2c2823272521201e1a14110d07010000000000000000000000000000000000000000000000000000000000040a0f13191d20212422282b2d2d2d2c28232622211e1a1510121619192020202020201b1a18140f080100000000000000000000000000000000000000000000000000000000000000000b151e272e34383a3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3e3e3e3d3d3c3b3a38342e302d2c28231c1b16100b050000000000000000000000000000000000000000020d17202930363a3b3f3f3f3f3f3f3f3d3c38332c231a10050000000c17232e3b4854616e7b87939facaca095897d70665b50443e36302c292c2f353d464f59606d7985919eabb5b3a69a8d8073675a4d4034271a0d000000000000000000000914202d3a4753606d7a86929fa3998a7d7164574a3e31261a0f02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d1720293036394045464e54565e61666d71767c81868c91969c9fa6acaca8a09e98928e89837e79746e6964605c54524c48443d352e261c12080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505c6674818d8275675d5145382c1f1409000000000000000000000000000000000b1824313e4b5764717e8a978a7d7164574a3e3124170b000e1a2734414d5a6774808d97a0a8acafb5aeaeaeaeaeaeaeaeaeaeaeaeaeaeaea4978a7e7164574b3e3124180b000714212e3a4754616d7a8794a0adaeaeaeaeaeb5afacaba8a19e938f8e939a9ea6a9acaeb4aeaeaeb3adaba9a69f99928c8e939da0a8aaacafa99c908376695d5043362a1d100000000000010d1a2734404d5a677380898f949d9f9f94897d706360626b70777a6d60594f41382d22170b00000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a878c8c8c8d8d8f909299999d9fa7aca69f9c999fa3a7a09d95908a837e7974727d8a979a8d8074675a4d4134271a0e00000000000000000000000000000000050b10161c1d24292c2d30332d3338393a3a38342e34322e2d2a25201d18130d08010000000000000000000000000000000000000000000000000003090e161b1e25292d2e312d3338393a3a38342e322f2e2b261f1c1e2325262d2d2d2d2d2d272724201a130b0200000000000000000000000000000000000000000000000000000000000000030c151d23282c2d323232323232323232323232323232323232323232323232313131302f2e2d2b282323201f1c17110f0a040000000000000000000000000000000000000000000000050e171f252a2d2e32323232323232302f2c27211a1108000000000614202d3a46525e697683909ca7b1a79d9083786c605a5046413a3834383a40454f58606b73808d97a1adbdb3a69a8d8073675a4d4034271a0d000000000000000000000613202c3945515d6776838f9cab9a8e817467584e43372b1f12060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c162029323b41464b5153586062686e73797e83888e92989ea1a8ababa49f9c96918c86817c77716d67625f5753504a46413b38322b231c140a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a54636f7c8985796d6053473b31261a0e01000000000000000000000000000005121e2b37424d576774808d978a7d7164574a3e3124170b00101d2a3743505d6a7683909da9aba7a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a4978a7e7164574b3e3124180b000714212e3a4754616d7a8794a0a6a6a6a6a6a6a6a7a8aaacaca59e9b9b9fa4acb0aeaca9a7a6a6a6a6a7a8abadaba39f989b9ea5acacaaa8a9a99c908376695d5043362a1d100000000000000a1723303d4a5663707d89949fa6aba69d9083766c6a6f767d8382766b6053493f33271c1207000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a808080808081828486898c90959fabb0aba9a6acaca095918a837e78716d66717e8b989a8e8174675b4e4134281b0e000000000000000000000000000001080d161c21272c2f35393a3d40423f44464746454043413e3b3a36302c29241d19130c040000000000000000000000000000000000000000000000060e141a21272c3035393a3e413f444647464440423f3b3a37312b282a2f32333939393939393433302b251d140b0100000000000000000000000000000000000000000000000000000000000000030b12181c1f20252525252525252525252525252525252525252525252525252424232221201f1c17161312100c06000000000000000000000000000000000000000000000000000000050d141a1e2021252525252525252323201c161008000000000005121e2a36424d5764717e8a95a0acab9f958c7f726c625a524c47454044464b5159606a707d87929fa9b3beb3a69a8d8073675a4d4034271a0d0000000000000000000004111d2935404b5566727f8c99a99e9184786a5f53473a2e211407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28323b444d52545c60646a6f757a7f848a90959b9fa3aaaba9a19e99938f8a847f7a746f6a65605d55534d46443f3836302c272119110a020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17232e384854606b77848a7e7164574d42362a1d130700000000000000000000000000020d14212d3a46535f69778491978a7d7064574a3d3124170a00111d2a3744505d6a7783909da19e9b99999999999999999999999999999999999b978a7e7164574b3e3124180b000714212e3a4754616d7a8794999999999999999a9a9b9ea0a8abaaa8a8acafafaba39f9c9a999999999a9c9ea1a9acaca5a7a9aba49f9d9b9d9f9c908376695d5043362a1d100000000000000916232f3c4855616b7683909ca6a69f9c948a7d70757c828990897d70655b5044392e23180c0000000000000000000000000000000000000000000000000000000000000006131f2c3945515d676d73737373737475777a7c7f83909da9b6b4aeacaeaa9d91837e78716c65606c7683909c998c807366594d4033261a0d00000000000000000000000000040c131921272c3338394045474a4d4f4a50535353514b504e4b4746423b39352f29241e160d07010000000000000000000000000000000000000000090f181f262a32383a4146474b4e4a50535353514a4f4c4847423c3834353b3e4046464646464641403c362f261d1308000000000000000000000000000000000000000000000000000000000000000000070c1013131919191919191919191919191919191919191919191918181818171616151312100b0607060300000000000000000000000000000000000000000000000000000000000002090e11141419191919191919171614100b05000000000000020e1a25303b4653606c7884919da6b0a79f93877e716c615e5653514b5153555d606b6f7c859299a3afbbc0b3a69a8d8073675a4d4034271a0d00000000000000000000010d18242f3c4855626f7c8896a1a196887b6e6255483b2f24180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d19242f3a444d565e61666d71767c81868c91979d9fa7acaca79f9d97928d87827d78726d6862605853514b47423c38342e2a251e1b160f07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c2c38434f5966737f8c8276695f53463a2f24180d0000000000000000000000000008141e2935404b55616e7b8895968a7d7063574a3d3024170a00101d2a3643505d697683909c96918e8d8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8e938a7e7164574b3e3124180b000714212e3a4754616d7a878c8c8c8c8c8c8c8c8d8d8f91969c9fa6b0b4b6afa59d99928f8d8c8c8c8d8d8f92979ea1a8b2afa59e9993908f90939a908376695d5043362a1d100000000000000714202c38444f5963707d89949f9c948f89827c7b82898f949d9083786c60544a4034281c100400000000000000000000000000000000000000000000000000000000000004101d2935404b555d6066666666676768676d717c83919daaacaaa29fa2aa9a8d81796d66605d68707d8a949f988a7d7064574a3d3124170a000000000000000000000000070d161e242933383d44484b515357595c545b6060605c555d5a5854524d4745413a352f282018120b0300000000000000000000000000000000000109121b212a31363d43484c5254575b545b6060605c545c5955534e46443f40464b4c5353535353534e4c4841382f251a0f03000000000000000000000000000000000000000000000000000000000000000000000406070c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b0b0b0a0a090807060300000000000000000000000000000000000000000000000000000000000000000000000000020507080c0c0c0c0c0c0c0a09070400000000000000000009141f2b3844505b66717e8a949ea9afa49992877e746d6863605c555c6062676d737d859297a2abacb1b9b3a69a8d8073675a4d4034271a0d00000000000000000000000715212e3b47535f6a7884919ea8988c7f7265554b4035291d100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414c565e686e73797e83898e92999ea1a9abaaa29f9a95908a85807b75706c66615e56544e4745403937312b28231c1914100b04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1b27323d4754616e7a86867b6e61554b4035291d12070000000000000000000000010d1925303945515d6773808d9a96897c706356493d3023160a000f1c2935424f5c6875828f938b84818080808080808080808080808080808080818e8a7e7164574b3e3124180b000714202d3a4753606d7980808080808080808080818284888f949fa6b0aca49f928e86828080808080808285899196a1a9a59e938f878382838893908376695d5043362a1d1000000000000004101c27333d4854606b76828f949089827c757f878f939c9fa0958a7e71665c5144382c1f1206000000000000000000000000000000000000000000000000000000000000000c18242f39434b5153595959595a5a606a717e869195a0a7a09d9892989f9d928d81756c61606d7a84919e9f92867a6d6054473a2d211407000000000000000000000007101920282f353d44484f54555d606366696a666c6d6d676b696765615e5754514b45413a3229241d150d050000000000000000000000000000000009131b242d333b42464f54565e6164676a666c6d6d666b6865625f5753504a495157596060606060605a58534a41362b2014080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1c28333f4a54616c75828f97a1aaaba399928b817a74706d676a666d6f737980879297a2a09da0a7b1b3a69a8d8073675a4d4034271a0d000000000000000000000006121f2b37434e586874818e9bab9c8f8276675d5145382c1f13060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202c3945525d686e7a80858a90959b9fa3abaca8a09d98928e88837e79736e6963605b54524c47433d39352f2b261f1c17110e08020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a16202d3946525e6874818d8073675d5145392e23180c000000000000000000000005111e2a36414c56606d7985929f95887c6f6255493c2f221609000d1a2733404d5a6673808d887f797473737373737373737373737373737373737e8a8a7d7164574a3e3124170b0006131f2c3945515d676d737373737373737373737475777c828f949faba49a938b817a7674737373737475787d849197a29e938e817b7775767d87908376695d5043362a1d10000000000000000b16212c38444f59636f7d8989837d766f707d8a949ea5aba79e9184796d6053463a2d2013070000000000000000000000000000000000000000000000000000000000000007121d2731394045474d4d4d4d4d56626f7c879298a0a49f959189858f949e9d938a7d70646d75818e96a19b8f8275675d5145392c20130600000000000000000000071119222a323a41454f54596063676d7073757779797a7979787674716e6965605d55524c443e352f271f170e05000000000000000000000000000008111b252d363e454d53596063686d71747678797a79797775726e6a64605c54515b63666c6c6c6c6c6c67645c53483c3024180b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d3842505a616e7a859298a2ababa39f938e85817c79787778797c80858c9299a29e959095a0acb3a69a8d8073675a4d4034271a0d0000000000000000000000030f1b26323e4b5764717e8a99a49f9286796d6053473a2d2014090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a878c91979d9fa7acaba39f9b95918b86817c76716d67615e5753504a46413a38322c29241d1a15100b0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111e2a36414c56626f7c87857a6d60544b4034281c1004000000000000000000000714202d3946525e68727f8b97a294887b6e6155483b2e221508000a1724313d4a5764707d8a80736d6666666666666666666666666666666666717e8b8a7d7063574a3d3024170a0004101d2935404b555d606666666666666666666767686a6f78828f9ca69f93887e746d68676666666667656c707b85929f968e81776e69686b75828f8376695d5043362a1d100000000000000005101c27333d4854606b74807d76706b626b7683909ca6a69f9c948b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000010b151f272f35393a404040414e5b6774818e99a2a299938c837d7a828e939e9d9083776b727f8c939ea095897d7063554c4135291d1104000000000000000000071119232b343c444c525960636b70757a7d80828485868686868583817e7b76726d67605d5650454039312920170e04000000000000000000000000040d1a232d373f4850575f616b6f757a7e8183858686868584827f7b77716d666058636d73797979797979746e64584c4033271a0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c262f3e46525e686f7d869299a1a9aea59d98928d898684848486898d92979fa39e948f83909daab3a69a8d8073675a4d4034271a0d0000000000000000000000000a14212e3a4754616d7a86939fa398897d7063564a3d31251a0e0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a87999ea1a9ababa39f99928e89847f7a746f6a64605c55534d46443f3835302b271f1d18120e09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d1925303b47535f6a75828c7f72665c5145382c1f13060000000000000000000713202c38444f59616e7a85929ea297877a6d6054473a2d211407000714212d3a4754606d7a837b6e615c54595959595959595959595959595965727f8b897d706356493d3023160a00000c18242f39434b51535959595959595959595a5a585f666f7c89969f948c7f726c615e565959595a535b606973808d999184796d655e596774818d8376695d5043362a1d10000000000000060b0f16212c38444f59646e74706b636059636f7c89949f9d949089827c6f6256493c2f2316090000000000000000000000000000000000000000000000000000000000000000030d151d24292c2d333334414e5b6774818e9aa29892878078706e78818e949f95887b707d87939fa59d9083776b6054433a2f24190d010000000000000000060f19232b353d464e565d606b70777d81858a8c8f91929893989291908d8b87837f7a736d68615a514b433a322920160c0300000000000000000000010c161f2c353f49515a61696e767c82868a8e909297939892918f8c88837e786f6a6366737f8686868686868074675a4e4134271b0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d2a36414c56606b707d8791979fa6acaaa29f9a99939191919299999ea1a49f948f827e8a97a3b0a69a8d8073675a4d4034271a0d0000000000000000000000000713202d3946525d687683909daa9a8d807467574d42362a1e120500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794abadb3aea399928c86827d77726d68625f5853514b46423b38332d29251e1b16100c0701000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008141e2b37434e58636f7c8984796d6053463a2d2013070000000000000000000916222f3b4854606b75828f97a19f928578675d5145392c201306000713202c3945525d686d766e695e524a4d4d4d4d4d4d4d4d4d4d4d4d4d5966737f8c897c6f6356493c30231609000007121d2731394045474d4d4d4d4d4d4d4d4d4d4e4e54606d7a8699999082786c605a524c4d4d4d4d49505764707d8a988b7e72675d535c6675828f8376695c504336291d1000000000020a11171c1f2027323d47525c64676360595454606b76828f959089837d766f6a6054473b2e221508000000000000000000000000000000000000000000000000000000000000000000030b12181d1f202626303d4a5763707d8a949f92867d736d66666c78828f9c978a7e7c869299a49f948a7d7064594f4431281e13080000000000000000020c18212b353d474f585f686d757d83898e9298999c9d9fa2aaa39f9e9c9a9a93908b85807a716c605d554c443a32281e150b0000000000000000000008131e28313e47515b626c717b82898f92999a9d9fa2a9a39f9e9b9895908a837c726d66737f8c939393938d8174675a4e4134271b0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b1925303b444f59616b707d858f949da0a7acababa49f9e9d9e9fa3aba7a09a938d82797d8a97a3b0a69a8d8073675a4d4034271a0d00000000000000000000000005111d2935414c566673808c99a99d918477695e53463a2d21140600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0adb9ac9f9286807b75706b65605d56534e4645403936312b28221c19130f0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020f1b26313c4854606b76828a7e7164584b3e3125180b0000000000000000000a1623303d495663707c89939ea99d9083776a554b4135291d11040004111d2935414c565d606a615e574d424040404040404040404040414e5b6774818e887c6f6255493c2f2216090000010b151f272f35393a404040404040404040404145515d6779869293877c6f665b504641404040403f4a5663707d899285796d605554606d79858f8275695c4f4236291c0f000000020b141c22282b2d2e2e35404a52585a56554f484f59626f7c888a837d76706b6260584e43372b1f13060000000000000000000000000000000000000000000000000000000000000000000001070c1013141a232f3c4855616b768390978a7e716b605c5b666e7b88969a8e81859298a2a4999083766c6155473d331f160c0100000000000000000a141e2a333d474f59606a6f7a818990959b9fa2aaa8aaa8a6a5a6a6a8a9aca49f9d97928c857e756d675e564c443a30271c12070000000000000000010d19242f3a434f59626d727e868f949b9fa3aba9abadabaaa9aaa8a7a09d9590877f746c737f8c999f9f9a8d8174675a4e4134271b0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008141e29323d474f59616b6f7a828a91959b9fa2aaa7a7a8a8a7aba39f9c9590888078707d8a97a3b0a69a8d8073675a4d4034271a0d000000000000000000000000010d1924303c4956626f7c8997a2a095877b6e6154483b2e23170c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0adbaaea39991847f7a756f6b65605d55534e4645403936312b28231c1914100b0401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15202c38434f59636f7d7e786d6053463a2d2013070000000000000000000714212d3a4754606d7a86929fa79a8e8174675b4e412f24180d0100010d1924303a444c52545d54524d453b3033333333333333333335414c566976828f877a6e6154473b2e211408000000030d151d24292c2d333333333333333333343a4653606d7986998e81756a5f544a3f363033332d3e4a5764717d8a8e8174675d515b66717d8a8e8175685b4e4235281b0f0000000a141d262d3338393b3b3b3b40474c4d4a48443d4754606a73807d77706b636059544e463d32271b0f030000000000000000000000000000000000000000000000000000000000000000000000000004060714202c38444f59626f7c879285786c615951545f697884919e938e9297a1a99f93877c6f62594f44352b210d04000000000000000006111c26303c454f59606b707c848e939d9fa7acaca8a09e9b9999999a9c9fa2a9aca9a29f97918a81796d685e564c42392e23180b020000000000000004111d2935414c55616c727f8b92989fa6acaeacaaa8a19e9d9c9d9fa2aaa7a099938c8178737f8c99a6a79a8d8174675a4e4134271b0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d17202b353e474f5960686e767d84898e9298989a9b9b9b9b9999928f8a837c736d707d8a97a3b0a69a8d8073675a4d4034271a0d000000000000000000000000000813202d394653606c7985929ea8988b7e7165544a3f34281c1003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a7acaeb4aba096918c86817c77726d67625f5853514b46423b38342e2a251f1c16110d08020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b27323d4854606b6f716d665c5044382c1f12060000000000000000000713202c3945525d6874818e9ba7988b7e7165584b3e3225180700000008131e28323a414547504846423b332926262626262626262d3946525e6877849186796d6053463a2d20130700000000030b12181d1f202626262626262626262e3a4754616d7a8795887c6f62584e42382d252626323f4b5865727e8b8a7d70635558606c7883908d8073675a4d4034271a0d000006111c262f383f4446484848484848484848484848484e58636e73706c636159544f47433d342b20150a0000000000000000000000000000000000000000000000000000000000000000000000000000000004101c28333e4754606a74818e867a6d605a53525d687885929e9d9a9ea1a9a1968e81746a6054473e3323190f0000000000000000000b17232e38424d57606b707d8691969ea5abaaa29f9a96918e8d8c8c8d8f92979c9ea6aca9a19e938e837a6d685d544a4034281d140a000000000000000613202c3945515d67707d88939fa2aab0aea7a09d9896919090909298999da0a49f938e81797f8c99a6a79a8d8174675a4e4134271b0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e19232c353e474f565e616b70787d8186898b8d8e8f8f8e8c8a86827d786f6b64707d8a97a3b0a69a8d8073675a4d4034271a0d0000000000000000000000000006121f2b3844505b6675828e9ba89b8f8275665c5044382c1f1206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a87959b9fa3aaada8a09e99928e89837f7a746f6a64605c55534d46443f3836302c27201d19130f0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a16212c38434f59606364605c544a3f34281c10030000020507080c0c0a04111d2935414c56626f7c89959f95877b6e6154483b2e211508000000020c1620283035393a433b3a36302921171a1a1a1a1a1a212e3a4754616d7a86918578665c5044382b1f1206000000000001070c1013141a1a1a1a1a1a1a1a222f3c4955626f7c889083776a6054463c2f261c1a2734404d5a6773808d867a6d60555f6a727f8b958b7f7265584c3f3225190c00000b17222d38424a50535454545454545454545454545454545c636664615a54545454534d453b31251a0e02000000000000000000000000000000000000000000000000000000000000000000000000000000000b16212b37434e58616e7b868c7f726c62605c616d7a8797a1a9a7abada59e91847a6d60584e43352c211107000000000000000003101c28343f4a545f696f7d869298a1a8afa59e98928d888482807f7f808285898f949ea0a8ada59e9590847a6d665c51443d2f261c1106000000000003101c28343f4a54606d7a84919aa4aeb4aba39f95908b878483838485888c91959ea19d938c7f7f8c99a6a79a8d8174675a4e4134271b0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007111a232c353d444c525961666c7075797c7e80818282817f7d7a76706c666064707d8a97a3b0a69a8d8073675a4d4034271a0d00000000000000000000000000030f1c28333f4a5464717e8b97a79f9285796d6053463a2d201308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7983898e92989ea1a8ababa39f9b95908b85817c76716d67615f5753504a46413b38332c29241e1b15100c070100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040f1b27323d464f54565753504a42382e23170c0002080e111414191816120d19242f3a4754606a7783909d908376695e52463a2d20140700000000040e161e24292c2d372e2d2a251f170f0d0d0d0d0f1c28333f4a5464707d8a9083766a544a3f34281c100300000000000000000406070d0d0d0d0d0d0d1824313e4b5764717e8a8c7f7265584e43342a1d141c2936434f5c6976828f8376675d5d676f7c869299897c706356493d3023160a00030f1c28333f4a545b60616161616161616161616161616161616161616161616161615e574d42362a1e120500000000000000000000000000000000000000000000000000000000000000000000000000000000050f1b27323c46525e68737f8c877e756f6c676d737f8c99a9b3b4b2a89e938a7d70685d52463c32231a1000000000000000000006121f2b3844505c666e7b859298a2aaaca49f938f86807b77757372737375797d828991969fa6afa79f968f82786d60584e42382d22170b000000000006121f2b3844505c66737f8c97a1acb5aba399928b837e7a78777677797b7f848a91969e9f9287828f9ca9a79a8d8174675a4e4134271b0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008111a232b323b41464f545b6063666d6f72747475757473706d6864605b5464707d8a97a3b0a69a8d8073675a4d4034271a0d00000000000000000000000000000b17222d3b4754616e7b8795a0a298897c6f6356493c3025190d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945515d676d767c81868c91969c9fa6acaca7a09d98928e88837e79736e6964605c54524d48443d3935302b271f1d18120e09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a16212b343d4348494a46443f3830261c1106070d14191e20212625221e18131e2b37434e5865727e8b978b7e7165574d42362a1e12050000000000040c13191d20212a21201e1a140d050000020b141f2b3844505b6673808d8e8175685b4e422e23170b0000000000000000000000000000000000000c1926333f4c5966727f8c877b6e6154473c3221180b1e2a3744515d6a77848d80736755606d7a84919892867a6d6053473a2d2014070006121f2b3844505b666c6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e695e53463a2d21140700000000000000000000000000000000000000000000000000000000000000000000000000000000000a15202a36414d56606d7984918a817c7978797e87929facb9b5aba0968e81746b61564c41342b201108000000000000000005111d2a36414c56606d78839097a1aaafa49a938c827b736e6a6866666667666c70757d848f949fa6b0a89f948d80746a60544a3f33281c0f03000000000713202d3a4653606d7985919ea9b2aea39992877f78716e686a69656c6e72787e848e939d99928f949faba79a8d8174675a4e4134271b0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081119202930363e424a5053545c60626567686868686664615d5653505764707d8a97a3b0a69a8d8073675a4d4034271a0d00000000000000000000000000000614202d3a46525e697784909daa998d807366564c41362a1e110500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2935404b555d606a6f747a7f848a8f949a9fa2aaacaaa29f9a95908b85807b76706d66615e56544f4745413a37322c29241d1a15100b0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040f19222b32383b3c3e3a38342e261e150a0b12181e252a2d2e33322f2a231c1b27323d4753606d7a859285796d6053473b30251a0e0200000000000002080d1113141d1514120e09030000040c141d2730394653606c7884918c7f7265594c3f322619060000000000000000000000000000000000000714212d3a4754606d7a848276695e52463a2d20140a1723303d4a5663707d867d70645764717d8a959c8f8276675d5145392c201306000613202d394653606c787b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b6e6154483b2e2115080000000000000000000000000000000000000000000000000000000000000000000000000000000000040e1925303b45515c67717e8a938e898584868b9299a3aebaafa39991847a6d60594f433a2f22190f0000000000000000000713202d3946525e68727f8c959fa9aea49f93887f756e68625f575a5959545b60636b6f7a828f949fa8b0a69f93877c6f665b5044382b1f1409000000000a1723303d4a5663707d8997a1adb2a89f92877d726c66615e56535b6062666c717a818e939d9f9c9fa6b0a79a8d8174675a4e4134271b0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070e171e252a2f383f44464b515356585a5b5c5c5b595754524c464a5764707d8a97a3b0a69a8d8073675a4d4034271a0d000000000000000000000000000005111e2a36424d566773808d9aaa9d908377685e5246392d201306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d18242f39434b51586062686d72787d82888d92989da0a8acaca79f9d97928d87827d78736e6863605954524c47433d39352f2b26201b160f070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007101921272c2f30312d2c28231c150c11171d24293036393b3f3e3b352e251c202c3945515d6774818c7f72675d514539291f14090000000000000000000104070710080705020000060c10161d262f39424f5963707d8996897c706356493d3023160a0000000000000000000000000000000000000613202c3945525d68707d7f7265574d42362a1e110916222f3c4854606b74807a6e6154606c788390968a7e7164554b4035291d1004000714212e3a4754616d7a87878787878787878787878787878787878787878787878786796c5f5346392c201300000000000000000000000000000000000000000000000000000000000000000000000000000000000008141f2934404b55616c7682909898929192989fa3abb4b0a69f92877c6f675d51473e31281e1007000000000000000004101c2934404b55616d7a85929fa7b1a89d928b7f726d615e56534e4d4c4c4a50535960686d78828f96a0abafa4999083786c6053463b31261a0e020000010d1a2734404d5a6773808d9aa9b3aca0968c7f726b605b54524c495053545b60686d78818e959fababb0b4a79a8d8174675a4e4134271b0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d14191d262d333839404546494b4d4e4f4f4e4c4a4746413d4a5764707d8a97a3b0a69a8d8073675a4d4034271a0d0000000000000000000000000000020e1925303d495663707d8998a29f93877a6d6154473a2d22170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d28313940454e54565e61666d70767c81868b91969c9fa4ababa9a19e9a938f8a847f7b75706b65605d56544e4745403937312c272119110700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070f161b1f222324201f1c17110c141c23282f353b4146474c4b4640372e241d2935404b55626f7c84796d60554b403529170d02000000000000000000000000000400000000030a11171c1f282f38414a54616b75828f95877a6d6054473a2d21140700000000000000000000000000000000000004111d2935414c56606b70796d6053463b30251a0e0714202c38444f59606d796e685e525b656f7c879184786d6053463a2f24180d01000714212e3a4754616d7a87949494949494949494949494949494949494949494949286796c5f5346392c2013000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c18232f3943505a626e7c8692999f9e9fa3aaaeb4b2a89e938c7f726a60554c41352c1f160c00000000000000000006131f2c3845515c6773808d98a2aeaca0958d80746d635b524d4742403f403f44464f565d666d79849199a4afaba0958a7d7063574d42362a1e1205000004111d2935414b556a7683909da9b6aa9e9184786d6059504a46413f44464a50565d666d78839099a4afbbb4a79a8d8174675a4e4134271b0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080b141c22282b2e34383a3c3f4141424241403d3a39353d4a5764707d8a97a3b0a69a8d8073675a4d4034271a0d0000000000000000000000000000000913202d3a4653606d7985929fa49a8a7e716453493f33271b0f03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f282f353d43474c52545c60646a6f747a7f84898f93999ea2a9acaca49f9c96918c86827d77726d6862605853514b47423c38322b23190f0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f131516171312100c111a1e262e343940454c52545957514940362c1d242f3a47535f6a6f7b6f675c5143392f241805000000000000000000000000000000000000030c151c23282c31394049535c66707d8a94908477685d5245392c201307000000000000000000000000000000000000010d19242f3a434f5960666d665c514538291f140902101c27333d44515c666d665e564c53606a74818a7d70665c5044382b1d120700000714212e3a4754616d7a8794a0a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a19f9286796c5f5346392c20130000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d27313e47535f6a717e878e939eacaeb4bab4aaa0968f82776c60584e433a2f231a0d040000000000000000000714202d3a4753606d7985929faab1a79d9184796d605b5146413b3731332d33383d434c545d676f7c87939facb1a79c8f8276695f53463a2d21140600000613202c3945515d677885929fabb4ab988c7f72665c50443f38363337393f444c545c666e7b87939facb9b4a79a8d8174675a4e4134271b0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171c1f23282c2d2f32343535353533312e2d313d4a5764707d8a97a3b0a69a8d8073675a4d4034271a0d00000000000000000000000000000006131f2c3845515c6675828f9cac9b8e8175655b5044372b1f120500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d161d242932373a41464a5053585f62686d72787d82878d92979da0a7acaca8a19e99928e89847f7a746f6a65605d55534e48443d352b21160b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030709090b0706030d1a232c30383f444b51565e6166635b51483e2f261d2b37434e585f6a6f6a5f554b4031271d12070000000000000000000000000000000000000a151e262e34383d434b515b656d788491998c807366564c4135291d11040000000000000000000000000000000000000008131e28313d474f545c605c544b403428170d080d141a212834404a545c605c544c444e58616d7a81746c61544a3f34281c0c0100000714212e3a4754616d7a8794a0adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeac9f9286796c5f5346392c201300000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b151f2b37434e58616c717c818e9ba8b5bfb6aca29891847a6d655b50463d31281e110800000000000000000003101c28343f4a5464717e8a97a2adaca0958a7d70665c51493f36302b262622282b313a424b55606a74818e9aa4afac9f93877b6e6155483b2d22170b00000714212d3a4754606d7a8798a2aeaea399887b6e62544a3f332d2a272b2d333a424a545f6a75818e9babb5b4a79a8d8174675a4e4134271b0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f12181c1f202325272829292826242124313d4a5764707d8a97a3b0a69a8d8073675a4d4034271a0d00000000000000000000000000000004101c2834404b5465727f8b98a89e9285786c605346392d2013080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c121820272b3036383f44464e53565d60656c70757b80858b90959b9fa3abadaba39f9b96918c86817c77716d67625f57544f473d32271b10030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b151f2c353e424a50555d60686e726d635a5042382d2226323c464e585f625f584e43392e1f150b01000000000000000000000000000000000006111c2630383f44464f555d606c77818e9696887c6f6255493c2f24190d0100000000000000000000000000000000000000010c161f2b353d424b5153514b42392e23180d13191f252a2d2e39424a5153514a423d46525e686d746f645a5042382e23170b0000000714212e3a4754616d7a8794a0a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a79f9286796c5f5346392c2013000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a54606b707c83909daab7bbafa49a92867c6f685d53493f342b1f160c0000000000000000000006121f2c3844505c6675828f9ba9b3aa9d9083776b61544b40372a251f1a19171c1f28303a434e58626e7b87939facafa49a8b7e726553493f33271b0f03000815222e3b4855616e7b8894aab3ac9f9286796d6053463a2e221c1b1f22282f38424e5763707d8a99a3aeb4a79a8d8174675a4e4134271b0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003070c10131316181a1b1c1c1b19171724313d4a5764707d8a97a3b0a69a8d8073675a4d4034271a0d000000000000000000000000000000000c18232e3b4855616e7b8896a0a197887c6f6255493c2f24190d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070d151b1e252a2e34383c43474c52535b6063696e73797e83898e92999ea1a9abaca8a09d98928e89837e79746e6a6360594f44382c201307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d27313e474f545c60676d737a7f726c61544a3f3328202a343c464e5355534e463c30271d0d030000000000000000000000000000000000000c17232e38424a50535960676d74808d939e9184786a6054473b2e1e1308000000000000000000000000000000000000000000040d19232b303940454645403930271d13191e252a30363a3b3d3940444644403935414c565e6168645d53473e30261c11060000000714212e3a4754616d7a8794999999999999999999999999999999999999999b9f9286796c5f5346392c2013000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505c66707d869095a0acb8afa59f93887e706a5f564c41382d22190d04000000000000000000000713202d3a4653606d7985929fabb2a8988b7f7265594f42392e2519140e090b0f161e28313c47535f6a7683909ca9b6ac9b8e8275655b5044372b1f1205000915222f3c4855626f7b8895a2aeab9e918478665c5044382b1c110f12171d26303c4753606d7986929facb4a79a8d8174675a4e4134271b0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040607090c0e0e0f0f0e0d0a1724313d4a5764707d8a97a3b0a69a8d8073675a4d4034271a0d000000000000000000000000000000000714212d3a46535f697784919ea9998c7f7266554c4135291d110400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f13191c23282b31373a4145495053575f61676d71777c81868c91979c9fa6acacaaa29f9b95908b85807b76706b6054483b2f22160900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18242f39434f5961666d71797f868a7d70665b5044392e23222a343c43474847433c342a1e150b00000000000000000000000000000000000003101c28343f4a545c60646b6f79818d929d988c7f7366584e43372b1f0c01000000000000000000000000000000000000000000000711191e272e34383a38342e271e181e242930363b4246484948443d3a38342e303a444c52545b59534b41352c1e140a000000000714212e3a4754616d7a878c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8e939286796c5f5346392c201300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d79859298a0a7b1b1a79e938c7f736c61584e443a2f261b100700000000000000000000000916232f3c4956626f7c8998a2aeaca096877b6e6154483e30271d1308020000040c161f2b37434e5865727f8b98aab4ab9e9285796c605346392d201306000916232f3c4956626f7c8995a2afaa9d9083776a544a3f34281c0a03060b151f2c3845515c677783909daab4a79a8d8174675a4e4134271b0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102020202000a1724313d4a5764707d8a97a3b0a69a8d8073675a4d4034271a0d0000000000000000000000000000000005121e2a36424d576774808d9aaa9c908376675d5145392c20130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d11171c1f262b2f35383f44464d53555d60656b6f757b80848a90949a9fa2aaacaca79f9d97928d88827d706356493d3023160a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2935404b55616b70787e848c929083786c60544a4034281c222a31373a3c3a37312a22180c0300000000000000000000000000000000000006121f2c3844505c666d71767c848e939d9f92867a6d6154473c32271b0f000000000000000000000000000000000000000000000000070c151d23282c2d2c28231d1d242930353a41464d525456544f473d31282328323a4146474e4d4841392f231a0c02000000000714202d3a4753606d79808080808080808080808080808080808080808080818e9286796c5f5346392c2013000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505c667884919eaab1b2a89f958e81776c605a50463c32281d140a0000000000000000000000000c1825323f4b5865727e8b98aab3aa9e918477695e52463a2c1e150b0000000000040d1a26313c4855626f7c8898a2aeada197877b6e6154483b2e21150800091623303c4956636f7c8996a2afa99c908376695d50432e23170b030004101c2934404b556874818e9ba7b4a79a8d8174675a4e4134271b0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0a69a8d8073675a4d4034271a0d00000000000000000000000000000000020e1a26313d4a5763707d8a98a39f92867a6d6054473a2d211409000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b10151a1e24292d33373b42464b5153596063686e73797e83888e92989ea0a8acaba9a29f9a948d8174675a4e4134271b0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515d67707d838b91979f958b7e71665c5144382c1f1820262b2e2f2e2b2620181006000000000000000000000000000000000000000713202d3a4653606d787e828991969da1978d8073685e5246392b20150a00000000000000000000000000000000000000000000000000030b12181c1f201f1c181f282f353a41454c52575e616360594f43392f2a2d2e3035393a41403c372f271d1108000000000006131f2c3945515d676d7373737373737373737373737373737373737373737d899286796c5f5346392c2013000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a5466737f8c98a2aea9a0969083796d655b50483e342a20160b020000000000000000000000010e1b2734414e5a6774818d9aa7b4a79b8e817468574d42362a1a0c030000000000000913202d394653606c7985929facb3a996897c706356493d3023160a000a1623303d495663707c8996a3afa99c8f8276695c4f4336291c060000000c18232f404d5a6673808d99a6b3a79a8d8174675a4e4134271b0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0a69a8d8073675a4d4034271a0d00000000000000000000000000000000000914202d3a4753606d7a86929fa3998a7d7064574a3d31261a0e0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0f13191b22272b3136394045474f54565e61666d71767c81868c91969c9fa4acadaba69a8d8174675a4e4134271b0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a8591959ea1a79e9184796d6053463a2d2013151a1f2122211f1a150e0600000000000000000000000000000000000000010e1a2734414d5a6774808a8f949ea0a59e92857a6d60564c41362a1d1105000000000000000000000000000000000000000000000000000000070c10131313131d28313a40454c52565e61696e706b60554b403536393b3d3c38333534302b251d150b00000000000004101d2935404b555d606666666666666666666666666666666666666666707d8a9286796c5f5346392c20130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17232e3a4754616d7a86929fa9a19791847a6d675c53493f362c22180d0400000000000000000000000003101c2936434f5c6976828f9ca9b2a5998c7f7266594c3f30251a0c0000000000000006121f2b3844505b667783909daab1a4988b7e7165584b3e3225180b000a1623303d495663707c8996a3afa89b8f8275685c4f4235291c0f020000071925323f4c5865727f8b98a5b2a79a8d8174675a4e4134271b0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0a69a8d8073675a4d4034271a0d00000000000000000000000000000000000613202c3945515d6776828f9cab9a8d817467574d42372b1e120600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080d11171b1f262a2f35383d43484d52545c60646a6f747a7f848a8f939a9fa2aaa79a8d8174675a4e4134271b0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515d67727f8b96a1aca8a0968b7e7265584b3f3225180a0f12151515120f0a030000000000000000000000000000000000000000000d1a2633404d596673808c999fa6a69d938a7e70685d52443a3025190d0100000000000000000000000000000000000000000000000000000000000406070d18242f3a434b51565d60686d747b7d70675d51453b4146474a48443d352b20201a130b03000000000000000c18242f39434b51535959595959595959595959595959595959595964717e8b9285796c5f5246392c1f130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202d3946525e6873808d97a29892857b6e685e554b41382d241a10060000000000000000000000000004111e2a3744515d6a7784909daab0a4978a7d7164574a3e3124170900000000000000030f1c28333f4a546875818e9ba8b3a6998c807366594d4033261a0d000a1623303d495663707c8996a3afa89b8f8275685c4f4235291c0f0200000b1825313e4b5864717e8b97a4b1a79a8d8174675a4e4134271b0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3a5a59a8d8073675a4d4034271a0d000000000000000000000000000000000004101d2935404b5565727f8c98a89e918478695f53473a2e211408000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f141a1d24292c32383b41464a5153585f62686d72787d82878d92989da09a8d8174675a4e4134271b0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2935404b55606d7984919ea19e96918a8276695c4f4336291c100306080908060300000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5a79f948e81746c61564c4132281e1308000000000000000000000000000000000000000000000000000000000000000004111d2935404b555d60686d737a808685796d60564c454c525456544f473d32281e130800000000000000000007121d2731394045474d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d5966737f8c9285796c5f5246392c1f1300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111d2935414c56606d7a85929992867c6f695f564c43392f261b1108000000000000000000000000000005121f2c3845525f6b7885929eabafa296897c6f6356493c3023160900000000000000000b17222d414d5a6774808d9aa7b3a79a8d8074675a4d4134271a0e000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f0200000b1824313e4b5764717e8a97a4b1a79a8d8174675a4e4134271b0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97989898988d8073675a4d4034271a0d0000000000000000000000000000000000010d18242f3c4855626f7b8896a1a196887b6e6255483b2f221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e12181d1f272c3036394044464e53565d61666c70767b80858b90959a8d8174675a4e4134271b0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18242f3945515c67717e8b9696918b847e776c605346392d2013060000000000000000000000000000000000000000000000000000000000000b1824313e4b5764717e8a97a69f959082786d605a50433a2f20160c0200000000000000000000000000000000000000000000000000000000000000000613202c3945515d676d737a80868d928c7f72685d5252565e616360594f443a3024190d030000000000000000010b151f272f35393a40404040404040404040404040404040424d576874818e9285786c5f5245392c1f12000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d1925303a45525d68727f8c92877d706a60574d443a31271d140a00000000000000000000000000000006131f2c3946525f6c7985929facaea295887b6f6255483c2f221509000000000000000006192633404c5966737f8c99a6b2a79b8e8174685b4e4135281b0e000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f0200000a1724313d4a5764707d8a97a3b0a79a8d8174675a4e4134271b0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a8b8b8b8b8b8b8073675a4d4034271a0d0000000000000000000000000000000000000715212e3a47535f6a7884919999988b7f7265584c3f3225190c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070c10161b1f252a2e34383c43474c52545b6063696e747a7e83898f8d8174675a4e4134271b0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d2834404b55606d7884918b847e78716c655b5044372b1f12050000000000000000000000000000000000000000000000000000000000000a1723303d4a5663707d89969f948f837a6d665c51483e31281e0e050000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d797f858d92989f92857a6d60565d60686e706b60564c4135291f1409000000000000000000030d151d24292c2d33333333333333333333333333332f3846535f697784919285786b5f5245382c1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e2935414c56606d7984877e706b60584e453c32291f150b0200000000000000000000000000000005121f2b3744505b657986939facaea194887b6e6155483b2e22150800000000000000000c1926323f4c5965727f8c98a5b2a89b8e8275685b4f4235281c0f000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f0200000a1724313d4a5764707d8a97a3b0a79a8d8174675a4e4134271b0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222e3b4855616e7b7f7f7f7f7f7f7f7d6f6356493c3023160900000000000000000000000000000000000006121f2b37434e586774818c8c8c8c8c8275695c4f4236291c0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f14191c23282c32373a41464a5053575f62676d72777d82868174675a4e4134271b0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c18232e3944505c66717e857e79716d66605b53493f33271b0f030000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8899938d827a6d685d544b40362c1f160c000000000000000000000000000000000000000000000000000000000000000000000d192633404c5966737f8c92979fa2a2978d80736860686d737a7d70685d52453b30251a0e03000000000000000000030b12181d1f20262626262626262626262626222d38424d57616e7b88959184786b5e5145382b1e1200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d1924303a45515c67717e7d716c61594f463d332a20170d03000000000000000000000000000000000613202d394653606c798699a3aeaea194887b6e6155483b2e22150800000000000000000c1925323f4c5865727f8b98a5b2a89c8f8275695c4f4236291c0f000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f0200000a1724313d4a5764707d8a97a3b0a79a8d8174675a4e4134271b0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a46535f696e727272727272726f6b6054483b2f221509000000000000000000000000000000000000030f1b26313c4956626f7c80808080807f7266594c3f3326190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080e12181c1f262b3035383f44464d53555d60656b70757b7d706356493d3023160a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d28343f4a54606c787a726d66605c54504941382d22170b000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b87918780786d685d564c42392e241a0d04000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a85929fa9ada99f92867a6e6d727a8085857a6d60574d42362a20150a0000000000000000000001070c1013141a1a1a1a1a1a1a1a1a1a192328333f4a545e6973808d999084776a5d5144372a1e11000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e2834404b55616c71716c615a50473d342b21180e05000000000000000000000000000000000005121f2b3744505b657986929facaea195887b6e6255483b2f22150800000000000000000c1926323f4c5965727f8c98a5b2a89c8f8275695c4f4236291c0f000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f0200000a1724313d4a5764707d8a97a3b0a79a8d8174675a4e4134271b0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121e2a36424d575f61656565656565656360594f43382c1f1307000000000000000000000000000000000000000a15222e3b4754606a6f7373737373726d63574b3e3225180c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c10151b1e24292d33383c42474b5153596063696e706b6054483b2f221609000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c17232e3844505b666c6d67605c54504a443f382f261b1106000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a86847d736d665d564c433a30271d120800000000000000000000000000000000000000000000000000000000000000000000000713202c3945525d6873808c97a2a29f97928c8073797f858d928d8073695e52463c31261b0f030000000000000000000000000406070d0d0d0d0d0d0d0d0b16212b353d44505b666e7b86929c8f8376695c504336291d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c18232e3943505a616464615a50483e352b22190f06000000000000000000000000000000000000030f1b27333f495f6c7885929fabafa295887c6f6255493c2f22160900000000000000000d192633404c5966737f8c99a6b2a89b8e8275685b4f4235281c0f000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f0200000a1724313d4a5764707d8a97a3b0a79a8d8174675a4e4134271b0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1a26313b454d53555858585858585856544f473d32271b0f030000000000000000000000000000000000000006131f2b37434e586062666666666666635b51463b2f22160a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f13191c22282b31373a4045474f54575e616360594f44382c2013070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c28333f4a545b60605c55514a443f38332d261d140a00000000000000000000000000000000000000000000000000000000000000000613202c3945515d67717e786f6b605c544c433a31281e150b00000000000000000000000000000000000000000000000000000000000000000000000004111d2935414c56606d7a85929f97928c857f7a7e848c92979f92867b6e61584e43372b1f12060000000000000000000000000000000000000000000004101c27333d47505a606c78828f989b8e8175685b4e4235281b0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d27303e48505557575550483e362c231a100700000000000000000000000000000000000000000b17222d45525e6b7885919eabb0a396897d7063564a3d3023170600000000000000010e1a2734414d5a6774808d9aa7b3a79b8e8174685b4e4135281b0e000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f0200000a1724313d4a5764707d8a97a3b0a79a8d8174675a4e4134271b0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f29333b4246484c4c4c4c4c4c4c4948433d342b21160a0000000000000000000000000000000000000000030f1b27323d464e545659595959595957514940352a1e12060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d11171c1f262b2f35393d44484d525456544f473d33271c100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d38424a505353514b444039342e27221b140b02000000000000000000000000000000000000000000000000000000000000000004101d2935404b55626c716d666059504a423a31281f160c03000000000000000000000000000000000000000000000000000000000000000000000000010d1924303a45525d68737f8c928c857f7a737f8b91969ea2a3988e81746a5f53473a2e211508000000000000000000000000000000000000000000000713202c38444f59626c73808d949f998c807366594d4033261a0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e2c363e45494a4a49443e362c241a1108000000000000000000000000000000000000000000061d2a3743505d6a7683909da9b1a4978b7e7164584b3e2d22170b0000000000000004101c2834404a546875828e9ba8b3a6998d8073665a4d4033271a0d000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f0200000a1724313d4a5764707d8a97a3b0a79a8d8174675a4e4134271b0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d17212931363a3b3f3f3f3f3f3f3f3c3b38322b22190f040000000000000000000000000000000000000000000a15202b343d4347494d4d4d4d4d4c4b4640372e23180d0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f151a1d24292c32383b4246484948443d352b21160b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c262f383f444647454039342e28231c17110a02000000000000000000000000000000000000000000000000000000000000000000010d18242f3943505a6265605c544f443f3830281f160d04000000000000000000000000000000000000000000000000000000000000000000000000000008131e2935414c56606d798585807a736d6d7a85929fa8ada99f93877c6f6255483c2f221509000000000000000000000000000000000000000000000916222f3c4854606b717e8b929ca6978a7e7164574b3e3124180b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c1a242c33393c3e3e3c39332c241a1208000000000000000000000000000000000000000000020f1c2835424f5b6875828e9ba8b3a6998d80736653493f33271b0f0300000000000006121f2c3844515c667783909daab1a5988b7e7265584b3f3225180c000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f0200000a1724313d4a5764707d8a97a3b0a79a8d8174675a4e4134271b0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f171f262a2d2e32323232323232302f2c272119100700000000000000000000000000000000000000000000040f19222b32373b3c40404040403f3e3b352e251c12070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e13181d20272c30363a3b3d3b38332b23190f05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d262d3338393a38342f28231c17110b0600000000000000000000000000000000000000000000000000000000000000000000000007121d28313f4850565853504a423d342e261e160d04000000000000000000000000000000000000000000000000000000000000000000000000000000020d19242f3a45515d67707d7a736d68676873808c97a1a29f97928c8175685b4e4235281b0f020000000000000000000000000000000000000000000a1723303d4a5663707d87929fa4a196887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008121a22282d303131302d28221a120800000000000000000000000000000000000000000000000d1a2733404d5a6673808d99a6b3a89c8f8275655b5044372b1f13070000000000000713202d3a4653606d7986929facb2a896897d7063564a3d3023170a000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f0200000a1724313d4a5764707d8a97a3b0a79a8d8174675a4e4134271b0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060d141a1e21222525252525252523221f1b160f0700000000000000000000000000000000000000000000000007101920272b2e2f333333333333322f2a231c130a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070d11161c1f252a2d2e302f2c27211911070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b141c22282b2d2d2c29231d18120b060000000000000000000000000000000000000000000000000000000000000000000000000000010c161f2d363f454a4b46443f383028231c140c04000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e2935404b55606b706d68696e746d6d7a85929e98928c857f796d6053473a2d201407000000000000000000000000000000000000000000000a1724303d4a5763707d8a95a0a99e918478695f53473a2d2114080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810171c2123242423211c1710080000000000000000000000000000000000000000000000000b1724313e4a5764717d8a97a8b2ab9f9285786c6053463a2f24180d0300000000070f1b27333f4953636f7c8998a3aeaca196877a6d6154473a2e211407000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f0200000a1724313d4a5764707d8a97a3b0a79a8d8174675a4e4134271b0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e121415191919191919191615130f0a040000000000000000000000000000000000000000000000000000070f151b1f222326262626262625221e18120a0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001040b10141a1e20212322201c160f0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171c1f20201f1c18120c070000000000000000000000000000000000000000000000000000000000000000000000000000000000040d1b242d343a3d3e3a38342e261e17110a020000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232e39424a51596063686d747b81796d727f8c928d85807a736d675d5145392c201306000000000000000000000000000000000000000000000916232f3c4855616b7783909da1978c7f7266574d42372b1e120600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050c11141717171614100b05000000000000000000000000000000000000000000000000000815222e3b4855616e7b8896a1acada297897c6f62554b4035291f150d070405091019222b3744505b6573808c99aab4ab9e918478685e5246392d201307000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f0200000a1724313d4a5764707d8a97a3b0a79a8d8174675a4e4134271b0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507080c0c0c0c0c0c0c090907030000000000000000000000000000000000000000000000000000000000040a0f1315161a1a1a1a1a191816120d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e121415161613100b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f12131413100c07010000000000000000000000000000000000000000000000000000000000000000000000000000000000000009121b22292e31322d2c28231c150c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404a545c60676d737a80868c80736d798485807a736d68605d554b4035291d1104000000000000000000000000000000000000000000000714202c38444f5964717e8a969e92857a6d6054473c31261a0e0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005080a0b0b0a08040000000000000000000000000000000000000000000000000000000714212d3a46535f697884919eabb3a99a8d8074675d51453b31271f18131011141a2228343f4a54606c7884919eaab3a99a8e817467564c41362a1d1105000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f0200000a1724313d4a5764707d8a97a3b0a79a8d8174675a4e4134271b0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030608090d0d0d0d0d0c0c0a06020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507080a090704000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003060607060400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000911181d212425201f1c17110a03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2c3844515c666d72797f858d9292867a6d6f7c7a736d68605d56514b433a2f24180d010000000000000000000000000000000000000000000004101c28333e4653606c788491948b7e71675d5145392a1f150900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121e2a36424d576774808d9aa7b1ab9f92857a6d60574d43393128231f1d1e20252a343c44505c66707d8a96a0acada1978a7d7064574a3d3025190d01000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f0200000a1724313d4a5764707d8a97a3b0a79a8d8174675a4e4134271b0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c111517181312100c06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d787f858c92989f988d80746b6f6e68615e56524c45403a31281d13070000000000000000000000000000000000000000000000000b161f2b3844505b66717e8b8f82756c62554c413529180e03000000000000000000000000000000000000000000000000000000000004060707060503000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1a26313c4956636f7c8995a0acada2978c7f73695f554b433b342e2c292a2d30363e464f59606d7883909da8b2aa9e9285796d6053463a2d20130800000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f0200000a1724313d4a5764707d8a97a3b0a79a8d8174675a4e4134271b0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001050707090a0a0a0907060401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105090b0b0706030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a8591979fa2aa9f92867b6e63615e56524c45413a352f281f160c01000000000000000000000000000000000000000000000000030f1c28333f4a54606d7984857a6e615a50433a2f24190600000000000000000000000000060606060606060000000002050708070c1013131413120f0b0607060400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915222f3b4854606b7783909da7b1a99f92867b6e675d554d45403a393536393b42465058606b727f8c95a0acaea2988d8073675c5145382c1f130600000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f0200000a1724313d4a5764707d8a97a3b0a79a8d8174675a4e4134271b0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004080d11131416171716151413110d07060300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3945515d67727f8c97a1adaaa2988e8174675d524c46413a352f29241d160d0400000000000000000000000000000000000000000000000000000b17222d3845515c66727f7d70685e52483f31281e13080000000000000000000205070813131313131313090907080e11141418181c1f2020201f1b17171413100c0701000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007131f2c38444f5964717e8b95a0acaea2989083796d675e57514b4745404146474d525a616a6f7d87929fa7b1a89f92867b6e61554b4034281c100400000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f0200000a1724313d4a5764707d8a97a3b0a79a8d8174675a4e4134271b0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070c1013191d2021232424232221201d1813120f0b060000000000000000000000000000000000000000000000000000000000000000000000000406070808070704010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2935404b55606d7984919ea39f98928c857a6d6053473b353029241e18130c0400000000000000000000000000000000000000000000000000000006111c2834404b54626d72706b60564c41362d1f160c010000000000000002090e1214152020202020202016151314191e20212523282c2d2d2d2b272224201f1d18120e0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b27323d4653606d7883909da4aeaaa0958f82796e69605c5553514b4c5254575e616c707c859299a3aeaba0968d8073685e5243392e23180c0000000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f0200000a1724313d4a5764707d8a97a3b0a79a8d8174675a4e4134271b0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b12181d1f24292d2e2f3030302f2d2c2924201f1c17110a020000000000000000000000000000000000000000000000000000000003060809070c10131414151413110d08070400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18242f3945515c67727f8b9698928d857f796d675d51453929251e19130d070100000000000000000000000000000000000000000000000000000000000c18232e3942515b62656360594f443b30241b0d0400000000000000050d141a1e20212d2d2d2d2d2d2d23221f1e252a2d2e322e34383a3a3937332d302d2c29241d1a140d070100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a161f2c3844505c66707d89929da6b0a79f948f837b726d6763605d55565e6164696e757e869297a2abafa3999184796d60564d4130271d12070000000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f0200000a1724313d4a5764707d8a97a3b0a79a8d8174675a4e4134271b0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060d151d24292c3035393a3c3d3d3d3c3a39352f2d2b28221c140b0600000000000000000000000000000000000000000000000004060a0f12151518181c1f20212221201d191613100b0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d2934404b55606d7984918e86807a736d675d554b40352919130d08010000000000000000000000000000000000000000000000000000000000000007121d27303f4951565856544f473d32291e120900000000000000050f171f252a2d2e39393939393939302f2c2b3036393b3e424045464746443f413d3a39352f2a261f18130c040000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a54606b74808d949fa7b0a69f9590857f7973706d676a6b686d71757b818a9298a2a9afa39f92877c6f675d51443b301e150b000000000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f0200000a1724313d4a5764707d8a97a3b0a79a8d8174675a4e4134271b0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000610181f272f35383a414647494a4a49484745413d3938332d261d17110a020000000000000000000000000000000000000000070c1012131b1f21222523292c2d2e2f2d2c292422201c160f0b0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c18232f3945515c67727f86817b736d68605d554b433a2f24180802000000000000000000000000000000000000000000000000000000000000000000000b151e2d373f464a4b4948443d352b20170d00000000000000020d17212930363a3b464646464646463c3b38373b4146474b4f4b5153535350494d4a47454039363129241d160d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c17232e38424f59606d788290959fa6afa79f98928b85807c7a787777787a7d81868e939fa2aaaca49f918b7e716a60554b4032291f0c03000000000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f0200000a1724313d4a5764707d8a97a3b0a79a8d8174675a4e4134271b0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e18222a31394045474c5254565757565554514b4a46443f382f28221c140b0200000000000000000000000000000002050a0f12181c1f20262b2e2f322f34383a3b3b3a39352f2f2c271f1b17110a0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d2834404b55606d787b746e69615e56514b433a31281d13070000000000000000000000000000000000000000000000000000000000000000000000030c1b252d343a3d3f3d3b38322b23190e050000000000000009141f29333b4246485353535353535349484342474c5254585b555c6060605b535a5753514b46423b352f281f19100900000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c26303d44515c666d7a8390949fa4acaaa29f97918d898685848485878a8e92999ea5aea9a19a938b7f736c62584e43392f20170d00000000000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f0200000a1724313d4a5764707d8a97a3b0a79a8d8174675a4e4134271b0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c16202a343c434b5153565d616263636362605d555653504a423e332d261d140a0000000000000000000000000004090e11161b1c23282c2d31373a3c3f4140454747484745413d3c38332b27221b140b080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c18232e3945515c666d6e69615e57524c45403a31281f160c0100000000000000000000000000000000000000000000000000000000000000000000000009131b23292e3132302f2c272119110700000000000000020e1a25303b454d525f6060606060606056544f4e53565e6165686a676d6d6c65696763605d55534d45413a312b231b12090100000000000000000000000000000000000000000000000000000000000000000000000000000000000a151e2834404a545d686d7a828d939aa0a8aca9a19e999a939191919297979b9fa3ababa59e9792887f736d635a50463d31281d0e0500000000000a1623303d495663707c8996a3afa89b8e8275685b4f4235281c0f0200000a1724313d4a5764707d8a97a3b0a79a8d8174675a4e4134271b0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28323c464e555d6065686d6f7070706f6d676763605b544f443f382f261c110600000000000000000000070c1014191e20272b2e34383a3d4347484b4e4b5153545554524c4948443d37332d261d19130c040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d2834404b545c60615f57524d46413a352f281f160d0400000000000000000000000000000000000000000000000000000000000000000000000000010911181d2224252322201b160f07000000000000000005121e2a36424d575e6c6c6c6c6c6c6c6c636059575f62686e71757779797a79787674706d67615f57514b433d352d241b13090000000000000000000000000000000000000000000000000000000000000000000000000000000000030c18232e39424c565d686d78808891969ea0a8ababaca49f9e9d9e9fa2a9a8acaaa69f9c938e857d726d635b51483f342b1f160c0000000000000a1623303d495663707c8996a3a8a89b8e8275685b4f4235281c0f0200000a1724313d4a5764707d8a97a3a8a79a8d8174675a4e4134271b0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d1924303a444e585f676d72777a7c7d7d7c7b7a7774706c666159504a42382d22170c0300000000000000030b12181c1f252a2d3238394044464a4e5355585b555c606162605d5656544f46443f382f29241e160d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232e39424b515355534d46423b353029241d160d0400000000000000000000000000000000000000000000000000000000000000000000000000000000060d12151818161613100b040000000000000000000714202d3a46525e6976797979797979796f6b60606a6e757a7e8284868686868583807d79746e69605d554f473f362d251b1309000000000000000000000000000000000000000000000000000000000000000000000000000000000007121c27303a444c565d666d747d848b91969a9ea1a9a6a7a8a8a8a8a7a5a8a09d99948f89817b706b625b514940362d22190d040000000000000a1623303d495663707c89969b9b9b9b8e8275685b4f4235281c0f0200000a1724313d4a5764707d8a979b9b9b9a8d8174675a4e4134271b0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414c565f6a6f797f8387898a8a89888784817d78706b605b544a3f33281e150b000000000000030c151d23282c30363a3d43474a515357585f6265676a676d6e6e6d6867636059535049413d352f281f19110700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d2730394045464846423c363029251e18130c040000000000000000000000000000000000000000000000000000000000000000000000000000000000000106090b0c0a09070400000000000000000000000815212e3b4854616e7b868686868686867d6f666d737b81868b8e9192989a9392908d8a85817b746d67605950483f372d251b110700000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e28323a434c545c606b70787e84898e919797999a9b9c9b9b9a989695918d88827d756e696159514940372e241b1007000000000000000a1623303d495663707d898e8e8e8e8e8e8275685b4f4235281c0f0200000a1724313d4a5764707d8a8e8e8e8e8e8d8174675a4e4134271b0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202c3945525d686f7c848c9095959696969596918e89847d746c665b50443e30271c120700000000000b151e272e34383b4246474e54545c6063676a6f727476797a7a7b7a7874706b64605b534f45413a312b2318120b0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e272e34383a3b3a37312a251f19130d07010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b879393939393897c6f6d7880868e92999b9d9fa3a49f9e9c9a97928d8680796f6b625a51493f372d23190e0500000000000000000000000000000000000000000000000000000000000000000000000000000000030c162028313a424a505960666d71787d8185888a8c8e8e8f8f8e8d8c8a8784807c76706b615e574f473f372e251c120900000000000000000915222f3c4855626f7c818282828282827f7265594c3f3226190c0000000916232f3c4956626f7c818282828282827e7165584b3e3225180b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8491969da0a7a3a3a3a8a09e9a95918a80786c605a5042392e23180c0000000007121d2730394045464d5254586062666d7074787b7e8183858687888785817d77716c656059514c433d3528231d150c0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c151d23282c2d2e2d2b261f1a140d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b87949f9f9f96897c6f7a828c92999fa3aba8a6a5a6a8aba9a9a29f99928d847d716c625b51493f352b20160c0200000000000000000000000000000000000000000000000000000000000000000000000000000000040e161f2830383f444f545c60656c7074787b7e7f8182828281807f7d7a77736f6a636059524d453e352d251c130a0000000000000000000815212e3a47535f6a6f75757575757575726d62574a3e3125180b0000000815222e3b4754606a6f75757575757575716d62564a3d3124170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1926323f4c5965727f8c96a0a8acacaaa7a6a7a9aaa7a09d928d80746c61544a4034281c10040000000c18232e39434b5153565e61666a6f74797d8185888b8e909298949597918e89837e786f6b605d554f473f342e271e150d0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b12181c1f2022211e1a140e09020000000000000000000000000000000000000000000000000000000000000000000000000000000000040607090c0d0e0e0d0c0b0907060401000000000000000000000815212e3b4854616e7b8794a1aca296897c7a838f949fa3a8a09e9b9999999b9ea1a8aaaba39f9691877e726d625b51473d32281e13080000000000000000000000000000000000000000000000000000000000000000000000000000000000040d161e262e343d424a50535b606367696e717374757575757472706d6866625f58544f46423b332c231b130a0100000000000000000006121f2b37434e585f626868686868686865625b51463a2e22160900000006131f2b37434e5860626868686868686865625a50453a2e21150900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020f1c2935424f5c6875828f9ba8aea7a09d9a999a9c9fa3aba49d928a7e71665c5144382c1f1206000004101c2834404b555c6064696e72777c81858a8e9197989a9d9fa2aaa9a19e9a95908a837d746d6760595145403930271f150d030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c1013131514120e09030000000000000000000000000000000000000000000000000000000000000000000000000000000000070c10131316181a1a1b1a1918161413110d070100000000000000000815212e3b4854616e7b8794a1aea296897d828f959fa39f9b96918e8c8c8c8e91969b9ea5ada8a199928b7f726d62594f443a3025190d040000000000000000000000000000000000000000000000000000000000000000000000000000000000040c151c232830383f4449505356575f6164666768696868676563615e5655534e48443d363029201a11090100000000000000000000030f1a26313c464e53555b5b5b5b5b5b5b595751493f35291e1206000000030f1b27323d464e54565b5b5b5b5b5b5b585650483f34291d11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c2936434f5c6976828f9caaa39f95908d8c8d9092999d9fa59e9184796d6053463a2d201308000006131f2c3845515c676d71757b7f84898d92979695959596979a9d9fa4ababa7a09d959089817a706b635b514b423931271f150b02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040607080705020000000000000000000000000000000000000000000000000000000000000000000000000000000003090e12181c1f2023252727272726252321201d18130c04000000000000000815212e3b4854616e7b8794a1aea99c8f828f949fa099928e888481807f808184898e939ea1a8aba39f918b7f726b60564c41362a20160a000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a11171e262e34383f44464a4d535557595b5b5c5c5b5a595754524c4847433c38322a251f170e08000000000000000000000000000a15202a343c4347484f4f4f4f4f4f4f4c4a463f372d23180d01000000000a15202b343d4347494f4f4f4f4f4f4f4b4a453f362d22180c0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020f1c2835424f5b6875828e9ba398928a8380808183868b90959ea1968a7e7164574b3e3025190d01000713202d3a4653606d797e82868c91918e8c8b89898888898b8d9093999da0a7aaa79f9d938e847d726d605c544b433931271d140a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060e151a1d23282c2d30323334343433312f2d2c29241d160d070000000000000815212e3b4854616e7b8794a1aeab9f948f949f9f969187817c777573727375787c81899196a0a7aea39f92877d70685e52463d32271b0f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c151c23282d3337393d4246484b4c4e4f4f4f4e4d4c4a4746413c3a37312c27211a140d050000000000000000000000000000030e18222a31373a3c424242424242423f3e3a352d251b11070000000000040f19222b32373b3c424242424242423e3d3a342d241b11060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2733404d5a6673808d999f92867e77747374767a7e838a91969b8e817568564c41362a1e1105000e1a2734414d5a6774808a8e8b89868482807e7c7c7b7c7d7e8183868b90959c9fa6aba59d9691877f756d665d554b43392f261b11060000000000000000000000000000000000000000000000000000000000000000000004060707060603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001090f181f262b2e34383a3c3f404141403f3e3c3a39352f281f19110700000000000815212e3b4854616e7b8794a1aeb0a69f9c9f9f9590847c746f6a68666666686a6f757d849095a0a7afa39992857a6d61584e43372b2015090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a11171b22272b2d31373a3b3e404142424242413f3d3a3936302e2b26201b160e09020000000000000000000000000000000006101820262b2e2f3535353535353532312e29231b13090000000000000007101920272b2e2f3535353535353532312e29221b1209000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a9a988b7f726c676667676d71767d849095928578685e5246392d201407000915222f3c4855626f7c83817e7c7a77757371706f6e6f707174777a7f83898f949d9fa7a8a199928c81786d675d554b41382d22170f050000000000000000000000000000000000000000000000000000030608090c070c1013131413120f0b060b08080602000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a131b212a313739404546494b4d4d4e4d4c4b494745413a312b23190f05000000000815212e3b4854616e7b8794a1aeb8b0abaaa09690837a6f6a625f585959595860626b707a839095a0aaaba1978e81746a6054473c31261a0f02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c11171b1f20262b2d2e313334353635353432302e2d2a25211f1b15100b0400000000000000000000000000000000000000060e151a1f2122282828282828282625221e181109010000000000000000070f151b1f2223282828282828282524211d18110900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a87939285796d605a59555d60646b707a839097877a6e6154473b2e211408000815212e3a47535f6a6f7774726f6d6768666463626262636467686d72777c828990959fa2aaa39f938e82796d675d53493f332721170d020000000000000000000000000000000000000000000002050a0f121515181b181c1f2021201f1c171b181514120f0a05010000000000000000000000000000000000000000000000000000000000000000000000000000000000000a131c252d333c42474b515356585a5a5a5a59585654514b433d352b21160b000000000815212e3b4854616e7b8794a1aebabaaea39891847a6d686058534e4d4c4d4e545960686e7a839198a2aea99e93897c6f62584e43372b1f12060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f12131a1e21222426282829292827262421201d1915120f0a0300000000000000000000000000000000000000000000030a0f1215151c1c1c1c1c1c1c191816120d070000000000000000000000040a0f1315161c1c1c1c1c1c1c181715110c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3946525e68778390908376675c514d4b5154596168727f8c96897c6f6356493c302316090006121f2b37434e585f626a676563605d555958565655555658565e61656a6f767d838b92989fa7a59e948f82796d655b50443e33291f1409000000000000000000000000000000000000000003090e12151b1f2122252823282c2d2d2d2b2822272522211f1a15110d080200000000000000000000000000000000000000000000000000000000000000000000000000000007101c252d373f454d53545c60636566676767666462605d554f473d32271c10040000000815212e3b4854616e7b8794a1aebeb2a99f92867c6f685e564e4743403f4043474f565e686e7b86929fa7afa59c8f82756a5f53473a2e21150a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000305090e12141518191b1c1c1c1b1a19171413110d0806030000000000000000000000000000000000000000000000000000030608090f0f0f0f0f0f0f0c0b0906010000000000000000000000000000030608090f0f0f0f0f0f0f0b0b0905010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111d2a36414c5665727f8c908376665c50454c525960686d798390978a7d7164574a3e3124170b00030f1b26313c464e53555d5b585653514b4d4b494948494a4b4c52545860626b6f787f8690959da5a69e948e81776c605a50453b30251a0e05000000000000000000000000000000000003090e141a1e20262b2e2f32352e34383a3a3938332d34312f2e2b26201e19140d0801000000000000000000000000000000000000000000000000000000000000000000000000040f19222d373f4951575f61666d6f727374747372716f6d6760594f44382c2013070000000815212e3b4854616e7b8794a1aeb9ada1978c7f726a5f564c443d37313332373d444c565f69727f8b95a0acaa9e94887b6e6255483c31261a0f03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507080b0d0e0f0f0f0f0e0c0a0707050100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d1925303b4754616e7b869285796d605651565d616b6f7a828f95978b7e7164584b3e3125180b00000a15202a343c434748504e4b49474540403e3d3c3b3c3d3e4146474e545960656c727b838e939fa4a69e938d80736c61574d42362a21160b00000000000000000000000000000000060b141a1f252a2d31373a3c3f41434045464746443f43413e3b3a37312d2a251e19130c0400000000000000000000000000000000000000000000000000000000000000000000000a15202b343f49515b62696e74797c7e808081807f7e7c7a706b6054483b2f2216090000000815212e3b4854616e7b8794a1aeb8ab9e9184796d60584e443a322b2626272b323b444d57606d7884919daab0a6998d807366584e43372b1f120600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814202d3a46525e6975828f8b7e71685e5c60686d747c848f949f988b7e7265584b3f3225180c0000030e18222a31373a3c44413f3c3a39352f31302f2f2f303035393d43474f535b60696e78818b9399a3a59d928a7e71695e52463d33271c100300000000000000000000000000020a11171f252a30363a3c4347484b4e504b51535453504a504e4b4847433c39363029241e160d06000000000000000000000000000000000000000000000000000000000000000000030f1b27323d46515b636d727b8185898b8d8d8d8d8c8b89887d706356493d3023160a0000000815212e3b4854616e7b8794a1aeb3a9998c8073675c51463c3228201b191b2029323c44505c66717e8b98a3aeab9e9184786a5f53473a2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111e2a36424d5663707d8991857a6d67676d727a818791969fa6978b7e7164584b3e3125180b00000006101820262b2e2f373432302d2c292425232322222325292d32373d414950575f666d747f879299a3a49f92857b6e61594f44382c1f1509000000000000000000000000040b141b222730363b4246484e5355585b5d545c6060605b545d5a5855534e4746413b352f282017110a020000000000000000000000000000000000000000000000000000000000000006131f2b37434e58636d727f868e929898999a9a9a999798877b6e6154483b2e2115080000000815212e3b4854616e7b8794a1aeada197887c6f62554b40342a20160e0a0e172028343f4a54606d7a86929facada196887b6f6255483c2f2215060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1925303b4854606b7784919083796d71797f858d9399a0a89f95887b6f6255483c2f22150900000000060e151b1f21222a28252320201d18181616151617191d20272b2f383f444d545c606d727e879299a4a2988f82756b6054483c31261a0e0200000000000000000000050e161d262d333b42464d5254585f6265686a6b666d6d6c666b6a6764625f5854524c45413a3227221b140b030000000000000000000000000000000000000000000000000000000000000815222e3b4754606a727f8b92989fa2aaa6a7a7a6a59f928578695e52463a2d2014070000000815212e3b4854616e7b8794a1aeab9e9285786a5f5343392f22180e0400050e17232e3845515d6775828f9ba8b2a8988b7f7265584c3f2e23170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f2c38444f5965727f8b958f827a7e848c92979fa4aba4999083766a5f53473a2e2115080000000000030a0f1215151d1b18161413100d070a090809080d11151b1d262d333b424b515b626c717e87939fa49e93897d7063574d42372b1e1206000000000000000000050e1720282f383f444d52575e61666a6f7274767879797a7978787674716e6a66615e56524c443e332d261d150c030000000000000000000000000000000000000000000000000000000004101d2935404b55626f7c87939fa3aaaeb4b2acaba9a99d9083766a574d42362a1e12050000000815212e3b4854616e7b8794a1aea89c8f827569584e4331271d100600000006111c2935404b5565727f8c98a5b2a89b8e817568544a3f34281c1003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002101c27333d4754606d7a8692948f858b91969fa2a9aea49f93877c6f63584e43372b1f12060000000000000003060809110e0c090706040100000000000001050a0b141b222730394045515a616c727f8c929da69c8f8276695f53473a2e2114080000000000000000040e172029323a414950575e61696e73777b7e81838586868786858483817e7b77726e68605d5650443f382f271e150b0000000000000000000000000000000000000000000000000000000006131f2c3845515d6775828f99a4aeb4b0aba8a19e9d9d9b8e8174685b4e4130251a0e020000000815212e3b4854616e7b8794a1aea69a8d8073675a4d403227150b00000000000d18242f3c4956636f7c8996a9b3aa9d908477665c5044382b1f12060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b16202c3945525d6874818e9a9892989ea1a8adaba39f928c7f726b6054463c31261b0f0300000000000000000000000401000000000000000000000000000000020a11171e272e343f48505a626d74808d959f9f94887b6e6255483b2f22150800000000000000030c162029323b444c535b60696e757b8084888b8e909192999a939291908d8b88847f7a746d68615a5049413930271c12070000000000000000000000000000000000000000000000000000000714202d3a4753606d7a86929fabb5b0a69f9c96919090918c7f7265594c3f32261909000000000815212e3b4854616e7b8794a1aea5988b7e7265584b3f3225180c00000000000714212d3a4754606d7a8797a2adac9f9286796d6053463a2d20130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414c566a7783909da29fa2aaacaea7a099928b80736d63594f43342a20150a00000000000000000000000000000000000000000000000000000000000000060c151d2328363e48515b606d78839098a2998c7f7266594c3f3326190c000000000000000b151e28323b444c565d656c727b81868d9196989b9d9e9fa3a49f9f9e9d9a9796918c86817a716c605b534a42392e2318100700000000000000000000000000000000000000000000000000000916222f3c4955626f7c8899a3aeb2a89f948f8884838384877d7063574a3d3024170a000000000815212e3b4854616e7b8794a1aea3978a7d7064574a3d3124170a00000000000713202c3945525d687885929fabafa399877a6e6154473b2e211408000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d19242f414e5a6774818d9aa8acaeafaaa29f9591877f736e635b51473d3222180e030000000000000000000000000000000000000000000000000000000000000000030b1218242d363f44505c666e7b86929f9c8f8276695c4f4336291c1000000000000007121c27303a444c565e686d777f868e92999ea0a8a7a9a9a7a6a5a6a7a9a9a7a8a09d99928d857e736c655c544a40342822180e04000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a97abb5aca0968f827b7876777879786d6053463a2d201307000000000815212e3b4854616e7b8794a1aea296897c6f6356493c30231609000000000004111d2935414c566a7784919daab5ab95887c6f6255493c2f221609000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000816232f3c4956626f7c8996a0acaba39f98928c837c726d635c52493f342b211006000000000000000000000000000000000000000000000000000000000000000000000007121b2428343f4a545f69727f8b969e9184786b5e5145382b1e120000000000000c18232e39424c565e686e7a828c92989fa3abacaba39f9d9a9999999a9d9fa3aaacaba39f97918a80776d665c51443f342a20150a000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5b2aa9e9184796e696a6a666c6d665c5044382b1f1206000000000815212e3b4854616e7b8794a1aea295887b6f6255483c2f2215090000000000010d19242f43505d6a7683909da9b0a396897d7063564a3d3023170a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222e3b4754606a7784919ea59e99928d857f796f6a625b524a40372e22190f00000000000000000000000000000000000000000000000000000000000000000000000000091217232e38424d57606d7884919e9285796c5f5246392c1f13000000000004101c2834404a545d686e7a838f949fa2aaada7a09d9992908e8c8c8c8d9092989da0a7aea9a19e928d81786d605b51463c32261b0f050000000000000000000000000000000000000000000000000d1a2633404d596673808c99a6b2a6998c7f73675f57545b60605c544a3f34281c1003000000000815212e3b4854616e7b8794a1aea195887b6e6255483b2f221508000000000000081d293643505c6976838f9ca9b0a3978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2b38434e5866737f8c999c938f87817a726d666058514940382e251c1007000000000000000000000000000000000000000000000000000000000000000000000000000006111c26303c44505c66717e8a979286796c5f5346392c201300000000040f19232c3844515c666d7a8390959ea6aea9a29e95908b868381807f808183868b90959fa2aaada49d938e81746d62584e43372b21160b0000000000000000000000000000000000000000000000010d1a2734404d5a6773808d9aa6b1a4978a7e7164554d4a505353504a42382e23170b00000000000815212e3b4854616e7b8794a1aea194887b6e6155483b2e221508000000000003101c2936434f5c6976828f9ca9b0a4978a7d7164574a3e3124170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b27323d4855616e7b88948f89827b746e68605c544e463f372e261c130a000000000000000000000000000000000000000000000000000000000000000000000000000000000a151e28343f4a54606d7985929286796c5f5346392c2013000000000b16212b37434e58606d78828f95a0a7b0a7a097928b837e7a767473727374767a7e838b9298a1a9aea59e938b7e726a5f53473d33271c100400000000000000000000000000000000000000000000010e1b2734414e5a6774818d9aa7b0a3968a7d7063574a3f444646443f3830261c110600000000000815212e3b4854616e7b8794a1aea295887b6f6255483c2f221509000000000003101d293643505c6976838f9ca9b0a4978a7d7164574a3e3124170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d16212d3a46535f69768289827c756e6a615e56514b423c342d241c140a0100000000000000000000000000000000000000000000000000000000000000000000000000000000030c17232e3844505c6674818e9286796c5f5346392c201300000004101b27323b47535f6a73808c949fa8b1a7a09590857e77716d676766666667676d71787f869297a1aaafa59f92867c6f62594f44382c20150a00000000000000000000000000000000000000000000010e1b2834414e5b6774818e9aa7afa396897c706356493d38393a38342e261e140a0000000000000815212e3b4854616e7b8794a1aea296897c6f6356493c30231609000000000004101d2a3743505d6a7683909da9b0a3978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070d13191e252a36424d5763707d7d766f6a625f57524c454039302b221b120a0100000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c28343f4a5464717e8b9286796c5f5346392c20130000000713202c38444f59626f7c87929fa6b0a9a09590837b716c64605d55595959555d60666c727c859298a3aeaea3988f82766b6155483c32261b0f00000000000000000000000000000000000000000000010e1b2834414e5b6774818e9aa7afa396897c706356493d302d2d2b28231c140c020000000000000815212e3b4854616e7b8794a1aea3968a7d7063574a3d30241706000000000005111d2935414c566b7784919eaaafa396897c706356493d3023160a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c13181e242930363b424855616b70706b626058534e46413b342e271e1910090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c17232e3d495663707c899286796c5f5346392c20130000000916222f3b4854606b76828f99a3afada29790837a6e69615a53514b4d4c4d4b51545b606a6f7c86929fa7b1aa9f94897d7063584e43372b1b1106000000000000000000000000000000000000000000010e1b2834414e5b6774818e9aa7afa396897c706356493d3023201f1c17110a02000000000000000815212e3b4854616e7b8794a1aea4978b7e7164584b3e2d22170b00000000000713202d3946525d687885929fabb2a995887b6e6255483b2f2215080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d161d242930353b41464d5254596163636059544e47423c363028231d150c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000616222f3c4955626f7c889286796c5f5346392c2013000005111e2a36414c5663707d89949fabb0a69f92857b6e685e5750474540403f4040454a5058606a727e8b959fabb0a69d9083776a5f5347382d22170b000000000000000000000000000000000000000000010e1b2834414e5b6774818e9aa7afa396897c706356493d30231612100b060000000000000000000815212e3b4854616e7b8794a1aea6998d80736653493f33271b0f03000000000714212e3a4754616d7a8797a2adada197877a6d6054473a2d21140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f282f353a41464c52575e61615e5656554f47433d37312d2a251e170e0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1723303d4a5663707d899286796c5f5346392c201300000714202d3946525e6875828f9ba6b0ab9f948a7d70695f564d453e39352f332f35383f444e58606c7883909da6a8a7a095887c6f6253493f33271b0f030000000000000000000000000000000000000000010e1b2834414e5b6774818e9aa7afa396897c706356493d3023160a0300000000000000000000000815212e3b4854616e7b8794a1aea99c8f8376655b5044372b1f120700000000091623303c4956636f7c8996a9b3ab9e918578675d5145392c2013060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007131d28313a41454c52565e61696e6d685e5248443d383a3b3b3936302920170d0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404b5465727f8b9286796c5f5346392c201300000814212e3b4754616e7a86929facb1a79c8f82766c61574d443b332c29242624292d333d44505b656f7c89949d9c9a98978d8073655b5044372b1f12050000000000000000000000000000000000000000010e1b2834414e5b6774818e9aa7afa396897c706356493d3023160a0000000000000000000000000815212e3b4854616e7b8794a1aeab9f9285796c605346392f24180c03000006101d2935404b5565727f8c98a5b2a89c8f827569554c4135291d1104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d18242f3a434b51565d61686e747b7a6d61574d423b4246474746413b32291e14080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a131f2c3845515c6675818e9286796c5f5346392c201300000b1825323e4b5865717e8b99a3afaca095897d70635a50453b3229211d181c181c2228333f4953606a768390908f8d8c8a8984786c605346392d2013060000000000000000000000000000000000000000010e1b2834414e5b6774818e9aa7afa396897c706356493d3023160a0000000000000000000000000815212e3b4854616e7b8794a1aeada297887c6f62554b4035291e150b04060e18212c3945515d6775828f9ba8b3a9998c807366594d402f24190d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414b555d60686d737a80868074695f5346454d525454524c443b3025190e040000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c262f3a4653606d7985929286796c5f5346392c20130005121e2a36424d576875828f9babb5aa9d9083776b6054473e33292929292929292929222d38414e5864717e858482817f7d7c7a6d655b5044372b1f12050000000000000000000000000000000000000000010e1b2834414e5b6774818e9aa7afa396897c706356493d3023160a0000000000000000000000000815212e3b4854616e7b8794a1aeb3a99a8d8174675d51453c30261d151111172028333f4a54606d7986929facada297897c6f6356493c30231608000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945515d676d737a80868d92877b6e61584e52565e61615e564c41362a20150a000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d17222d38424f5964707d8a979286796c5f5346392c2013000714212d3a46535e697885929fabb4aa998c807366594f44353535353535353535353535352f3d4955616c717977757472716f6d685e53493f33271b0f030000000000000000000000000000000000000000010e1b2834414e5b6774818e9aa7afa396897c706356493d3023160a0000000000000000000000000815212e3b4854616e7b8794a1aeb8ab9f9285796d60574d42382f27201d1b2227323a44505b66717e8b98a2aeab9f9285796d6053463a2d201307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d797f858d9298998e81756a5f565d60696e6e685e52463c31261b0f0400000000000000000000000000000000000000000000000000000000000000000000000000000000020b161f28333f4a54606b7683909c9285786c5f5245392c1f12000815212e3b4854616e7b8797a2adaea298897c6f6356494242424242424242424242424242424245505a61646c6a6967656462615e564c41382d22170b000000000000000000000000000000000000000000010e1b2834414e5b6774818e9aa7afa396897c706356493d3023160a0000000000000000000000000815212e3b4854616e7b8794a1aebaaea2988c7f72695f544a4239312c292a2d333b444d57606c7883909daab1a79a8e8174665c5044382c1f120600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111d2a3744505d6a77838c92989fa29f93877c6f6260686d737a7a6e61584e43372b21160b000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d28313944505b66707d89949e9184786b5e5145382b1e12000a1724313d4a5764707d8a97a9b3ab9f9285796d60534f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f5055575f5d5c5a59575654524c443c342a20150a000000000000000000000000000000000000000000010e1b2834414e5b6774818e9aa7afa396897c706356493d3023160a0000000000000000000000000815212e3b4854616e7b8794a1aebeb3aa9f92867b6e665c544b433d393536383f444d565f69717e8b95a0acab9f95897c6f63544a3f34281c1003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b96a0aaada4998f82756a6d727a808581746a5f53473d32271b1005000000000000000000000000000000000000000000000000000000000000000000000000000006111b262f39434e58606c7883909d9c8f8376695c504336291d10000c1925323f4c5865727f8b98a5b2aa9d908377665c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c55544e463c32261b0f030000000000000000000000000000000000000000010e1b2834414e5b6774818e9aa7afa396897c706356493d3023160a0000000000000000000000000815212e3b4854616e7b8794a1aebabaaea2989082786d665d554f47454142464950575e686e7b86929fa7b1a79d9083776b605442382e23170c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7884919ea7a29f9792897c72797f858d92877c6f62594f44382c22170b00000000000000000000000000000000000000000000000000000000000000000000000000000b17222d38414b555f6a727f8c95a09a8d8174675a4e4134271b0e000d1a2734404d5a6773808d9aa6b3a89b8f8275686868686868686868686868686868686868686868686868686868686868686868625f584e43372b1f13060000000000000000000000000000000000000000010e1b2834414e5b6774818e9aa7afa396897c706356493d3023160a0000000000000000000000000815212e3b4854616e7b8794a1aebabeb4aa9f948e81786d67605954514c4d52535b60696e7a849198a2aeab9f958a7e7164594f4330261c1106000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505c66717e8a959f97928c857f7a7f858c9297998f82756b6054483e33281c1004000000000000000000000000000000000000000000000000000000000000000000000000030f1b27333f49535d676e7c86929fa4998a7e7164574b3e3124180b000e1b2835414e5b6874818e9ba7b3a79a8d80757575757575757575757575757575757575757575757575757575757575757575756f6a5f54473b2e2215080000000000000000000000000000000000000000010e1b2834414e5b6774818e9aa7afa396897c706356493d3023160a0000000000000000000000000815212e3b4854616e7b8794a1aebbb3adaba69e938e81796f6b64605d55565e61656c717b849196a0aaafa3999083786c6053463d3220150a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a54606c788491928c857f7976838b91979fa29e94897d70635a5044392d21140800000000000000000000000000000000000000000000000000000000000000000000000005121f2b3744505b656d79839198a29f93867a6d6154473a2e211407000f1c2835424f5b6875828e9ba8b5aa9d9183828282828282828282828282828282828282828282828282828282828282828282827c6f6255493c2f2216090000000000000000000000000000000000000000010e1b2834414e5b6774818e9aa7afa396897c706356493d3023160a0000000000000000000000000815212e3b4854616e7b8794a1aeb3a9a19e9fa29e938e837c76716d676a6a696e72787e859196a0a8b0a69f92877c6f655b5044372b1f1203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17232e3844505b66717e8a85807a726d717e8b96a0a9ada69d9083766c6155493c3023160a0000000000000000000000000000000000000000000000000000000000000000000000000613202d394653606c77818e95a0a69c8f8275685e5246392d201307000f1c2935424f5c6875828f9ba8b5aca095918f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8a7d7063574a3d3024170a0000000000000000000000000000000000000000010e1b2834414e5b6774818e9aa7afa396897c706356493d3023160a0000000000000000000000000815212e3b4854616e7b8794a1aeada197919298a29e959189827d7a787777787b7e838b9297a0a8afa69e948c7f736a6053493f33271b0f030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c28333f4a54606c777f7a736d68606d7884919ea7a29f97928a7d7164574a3e3124170b0000000000000000000000000000000000000000000000000000000000000000000000000d1a2633404d596673808c939ea79f94897d7063564c4135291d1105000f1c2935424f5c6875828f9ba8b5b1a7a09d9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b978a7d7064574a3d3124170a0000000000000000000000000000000000000000010e1b2834414e5b6774818e9aa7afa396897c706356493d3023160a0000000000000000000000000815212e3b4854616e7b8794a1aeab9e9185859299a2a09d948f8a8684838485878b90959fa2a9aea59e948f82786d60584e41382d22170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d3844505b656c726d68605d5c66717e8a959f98928c857f796d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000d1a2633404d596673808c99a5a3999083766b6054443a3025190d01000f1b2835424e5b6875818e9ba8b4b9b1acaaa8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a396897d7063564a3d3023170a0000000000000000000000000000000000000000010e1b2834414e5b6774818e9aa7afa396897c706356493d3023160a0000000000000000000000000815212e3b4854616e7b8794a1aeaa9d90837d879298a1a69e9c9a939190909297989da0a7adaaa29f938e82796d665c50463c2f261b110600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c27333f49535b6065615d565254606c788390928d857f7a726d675d5145392c2013060000000000000000000000000000000000000000000000000000000000000000000000000815222e3b4855616e7b88959f9f92877c6f62594f4432281e130800000e1b2835414e5b6874818e9ba7b4b5aba39f9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9da0a7b1b5afa296897c6f6356493c302316090000000000000000000000000000000000000000010e1b2834414e5b6774818e9aa7afa396897c706356493d3023160a0000000000000000000000000815212e3b4854616e7b8794a1aeaa9d9083777d8691969fa3aba49f9e9d9d9ea1a9aaacaba39f98928b81796d675d544a3f342b1d140a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d38414950535954524c45505b65707d8a86807a736d67605d554b4035291d10040000000000000000000000000000000000000000000000000000000000000000000000000714212d3a46535f697683909d948c7f726a5f53473d3320160c0200000d1a2733404d5a6673808d99a6b3afa39992909090909090909090909090909090909090909090909090909095a0acb8b4ab95887c6f6255493c2f2216090000000000000000000000000000000000000000000e1b2834414e5b6774818e9aa7afa396897c706356493d3023160a0502000000000000000000000815212e3b4854616e7b8794a1aeaa9d908377707c848d92999ea1a9a7a8a8a8a7aca49f9d99928d867e756d675d554b42382e22190b02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111b262f383f44464c4746413f4953616b727f7a736d68605d55514b43392f24180d0100000000000000000000000000000000000000000000000000000000000000000000000005121e2b37424d5765727e8b958f82786c60584e43352b210e040000000c1925323f4c5865727f8b98a5b2ac9f92878384848484848484848484848484848484848484848484848483909daab7aea399877a6d6154473a2e21140700000000000000000000000000000000000000040a0f1b2834414e5b6774818e9aa7afa396897c706356493d30231614110e080200000000000000000815212e3b4854616e7b8794a1aeaa9d9083776a6f7a80878d9297989a9b9c9b9a999a93908c86807b716c605c554b433930261c1007000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d262d3337393f3a393538414f59626d726d68615d56514c45403931281d120700000000000000000000000000000000000000000000000000000000000000000000000000020e1a26313c4754616d7a869083796d665b50463c32231a0f000000000a1724313d4a5764707d8a97aab4ac9f9286787777777777777777777777777777777777777777777777777b8894a1aeac9f9286786c605346392d201306000000000000000000000000000000000000070f151b1f2834414e5b6774818e9aa7afa396897c706356493d302621201e19140d05000000000000000815212e3b4854616e7b8794a1aeaa9d9083776a686d747b8085898b8d8e8f8e8e8c8a86837f7a746e68625a514b433931271e140a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b141b22272b2d322e2d292f3e47515b6265615e56524c45413a352f281f160c0100000000000000000000000000000000000000000000000000000000000000000000000000000914202d3946525e687581837a6d675d544a3f342a201108000000000815222e3b4855616e7b8898a2aeafa399887b6e6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a707d8996a3b0aa9d908477655b5044372b1f1205000000000000000000000000000000000007101920272b2e34414e5b6774818e9aa7afa396897c706356493d33332e2d2a251f170e050000000000000815212e3b4854616e7b8794a1aeaa9d9083776a5d60696e74797c7f81828282817f7d7a77726e68615e565045403930271f150c02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171b1f202621201d2c353f4951565854524c46413a352f29241d160d0400000000000000000000000000000000000000000000000000000000000000000000000000000005111d2935414c56626f7c7a6d685e554b42382d22180e00000000000613202d394653606c7985929fabb5ab968a7d70635d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5365727e8b98a5b1a89b8e81756853493f33271b0f0300000000000000000000000000000000040f19222b32373b3c414e5b6774818e9aa7afa396897c706356494040403b3936302920170d0200000000000815212e3b4854616e7b8794a1aeaa9d9083776a5d575f61666c6f72747575757473716e6866615e56524d443f342e271e150d03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f12131914131a232d373f464a4c4746413a353029241e18120c0400000000000000000000000000000000000000000000000000000000000000000000000000000000010d1925303a4854606a6f6d685e564c433a2f261c1006000000000005121f2b3744505b6576828f9ca9b3a79a8d807467594f51515151515151515151515151515151505b6575828e9ba8b2a8988b7f7265584c3f2d22170b00000000000000000000000000000000000a15202b343c4347494c4e5b6774818e9aa7afa396897c7063564c4c4c4c4746413b32291f140800000000000815212e3b4854616e7b8794a1aeaa9d9083776a5d4d53545b60626567686968676664615e5654524c46413b3228231d150c030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000305060c0707111b252d343a3e3f3a39363029241e19130d070100000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e2c38434e586062615e564c443a31281d140a000000000000030f1b27333f495365727f8c98a6b0ab9e9184786b60544844444444444444444444444444444653606c7885929eabaca196887b6e6255483b2f22150600000000000000000000000000000000030f1b27323c464e545559595b6774818e9aa7afa396897c7063595959595954524d443b3025190e02000000000815212e3b4854616e7b8794a1aeaa9d9083776a5d50464a505356585a5b5c5b5b595754524c4746413b3630292018120b030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009131b23292e31322e2d2a251e19130d08010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020f1b27323d464e545654524c443a32291f160b02000000000000000b17222d3b4855616e7b88949fabaca196897d70635a50463c333737373737373737313a434f5963707d8997a1adab9e9184786a5f53473a2e2114080000000000000000000000000000000006131f2b37434e5860626666666774818e9aa7afa396897c70666666666666615e564d41362a1e1105000000000815212e3b4854616e7b8794a1aeaa9d9083776a5d50443f4446494c4e4f4f4f4e4c4a4746413b3936302a251f170e07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010911181e22252521201e19130d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a16212b343d4348494746413a322920170d0400000000000000000614212d3a46535f697683909ca8b2a89d9083766c61584e453d36302c29282b2e343b434c56606b75828f9ca9afa4998c807366574e42372b1e1206000000000000000000000000000000000815222e3b4754606a6f7373737374818e9aa7afa396897c737373737373736e685e5246392d201407000000000815212e3b4854616e7b8794a1aeaa9d9083776a5d50443338393c3f4142424241403e3b3936302d2a251e19140d05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d121618191413110d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040f19222b32383b3c3a3936302920170e0500000000000000000005121e2b37424d5764717e8b96a0acab9f958a7e716a5f574f46413a39353338393f444d555d68707d87939facab9f93877b6e6155483c31261a0e02000000000000000000000000000000000916222f3c4955626f7c7f7f7f7f7f83909daab4a79a8e817f7f7f7f7f7f7f7a6e6154473b2e211408000000000815212e3b4854616e7b8794a1aeaa9d9083776a5d5044372b2d2f32343536353433312e2d2a25201e19140e080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000106090b0c070705010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007101921272c2e2f2e2d2a251e170e0500000000000000000000020e1a26313c4653606d7884919ea6b0a79f92867c6f696059524c4745413f44464a50565e676d7a84919aa4afa3998e8175695f53463a2a20150900000000000000000000000000000000000c1925323f4c5865727f8b8c8c8c8c90959fabb6a99d938e8c8c8c8c8c8c887c6f6255493c2f221609000000000815212e3b4854616e7b8794a1aeaa9d9083776a5d5044372a2023252728292828262421201e1914110d0802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070f161b1f222321201d19130c0500000000000000000000000009141f2c3844505c66717e8a949fa9aea29891847b706b615e5654514b4a5053545c60696e79829096a0aca79f92877b6e62574d42362a180e0300000000000000000000000000000000000c1925323f4c5865727f8b989999999d9fa7b1baafa59d9a999999999995887c6f6255493c2f221609000000000815212e3b4854616e7b8794a1aeaa9d9083776a5d5044372a1d16191b1c1c1c1b19171414110d080501000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f1315161413110d08020000000000000000000000000003101c28343f4a54616c76828f97a2abaaa19691857d746d6864605d55545b6062666d717b8390949fa8a9a0958d8073695f53453b31261a060000000000000000000000000000000000000c1925323f4c5865727f8b98a5a6a6aaabb1b9c0b7afa9a7a6a6a6a6a295887c6f6255493c2f221609000000000815212e3b4854616e7b8794a1aeaa9d9083776a5d5044372a1d110c0e0f0f0f0e0d0b0807050100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000307090907070501000000000000000000000000000000000c17232e3842505a616e7b859299a3aba8a1979287807a74706d676a6a666c6f73787e8590959fa6aaa2979183796d60574d4233291f14090000000000000000000000000000000000000c1925323f4c5865727f8b989b9b9b9ea1a8b2bbb0a69f9c9b9b9b9b9b95887c6f6255493c2f221609000000000815212e3b4854616e7b8794a1aeaa9d9083776a5d5044372a1d11040102030201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c26303e46535e69707d879299a3aba9a199928d86817d7a78777777797c7f848b92979fa7aaa29892857b6e675c51453c3121170d030000000000000000000000000000000000000c1925323f4c5865727f8b8e8e8e8e9196a1acb7ab9f94908e8e8e8e8e8e887c6f6255493c2f221609000000000815212e3b4854616e7b8794a1aeaa9d9083776a5d5044372a1d1104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306061213131313131313130706040100000000000000000000000000000000000000000000000205070813131313131313130c0b09050100000000000000000000000000000000000000000000000000000000000a151e2a36424d57606b717e879299a1a8aba39f98928e8a878584838486888c91969ea2a9a8a09892867d6f695f554b40332a200f06000000000000000000000000000000000000000a1723303d4a5663707d828282828284919eabb6a99c9082828282828282817b6e6155483b2e221508000000000815212e3b4854616e7b8794a1aeaa9d9083776a5d5044372a1d11040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f12131f20202020202020201413110d07010000000000000000000000000000000000000002080e1114142020202020202020181715110c0600000000000000000000000000000000000000000000000000000000030c1a25313b454f59616c717e8791969fa4acaaa29f9a9797929190919298999ea0a8aba49f9591867d6f6b60574d43392f21180e00000000000000000000000000000000000000000916232f3c4855616b707575757575818e9aa7afa396897d757575757575756e695f53463a2d211407000000000815212e3b4854616e7b8794a1aeaa9d9083776a5d5044372a1d1104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171c1f202c2d2d2d2d2d2d2d2c21201d18130c040000000000000000000000000000000000050d14191e20212d2d2d2d2d2d2d2d2524221d1811090000000000000000000000000000000000000000000000000000000009141f29333d47505a616c717c848e939a9ea6aaaca7a9a29f9d9d9e9fa3aaaaaca49f99938d837b6f6b60594f453c31271d0f0600000000000000000000000000000000000000000714202c38444f5961636868686874818e9aa7afa396897c70686868686868615f574d42362a1e1205000000000815212e3b4854616e7b8794a1a5a59d9083776a5d5044372a1d11040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b141c22282b2d3939393939393939392d2c29241d160d04000000000000000000000000000000050e171e252a2d2e393939393939393932312e29231b1209000000000000000000000000000000000000000000000000000000030d17212b353e48505a616a6f7a81878f94999da0a7a5a7a8a8a8a8a7a5a8a09d9a938f8780796e6960594f473d332a1f150b00000000000000000000000000000000000000000004101c27333d474f55565b5b5b6774818e9aa7afa396897c70635b5b5b5b5b55534d453b31261a0e02000000000815212e3b4854616e7b8794989898989083776a5d5044372a1d110400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d262d3338394546464646464646463a39352f281f160c0100000000000000000000000000020d1720293036393b46464646464646463f3d3a342d241b1106000000000000000000000000000000000000000000000000000000050f19232c363e48505860686d747c82888c919596989a9b9b9c9b9a999795918c87827c746d675f574f473d352b21180d03000000000000000000000000000000000000000000000b16212c353d44484a4f4f5b6774818e9aa7afa396897c7063564f4f4f4f4846423b33291f140900000000000815212e3b4854616e7b878b8b8b8b8b8b83776a5d5044372a1d11040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c262f383f44465253535353535353534745413a31281d13070000000000000000000000000008141e29323b41464753535353535353534b4a453f362d23180c0100000000000000000000000000000000000000000000000000000007111a242c363e464e565d616a6f757b8084878a8c8d8e8f8f8e8d8c8a8784807b756f6a605d554d453d352b23190f06000000000000000000000000000000000000000000000005101a232c33383c3d424e5b6774818e9aa7afa396897c706356494242423b3a36312921180d0300000000000714202d3a4753606d797f7f7f7f7f7f7f7e7164574a3e3124170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d38424a50535f606060606060605f54514b433a2f24180d010000000000000000000000020e1925303b444c52546060606060606060585651483f34291d11000000000000000000000000000000000000000000000000000000000009121a242c343d444c52586062696e73777a7d7f8181828281817f7d7a77736e69625f58514b433c332b231911070000000000000000000000000000000000000000000000000008111a21272c2f34414e5b6774818e9aa7afa396897c706356493d35352e2d2a261f180f060000000000000613202c3945515d676d72727272727272716c6155493c3023170a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1c28333f4a545b606c6c6c6c6c6c6c6c6c605d554b4135291d1104000000000000000000000005111e2a36414c565e6b6c6c6c6c6c6c6c6c65625b51453a2e1c1106000000000000000000000000000000000000000000000000000000000009121a222b323a41464e54575f6266686d707274757575757472706e6866625f57534e45403a312a211910070000000000000000000000000000000000000000000000000000000810161c202834414e5b6774818e9aa7afa396897c706356493d302822211e1a140d060000000000000004101d2935404b555d606565656565656564615a5045392d2114080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505b666c78797979797979797975675d5145392c20130600000000000000000000000714202d3946525e68767979797979797979726d62564a382e23170b000000000000000000000000000000000000000000000000000000000000081019202830353d43474d5355565e6163656768686968676664615e5655534d47433c352f281f180f070000000000000000000000000000000000000000000000000000000000050b101b2834414e5b6774818e9aa7afa396897c706356493d30231614120e09030000000000000000010d18242f39434b515358585858585858575550483e33281c1105000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202d394653606c78858686868686868687796d6054473a2d21140900000000000000000000000814212e3b4754616e7a88868686868686867f7265544a3f34281c1003000000000000000000000000000000000000000000000000000000000000070e161e242932373c4247484c525457595a5b5c5c5b5a595754524c4847423c373229241d160d0600000000000000000000000000000000000000000000000000000000000000000e1b2834414e5b6774818e9aa7afa396897c706356493d3023160a0502000000000000000000000007121d2831394045474c4c4c4c4c4c4c4a49453e362c22170c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916232f3c4956626f7c89979393939393998a7d7064574a3d31261a0e02000000000000000000030f1b27333f495364717e8b9a93939393938f8275665c5044382b1f120600000000000000000000000000000000000000000000000000000000000000040c131920272b31373a3b4146474a4c4e4e4f4f4e4e4c4a4746413b3a37312b262018130c040000000000000000000000000000000000000000000000000000000000000000010e1b2834414e5b6774818e9aa8aea396897c706356493d3023160a00000000000000000000000000010c161f282f35393a3f3f3f3f3f3f3f3e3c39332c241a10050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2935404b5566727f8c99a99f9f9f9f9a8d817467574d42372b1e120500000000000000000005121f2b3744505b6575818e9b9f9f9f9f9f9285796d6053463a2d201308000000000000000000000000000000000000000000000000000000000000000002080d161b1f262b2e3036393a3d3f4142424242413f3d3b3936302e2b261f1b150d0701000000000000000000000000000000000000000000000000000000000000000000010e1b2834414e5b6774818e969fa3aa96897c706356493d3023160a0000000000000000000000000000040d161d24292c2d3232323232323231302d28221a1208000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515d6776838f9ca9acacacaa9e918477695f53463a2d2114070000000000000000000613202d394653606c7885929eabacacada297897c6f6256493c2f24190d01000000000000000000000000000000000000000000000000000000000000000000040a0f151a1e21252a2d2e303234353536353433312e2d2a25211e1a150f0a040000000000000000000000000000000000000000000000000000000000000000000000000a1623303d495663707d848c92989e96897c706356493d3023160a000000000000000000000000000000040c12181d2020252525252525252423211c1710080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7986929facb9b9b9aca096887b6e6155483b2e23180c0000000000000000000916222f3c4955626f7c8897a1adb9beb3a9998c7f7366564c4135291d1104000000000000000000000000000000000000000000000000000000000000000000000003090e1214191d20212426272829292827262421201e1914120e090300000000000000000000000000000000000000000000000000000000000000000000000000000916222f3b4854606b707980868f9496897c706356493d3023160a0000000000000000000000000000000001070d10131419191919191919171714110c05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1723303d4a5663707d8998a3aeb8b6b8b2a8988b7f7265544b4034281c10040000000000000004111d2935404b5566727f8c99a9b3b8b7b6a99d908376685d5245392c201306000000000000000000000000000000000000000000000000000000000000000000000000000206080d11131417191b1b1c1c1b1b19171414110d080602000000000000000000000000000000000000000000000000000000000000000000000000000000000713202c38444f5960676d737b828a91897c706356493d3023160a000000000000000000000000000000000000010406070c0c0c0c0c0c0c0b0a0805000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111d2935414c566773808d9aaab1aba9abb1a89c8f8275665c5145382c1f1306000000000000000613202c3945515d6776838f9ca9aeacaaacac9f92867a6d6054473a2d21140900000000000000000000000000000000000000000000000000000000000000000000000000000000010507070a0c0e0f0f0f0f0e0c0a080705010000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101b27323d474f555c60696e757d84897c706356493d3023160a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3946525e687783909daaa79f9d9fa7ac9f9285796d6053463a2d201308000000000000000714202d3a4753606d7a86929faaa29f9ea0a8a3998a7d7064574a3d31261a0e0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b16212b353d434b51575f616c7079807c6f6256493c2f23160900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a87939fac9f9590959faba298897c706356493d3025190e020000000000000a1724313d4a5764707d8a99a3a298929196a0ab9a8d817467574d42372b1e12060000000000000000000000000000000000000000000000000000000000000000000000000000000000000306070707060400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040f19232b313940454d535a61676d736f6a6054483b2e22150900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a9aa4a99d9083909dabaa998d807366564c41362a1e1105000000000005121e2a36424d576774818d9aab9f928684919eaa9e918477695f53473a2d2114070000000000000000000000000000000000000000000000000000000000000000000000000406070a060b101213141413100c070a07060401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000711191f272f343b424650555d60666260584e43382c1f13070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121e2a36424d576774818e9aaca1968b7e8b99a3aa9d908377685e5246392d20140600000000000714212d3a46535f697784919eaa9d9083818e9ba8a096887b6e6155483b2e23180c00000000000000000000000000000000000000000000000000000000000000000001070c101314171a171c1f2021201f1d181a171413100d0701000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d151d232931363e434b51535956544e463d32271b0f03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a46535f697784919eaa9e91847a86929faca095877a6e6154473b2d22170b00000000000815222e3b4855616e7b8896a0a89b8e817f8b98aaa8988b7f7265544a4034281c1004000000000000000000000000000000000000000000000000000000000000040a0f12181d1f20232623282b2d2d2d2c2924272420201d18120f0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b12181f262a31394045474d4948433d342b21160a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222e3b4855616e7b8896a0a89c8f827783909daaa7978b7e7164544a3f33281c0f0300000004101c2834404a5465727e8b98a8a5998c7f7c8998a3a89b8f8275665c5144382c1f120600000000000000000000000000000000000000000000000000000000040a0f161b1d24292c2d30332e34383a3a3a38352f34312d2c29241d1b150e09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070c141a1f272f35383a403c3b38322b22190f0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b27333f495365717e8b98a8a6998c8074808d9aa7a89b8e8175665b5044382b1f120600000006121f2c3844515c6675828f9ba8a9978a7d7986929fab9f9285796d6053463a2d201308000000000000000000000000000000000000000000000000000000060c151b20272b2f35383a3d40423f44464747454043413d3a39352f2b27201a140e06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090d151d24292c2d332f2e2c2721191007000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121f2b3744505b6575828e9ba8a9978a7d707d8a97a7ab9e9285796c605346392d2013080000000713202d3a4653606d7985929faba297887b7683909ca9a298897c6f6356493c3025190d01000000000000000000000000000000000000000000000000030a111720262b3237394045474a4d4f4a50535453514b504d4a4745403937322a261f180f06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b12181d1f202623221f1b160f070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202d394653606c7885929eaba197877b6e7a8795a0aca197887c6f6255493c2f24190d010000091623303c4956636f7c8998a2ab9f92857973808d9aa6aa998c807366564c4135291d11050000000000000000000000000000000000000000000000050c151c232832373d43474b515356595c545c6060605d555d5a5753514b47433d36312a2117110a02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070c1013141a1615130f0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8897a1ab9e918578697784919daaa9998c7f7366564c4135291d11040005111d2a36414c566673808c99aaa99c8f8376707d8a97a8a99d908376685e5246392d20130700000000000000000000000000000000000000000000050e171e262e343c43474e54555d606366696a666d6d6d676b696764605d55544e46423b3328221c140b02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000406070d09090703000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404b5565727f8c98a9a89b8f82756874818d9aa7a99c908376685d5245392c201306000713202d3946525e687783909daaa69a8d80736d7a8796a0ac9f93867a6d6154473a2e211409000000000000000000000000000000000000000000050e17202930383f444e53586062676d7073757779797a7a79787674706d67626058534d453f332d261d140a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515c6776828f9ca9ab988c7f7265717e8a97a8ac9f92867a6d6054473a2d211409000714212e3a4754616d7a86939faca9978a7e71687784919daaa4998a7e7164574a3e31261a0f0200000000000000000000000000000000000000040e172029323b424a50585f626a6f75797d80828485868786868583807d7a756f6a615f5751443f382f261c1106000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7985929faca399897c6f636e7b8796a0aca3998a7d7064574a3d31261a0e020b1824313e4b5764717e8a99a4ada197887b6e6774818e9aa7ab9a8e817467584e43372b1f1206000000000000000000000000000000000000020c162029323b444c545c606a6f767c8185898c8f91929893999291908d8a86817c756e69625b504a42382d221712080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1623303d495663707c8998a2ac9f92867a6d60697784919daaab9a8e817467574d42372b1e1206121f2b37434e586874818e9babab9e9285786964717e8a97a8ab9e9184786a5f53473a2e2114070000000000000000000000000000000000000a141e28323b444d565e666d737c82898e9298999c9d9fa2aaa39f9e9c9a98928e89827b726d605b544a3f3328241a0e040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414c566673808d99aaa99d908376675d6774808d9aaaab9e918478695f53473a2e21140715212e3a47535f6a7884919eaba89b8f827568616e7b8796a0aca196887b6e6255483b2e23180c000000000000000000000000000000000006111c26303a444d565e686e7880878f949b9fa2aaa8aaa7a6a5a6a7a9a9aaa39f9b948f867f746c665b504440362c20160c020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202c3945525d687683909da9a79a8d8074675563707d8a98a3aca196887b6e6255483b2e23180c15222f3c4855626f7b8896a1adaa988c7f72655e697784919eaaa8988b7f7265554b4034281c1004000000000000000000000000000000000b17232e38424c565e696e7a828d92999fa6abaca49f9d9b9999999a9d9fa3abaca69e98928b81786c605c52483e32281e13080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a86929faca8978a7d716457606d7a86929faca8988b7f7265554b4034281c101d2935404b5565727f8c98a9aea298897c6f62576874818e9ba7a89c8f8275675c5145382c1f130600000000000000000000000000000003101c28343f4a545d686e7b8490949fa3aba9a29e9a93908e8c8c8c8e9092999ea1a8aaa29f938e80746e645a50443a3025190d0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a99a3aca096877b6e61545d6776828f9ca9a89c8f8275675c5145382c1f131f2c3845515d6776828f9ca9ac9f9285796d605864717e8b97a8ac9f9285796d6053463a2d2013080000000000000000000000000000030e18212b3844505c666d7a8491969fa6afa59e97928c878481807f808183868b91969da5aea59d938d80746c61564c4135291f14090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121e2a36424d576774818d9aabaa9e918477695e525565727f8c98a8ac9f9285796d6053463a2d2014202d3a4753606d7986929faca99c8f8376665c55616e7b8896a1ada298897c706356493d3025190d010000000000000000000000000009141f2a36424d57606d78828f96a0a8aca49f938e857f7b777473727374767a7f848e929ba3ada59d928a7e71685e52463c31261a0e010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a46525e697784919daaa89b8e817568564d55626e7b8896a1aca298897d7063564a3d30251a24303d4a5763707d8a98a3aea9998c7f726654535f697884919eabaa998d807366564c41362a1e1105000000000000000000000000020e1a26313a46535f69727f8c949fa8afa49a938b817a736e696866666667686d7279818b919ba4aea49e92857a6d61574d42372b1d12070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8796a0aca9988b7e7265584b535f6a7884919eabaa9a8d807367574d42362a1e2a36424d576774808d9aaaada297897c6f62564d576875818e9ba8aa9d908377685e5246392d20130700000000000000000000000005121e2b37424d57616e7b86929fa6afa59f93887f746d68615e57595959565d60676d747f8b929ca7ada1978e8174695f5346392f23180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a8ada297887b6f6255484e586774818e9aabaa9d908477695e52463a2d202d3a46525e697784919daaab9f9285796c60534b5865727e8b98a9ac9f93877a6d6154473a2e21140a0000000000000000000000000714212d3a46535f6974818e98a2aeaa9e938c7f726d605d56524d4d4c4d4c52555c606d73808d95a0aca99f93877b6e61554b4034291c10040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b37434e586875818e9ba8ab9f9285796c6053464a5764707d8a99a3aca095877b6e6154473b2d222e3b4854616e7b8795a0aca89b8e8275665b504855626e7b8897a1ada49a8a7e7164574b3e31261b0f0300000000000000000000030f1c28333f4a54616e7b87929faaaea2988e81756d625b524c4642403f4041454b515b606c7883909da7afa49a8d8073675c5145382c1f1306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3a47535f6a7885919eaba89c8f8275655b50444754606d7a86929faca7978b7e7164544a3f3328343f4a5465717e8b98a7b1a8988b7e7165544a47535f6a7885929eabac9b8e817468584e43372b1f12060000000000000000000006121f2b3844505b6673808d99a3afab9f92857a6d615b5145413a3630332f35394045505b66707d8995a0acac9e9285796d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915222f3c4855626f7b8897a1adab998c7f726653493f45515d677683909ca9a89b8e8275665b5044382b3844505c6675828e9ba8aca096887b6e615548424e576875828e9ba8ab9e9185786a5f53473a2e211507000000000000000000000613202d394653606c7884919eabafa4998d8073685e52493f352f2a252624292f343f4a54606b7783909daaada2978a7d7164574a3e2f24180d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a5465727f8b98a9aea399897c706356493d414b5566727f8c99a9ab9e9285796c605346392d3a4653606d7985929fabaa9d918477695f53463f4c5865727f8b98a9ada197887c6f6255483c2f24180c000000000000000000000916232f3c4956626f7c8996a1adac9f93877b6e61564c413729241e1a19191d232d38424f5966727f8c99a9a8a99a8d807467554b4035291d1104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2c3844505c6675828f9ca8ac9f92867a6d6053473a3c4955626f7c8897a1ada297897c6f6256493c303c4956626f7c8997a2adaa9a8d807467574d423c4855626f7c8897a2ada9988c7f7265554b4035291d10040000000000000000000d192633404c5966737f8c99a9b2a99d908376695e52443a302519130e090d121c262f3d4855616e7b88979d9b9a98908377675d5145392c20130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7985929faba99d908376675d514538394653606c7885919eaba9998c7f7366564c4135414c5666737f8c99a9aea398897d7063564a3d394653606c7985929faba99c8f8276675d5145382c1f1306000000000000000005111e2a36414c566976828f9ca9b2a6998c7f7366574d4232291e13080100010a14212d3a47535f69788592908f8d8b8a877a6d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091623303c4956636f7c8998a2aea69a8d807367554b40353744505b6574818e9baba99d908376685d52453945525d687683909da9ac9f9286796d6053473a3744505b6575828f9ca8ac9f9286796d6053473a2d20140900000000000000000714202d3946525e687885929eabb3a996897d706356493d3023170d0000000006121e2b37424d57697682858482807f7d7c786d6053463a2d2013070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935404b556673808c99aab2a8978a7d7064574a3d2f333f495364717e8a99a4ac9f92867a6d6054473a4754606d7a86929faca99c8f8276675d514538333f495365727f8c98aaaea398897d7063564a3d3025190e02000000000000000814212e3b4754616e7a8797a1adada297877a6d6154473a2e21140700000000020e1a26313c4753606d797877757372706e6d665c5044382b1f1206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945515d677683909ca9aca096877a6d6154473a2e2d3a4754616d7a86939faca3998a7d7164574a3e4a5764717d8a99a3afa8988b7f7265554b40352d3c4956626f7c8998a2aeaa9a8d807367564d42362a1e1105000000000000000916232f3c4956626f7c8995a9b3ab9f928578685e5246392d201307000000000009151f2c3845515c676d676a6867656362605c544a3f34281c1003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a86929facaa9e918477685e5246392d2d3946525d687683909da9ab9a8e817467584e434e576774818e9aabaca096887b6e6255483b2f2d3a4653606d7985929fabaa9d908477695e52463a2d201406000000000000000a1724313d4a5764707d8a97a3b0aa9d9084776a564c4135291d1105000000000004101c2934404b555c605c555c5a58575553504a42382e23170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724303d4a5763707d8a99a3aea79b8e817468564c41362a2935414c5666737f8c99a9ab9e9184786a5f5347535f6a7884919eabaa9e918477695f53473a2e2b3844505c6676828f9ca9aca095877b6e6154473b2d22170b000000000000000b1825323e4b5865717e8b98a4b1a99c8f8376695c50433025190d010000000000000c18232f39434b5153514b4f4d4c4a4846443f3830261c11060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111e2a36414c566774808d9aabb3a9988b7e7165584b3e302524303c4956626f7c8997a1ada196887b6e62554855626e7b8896a1acab9a8d817467574d42372b28343f4a5466727f8c99aab1a7978b7e716453493f33271b0f030000000000000c1925323f4c5865727f8b98a5b2a89b8f8275685c4f4235291c080000000000000007121d273139404547454042403f3d3b3a38342e261e140a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3946525e687784909daaada197887b6e6255483b2f22202d394653606c7985929eaba8988c7f7265554b5565727f8b98a8aea3998a7d7063574a3d3126232e3c4956636f7c8998a2aea89b8e8175655b5044372b1f12050000000000000c1926333f4c5966727f8c99a5b2a89b8e8275685b4f4235281c0f02000000000000010b151f272f34383a38342f3432302f2d2b28231c140c0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212e3b4754616e7a8795a0acab9e9285796c605346392d201f2b3844505b6675818e9baca99c8f8276675d515c6775828f9ca8ac9f92867a6d6053473a2d20202d3a4653606d7985929facab9e9285786c605346392d2013070000000000000c1926333f4c5966727f8c99a5b2a89b8e8175685b4e4235281b0f0200000000000000030d151d23292c2d2c292327252422201f1c17110a020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1824313e4b5764717e8a97a7b1a89b8f8275655b5044372b1f1c28333f4a5464717e8b9aa4ac9f9286796d6053606d7985929faca99c8f8276675d5145392c201f2c3845515c6676838f9ca9ada197887c6f6255493c2f24180d0100000000000c1925323f4c5865727f8b98a5b2a89b8e8275685b4f4235281c060000000000000000040c13191d202121201f1b171917151312100b060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121e2b37424d576874818e9ba7b4aa998c7f726653493f33271b17222d3b4754616e7a87939faca398897d70635663707d8998a2aea8988c7f7265554b4035291d1c2834404b546673808c99abb3a9998c7f7266554b4035291d100400000000000b1825323e4b5865717e8b98a4b1a89c8f8275695c4f422e23170b00000000000000040d161e24292c2d2e2d2b27222422201f1c18120b030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212e3a47535f697884919eabaea398897c6f6356493c2d221714202d3946525e687783909daaaa9a8d807467576773808d9aaaada196887b6f6255483c2f241818232e3d495663707c8999a3aea99c8f8376675d5145392c20130600000000000b1724313e4a5764717d8a97a4b0a99c90837669544a3f34281c10030000000000010c1620282f35393a3b3937332d312f2d2c29231d150d0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222f3b4855626e7b8896a1adac9f9286796d6053463a2d2013111e2a36414c566673808d99aaaa9d918477695e687783909daaab9e9184786a5f53473a2e1d1214202d3a4753606d7a86929facac9f92867a6d6053473a2d2014090000000000091623303c4956636f7c8996aab4aa9e918477665c5044382b1f1206000000000008131e28323a4145474846443f403e3c3a38342f271f150b0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a5465727e8b98a8b2a99c908376675c5145382c1f130d1925303c4956636f7c8998a2aca095877b6e616e7a87939facab9a8e817467584e43372b1f0c131f2c3845515d677683909ca9aea3998a7d7063574a3d31251a0e02000000000814212e3b4754616e7a8798a2aeac9f9286796d6053463a2d20130600000000010d19242f3a444c5254545350494d4b494745403931271d120700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505c6675828f9ba8b6ac998d807366554b4034281c100813202d3a4653606d7985929faba7988b7e7165717e8b9aa4afa3998a7d7064574a3d31261a0f101d2935404b556673808d99abb4ab9a8d807467574d42362a1e1205000000000714202d3946525e687985929facaea399887b6e6155483b2d22170b0000000004111d2935414c565d6061605b5359575553514b43392f23180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7985929fabafa49a8a7d7063574a3d2e23180c06121f2c3844505c6675828f9ba8a89b8e82756675818e9bacac9f92867a6d6054473a2d21140a0c18242f3d4a5663707d8999a3afaa9d918477695e53463a2d2114060000000005111e2a36414d566a7783909daab4ab978a7e7164544a3f33281c0f050000000713202c3945525d686d6e6c6568666462605c554b4034291c100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916232f3c4956626f7c8997a2adac9f93867a6d6154473a2e21140703101c28343f4a5465717e8b98a7ab9f9285796c7885929eaba99c8f8376675d5145392c2013060714212d3a4754606d7a86929facaca095877b6e6154483b2d22170b00000000020e192530404d5a6773808d9aabb5a79a8e8174665b5044382b21170e0704040d16212d3a4754606d7a7b79777573716f6d675c5145382c1f13060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2935404b5566737f8c99a9b3aa9d918477685e5246392d201307000c17232e3b4854616e7b8795a0aca297887c6f7c8897a1ada9998c7f7266554c4135291d11040613202c3945515d677783909daab1a8988b7e7165544a3f33281c0f0300000000081724313d4a5764707d8a99a3aeab9e9285786c6053463e3329201813101116202b37434e5866737f87858381807e7c796d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515d6776838f9ca9b4a79a8e817467564c4135291d1105000614202d3a46525e697784919daaa9998c7f727f8c99a9ada197887c6f6255493c2f24190d0104111d2935414b556773808d9aacb6a89b8e8275665b5044382b1f1206000000000714212d3a4754606d7a86929facada1978a7d70635a50453b3229241f1c1d2028323a47535f6a76839092908e8c8a887d7063564a3d3023170a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7986929facb3a9978b7e7164584b3e3025190d010005121e2a36424d576773808d9aaaa89c8f8276838f9ca9ab9e9185786a5f53473b2e1e130800010d18242f3d4a5764707d8a9aa4afab9e9285796c605346392d201308000000000713202c3945525d6875828f9ba8b2a99c9083766c61574d443c352f2c28292c313a444e58626f7c88959f9d9b999286796d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1723303d4a5663707d8998a3aeada197887b6e6155483b2e2215080000020e1a25303d4a5663707d8998a2ab9f92857a86929facab9b8e817468584e43372b1f0c0100000714212d3a4754606d7a86939facada297897c6f6256493c2f24190d0100000004111d2935414c5664707d8a96a1adab9f948a7e71695e564e45403a383435393d434c56606a74818e9ba7aaa99c8f8276675d5145382c1f130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111d2935414c566773808d9aaab4ab9e928578695f53463a2d2114070000000913202d3a4653606d7985929faca2978c7f8c98a3aea3998a7d7164574a3e32261b0f0000000713202c3945525d687783909daab3a9998c7f7366554c4135291d1104000000010d19242f3a4653606d7984919ea8b0a69e92857b6e685f58514b4645404145474f565d686f7c87939facada2978b7f7265554b4035291d10040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3946525e687783909daab5a89b8f827568574d42372b1e120500000006131f2c3845515c6775828f9ca8a99e9185919eaaac9f92867a6d6054473a2d21140a00000004111d2935414c566774808d9aa7b3a99c908376675d5145392c2013060000000008131f2c3844515c66717e8b96a0abada19791837a6e6a605d5553514b4c52545960686d7a849199a4afa99e9285796d6053473a2f24180c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a87939facb4aa988c7f7265594c3f31261a0e0200000004101c2834404b5565727f8b98a8ada1979197a1ada99c908376685d5245392c201307000000010d1924303e4a5764717d8a97a8b2ac9f92867a6d6054473a2d2114090000000004101c2834404a54606d78849199a3afa9a09591847c726d6763605c55565d60646b6f7a839096a0abada1978c8073675d5145392c1d1207000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a9aa4afaea298897c6f6256493c2f23160900000000000c18232e3b4855616e7b8896a0aca9a19ea1a9b3a9998c7f7366564c4135291d1104000000000814212e3a4754616d7a8796a0acafa3998a7d7064574a3d31261a0e02000000000c18232e3944505c666f7d87929fa5aea7a09691867f79736f6d676a6a686d70767c8490959fa8aea49e91857a6d61554b4035291d0b0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121e2a36424d576774818e9aacb6ac9f9285796d6053463a2d20130700000000000714212d3a46535f697784919eaab3adabadb3ada197887c6f6255493c3024190d01000000000713202d3946525e687784919daab5ab9a8d817467574d42362a1e12050000000007121c28343f4a54606b727f8c939da4aea8a098928c85807c79787777787a7d828991969fa7aea59d928a7d70685e5243392f24180d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a46535f697784919eaab2a99c8f8376665c5144382c1f1206000000000005121e2a36424d576774808d9aaab4b2b2b2b2ab9e9285786c605346392d201308000000000005111e2a36414c566774818e9aa7b2aa9e918477695f53463a2d21140700000000000b17232e38424f59606c77818d929fa3aaaaa29f97918d898684848485868a8f949ea0a8ada49d938d80746b61564c4131281d1207000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222e3b4855616e7b8896a0a5a5ab998d807366544a4034281c10040000000000020e1a26313d4a5763707d8a98a3a5a5a5a5a5ab9b8e8175655b5044372b1f12050000000000010d1925303e4b5764717e8a97a8a5a5a096887b6e6155483b2e221508000000000006111c26303d44505b656c78808c92989fa7aba9a19e9a99939190909193999c9fa6aca9a19e928d81786d60594f443a301f160c01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825323e4b5865717e8b9898989898998a7d7063574a3d2e23180c000000000000000914202d3a4753606d7a869298989898989898998a7e716453493f33271b0f030000000000000815212e3b4854616e7b879698989898988b7e7265584b3f3225180c0000000000000a141e27333f49535b666c747f8690959c9fa6aaababa49f9e9d9d9e9fa4abacaaa29f97928a80776d665c50473e32281e0d0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1c2835424f5b6875818b8b8b8b8b8b8b877a6d6054473a2d2114070000000000000006131f2c3945515d6776828b8b8b8b8b8b8b8b8b877a6d6154473a2d22170b000000000000000714202d3a46525e6977848b8b8b8b8b8b8b8275685c4f4235291c0f000000000000020c17222d38414a545b606d727c838a9094999ea0a8a5a7a8a8a8a7a6aba39f9d98928d857e746c655c544a3f352c20160c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1824313e4b5764717e7f7f7f7f7f7f7f7e71685d5245392c2013070000000000000004101d2935404b55626f7c7f7f7f7f7f7f7f7f7f7e71685e5246392d1b11060000000000000005121e2a36424d5763707d7f7f7f7f7f7f7f7e7164584b3e3125180b0000000000000006111b262f38424a505b626a6e767d83888d919696999a9b9c9b9a99989992908b86817a716c605b534a42382e231a0e050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724303d4955616c7172727272727272716c62564c4135291d110400000000000000000c18242f394854606a6f727272727272727272716c61564c41362a1d0a0000000000000000020e1a25303b4855616b7072727272727272716c6156493d3024170a00000000000000000a141d262f383f4451585f626b70767c8084878a8c8d8e8f8e8e8d8c8986837f7a746d68615a5049413830261c1108000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212d3945505a61646565656565656564625a50443a2f24190d01000000000000000007121d2c38434e58606265656565656565656564615a50443a3025190d00000000000000000009141f2c38444f5961636565656565656564615a5045392d2115080000000000000000020b141d262d333f464e535961636a6f73777b7d7f8181828281807f7c7a76726d68615e5650443f382f261e140a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111d28343e4850555758585858585858585650483e32281e1308000000000000000000010f1b27323d464e5456585858585858585858585650483e32281e130800000000000000000002101c28333e474f555758585858585858585650483e34281d1105000000000000000000020b141c2228333c43474f55585f6266696e7072747575757473726f6d6765605d56524c443e332d261d140c020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c17222c363e45494b4c4c4c4c4c4c4c4b49453e362d20160c01000000000000000000000a16212b343d4348494c4c4c4c4c4c4c4c4c4b49453e362d20160c02000000000000000000000b16212c353e44484a4c4c4c4c4c4c4c4b49453e362d22170c0000000000000000000000020a1117212a31373e44484e5455575e6163666768696867666563605d5554524c46413a3227221b140b020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006101a242c34393d3e3f3f3f3f3f3f3f3e3d39342d241b0d040000000000000000000000040f19222b32383b3c3f3f3f3f3f3f3f3f3f3e3d39342d241b0e05000000000000000000000005101a232c33383c3d3f3f3f3f3f3f3f3e3d39342d241b100600000000000000000000000000060f1820262b33383c4347494d525457595a5b5c5b5b5a595653514b4745413a3530282017110a0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009121a22282d30313232323232323231302d29221b12090000000000000000000000000007101921272c2e2f32323232323232323231302d28221b12090000000000000000000000000008111a21282c2f303232323232323231302d28221b1209000000000000000000000000000000060e151a21282c32373b3c4246474a4c4e4e4f4f4e4d4c494745403a39352f29251e160e060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000910171d212424252525252525252524211d171109000000000000000000000000000000070f161b1f22232525252525252525252524211d1710090000000000000000000000000000000810161c202324252525252525252524211d171009000000000000000000000000000000000003090f161c20262b2e30363a3b3d3f4142424241403f3c3a38352f2c29241e19130c040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c1115171819191919191919181715110c060000000000000000000000000000000000040a0f131516191919191919191919181715110c060000000000000000000000000000000000050b1014161719191919191919181715110c060000000000000000000000000000000000000000050b10151b1f22252a2d2e303334353635343332302d2c2924201d19130d0802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005080a0b0c0c0c0c0c0c0c0b0a0805000000000000000000000000000000000000000000030709090c0c0c0c0c0c0c0c0c0b0a08050000000000000000000000000000000000000000000407090a0c0c0c0c0c0c0c0b0a0805000000000000000000000000000000000000000000000000040a0f13151a1e202124262728292828272623201f1d1813110d080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306090e11141417191b1b1c1c1b1a19161413100c070401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010407071313131313131311100e0b060000000000000000000000000003090d1012131313131313131312100d08020000000000000000000000000306131313131313131312110f0b070100000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507080a0c0e0f0f0f0e0d0c09070604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080d111314202020202020201e1d1b17120b0400000000000000000000070e14191d1f202020202020201f1f1c19140d06000000000000000000060c101220202020202020201f1e1b17120c05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c13191d202d2d2d2d2d2d2d2d2b2a27231d160e0500000000000000000811191f25292b2c2d2d2d2d2d2d2c2b29251f181008000000000000030a11171c1f2d2d2d2d2d2d2d2d2b2a28231e170f0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d161e24292c39393939393939393736332e2820170e0400000000000007111a232a31353839393939393939393835302a221a100600000000030c151c23282c39393939393939393837342f2821180f050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c1620282f3539464646464646464644433f39322920160b0000000000030e19232c353c4145464646464646464644413b342c22180d020000000a151e262e343846464646464646464543403a332a21170c010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28323a41455353535353535353514f4b443b32281d12060000000009141f2a353e474d515353535353535352514d463e342a1f1408000006111c2630383f44535353535353535352504b453c33281e1207000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d19242f3a444c525f606060606060605e5b564d44392e23170b000000010d1925313c4750585e5f6060606060605f5d5850463b3025190d00000c17232e38424a505f606060606060605e5c564e453a2f23170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414c565d6c6c6c6c6c6c6c6c6a675f564b3f33271b0e02000004101d2935414d58626a6c6c6c6c6c6c6c6c6962584d4135291c100003101c28343f4a545c6c6c6c6c6c6c6c6c6b6860564b4034281b0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202c3945525d6876797979797979797771675b4f43362a1d1004000005121f2b3845515e6a74797979797979797974695d5144382b1f120006121f2c3844505c6676797979797979797872685c5043372a1e110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8686868686868684776a5e5144372b1e110400000613202c3946535f6c798686868686868686796c5f5246392c1f13000713202d3a4653606d788686868686868684786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793939393939184776a5e5144372b1e110400000613202c3946535f6c798692939393939285796c5f5246392c1f13000713202d3a4653606d798693939393939185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a87939f9f9f9d9184776a5e5144372b1e110400000613202c3946535f6c7986929f9f9f9f9285796c5f5246392c1f13000713202d3a4653606d7986939f9f9f9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0acaa9d9184776a5e5144372b1e110400000613202c3946535f6c7986929facac9f9285796c5f5246392c1f13000713202d3a4653606d798693a0acab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e110400000613202c3946535f6c7986929facac9f9285796c5f5246392c1f13000713202d3a4653606d798693a0acab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e110400000613202c3946535f6c7986929facac9f9285796c5f5246392c1f13000713202d3a4653606d798693a0acab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e110400000613202c3946535f6c7986929facac9f9285796c5f5246392c1f13000713202d3a4653606d798693a0acab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e110400000613202c3946535f6c7986929facac9f9285796c5f5246392c1f13000713202d3a4653606d798693a0acab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e110400000613202c3946535f6c7986929facac9f9285796c5f5246392c1f13000713202d3a4653606d798693a0acab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e110400000613202c3946535f6c7986929facac9f9285796c5f5246392c1f13000713202d3a4653606d798693a0acab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e110400000613202c3946535f6c7986929facac9f9285796c5f5246392c1f13000713202d3a4653606d798693a0acab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e110400000613202c3946535f6c7986929facac9f9285796c5f5246392c1f13000713202d3a4653606d798693a0acab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e110400000613202c3946535f6c7986929facac9f9285796c5f5246392c1f13000713202d3a4653606d798693a0acab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e110400000613202c3946535f6c7986929facac9f9285796c5f5246392c1f13000713202d3a4653606d798693a0acab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e110400000613202c3946535f6c7986929facac9f9285796c5f5246392c1f13000713202d3a4653606d798693a0acab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e110400000613202c3946535f6c7986929facac9f9285796c5f5246392c1f13000713202d3a4653606d798693a0acab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e110400000613202c3946535f6c7986929facac9f9285796c5f5246392c1f13000713202d3a4653606d798693a0acab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e110400000613202c3946535f6c7986929facac9f9285796c5f5246392c1f13000713202d3a4653606d798693a0acab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e110400000613202c3946535f6c7986929facac9f9285796c5f5246392c1f13000713202d3a4653606d798693a0acab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e110400000613202c3946535f6c7986929facac9f9285796c5f5246392c1f13000713202d3a4653606d798693a0acab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e110400000613202c3946535f6c7986929facac9f9285796c5f5246392c1f13000713202d3a4653606d798693a0acab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e110400000613202c3946535f6c7986929facac9f9285796c5f5246392c1f13000713202d3a4653606d798693a0acab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e110400000613202c3946535f6c7986929facac9f9285796c5f5246392c1f13000713202d3a4653606d798693a0acab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e110400000613202c3946535f6c7986929facac9f9285796c5f5246392c1f13000713202d3a4653606d798693a0acab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e110400000613202c3946535f6c7986929facac9f9285796c5f5246392c1f13000713202d3a4653606d798693a0acab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e080000000613202c3946535f6c7986929facac9f9285796c5f5246392c1f13000713202d3a4653606d798693a0acab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adab9e9184786b5e51453024190d0100000613202c3946535f6c7986929facac9f9285796c5f5246392c1f13000713202d3a4653606d798693a0acab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adab9e9185786b564c4135291d110500000613202c3946535f6c7986929facac9f9285796c5f5246392c1f13000713202d3a4653606d798693a0acab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adac9f928579685d5246392d20130700000613202c3946535f6c7986929facac9f9285796c5f5246392c1f13000713202d3a4653606d798693a0acab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adaea298877a6d6154473a2e211406000006131f2c3845515c667986929facac9f9285796c5f5246392c1f13000713202d3a4653606d798693a0acab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adb4aa95887c6f6255493c2e23170c02000713202d3a4653606d798699a3aeab9e9285786b5f5245382c1f12000713202d3a4653606d798693a0acab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adb1a4988b7e7165544a3f34281d130d070614212e3a4754616d7a8794abb4ab9e9184786b5e5145382b1e12000713202d3a4653606d798693a0acab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adb4a79a8e8174665c5044392e241e18151517222f3c4855626f7b8895a2aeaa9e9184776b5e5144382b1e11000713202d3a4653606d798693a0acab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adb8ab9e9285796d60554b40353029242221222834404b5564717e8b97a4b1a99c908376695d5043362a1d10000713202d3a4653606d798693a0acab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adb9ada1978a7e71675c5146413a352f2e2e2d333b45515c6774818d9aa7b4a89b8e8275685b4f4235281c0f000713202d3a4653606d798693a0acab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adbeb3a99d9184796d605c524c45403c3b3b3c3f444d57606d7985929eabb3a69a8d8073675a4d4034271a0d000713202d3a4653606d798693a0acab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adbab8aca0968d80746e615d56514b494848494a50575e69717e8b97a1adb2a8978a7e7164574b3e3124180b000713202d3a4653606d798693a0acab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adbabdb2a89d928d80756d68605d5556555455545b60696e7b85929ea9b3aca096887b6e6155483b2e221508000713202d3a4653606d798693a0acab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adbbb3adaba49c928d817a726d67656261616264666c717b839097a2adb3aa9d918477695f53463a2d211407000713202d3a4653606d798693a0acab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adb3a9a19e9ea09c938e857f7975726f6e6e6f7073787e859095a0a9b3aea2988c7f7366574d42362a1e1205000713202d3a4653606d798693a0acab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adada197919196a09e97928c86817e7c7b7b7c7d80848a9197a0a7b1b0a69f92857a6d6154473b31261a0e02000713202d3a4653606d798693a0acab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adab9e9185849196a0a19e98928e8b898887888a8d91969ea1a9b1afa69e948c7f72685e524639291f140900000713202d3a4653606d798693a0acab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adaa9d91847b8490959da5a29f9b9895949495979a9da0a8adb1aca59d948f82786c60564c41362a170d0300000713202d3a4653606d798693a0acab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adaa9d9184777b838e929d9fa7a8a5a2a1a1a2a3a6aaacadaba7a09d938e82796d665b50443a302519060000000713202d3a4653606d798693a0a8a89e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adaa9d9184776e79818990959b9fa2aaa7a8a8a8a7a6a9a29f9b95908981786d675d544a3f32291e13080000000713202d3a4653606d7886939b9b9b9b9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adaa9d918477676d747d83898e9298989a9b9c9b9b9a9897928e89837d746d665d554c42382d20170d020000000713202d3a4653606d78868e8e8e8e8e8e84786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adaa9d9184776a606b70777d8185898b8d8e8f8f8e8d8b8985817d77706b605c544c433a2f261c0e05000000000613202d394653606c78818282828282828074675b4e4134281b0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adaa9d9184776a5960636b7075797c7f8081828281807e7c7975706b636059514b423a31281d140a000000000006121f2b3844505b666c75757575757575746e64584c4033271a0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adaa9d9184776a5e54596063666d6f72747575757473716f6d66636059544f45403930281f160b020000000000030f1c28333f4a545b606868686868686867645c53483c3024180b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adaa9d9184776a5e514f54545c6063656768696868676562605c54544f48443d342e271e160d04000000000000000b17222d38424a50535b5b5b5b5b5b5b5b58534a41362b2014080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144484a515356585a5b5c5c5b5a585653504a48443d383228231d150c04000000000000000006111c262f383f44464f4f4f4f4f4f4f4e4c4841382f251a0f030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adaa9d9184776a5e514439404446494c4d4e4f4f4e4d4b4946443f3838332c272118120b0300000000000000000006111c262f383f44464f4f4f4f4f4f4f4e4c4841382f251a0f030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adaa9d9184776a5e51442e34383a3c3f4142424241403e3c3a38342e2c27211b160c0700000000000000000000000b17222d38424a50535b5b5b5b5b5b5b5b58534a41362b2014080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adaa9d9184776a5e514437282c2d3032343536353534322f2d2c28231c1c16100b040000000000000000000000030f1c28333f4a545b606868686868686867645c53483c3024180b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1f2023252728292928272523201f1c1711100b050000000000000000000000000006121f2b3844505b666c75757575757575746e64584c4033271a0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e1316191a1b1c1c1b1a18161312100c06000000000000000000000000000000000613202d394653606c78818282828282828074675b4e4134281b0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e11090c0e0f0f0f0e0d0b090706030000000000000000000000000000000000000713202d3a4653606d79868e8e8e8e8e8e84786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e11040001020302020100000000000000000000000000000000000000000000000713202d3a4653606d7986939b9b9b9b9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e11040000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0a8a89e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e11040000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0acab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0adaa9d9184776a5e5144372b1e11040000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0acab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793a0a5a59d9184776a5e5144372b1e11040000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0a5a59e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8793989898989184776a5e5144372b1e11040000000000000000000000000000000000000000000000000000000000000713202d3a4653606d788693989898989185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a878b8b8b8b8b8b84776a5e5144372b1e11040000000000000000000000000000000000000000000000000000000000000713202d3a4653606d78868b8b8b8b8b8b84786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d797f7f7f7f7f7f7f7e7164574b3e3124180b000000000000000000000000000000000000000000000000000000000000000613202d394653606c777f7f7f7f7f7f7f7e7164584b3e3125180b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515c666d72727272727272716c6155493d3024170a0000000000000000000000000000000000000000000000000000000000000005121f2b3744505b656c72727272727272716c6256493d3024170a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404b545c606565656565656564615a5045392d21150800000000000000000000000000000000000000000000000000000000000000030f1b27333f49535b606565656565656564625a5045392d211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232e39424b515358585858585858575550483e34281d110500000000000000000000000000000000000000000000000000000000000000000b17222d384149505358585858585858585650483e34291d11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d2730394045464c4c4c4c4c4c4c4b49453e362c22170c00000000000000000000000000000000000000000000000000000000000000000006111b262f383f44464c4c4c4c4c4c4c4b49453e362d22170c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e272e34383a3f3f3f3f3f3f3f3e3d39342c241a1006000000000000000000000000000000000000000000000000000000000000000000000a141d262d3337393f3f3f3f3f3f3f3e3d39342d241b1106000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c151d23282c2d3232323232323231302d28221a12090000000000000000000000000000000000000000000000000000000000000000000000020b141b22272b2d3232323232323231302d29221b12090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b12181c1f20252525252525252424211d17100900000000000000000000000000000000000000000000000000000000000000000000000000020a11171b1f20252525252525252524211d1711090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c10131319191919191919181715110c0600000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f121319191919191919181715110c0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000406070c0c0c0c0c0c0c0b0a080500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000305060c0c0c0c0c0c0c0b0a080500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_StreamData: + offset: 0 + size: 0 + path: diff --git a/popcorn/Assets/I2/Localization/Examples/Resources/ARIAL SDF.asset.meta b/popcorn/Assets/I2/Localization/Examples/Resources/ARIAL SDF.asset.meta new file mode 100644 index 00000000..7d0ff00d --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Resources/ARIAL SDF.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1e3c311fc27694a419baca451fc975d1 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Examples/Resources/ARIAL.TTF b/popcorn/Assets/I2/Localization/Examples/Resources/ARIAL.TTF new file mode 100644 index 00000000..abc899cd Binary files /dev/null and b/popcorn/Assets/I2/Localization/Examples/Resources/ARIAL.TTF differ diff --git a/popcorn/Assets/I2/Localization/Examples/Resources/ARIAL.TTF.meta b/popcorn/Assets/I2/Localization/Examples/Resources/ARIAL.TTF.meta new file mode 100644 index 00000000..a054310b --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Resources/ARIAL.TTF.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 56c59f4ecd2348d41abca4cc46a07e11 +TrueTypeFontImporter: + externalObjects: {} + serializedVersion: 4 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 0 + characterPadding: 1 + includeFontData: 1 + fontName: Arial + fontNames: + - Arial + fallbackFontReferences: [] + customCharacters: + fontRenderingMode: 1 + ascentCalculationMode: 1 + useLegacyBoundsCalculation: 0 + shouldRoundAdvanceValue: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Examples/Resources/References.meta b/popcorn/Assets/I2/Localization/Examples/Resources/References.meta new file mode 100644 index 00000000..bd943563 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Resources/References.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8185afa3e746d0844aa1f12b00922841 +folderAsset: yes +timeCreated: 1463338425 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Examples/Resources/References/Prefabs.meta b/popcorn/Assets/I2/Localization/Examples/Resources/References/Prefabs.meta new file mode 100644 index 00000000..db738c88 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Resources/References/Prefabs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e9dc93a6e3540f245880fbe88d7f68f2 +folderAsset: yes +timeCreated: 1463338425 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Examples/Resources/References/Prefabs/Mesh_FR.prefab b/popcorn/Assets/I2/Localization/Examples/Resources/References/Prefabs/Mesh_FR.prefab new file mode 100644 index 00000000..22a30330 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Resources/References/Prefabs/Mesh_FR.prefab @@ -0,0 +1,83 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &100000 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 400000} + - 33: {fileID: 3300000} + - 135: {fileID: 13500000} + - 23: {fileID: 2300000} + m_Layer: 0 + m_Name: Mesh_FR + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &400000 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100000} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1.00846481, z: 0} + m_LocalScale: {x: 3, y: 3, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 +--- !u!23 &2300000 +Renderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100000} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_LightmapIndex: 255 + m_LightmapTilingOffset: {x: 1, y: 1, z: 0, w: 0} + m_Materials: + - {fileID: 10302, guid: 0000000000000000f000000000000000, type: 0} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_UseLightProbes: 0 + m_LightProbeAnchor: {fileID: 0} + m_ScaleInLightmap: 1 + m_SortingLayerID: 0 + m_SortingOrder: 0 +--- !u!33 &3300000 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100000} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!135 &13500000 +SphereCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100000} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: .5 + m_Center: {x: 0, y: 0, z: 0} +--- !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: 100000} + m_IsPrefabParent: 1 + m_IsExploded: 1 diff --git a/popcorn/Assets/I2/Localization/Examples/Resources/References/Prefabs/Mesh_FR.prefab.meta b/popcorn/Assets/I2/Localization/Examples/Resources/References/Prefabs/Mesh_FR.prefab.meta new file mode 100644 index 00000000..e86c8061 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Resources/References/Prefabs/Mesh_FR.prefab.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: f9bccdf9387c20f4ebb647274ab6d1fb +NativeFormatImporter: + userData: diff --git a/popcorn/Assets/I2/Localization/Examples/Resources/References/Sounds.meta b/popcorn/Assets/I2/Localization/Examples/Resources/References/Sounds.meta new file mode 100644 index 00000000..7bfcb360 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Resources/References/Sounds.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: fe6a518a321912f42bd7647ee7e9f65d +folderAsset: yes +timeCreated: 1463338425 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Examples/Resources/References/Sounds/espannol.wav b/popcorn/Assets/I2/Localization/Examples/Resources/References/Sounds/espannol.wav new file mode 100644 index 00000000..2bc8013f Binary files /dev/null and b/popcorn/Assets/I2/Localization/Examples/Resources/References/Sounds/espannol.wav differ diff --git a/popcorn/Assets/I2/Localization/Examples/Resources/References/Sounds/espannol.wav.meta b/popcorn/Assets/I2/Localization/Examples/Resources/References/Sounds/espannol.wav.meta new file mode 100644 index 00000000..599ea0dc --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Resources/References/Sounds/espannol.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: be316fa0cb281b241bb2f1e1a00c55c3 +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/popcorn/Assets/I2/Localization/Examples/Resources/References/Sprites.meta b/popcorn/Assets/I2/Localization/Examples/Resources/References/Sprites.meta new file mode 100644 index 00000000..c1ba46cd --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Resources/References/Sprites.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 542fa85d5f6afa144a96aa68ae69b4f2 +folderAsset: yes +timeCreated: 1463338425 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Examples/Resources/References/Sprites/L_EN.png b/popcorn/Assets/I2/Localization/Examples/Resources/References/Sprites/L_EN.png new file mode 100644 index 00000000..19172368 Binary files /dev/null and b/popcorn/Assets/I2/Localization/Examples/Resources/References/Sprites/L_EN.png differ diff --git a/popcorn/Assets/I2/Localization/Examples/Resources/References/Sprites/L_EN.png.meta b/popcorn/Assets/I2/Localization/Examples/Resources/References/Sprites/L_EN.png.meta new file mode 100644 index 00000000..4c277e15 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Resources/References/Sprites/L_EN.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 4628dae081db40f4fb93c1f305ff2497 +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: 1024 + 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: 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: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Examples/Resources/References/Sprites/L_ES.png b/popcorn/Assets/I2/Localization/Examples/Resources/References/Sprites/L_ES.png new file mode 100644 index 00000000..1d3602c9 Binary files /dev/null and b/popcorn/Assets/I2/Localization/Examples/Resources/References/Sprites/L_ES.png differ diff --git a/popcorn/Assets/I2/Localization/Examples/Resources/References/Sprites/L_ES.png.meta b/popcorn/Assets/I2/Localization/Examples/Resources/References/Sprites/L_ES.png.meta new file mode 100644 index 00000000..1008d5a7 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Resources/References/Sprites/L_ES.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 0ff5ba6aa9b08494bb14a8728ee51d9c +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: 1024 + 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: 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: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Examples/Resources/References/Sprites/L_FR.png b/popcorn/Assets/I2/Localization/Examples/Resources/References/Sprites/L_FR.png new file mode 100644 index 00000000..b5a480a5 Binary files /dev/null and b/popcorn/Assets/I2/Localization/Examples/Resources/References/Sprites/L_FR.png differ diff --git a/popcorn/Assets/I2/Localization/Examples/Resources/References/Sprites/L_FR.png.meta b/popcorn/Assets/I2/Localization/Examples/Resources/References/Sprites/L_FR.png.meta new file mode 100644 index 00000000..dddc155b --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Resources/References/Sprites/L_FR.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: bd755c6631de9b64f85257f46f8719f6 +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: 1024 + 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: 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: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Examples/Resources/References/Textures.meta b/popcorn/Assets/I2/Localization/Examples/Resources/References/Textures.meta new file mode 100644 index 00000000..22cbc7bb --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Resources/References/Textures.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: aced31ed82b8e2d4b9e68db74e8b163d +folderAsset: yes +timeCreated: 1463338425 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Examples/Resources/References/Textures/L_AR.png b/popcorn/Assets/I2/Localization/Examples/Resources/References/Textures/L_AR.png new file mode 100644 index 00000000..a4ca95df Binary files /dev/null and b/popcorn/Assets/I2/Localization/Examples/Resources/References/Textures/L_AR.png differ diff --git a/popcorn/Assets/I2/Localization/Examples/Resources/References/Textures/L_AR.png.meta b/popcorn/Assets/I2/Localization/Examples/Resources/References/Textures/L_AR.png.meta new file mode 100644 index 00000000..2614be42 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Resources/References/Textures/L_AR.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: cd7b25eab92023045b28ec13a15db415 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 5 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 2 + 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: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/popcorn/Assets/I2/Localization/Examples/Resources/References/Textures/L_EN.png b/popcorn/Assets/I2/Localization/Examples/Resources/References/Textures/L_EN.png new file mode 100644 index 00000000..19172368 Binary files /dev/null and b/popcorn/Assets/I2/Localization/Examples/Resources/References/Textures/L_EN.png differ diff --git a/popcorn/Assets/I2/Localization/Examples/Resources/References/Textures/L_EN.png.meta b/popcorn/Assets/I2/Localization/Examples/Resources/References/Textures/L_EN.png.meta new file mode 100644 index 00000000..4f293c00 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Resources/References/Textures/L_EN.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 8f7115ef5a3ecfd42935c3ff54434ae8 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 5 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 2 + 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: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/popcorn/Assets/I2/Localization/Examples/Resources/References/Textures/L_ES.png b/popcorn/Assets/I2/Localization/Examples/Resources/References/Textures/L_ES.png new file mode 100644 index 00000000..1d3602c9 Binary files /dev/null and b/popcorn/Assets/I2/Localization/Examples/Resources/References/Textures/L_ES.png differ diff --git a/popcorn/Assets/I2/Localization/Examples/Resources/References/Textures/L_ES.png.meta b/popcorn/Assets/I2/Localization/Examples/Resources/References/Textures/L_ES.png.meta new file mode 100644 index 00000000..1d755fec --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Resources/References/Textures/L_ES.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 87e96283e85053343bc47c9691614f7c +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 5 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 2 + 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: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/popcorn/Assets/I2/Localization/Examples/Resources/References/Textures/L_FR.png b/popcorn/Assets/I2/Localization/Examples/Resources/References/Textures/L_FR.png new file mode 100644 index 00000000..b5a480a5 Binary files /dev/null and b/popcorn/Assets/I2/Localization/Examples/Resources/References/Textures/L_FR.png differ diff --git a/popcorn/Assets/I2/Localization/Examples/Resources/References/Textures/L_FR.png.meta b/popcorn/Assets/I2/Localization/Examples/Resources/References/Textures/L_FR.png.meta new file mode 100644 index 00000000..80a700be --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Resources/References/Textures/L_FR.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: fdd6d36bfa4c41c4f988be3be486b5f8 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 5 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 2 + 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: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/popcorn/Assets/I2/Localization/Examples/Scenes.meta b/popcorn/Assets/I2/Localization/Examples/Scenes.meta new file mode 100644 index 00000000..e9901342 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Scenes.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 9cdc0f86f5890b1448f493fbe798c7ba +folderAsset: yes +timeCreated: 1463338425 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization Standard Components.unity b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization Standard Components.unity new file mode 100644 index 00000000..a63f38d0 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization Standard Components.unity @@ -0,0 +1,2211 @@ +%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: -431602080, g: -431602080, b: -431602080, a: -431602080} + m_AmbientEquatorColor: {r: -431602080, g: -431602080, b: -431602080, a: -431602080} + m_AmbientGroundColor: {r: -431602080, g: -431602080, b: -431602080, a: -431602080} + 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: 10 + m_Resolution: 1 + m_BakeResolution: 1 + m_AtlasSize: 1024 + m_AO: 1 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 0 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringMode: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + 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 &98661343 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 98661344} + - component: {fileID: 98661346} + - component: {fileID: 98661345} + m_Layer: 0 + m_Name: Window + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &98661344 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 98661343} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 649764120} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.0349026, y: 0.042410713} + m_AnchorMax: {x: 0.97483766, y: 0.18080357} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &98661345 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 98661343} + 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_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 +--- !u!222 &98661346 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 98661343} + m_CullTransparentMesh: 0 +--- !u!1 &144851223 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 144851227} + - component: {fileID: 144851226} + - component: {fileID: 144851225} + - component: {fileID: 144851228} + - component: {fileID: 144851224} + m_Layer: 0 + m_Name: Text Mesh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &144851224 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 144851223} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fc44345ca9310574fa50c645e6a7254f, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!102 &144851225 +TextMesh: + serializedVersion: 3 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 144851223} + m_Text: El jugador {PLAYER_COLOR} ha ganado! + m_OffsetZ: 0 + m_CharacterSize: 1 + m_LineSpacing: 1 + m_Anchor: 0 + m_Alignment: 0 + m_TabSize: 4 + m_FontSize: 16 + m_FontStyle: 0 + m_RichText: 1 + m_Font: {fileID: 12800000, guid: 769d4a2288b99004184236f5fc4469c8, type: 3} + m_Color: + serializedVersion: 2 + rgba: 4294967295 +--- !u!23 &144851226 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 144851223} + 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: 769d4a2288b99004184236f5fc4469c8, type: 3} + 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!4 &144851227 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 144851223} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -2.02, y: 0.49, z: 0} + m_LocalScale: {x: 0.3, y: 0.3, z: 1} + m_Children: [] + m_Father: {fileID: 167348269} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &144851228 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 144851223} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 344445a89b4f74a0e9a0a766903df87e, type: 3} + m_Name: + m_EditorClassIdentifier: + mTerm: MyCallBack + mTermSecondary: Arial + PrimaryTermModifier: 0 + SecondaryTermModifier: 0 + TermPrefix: + TermSuffix: + LocalizeOnAwake: 1 + IgnoreRTL: 0 + MaxCharactersInRTL: 0 + IgnoreNumbersInRTL: 1 + CorrectAlignmentForRTL: 1 + AddSpacesToJoinedLanguages: 0 + AllowLocalizedParameters: 1 + AllowParameters: 1 + TranslatedObjects: [] + LocalizeEvent: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 144851224} + m_MethodName: OnModifyLocalization + 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 + AlwaysForceLocalize: 0 + LocalizeCallBack: + Target: {fileID: 0} + MethodName: + mGUI_ShowReferences: 0 + mGUI_ShowTems: 1 + mGUI_ShowCallback: 0 + mLocalizeTarget: {fileID: 1452279190} + mLocalizeTargetName: I2.Loc.LocalizeTarget_UnityStandard_TextMesh +--- !u!1 &167348268 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 167348269} + m_Layer: 0 + m_Name: Examples + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &167348269 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 167348268} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.5763136, y: -0.7923176, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1099668625} + - {fileID: 941646752} + - {fileID: 663069740} + - {fileID: 276461885} + - {fileID: 1666749074} + - {fileID: 144851227} + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &272055859 +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: 007f2c3f7b0e4a048ae89d65dcd38729, type: 3} + m_Name: + m_EditorClassIdentifier: + mTarget: {fileID: 1099668624} +--- !u!1 &276461884 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 100002, guid: de53e8bc2cb2dbc43abb70cc57070ef6, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 276461885} + - component: {fileID: 276461886} + m_Layer: 0 + m_Name: Prefab + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &276461885 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 400002, guid: de53e8bc2cb2dbc43abb70cc57070ef6, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 276461884} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -5.1373014, y: -1.7532818, z: 1.865202} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1723805336} + m_Father: {fileID: 167348269} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &276461886 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 276461884} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 344445a89b4f74a0e9a0a766903df87e, type: 3} + m_Name: + m_EditorClassIdentifier: + mTerm: Prefab + mTermSecondary: + PrimaryTermModifier: 0 + SecondaryTermModifier: 0 + TermPrefix: + TermSuffix: + LocalizeOnAwake: 1 + IgnoreRTL: 0 + MaxCharactersInRTL: 0 + IgnoreNumbersInRTL: 1 + CorrectAlignmentForRTL: 1 + AddSpacesToJoinedLanguages: 0 + AllowLocalizedParameters: 1 + AllowParameters: 1 + TranslatedObjects: + - {fileID: 100000, guid: d243bb55d50b4424cb4d5e5036104aef, type: 3} + - {fileID: 100000, guid: a5c71238940815045b04992831c96352, type: 3} + LocalizeEvent: + m_PersistentCalls: + m_Calls: [] + AlwaysForceLocalize: 0 + LocalizeCallBack: + Target: {fileID: 0} + MethodName: + mGUI_ShowReferences: 0 + mGUI_ShowTems: 1 + mGUI_ShowCallback: 0 + mLocalizeTarget: {fileID: 293388874} + mLocalizeTargetName: I2.Loc.LocalizeTarget_UnityStandard_Prefab +--- !u!114 &293388874 +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: bd8b481d182cbcd4293524eb92ee520c, type: 3} + m_Name: + m_EditorClassIdentifier: + mTarget: {fileID: 1723805335} +--- !u!114 &386100401 +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: 3b29d7ab09a96634a9f704e6a1f21193, type: 3} + m_Name: + m_EditorClassIdentifier: + mTarget: {fileID: 1666749076} +--- !u!1 &386833631 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 386833634} + - component: {fileID: 386833633} + - component: {fileID: 386833632} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &386833632 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 386833631} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1077351063, guid: f5f67c52d1564df4a8936ccd202a3bd8, 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 &386833633 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 386833631} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -619905303, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!4 &386833634 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 386833631} + m_LocalRotation: {x: 0, y: 0, z: 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 &431326927 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 431326928} + - component: {fileID: 431326933} + - component: {fileID: 431326932} + - component: {fileID: 431326931} + - component: {fileID: 431326930} + - component: {fileID: 431326929} + m_Layer: 0 + m_Name: Spanish + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &431326928 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 431326927} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 649764120} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.20949675, y: 0.063616075} + m_AnchorMax: {x: 0.2973214, y: 0.15959822} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -0.0000009536743, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &431326929 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 431326927} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f8d7972c568b50940a54c7f599af66c5, type: 3} + m_Name: + m_EditorClassIdentifier: + _Language: Spanish + mSource: {fileID: 0} +--- !u!114 &431326930 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 431326927} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1573420865, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_EffectColor: {r: 0, g: 0, b: 0, a: 1} + m_EffectDistance: {x: 3, y: -3} + m_UseGraphicAlpha: 1 +--- !u!114 &431326931 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 431326927} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, 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.5019608, g: 0.5019608, b: 0.5019608, a: 0.5019608} + m_HighlightedColor: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 0.69803923} + m_PressedColor: {r: 0.34509805, g: 0.34509805, b: 0.34509805, a: 0.69803923} + m_DisabledColor: {r: 0.2509804, g: 0.2509804, b: 0.2509804, a: 0.5019608} + m_ColorMultiplier: 2 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 431326932} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 431326929} + m_MethodName: ApplyLanguage + 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: 1 +--- !u!114 &431326932 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 431326927} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, 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_Texture: {fileID: 2800000, guid: 87e96283e85053343bc47c9691614f7c, type: 3} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &431326933 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 431326927} + m_CullTransparentMesh: 0 +--- !u!1 &574518342 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 574518344} + - component: {fileID: 574518343} + 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 &574518343 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 574518342} + m_Enabled: 1 + serializedVersion: 8 + m_Type: 1 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + 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_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_Lightmapping: 1 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &574518344 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 574518342} + m_LocalRotation: {x: 0.40821794, y: -0.23456973, z: 0.10938166, w: 0.8754261} + m_LocalPosition: {x: -2.589727, y: -5.6618614, z: 6.31061} + 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 &649764119 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 649764120} + m_Layer: 0 + m_Name: Buttons + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &649764120 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 649764119} + m_LocalRotation: {x: -0, 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: 98661344} + - {fileID: 2059278659} + - {fileID: 431326928} + - {fileID: 1540298483} + m_Father: {fileID: 977845523} + 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 &663069739 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 663069740} + - component: {fileID: 663069744} + - component: {fileID: 663069743} + - component: {fileID: 663069742} + - component: {fileID: 663069741} + m_Layer: 0 + m_Name: MeshRenderer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &663069740 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 663069739} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -2.5943017, y: -1.7532818, z: 1.865202} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 167348269} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &663069741 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 663069739} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 344445a89b4f74a0e9a0a766903df87e, type: 3} + m_Name: + m_EditorClassIdentifier: + mTerm: MeshRenderer + mTermSecondary: MeshRendererMaterial + PrimaryTermModifier: 0 + SecondaryTermModifier: 0 + TermPrefix: + TermSuffix: + LocalizeOnAwake: 1 + IgnoreRTL: 0 + MaxCharactersInRTL: 0 + IgnoreNumbersInRTL: 1 + CorrectAlignmentForRTL: 1 + AddSpacesToJoinedLanguages: 0 + AllowLocalizedParameters: 1 + AllowParameters: 1 + TranslatedObjects: + - {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} + - {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} + - {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} + - {fileID: 10302, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + LocalizeEvent: + m_PersistentCalls: + m_Calls: [] + AlwaysForceLocalize: 0 + LocalizeCallBack: + Target: {fileID: 0} + MethodName: + mGUI_ShowReferences: 0 + mGUI_ShowTems: 1 + mGUI_ShowCallback: 0 + mLocalizeTarget: {fileID: 1744296199} + mLocalizeTargetName: I2.Loc.LocalizeTarget_UnityStandard_MeshRenderer +--- !u!23 &663069742 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 663069739} + 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: 10304, 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_PreserveUVs: 1 + 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 &663069743 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 663069739} + 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!33 &663069744 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 663069739} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &941646749 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 941646752} + - component: {fileID: 941646750} + - component: {fileID: 941646753} + - component: {fileID: 941646751} + m_Layer: 0 + m_Name: GUI Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &941646750 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 941646749} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 344445a89b4f74a0e9a0a766903df87e, type: 3} + m_Name: + m_EditorClassIdentifier: + mTerm: Standard Unity Example + mTermSecondary: Arial + PrimaryTermModifier: 0 + SecondaryTermModifier: 0 + TermPrefix: + TermSuffix: + LocalizeOnAwake: 1 + IgnoreRTL: 0 + MaxCharactersInRTL: 0 + IgnoreNumbersInRTL: 1 + CorrectAlignmentForRTL: 1 + AddSpacesToJoinedLanguages: 0 + AllowLocalizedParameters: 1 + AllowParameters: 1 + TranslatedObjects: [] + LocalizeEvent: + m_PersistentCalls: + m_Calls: [] + AlwaysForceLocalize: 0 + LocalizeCallBack: + Target: {fileID: 0} + MethodName: + mGUI_ShowReferences: 0 + mGUI_ShowTems: 1 + mGUI_ShowCallback: 0 + mLocalizeTarget: {fileID: 1448561449} + mLocalizeTargetName: I2.Loc.LocalizeTarget_UnityStandard_TextMesh +--- !u!102 &941646751 +TextMesh: + serializedVersion: 3 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 941646749} + m_Text: 'Este ejemplo muestra como localizar componentes comunes: + + + Audio Source, GUI Text, GUI Texture, Text Mesh and Prefabs' + m_OffsetZ: 0 + m_CharacterSize: 1 + m_LineSpacing: 1 + m_Anchor: 0 + m_Alignment: 0 + m_TabSize: 4 + m_FontSize: 0 + m_FontStyle: 0 + m_RichText: 1 + m_Font: {fileID: 12800000, guid: 56c59f4ecd2348d41abca4cc46a07e11, type: 3} + m_Color: + serializedVersion: 2 + rgba: 4294967295 +--- !u!4 &941646752 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 941646749} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -6.36, y: 3.84, z: 0} + m_LocalScale: {x: 0.3, y: 0.3, z: 1} + m_Children: [] + m_Father: {fileID: 167348269} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &941646753 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 941646749} + 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: 56c59f4ecd2348d41abca4cc46a07e11, type: 3} + 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!1 &977845519 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 977845523} + - component: {fileID: 977845522} + - component: {fileID: 977845521} + - component: {fileID: 977845520} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &977845520 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 977845519} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &977845521 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 977845519} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f5f67c52d1564df4a8936ccd202a3bd8, 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 &977845522 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 977845519} + 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 &977845523 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 977845519} + 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: 649764120} + m_Father: {fileID: 0} + 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 &1099668622 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1099668625} + - component: {fileID: 1099668624} + - component: {fileID: 1099668623} + m_Layer: 0 + m_Name: Audio Source + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1099668623 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1099668622} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 344445a89b4f74a0e9a0a766903df87e, type: 3} + m_Name: + m_EditorClassIdentifier: + mTerm: Audio + mTermSecondary: + PrimaryTermModifier: 0 + SecondaryTermModifier: 0 + TermPrefix: + TermSuffix: + LocalizeOnAwake: 1 + IgnoreRTL: 0 + MaxCharactersInRTL: 0 + IgnoreNumbersInRTL: 1 + CorrectAlignmentForRTL: 1 + AddSpacesToJoinedLanguages: 0 + AllowLocalizedParameters: 1 + AllowParameters: 1 + TranslatedObjects: + - {fileID: 8300000, guid: d43b462874fb2a14aaca956682ba3596, type: 3} + - {fileID: 8300000, guid: e68e601305e6218408e8208f956472c7, type: 3} + LocalizeEvent: + m_PersistentCalls: + m_Calls: [] + AlwaysForceLocalize: 0 + LocalizeCallBack: + Target: {fileID: 0} + MethodName: + mGUI_ShowReferences: 0 + mGUI_ShowTems: 1 + mGUI_ShowCallback: 0 + mLocalizeTarget: {fileID: 272055859} + mLocalizeTargetName: I2.Loc.LocalizeTarget_UnityStandard_AudioSource +--- !u!82 &1099668624 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1099668622} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 8300000, guid: be316fa0cb281b241bb2f1e1a00c55c3, type: 3} + m_PlayOnAwake: 1 + 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: 1 + 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!4 &1099668625 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1099668622} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 167348269} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1364070357 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1364070358} + - component: {fileID: 1364070359} + m_Layer: 0 + m_Name: LocalizationSource + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1364070358 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1364070357} + m_LocalRotation: {x: 0, y: 0, z: 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: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1364070359 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1364070357} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 488051eaa73ba421e8fe4868f2e0f364, type: 3} + m_Name: + m_EditorClassIdentifier: + mSource: + UserAgreesToHaveItOnTheScene: 0 + UserAgreesToHaveItInsideThePluginsFolder: 0 + GoogleLiveSyncIsUptoDate: 1 + mTerms: + - Term: Arial + TermType: 1 + Description: + Languages: + - ARIAL + - COMIC + - ARIAL + Flags: 000000 + Languages_Touch: [] + - Term: Audio + TermType: 3 + Description: + Languages: + - ingles + - References/Sounds/espannol + - frances + Flags: 000000 + Languages_Touch: [] + - Term: Color/Red + TermType: 0 + Description: + Languages: + - Red + - Rojo + - Rouge + Flags: 000000 + Languages_Touch: [] + - Term: Flag Texture + TermType: 5 + Description: + Languages: + - References/Textures/L_EN + - References/Textures/L_ES + - References/Textures/L_FR + Flags: 000000 + Languages_Touch: [] + - Term: MyCallBack + TermType: 0 + Description: + Languages: + - '{PLAYER_COLOR} Player Wins!' + - El jugador {PLAYER_COLOR} ha ganado! + - Joueur {PLAYER_COLOR} gagne! + Flags: 000000 + Languages_Touch: [] + - Term: MyText1 + TermType: 0 + Description: + Languages: + - This is a TextMesh + - Esto es un TextMesh + - Il s'agit d'une TextMesh + Flags: 000000 + Languages_Touch: [] + - Term: Prefab + TermType: 4 + Description: + Languages: + - Mesh_US + - Mesh_ES + - References/Prefabs/Mesh_FR + Flags: 000000 + Languages_Touch: [] + - Term: Standard Unity Example + TermType: 0 + Description: + Languages: + - 'This example shows how to localize Standard Unity Components like + + Audio Sources, GUI Text, GUI Texture, Text Mesh and Prefabs' + - 'Este ejemplo muestra como localizar componentes comunes: + + + Audio Source, GUI Text, GUI Texture, Text Mesh and Prefabs' + - "Cet exemple montre comment localiser standard Unit\uFFFD composants:\n\nAudio + Source, GUI Text, GUI Texture, Text Mesh and Prefabs" + Flags: 000000 + Languages_Touch: [] + - Term: Flag Sprites + TermType: 5 + Description: + Languages: + - References/Sprites/L_EN[L_EN] + - References/Sprites/L_ES[L_ES] + - References/Sprites/L_FR[L_FR] + Flags: 000000 + Languages_Touch: [] + - Term: MeshRenderer + TermType: 8 + Description: + Languages: + - Cube + - Capsule + - Sphere + Flags: 000000 + Languages_Touch: [] + - Term: MeshRendererMaterial + TermType: 6 + Description: + Languages: + - Default-Diffuse + - Default-Skybox + - Default-Material + Flags: 000000 + Languages_Touch: [] + CaseInsensitiveTerms: 0 + OnMissingTranslation: 1 + mTerm_AppName: + mLanguages: + - Name: English + Code: en-US + Flags: 0 + - Name: Spanish + Code: es + Flags: 0 + - Name: French + Code: fr-BE + Flags: 0 + IgnoreDeviceLanguage: 0 + _AllowUnloadingLanguages: 1 + Google_WebServiceURL: + Google_SpreadsheetKey: teVYmvqeNTF8ZkQhQ21a0Gw + Google_SpreadsheetName: + Google_LastUpdatedVersion: + Google_Password: change_this + GoogleUpdateFrequency: 3 + GoogleInEditorCheckFrequency: 2 + GoogleUpdateSynchronization: 1 + GoogleUpdateDelay: 5 + Assets: + - {fileID: 12800000, guid: 769d4a2288b99004184236f5fc4469c8, type: 3} + Spreadsheet_LocalFileName: + Spreadsheet_LocalCSVSeparator: ',' + Spreadsheet_LocalCSVEncoding: utf-8 + Spreadsheet_SpecializationAsRows: 1 + version: 1 + NeverDestroy: 0 + UserAgreesToHaveItOnTheScene: 0 + UserAgreesToHaveItInsideThePluginsFolder: 0 + GoogleLiveSyncIsUptoDate: 1 + Assets: [] + Google_WebServiceURL: + Google_SpreadsheetKey: teVYmvqeNTF8ZkQhQ21a0Gw + Google_SpreadsheetName: + Google_LastUpdatedVersion: + GoogleUpdateFrequency: 3 + GoogleUpdateDelay: 5 + mLanguages: [] + IgnoreDeviceLanguage: 0 + _AllowUnloadingLanguages: 1 + mTerms: [] + CaseInsensitiveTerms: 0 + OnMissingTranslation: 1 + mTerm_AppName: + Spreadsheet_LocalFileName: C:/Data/Frank/Unity Projects/Unity Plugins/Localization.csv + Spreadsheet_LocalCSVSeparator: ',' + Spreadsheet_LocalCSVEncoding: Unicode (UTF-8) + Spreadsheet_SpecializationAsRows: 1 + Google_Password: change_this + GoogleInEditorCheckFrequency: 2 +--- !u!114 &1448561449 +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: 62e865dd37373234c9d966bdd78278e1, type: 3} + m_Name: + m_EditorClassIdentifier: + mTarget: {fileID: 941646751} +--- !u!114 &1452279190 +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: 62e865dd37373234c9d966bdd78278e1, type: 3} + m_Name: + m_EditorClassIdentifier: + mTarget: {fileID: 144851225} +--- !u!1 &1540298482 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1540298483} + - component: {fileID: 1540298488} + - component: {fileID: 1540298487} + - component: {fileID: 1540298486} + - component: {fileID: 1540298485} + - component: {fileID: 1540298484} + m_Layer: 0 + m_Name: French + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1540298483 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1540298482} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 649764120} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.66891235, y: 0.063616075} + m_AnchorMax: {x: 0.75933444, y: 0.15959822} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1540298484 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1540298482} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f8d7972c568b50940a54c7f599af66c5, type: 3} + m_Name: + m_EditorClassIdentifier: + _Language: French + mSource: {fileID: 0} +--- !u!114 &1540298485 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1540298482} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1573420865, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_EffectColor: {r: 0, g: 0, b: 0, a: 1} + m_EffectDistance: {x: 3, y: -3} + m_UseGraphicAlpha: 1 +--- !u!114 &1540298486 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1540298482} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, 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.5019608, g: 0.5019608, b: 0.5019608, a: 0.5019608} + m_HighlightedColor: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 0.69803923} + m_PressedColor: {r: 0.34509805, g: 0.34509805, b: 0.34509805, a: 0.69803923} + m_DisabledColor: {r: 0.2509804, g: 0.2509804, b: 0.2509804, a: 0.5019608} + m_ColorMultiplier: 2 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1540298487} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1540298484} + m_MethodName: ApplyLanguage + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: French + m_BoolArgument: 0 + m_CallState: 1 +--- !u!114 &1540298487 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1540298482} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, 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_Texture: {fileID: 2800000, guid: fdd6d36bfa4c41c4f988be3be486b5f8, type: 3} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &1540298488 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1540298482} + m_CullTransparentMesh: 0 +--- !u!1 &1666749073 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1666749074} + - component: {fileID: 1666749076} + - component: {fileID: 1666749075} + m_Layer: 0 + m_Name: Sprite Renderer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1666749074 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1666749073} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 5.17, z: 0} + m_LocalScale: {x: 3, y: 3, z: 1} + m_Children: [] + m_Father: {fileID: 167348269} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1666749075 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1666749073} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 344445a89b4f74a0e9a0a766903df87e, type: 3} + m_Name: + m_EditorClassIdentifier: + mTerm: Flag Sprites + mTermSecondary: + PrimaryTermModifier: 0 + SecondaryTermModifier: 0 + TermPrefix: + TermSuffix: + LocalizeOnAwake: 1 + IgnoreRTL: 0 + MaxCharactersInRTL: 0 + IgnoreNumbersInRTL: 1 + CorrectAlignmentForRTL: 1 + AddSpacesToJoinedLanguages: 0 + AllowLocalizedParameters: 1 + AllowParameters: 1 + TranslatedObjects: [] + LocalizeEvent: + m_PersistentCalls: + m_Calls: [] + AlwaysForceLocalize: 0 + LocalizeCallBack: + Target: {fileID: 0} + MethodName: + mGUI_ShowReferences: 0 + mGUI_ShowTems: 1 + mGUI_ShowCallback: 0 + mLocalizeTarget: {fileID: 386100401} + mLocalizeTargetName: I2.Loc.LocalizeTarget_UnityStandard_SpriteRenderer +--- !u!212 &1666749076 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1666749073} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 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_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + 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: 0ff5ba6aa9b08494bb14a8728ee51d9c, 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, y: 1} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!1 &1723805335 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1723805336} + - component: {fileID: 1723805339} + - component: {fileID: 1723805338} + - component: {fileID: 1723805337} + m_Layer: 0 + m_Name: Mesh_ES + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1723805336 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1723805335} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 2, y: 2, z: 1} + m_Children: [] + m_Father: {fileID: 276461885} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1723805337 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1723805335} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10302, 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_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 &1723805338 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1723805335} + 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!33 &1723805339 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1723805335} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!114 &1744296199 +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: b4679336707a2b54caa10d99561be751, type: 3} + m_Name: + m_EditorClassIdentifier: + mTarget: {fileID: 663069742} +--- !u!1 &1797551106 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1797551111} + - component: {fileID: 1797551110} + - component: {fileID: 1797551108} + - component: {fileID: 1797551107} + 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 &1797551107 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1797551106} + m_Enabled: 1 +--- !u!124 &1797551108 +Behaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1797551106} + m_Enabled: 1 +--- !u!20 &1797551110 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1797551106} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_projectionMatrixMode: 1 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_GateFitMode: 2 + 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: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1797551111 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1797551106} + 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: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2059278658 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2059278659} + - component: {fileID: 2059278664} + - component: {fileID: 2059278663} + - component: {fileID: 2059278662} + - component: {fileID: 2059278661} + - component: {fileID: 2059278660} + m_Layer: 0 + m_Name: English + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2059278659 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2059278658} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 649764120} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.43676952, y: 0.063616075} + m_AnchorMax: {x: 0.52329546, y: 0.15959822} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0.0000009536743, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2059278660 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2059278658} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f8d7972c568b50940a54c7f599af66c5, type: 3} + m_Name: + m_EditorClassIdentifier: + _Language: English + mSource: {fileID: 0} +--- !u!114 &2059278661 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2059278658} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1573420865, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_EffectColor: {r: 0, g: 0, b: 0, a: 1} + m_EffectDistance: {x: 3, y: -3} + m_UseGraphicAlpha: 1 +--- !u!114 &2059278662 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2059278658} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, 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.5019608, g: 0.5019608, b: 0.5019608, a: 0.5019608} + m_HighlightedColor: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 0.69803923} + m_PressedColor: {r: 0.34509805, g: 0.34509805, b: 0.34509805, a: 0.69803923} + m_DisabledColor: {r: 0.2509804, g: 0.2509804, b: 0.2509804, a: 0.5019608} + m_ColorMultiplier: 2 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 2059278663} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 2059278660} + m_MethodName: ApplyLanguage + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: English + m_BoolArgument: 0 + m_CallState: 1 +--- !u!114 &2059278663 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2059278658} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, 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_Texture: {fileID: 2800000, guid: 8f7115ef5a3ecfd42935c3ff54434ae8, type: 3} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &2059278664 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2059278658} + m_CullTransparentMesh: 0 diff --git a/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization Standard Components.unity.meta b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization Standard Components.unity.meta new file mode 100644 index 00000000..9314e1e3 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization Standard Components.unity.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: d296d750610b0bc4a90725b0183151f6 +DefaultImporter: + userData: diff --git a/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization UnityUI.unity b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization UnityUI.unity new file mode 100644 index 00000000..f344c5bf --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization UnityUI.unity @@ -0,0 +1,3982 @@ +%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: -431602080, g: -431602080, b: -431602080, a: -431602080} + m_AmbientEquatorColor: {r: -431602080, g: -431602080, b: -431602080, a: -431602080} + m_AmbientGroundColor: {r: -431602080, g: -431602080, b: -431602080, a: -431602080} + 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: 10 + m_Resolution: 1 + m_BakeResolution: 1 + m_AtlasSize: 1024 + m_AO: 1 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 0 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringMode: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + 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 &12757372 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 12757373} + - component: {fileID: 12757374} + m_Layer: 5 + m_Name: Item + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &12757373 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 12757372} + m_LocalRotation: {x: 0, 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: 317174489} + - {fileID: 51451890} + - {fileID: 586057136} + m_Father: {fileID: 1448576823} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &12757374 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 12757372} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 2109663825, guid: f5f67c52d1564df4a8936ccd202a3bd8, 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 317174490} + toggleTransition: 1 + graphic: {fileID: 51451891} + m_Group: {fileID: 0} + onValueChanged: + m_PersistentCalls: + m_Calls: [] + m_IsOn: 1 +--- !u!1 &51451889 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 51451890} + - component: {fileID: 51451892} + - component: {fileID: 51451891} + m_Layer: 5 + m_Name: Item Checkmark + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &51451890 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 51451889} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 12757373} + 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: 10, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &51451891 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 51451889} + 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_Sprite: {fileID: 10901, 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 +--- !u!222 &51451892 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 51451889} + m_CullTransparentMesh: 0 +--- !u!1 &77474266 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 77474267} + m_Layer: 5 + m_Name: Extras + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &77474267 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 77474266} + m_LocalRotation: {x: 0, 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: 1268790944} + - {fileID: 653617884} + - {fileID: 1452851461} + - {fileID: 1420320822} + m_Father: {fileID: 722395055} + 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!1 &167348268 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 167348269} + m_Layer: 0 + m_Name: Examples + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &167348269 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 167348268} + m_LocalRotation: {x: 0, y: 0, z: 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} +--- !u!1 &221523713 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 221523714} + - component: {fileID: 221523716} + - component: {fileID: 221523715} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &221523714 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 221523713} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1172968458} + 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: -7.5, y: -0.5} + m_SizeDelta: {x: -35, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &221523715 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 221523713} + 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: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 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: 1 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Option A +--- !u!222 &221523716 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 221523713} + m_CullTransparentMesh: 0 +--- !u!1 &274686397 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 274686398} + m_Layer: 0 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &274686398 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 274686397} + m_LocalRotation: {x: 0, 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: 1306373065} + m_Father: {fileID: 1468075148} + 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} +--- !u!1 &313464588 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 313464589} + - component: {fileID: 313464591} + - component: {fileID: 313464590} + m_Layer: 0 + m_Name: Item Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &313464589 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 313464588} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1293268103} + 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 &313464590 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 313464588} + 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.9607843, g: 0.9607843, b: 0.9607843, 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 +--- !u!222 &313464591 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 313464588} + m_CullTransparentMesh: 0 +--- !u!1 &317174488 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 317174489} + - component: {fileID: 317174491} + - component: {fileID: 317174490} + m_Layer: 5 + m_Name: Item Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &317174489 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 317174488} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 12757373} + 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 &317174490 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 317174488} + 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.9607843, g: 0.9607843, b: 0.9607843, 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 +--- !u!222 &317174491 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 317174488} + m_CullTransparentMesh: 0 +--- !u!1 &326863485 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 326863486} + - component: {fileID: 326863490} + - component: {fileID: 326863489} + - component: {fileID: 326863488} + - component: {fileID: 326863487} + - component: {fileID: 326863491} + m_Layer: 0 + m_Name: Spanish + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &326863486 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 326863485} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1045395102} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.20941558, y: 0.07589286} + m_AnchorMax: {x: 0.32629868, y: 0.22321428} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &326863487 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 326863485} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1573420865, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_EffectColor: {r: 0, g: 0, b: 0, a: 1} + m_EffectDistance: {x: 3, y: -3} + m_UseGraphicAlpha: 1 +--- !u!114 &326863488 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 326863485} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, 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.5019608, g: 0.5019608, b: 0.5019608, a: 0.5019608} + m_HighlightedColor: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 0.69803923} + m_PressedColor: {r: 0.34509805, g: 0.34509805, b: 0.34509805, a: 0.69803923} + m_DisabledColor: {r: 0.2509804, g: 0.2509804, b: 0.2509804, a: 0.5019608} + m_ColorMultiplier: 2 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 326863489} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 326863491} + m_MethodName: ApplyLanguage + 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: 1 +--- !u!114 &326863489 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 326863485} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, 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_Texture: {fileID: 2800000, guid: 87e96283e85053343bc47c9691614f7c, type: 3} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &326863490 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 326863485} + m_CullTransparentMesh: 0 +--- !u!114 &326863491 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 326863485} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f8d7972c568b50940a54c7f599af66c5, type: 3} + m_Name: + m_EditorClassIdentifier: + _Language: Spanish + mSource: {fileID: 1364070359} +--- !u!1 &476591209 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 476591210} + - component: {fileID: 476591213} + - component: {fileID: 476591212} + - component: {fileID: 476591211} + m_Layer: 0 + m_Name: Template + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &476591210 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 476591209} + m_LocalRotation: {x: 0, 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: 1989499585} + - {fileID: 1468075148} + m_Father: {fileID: 1072564159} + 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: 2} + m_SizeDelta: {x: 0, y: 150} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &476591211 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 476591209} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1367256648, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 970248308} + m_Horizontal: 0 + m_Vertical: 1 + m_MovementType: 2 + m_Elasticity: 0.1 + m_Inertia: 1 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 1 + m_Viewport: {fileID: 1989499585} + m_HorizontalScrollbar: {fileID: 0} + m_VerticalScrollbar: {fileID: 1468075149} + m_HorizontalScrollbarVisibility: 0 + m_VerticalScrollbarVisibility: 2 + m_HorizontalScrollbarSpacing: 0 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &476591212 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 476591209} + 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_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 +--- !u!222 &476591213 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 476591209} + m_CullTransparentMesh: 0 +--- !u!114 &536453383 +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: a58a0cb6f0764ca42b2877aa2c6fa0af, type: 3} + m_Name: + m_EditorClassIdentifier: + mTarget: {fileID: 1383460143} +--- !u!1 &586057135 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 586057136} + - component: {fileID: 586057138} + - component: {fileID: 586057137} + m_Layer: 5 + m_Name: Item Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &586057136 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 586057135} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 12757373} + 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: 5, y: -0.5} + m_SizeDelta: {x: -30, y: -3} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &586057137 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 586057135} + 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: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 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: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Option A +--- !u!222 &586057138 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 586057135} + m_CullTransparentMesh: 0 +--- !u!1 &653617883 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 653617884} + - component: {fileID: 653617887} + - component: {fileID: 653617886} + m_Layer: 5 + m_Name: textSprite + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &653617884 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 653617883} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 77474267} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5002597, y: 0.6610714} + m_AnchorMax: {x: 0.73727286, y: 0.7414286} + m_AnchoredPosition: {x: -0.000030517578, y: 0} + m_SizeDelta: {x: -0.000061035156, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &653617886 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 653617883} + 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: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 20 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 1 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: RawImage +--- !u!222 &653617887 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 653617883} + m_CullTransparentMesh: 0 +--- !u!1 &699861513 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 699861514} + 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 &699861514 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 699861513} + m_LocalRotation: {x: 0, 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: 1096552524} + m_Father: {fileID: 977608279} + 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} +--- !u!1 &722395052 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 722395055} + - component: {fileID: 722395054} + - component: {fileID: 722395053} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &722395053 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 722395052} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!223 &722395054 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 722395052} + 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 &722395055 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 722395052} + 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: 1045395102} + - {fileID: 77474267} + - {fileID: 1277673355} + 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 &970248307 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 970248308} + m_Layer: 0 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &970248308 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 970248307} + m_LocalRotation: {x: 0, 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: 1293268103} + m_Father: {fileID: 1989499585} + 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: 0, y: 0} + m_SizeDelta: {x: 0, y: 28} + m_Pivot: {x: 0.5, y: 1} +--- !u!1 &977608278 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 977608279} + - component: {fileID: 977608282} + - component: {fileID: 977608281} + - component: {fileID: 977608280} + m_Layer: 5 + m_Name: Scrollbar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &977608279 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 977608278} + m_LocalRotation: {x: 0, 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: 699861514} + m_Father: {fileID: 1915528343} + 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: 0, y: 0} + m_SizeDelta: {x: 20, y: 0} + m_Pivot: {x: 1, y: 1} +--- !u!114 &977608280 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 977608278} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -2061169968, guid: f5f67c52d1564df4a8936ccd202a3bd8, 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1096552525} + m_HandleRect: {fileID: 1096552524} + m_Direction: 2 + m_Value: 0 + m_Size: 0.2 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &977608281 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 977608278} + 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_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 +--- !u!222 &977608282 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 977608278} + m_CullTransparentMesh: 0 +--- !u!1 &1045395101 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1045395102} + m_Layer: 0 + m_Name: Buttons + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1045395102 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1045395101} + m_LocalRotation: {x: 0, 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: 1405865223} + - {fileID: 1714070056} + - {fileID: 326863486} + - {fileID: 1962922074} + m_Father: {fileID: 722395055} + 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 &1072564158 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1072564159} + - component: {fileID: 1072564163} + - component: {fileID: 1072564162} + - component: {fileID: 1072564161} + - component: {fileID: 1072564160} + m_Layer: 0 + m_Name: Dropdown + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1072564159 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1072564158} + m_LocalRotation: {x: -0, 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: 1668354635} + - {fileID: 2092503783} + - {fileID: 476591210} + m_Father: {fileID: 1277673355} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.12204579, y: 0.80803573} + m_AnchorMax: {x: 0.4148377, y: 0.8750009} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1072564160 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1072564158} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 33897b093844df84a8e8a0258a1fb0dd, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &1072564161 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1072564158} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 853051423, guid: f5f67c52d1564df4a8936ccd202a3bd8, 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1072564162} + m_Template: {fileID: 476591210} + m_CaptionText: {fileID: 1668354636} + m_CaptionImage: {fileID: 0} + m_ItemText: {fileID: 1505079329} + m_ItemImage: {fileID: 0} + m_Value: 0 + m_Options: + m_Options: [] + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &1072564162 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1072564158} + 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_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 +--- !u!222 &1072564163 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1072564158} + m_CullTransparentMesh: 0 +--- !u!1 &1096552523 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1096552524} + - component: {fileID: 1096552526} + - component: {fileID: 1096552525} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1096552524 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1096552523} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 699861514} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0.2} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1096552525 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1096552523} + 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_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 +--- !u!222 &1096552526 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1096552523} + m_CullTransparentMesh: 0 +--- !u!1 &1115346775 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1115346776} + - component: {fileID: 1115346779} + - component: {fileID: 1115346778} + - component: {fileID: 1115346777} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1115346776 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1115346775} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1277673355} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.06168831, y: 0.2812804} + m_AnchorMax: {x: 0.9383117, y: 0.45985183} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1115346777 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1115346775} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 344445a89b4f74a0e9a0a766903df87e, type: 3} + m_Name: + m_EditorClassIdentifier: + mTerm: Basic Text + mTermSecondary: + PrimaryTermModifier: 0 + SecondaryTermModifier: 0 + TermPrefix: + TermSuffix: + LocalizeOnAwake: 1 + IgnoreRTL: 0 + MaxCharactersInRTL: 0 + IgnoreNumbersInRTL: 0 + CorrectAlignmentForRTL: 1 + AddSpacesToJoinedLanguages: 0 + AllowLocalizedParameters: 1 + TranslatedObjects: [] + LocalizeEvent: + m_PersistentCalls: + m_Calls: [] + AlwaysForceLocalize: 0 + LocalizeCallBack: + Target: {fileID: 0} + MethodName: + mGUI_ShowReferences: 0 + mGUI_ShowTems: 1 + mGUI_ShowCallback: 0 + mLocalizeTarget: {fileID: 2139795395} + mLocalizeTargetName: I2.Loc.LocalizeTarget_UnityUI_Text +--- !u!114 &1115346778 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1115346775} + 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: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 25 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 1 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: Este es un Texto del Unity UI +--- !u!222 &1115346779 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1115346775} + m_CullTransparentMesh: 0 +--- !u!1 &1172968457 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1172968458} + - component: {fileID: 1172968462} + - component: {fileID: 1172968461} + - component: {fileID: 1172968460} + - component: {fileID: 1172968459} + m_Layer: 5 + m_Name: Dropdown + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1172968458 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1172968457} + m_LocalRotation: {x: -0, 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: 221523714} + - {fileID: 1731226343} + - {fileID: 1915528343} + m_Father: {fileID: 1277673355} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.6038961, y: 0.8080357} + m_AnchorMax: {x: 0.8636364, y: 0.875} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1172968459 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1172968457} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a5379d3aeaf18a24fa23c26a749edfe5, type: 3} + m_Name: + m_EditorClassIdentifier: + _Terms: + - Option A + - Option B + - Option C +--- !u!114 &1172968460 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1172968457} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 853051423, guid: f5f67c52d1564df4a8936ccd202a3bd8, 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1172968461} + m_Template: {fileID: 1915528343} + m_CaptionText: {fileID: 221523715} + m_CaptionImage: {fileID: 0} + m_ItemText: {fileID: 586057137} + m_ItemImage: {fileID: 0} + m_Value: 0 + m_Options: + m_Options: + - m_Text: Option A + m_Image: {fileID: 0} + - m_Text: Option B + m_Image: {fileID: 0} + - m_Text: Option C + m_Image: {fileID: 0} + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &1172968461 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1172968457} + 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_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 +--- !u!222 &1172968462 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1172968457} + m_CullTransparentMesh: 0 +--- !u!1 &1268790943 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1268790944} + - component: {fileID: 1268790947} + - component: {fileID: 1268790946} + m_Layer: 5 + m_Name: textSprite + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1268790944 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1268790943} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 77474267} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.28564933, y: 0.6610714} + m_AnchorMax: {x: 0.48045456, y: 0.7414286} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1268790946 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1268790943} + 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: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 20 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 1 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: Image +--- !u!222 &1268790947 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1268790943} + m_CullTransparentMesh: 0 +--- !u!1 &1277673354 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1277673355} + m_Layer: 5 + m_Name: Localized Examples + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1277673355 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1277673354} + m_LocalRotation: {x: 0, 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: 1115346776} + - {fileID: 1778691769} + - {fileID: 1383460141} + - {fileID: 1172968458} + - {fileID: 1072564159} + m_Father: {fileID: 722395055} + 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!1 &1293268102 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1293268103} + - component: {fileID: 1293268104} + m_Layer: 0 + m_Name: Item + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1293268103 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1293268102} + m_LocalRotation: {x: 0, 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: 313464589} + - {fileID: 2039927563} + - {fileID: 1505079328} + m_Father: {fileID: 970248308} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1293268104 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1293268102} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 2109663825, guid: f5f67c52d1564df4a8936ccd202a3bd8, 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 313464590} + toggleTransition: 1 + graphic: {fileID: 2039927564} + m_Group: {fileID: 0} + onValueChanged: + m_PersistentCalls: + m_Calls: [] + m_IsOn: 1 +--- !u!1 &1306373064 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1306373065} + - component: {fileID: 1306373067} + - component: {fileID: 1306373066} + m_Layer: 0 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1306373065 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1306373064} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 274686398} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0.2} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1306373066 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1306373064} + 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_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 +--- !u!222 &1306373067 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1306373064} + m_CullTransparentMesh: 0 +--- !u!1 &1364070357 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1364070358} + - component: {fileID: 1364070359} + m_Layer: 0 + m_Name: LocalizationSource + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1364070358 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1364070357} + m_LocalRotation: {x: 0, y: 0, z: 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} +--- !u!114 &1364070359 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1364070357} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 488051eaa73ba421e8fe4868f2e0f364, type: 3} + m_Name: + m_EditorClassIdentifier: + mSource: + UserAgreesToHaveItOnTheScene: 0 + UserAgreesToHaveItInsideThePluginsFolder: 0 + GoogleLiveSyncIsUptoDate: 1 + mTerms: + - Term: Basic Text + TermType: 0 + Description: + Languages: + - This is a localized Unity UI Text + - Este es un Texto del Unity UI + - Il s'agit d'un texte localise Unity UI + Flags: 000000 + Languages_Touch: [] + - Term: Sprite + TermType: 5 + Description: + Languages: + - References/Sprites/L_EN[L_EN] + - References/Sprites/L_ES[L_ES] + - References/Sprites/L_FR[L_FR] + Flags: 000000 + Languages_Touch: [] + - Term: RawImage + TermType: 2 + Description: + Languages: + - References/Textures/L_EN + - References/Textures/L_ES + - References/Textures/L_FR + Flags: 000000 + Languages_Touch: [] + - Term: Option A + TermType: 0 + Description: + Languages: + - Option A + - "Opci\xF3n A" + - Un Choix + Flags: 020202 + Languages_Touch: [] + - Term: Option B + TermType: 0 + Description: + Languages: + - Option B + - "Opci\xF3n B" + - L'option B + Flags: 020202 + Languages_Touch: [] + - Term: Option C + TermType: 0 + Description: + Languages: + - Option C + - "Opci\xF3n C" + - Option C + Flags: 020202 + Languages_Touch: [] + CaseInsensitiveTerms: 0 + OnMissingTranslation: 1 + mTerm_AppName: + mLanguages: + - Name: English + Code: en-US + Flags: 0 + - Name: Spanish + Code: es + Flags: 0 + - Name: French + Code: fr-BE + Flags: 0 + IgnoreDeviceLanguage: 0 + _AllowUnloadingLanguages: 0 + Google_WebServiceURL: + Google_SpreadsheetKey: teVYmvqeNTF8ZkQhQ21a0Gw + Google_SpreadsheetName: + Google_LastUpdatedVersion: + Google_Password: change_this + GoogleUpdateFrequency: 3 + GoogleInEditorCheckFrequency: 2 + GoogleUpdateSynchronization: 1 + GoogleUpdateDelay: 5 + Assets: + - {fileID: 12800000, guid: 769d4a2288b99004184236f5fc4469c8, type: 3} + Spreadsheet_LocalFileName: + Spreadsheet_LocalCSVSeparator: ',' + Spreadsheet_LocalCSVEncoding: utf-8 + Spreadsheet_SpecializationAsRows: 1 + version: 1 + NeverDestroy: 0 + UserAgreesToHaveItOnTheScene: 0 + UserAgreesToHaveItInsideThePluginsFolder: 0 + GoogleLiveSyncIsUptoDate: 1 + Assets: [] + Google_WebServiceURL: + Google_SpreadsheetKey: teVYmvqeNTF8ZkQhQ21a0Gw + Google_SpreadsheetName: + Google_LastUpdatedVersion: + GoogleUpdateFrequency: 3 + GoogleUpdateDelay: 5 + mLanguages: [] + IgnoreDeviceLanguage: 0 + _AllowUnloadingLanguages: 0 + mTerms: [] + CaseInsensitiveTerms: 0 + OnMissingTranslation: 1 + mTerm_AppName: + Spreadsheet_LocalFileName: C:/Data/Frank/Unity Projects/Unity Plugins/Localization.csv + Spreadsheet_LocalCSVSeparator: ',' + Spreadsheet_LocalCSVEncoding: Unicode (UTF-8) + Spreadsheet_SpecializationAsRows: 1 + Google_Password: change_this + GoogleInEditorCheckFrequency: 2 +--- !u!1 &1383460140 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1383460141} + - component: {fileID: 1383460144} + - component: {fileID: 1383460143} + - component: {fileID: 1383460142} + m_Layer: 5 + m_Name: RawImage + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1383460141 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1383460140} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1277673355} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.54545456, y: 0.45982143} + m_AnchorMax: {x: 0.7077922, y: 0.6830357} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1383460142 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1383460140} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 344445a89b4f74a0e9a0a766903df87e, type: 3} + m_Name: + m_EditorClassIdentifier: + mTerm: RawImage + mTermSecondary: + PrimaryTermModifier: 0 + SecondaryTermModifier: 0 + TermPrefix: + TermSuffix: + LocalizeOnAwake: 1 + IgnoreRTL: 0 + MaxCharactersInRTL: 0 + IgnoreNumbersInRTL: 0 + CorrectAlignmentForRTL: 1 + AddSpacesToJoinedLanguages: 0 + AllowLocalizedParameters: 1 + TranslatedObjects: [] + LocalizeEvent: + m_PersistentCalls: + m_Calls: [] + AlwaysForceLocalize: 0 + LocalizeCallBack: + Target: {fileID: 0} + MethodName: + mGUI_ShowReferences: 0 + mGUI_ShowTems: 1 + mGUI_ShowCallback: 0 + mLocalizeTarget: {fileID: 536453383} + mLocalizeTargetName: I2.Loc.LocalizeTarget_UnityUI_RawImage +--- !u!114 &1383460143 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1383460140} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, 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_Texture: {fileID: 2800000, guid: 87e96283e85053343bc47c9691614f7c, type: 3} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &1383460144 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1383460140} + m_CullTransparentMesh: 0 +--- !u!1 &1405865220 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1405865223} + - component: {fileID: 1405865222} + - component: {fileID: 1405865221} + m_Layer: 0 + m_Name: Window + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1405865221 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1405865220} + 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_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 +--- !u!222 &1405865222 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1405865220} + m_CullTransparentMesh: 0 +--- !u!224 &1405865223 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1405865220} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1045395102} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.0349026, y: 0.042410713} + m_AnchorMax: {x: 0.97483766, y: 0.25223213} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1420320821 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1420320822} + - component: {fileID: 1420320824} + - component: {fileID: 1420320823} + m_Layer: 5 + m_Name: textSprite (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1420320822 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1420320821} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 77474267} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5963311, y: 0.88008934} + m_AnchorMax: {x: 0.8771754, y: 0.9425893} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1420320823 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1420320821} + 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: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 20 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 1 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Localized Dropdown +--- !u!222 &1420320824 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1420320821} + m_CullTransparentMesh: 0 +--- !u!1 &1448576822 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1448576823} + m_Layer: 5 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1448576823 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1448576822} + m_LocalRotation: {x: 0, 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: 12757373} + m_Father: {fileID: 1567796371} + 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: 0, y: 0} + m_SizeDelta: {x: 0, y: 28} + m_Pivot: {x: 0.5, y: 1} +--- !u!1 &1452851460 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1452851461} + - component: {fileID: 1452851463} + - component: {fileID: 1452851462} + m_Layer: 5 + m_Name: textSprite (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1452851461 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1452851460} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 77474267} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.1136363, y: 0.88008934} + m_AnchorMax: {x: 0.3084416, y: 0.9425893} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1452851462 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1452851460} + 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: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 20 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 1 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 'Languages:' +--- !u!222 &1452851463 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1452851460} + m_CullTransparentMesh: 0 +--- !u!1 &1468075147 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1468075148} + - component: {fileID: 1468075151} + - component: {fileID: 1468075150} + - component: {fileID: 1468075149} + m_Layer: 0 + m_Name: Scrollbar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1468075148 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1468075147} + m_LocalRotation: {x: 0, 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: 274686398} + m_Father: {fileID: 476591210} + 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: 0, y: 0} + m_SizeDelta: {x: 20, y: 0} + m_Pivot: {x: 1, y: 1} +--- !u!114 &1468075149 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1468075147} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -2061169968, guid: f5f67c52d1564df4a8936ccd202a3bd8, 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1306373066} + m_HandleRect: {fileID: 1306373065} + m_Direction: 2 + m_Value: 0 + m_Size: 0.2 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &1468075150 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1468075147} + 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_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 +--- !u!222 &1468075151 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1468075147} + m_CullTransparentMesh: 0 +--- !u!1 &1505079327 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1505079328} + - component: {fileID: 1505079330} + - component: {fileID: 1505079329} + m_Layer: 0 + m_Name: Item Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1505079328 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1505079327} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1293268103} + 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: 5, y: -0.5} + m_SizeDelta: {x: -30, y: -3} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1505079329 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1505079327} + 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: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 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: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Option A +--- !u!222 &1505079330 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1505079327} + m_CullTransparentMesh: 0 +--- !u!1 &1567796370 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1567796371} + - component: {fileID: 1567796374} + - component: {fileID: 1567796373} + - component: {fileID: 1567796372} + m_Layer: 5 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1567796371 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1567796370} + m_LocalRotation: {x: 0, 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: 1448576823} + m_Father: {fileID: 1915528343} + 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: -18, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!114 &1567796372 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1567796370} + 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_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 +--- !u!222 &1567796373 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1567796370} + m_CullTransparentMesh: 0 +--- !u!114 &1567796374 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1567796370} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -1200242548, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!1 &1668354634 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1668354635} + - component: {fileID: 1668354637} + - component: {fileID: 1668354636} + m_Layer: 0 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1668354635 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1668354634} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1072564159} + 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: -7.5, y: 0.8336487} + m_SizeDelta: {x: -35, y: -10.333} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1668354636 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1668354634} + 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: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 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: 1 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!222 &1668354637 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1668354634} + m_CullTransparentMesh: 0 +--- !u!1 &1714070055 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1714070056} + - component: {fileID: 1714070060} + - component: {fileID: 1714070059} + - component: {fileID: 1714070058} + - component: {fileID: 1714070057} + - component: {fileID: 1714070061} + m_Layer: 0 + m_Name: English + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1714070056 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1714070055} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1045395102} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.43668833, y: 0.07366072} + m_AnchorMax: {x: 0.55357146, y: 0.22098215} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1714070057 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1714070055} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1573420865, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_EffectColor: {r: 0, g: 0, b: 0, a: 1} + m_EffectDistance: {x: 3, y: -3} + m_UseGraphicAlpha: 1 +--- !u!114 &1714070058 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1714070055} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, 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.5019608, g: 0.5019608, b: 0.5019608, a: 0.5019608} + m_HighlightedColor: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 0.69803923} + m_PressedColor: {r: 0.34509805, g: 0.34509805, b: 0.34509805, a: 0.69803923} + m_DisabledColor: {r: 0.2509804, g: 0.2509804, b: 0.2509804, a: 0.5019608} + m_ColorMultiplier: 2 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1714070059} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1714070061} + m_MethodName: ApplyLanguage + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: English + m_BoolArgument: 0 + m_CallState: 1 +--- !u!114 &1714070059 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1714070055} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, 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_Texture: {fileID: 2800000, guid: 8f7115ef5a3ecfd42935c3ff54434ae8, type: 3} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &1714070060 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1714070055} + m_CullTransparentMesh: 0 +--- !u!114 &1714070061 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1714070055} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f8d7972c568b50940a54c7f599af66c5, type: 3} + m_Name: + m_EditorClassIdentifier: + _Language: English + mSource: {fileID: 1364070359} +--- !u!1 &1731226342 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1731226343} + - component: {fileID: 1731226345} + - component: {fileID: 1731226344} + m_Layer: 5 + m_Name: Arrow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1731226343 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1731226342} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1172968458} + m_RootOrder: 1 + 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: -15, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1731226344 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1731226342} + 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_Sprite: {fileID: 10915, 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 +--- !u!222 &1731226345 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1731226342} + m_CullTransparentMesh: 0 +--- !u!114 &1748292408 +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: bedef2aeaac8da04faa9a07b7241d0ad, type: 3} + m_Name: + m_EditorClassIdentifier: + mTarget: {fileID: 1778691771} +--- !u!1 &1778691768 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1778691769} + - component: {fileID: 1778691772} + - component: {fileID: 1778691771} + - component: {fileID: 1778691770} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1778691769 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1778691768} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1277673355} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.3181818, y: 0.45982143} + m_AnchorMax: {x: 0.48051947, y: 0.6830357} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1778691770 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1778691768} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 344445a89b4f74a0e9a0a766903df87e, type: 3} + m_Name: + m_EditorClassIdentifier: + mTerm: Sprite + mTermSecondary: + PrimaryTermModifier: 0 + SecondaryTermModifier: 0 + TermPrefix: + TermSuffix: + LocalizeOnAwake: 1 + IgnoreRTL: 0 + MaxCharactersInRTL: 0 + IgnoreNumbersInRTL: 0 + CorrectAlignmentForRTL: 1 + AddSpacesToJoinedLanguages: 0 + AllowLocalizedParameters: 1 + TranslatedObjects: [] + LocalizeEvent: + m_PersistentCalls: + m_Calls: [] + AlwaysForceLocalize: 0 + LocalizeCallBack: + Target: {fileID: 0} + MethodName: + mGUI_ShowReferences: 0 + mGUI_ShowTems: 1 + mGUI_ShowCallback: 0 + mLocalizeTarget: {fileID: 1748292408} + mLocalizeTargetName: I2.Loc.LocalizeTarget_UnityUI_Image +--- !u!114 &1778691771 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1778691768} + 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_Sprite: {fileID: 21300000, guid: 0ff5ba6aa9b08494bb14a8728ee51d9c, 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 +--- !u!222 &1778691772 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1778691768} + m_CullTransparentMesh: 0 +--- !u!1 &1797551106 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1797551111} + - component: {fileID: 1797551110} + - component: {fileID: 1797551108} + - component: {fileID: 1797551107} + 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 &1797551107 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1797551106} + m_Enabled: 1 +--- !u!124 &1797551108 +Behaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1797551106} + m_Enabled: 1 +--- !u!20 &1797551110 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1797551106} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_projectionMatrixMode: 1 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_GateFitMode: 2 + 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: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1797551111 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1797551106} + 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: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1912490372 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1912490376} + - component: {fileID: 1912490375} + - component: {fileID: 1912490374} + - component: {fileID: 1912490373} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1912490373 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1912490372} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1997211142, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ForceModuleActive: 0 +--- !u!114 &1912490374 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1912490372} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1077351063, guid: f5f67c52d1564df4a8936ccd202a3bd8, 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 &1912490375 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1912490372} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -619905303, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!4 &1912490376 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1912490372} + m_LocalRotation: {x: 0, y: 0, z: 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} +--- !u!1 &1915528342 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1915528343} + - component: {fileID: 1915528346} + - component: {fileID: 1915528345} + - component: {fileID: 1915528344} + m_Layer: 5 + m_Name: Template + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &1915528343 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1915528342} + m_LocalRotation: {x: 0, 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: 1567796371} + - {fileID: 977608279} + m_Father: {fileID: 1172968458} + 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: 2} + m_SizeDelta: {x: 0, y: 150} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1915528344 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1915528342} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1367256648, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 1448576823} + m_Horizontal: 0 + m_Vertical: 1 + m_MovementType: 2 + m_Elasticity: 0.1 + m_Inertia: 1 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 1 + m_Viewport: {fileID: 1567796371} + m_HorizontalScrollbar: {fileID: 0} + m_VerticalScrollbar: {fileID: 977608280} + m_HorizontalScrollbarVisibility: 0 + m_VerticalScrollbarVisibility: 2 + m_HorizontalScrollbarSpacing: 0 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &1915528345 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1915528342} + 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_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 +--- !u!222 &1915528346 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1915528342} + m_CullTransparentMesh: 0 +--- !u!1 &1962922073 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1962922074} + - component: {fileID: 1962922078} + - component: {fileID: 1962922077} + - component: {fileID: 1962922076} + - component: {fileID: 1962922075} + - component: {fileID: 1962922079} + m_Layer: 0 + m_Name: French + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1962922074 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1962922073} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1045395102} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.66883117, y: 0.07589286} + m_AnchorMax: {x: 0.7857143, y: 0.22321428} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1962922075 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1962922073} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1573420865, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_EffectColor: {r: 0, g: 0, b: 0, a: 1} + m_EffectDistance: {x: 3, y: -3} + m_UseGraphicAlpha: 1 +--- !u!114 &1962922076 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1962922073} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, 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.5019608, g: 0.5019608, b: 0.5019608, a: 0.5019608} + m_HighlightedColor: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 0.69803923} + m_PressedColor: {r: 0.34509805, g: 0.34509805, b: 0.34509805, a: 0.69803923} + m_DisabledColor: {r: 0.2509804, g: 0.2509804, b: 0.2509804, a: 0.5019608} + m_ColorMultiplier: 2 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1962922077} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1962922079} + m_MethodName: ApplyLanguage + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: French + m_BoolArgument: 0 + m_CallState: 1 +--- !u!114 &1962922077 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1962922073} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, 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_Texture: {fileID: 2800000, guid: fdd6d36bfa4c41c4f988be3be486b5f8, type: 3} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &1962922078 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1962922073} + m_CullTransparentMesh: 0 +--- !u!114 &1962922079 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1962922073} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f8d7972c568b50940a54c7f599af66c5, type: 3} + m_Name: + m_EditorClassIdentifier: + _Language: French + mSource: {fileID: 1364070359} +--- !u!1 &1989499584 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1989499585} + - component: {fileID: 1989499588} + - component: {fileID: 1989499587} + - component: {fileID: 1989499586} + m_Layer: 0 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1989499585 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1989499584} + m_LocalRotation: {x: 0, 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: 970248308} + m_Father: {fileID: 476591210} + 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: -18, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!114 &1989499586 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1989499584} + 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_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 +--- !u!222 &1989499587 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1989499584} + m_CullTransparentMesh: 0 +--- !u!114 &1989499588 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1989499584} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -1200242548, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!1 &2039927562 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2039927563} + - component: {fileID: 2039927565} + - component: {fileID: 2039927564} + m_Layer: 0 + m_Name: Item Checkmark + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2039927563 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2039927562} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1293268103} + 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: 10, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2039927564 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2039927562} + 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_Sprite: {fileID: 10901, 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 +--- !u!222 &2039927565 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2039927562} + m_CullTransparentMesh: 0 +--- !u!1 &2092503782 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2092503783} + - component: {fileID: 2092503785} + - component: {fileID: 2092503784} + m_Layer: 0 + m_Name: Arrow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2092503783 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2092503782} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1072564159} + m_RootOrder: 1 + 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: -15, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2092503784 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2092503782} + 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_Sprite: {fileID: 10915, 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 +--- !u!222 &2092503785 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2092503782} + m_CullTransparentMesh: 0 +--- !u!114 &2139795395 +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: 332e36893e7cf4a49b3c1f72f76cd5e1, type: 3} + m_Name: + m_EditorClassIdentifier: + mTarget: {fileID: 1115346778} diff --git a/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization UnityUI.unity.meta b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization UnityUI.unity.meta new file mode 100644 index 00000000..411b07fe --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization UnityUI.unity.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: 1440060592636ac4facf33d40c9df67c +DefaultImporter: + userData: diff --git a/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization features Callbacks and Parameters.unity b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization features Callbacks and Parameters.unity new file mode 100644 index 00000000..3d35be13 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization features Callbacks and Parameters.unity @@ -0,0 +1,1631 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +SceneSettings: + m_ObjectHideFlags: 0 + m_PVSData: + m_PVSObjectsArray: [] + m_PVSPortalsArray: [] + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 7 + 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: -431602080, g: -431602080, b: -431602080, a: -431602080} + m_AmbientEquatorColor: {r: -431602080, g: -431602080, b: -431602080, a: -431602080} + m_AmbientGroundColor: {r: -431602080, g: -431602080, b: -431602080, a: -431602080} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + 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} +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 7 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_TemporalCoherenceThreshold: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 4 + m_Resolution: 1 + m_BakeResolution: 1 + m_TextureWidth: 1024 + m_TextureHeight: 1024 + m_AO: 1 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 0 + m_DirectLightInLightProbes: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_LightingDataAsset: {fileID: 0} + m_RuntimeCPUUsage: 25 +--- !u!196 &5 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + accuratePlacement: 0 + minRegionArea: 2 + cellSize: 0.16666666 + manualCellSize: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &167348268 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 167348269} + m_Layer: 0 + m_Name: Examples + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &167348269 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 167348268} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 +--- !u!114 &258109821 +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: 332e36893e7cf4a49b3c1f72f76cd5e1, type: 3} + m_Name: + m_EditorClassIdentifier: + mTarget: {fileID: 740420939} +--- !u!1 &326863485 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 224: {fileID: 326863486} + - 222: {fileID: 326863490} + - 114: {fileID: 326863489} + - 114: {fileID: 326863488} + - 114: {fileID: 326863487} + - 114: {fileID: 326863491} + m_Layer: 0 + m_Name: Spanish + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &326863486 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 326863485} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 1045395102} + m_RootOrder: 2 + m_AnchorMin: {x: 0.20266216, y: 0.13830356} + m_AnchorMax: {x: 0.30891833, y: 0.27205357} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &326863487 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 326863485} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1573420865, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_EffectColor: {r: 0, g: 0, b: 0, a: 1} + m_EffectDistance: {x: 3, y: -3} + m_UseGraphicAlpha: 1 +--- !u!114 &326863488 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 326863485} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, 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.5019608, g: 0.5019608, b: 0.5019608, a: 0.5019608} + m_HighlightedColor: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 0.69803923} + m_PressedColor: {r: 0.34509805, g: 0.34509805, b: 0.34509805, a: 0.69803923} + m_DisabledColor: {r: 0.2509804, g: 0.2509804, b: 0.2509804, a: 0.5019608} + m_ColorMultiplier: 2 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 326863489} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 326863491} + m_MethodName: ApplyLanguage + 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: 1 + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &326863489 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 326863485} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, 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_Texture: {fileID: 2800000, guid: 87e96283e85053343bc47c9691614f7c, type: 3} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &326863490 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 326863485} +--- !u!114 &326863491 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 326863485} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f8d7972c568b50940a54c7f599af66c5, type: 3} + m_Name: + m_EditorClassIdentifier: + _Language: Spanish + mSource: {fileID: 1364070359} +--- !u!1 &695539928 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 224: {fileID: 695539930} + - 114: {fileID: 695539929} + m_Layer: 5 + m_Name: GlobalParameters + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &695539929 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 695539928} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bcf154e686692e8468e3813f885633e8, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!224 &695539930 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 695539928} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 613.5, y: 256} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &722395052 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 224: {fileID: 722395055} + - 223: {fileID: 722395054} + - 114: {fileID: 722395053} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &722395053 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 722395052} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!223 &722395054 +Canvas: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 722395052} + m_Enabled: 1 + serializedVersion: 2 + 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_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &722395055 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 722395052} + 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_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 1045395102} + - {fileID: 1277673355} + m_Father: {fileID: 0} + m_RootOrder: 4 + 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 &740420936 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 224: {fileID: 740420937} + - 222: {fileID: 740420940} + - 114: {fileID: 740420939} + - 114: {fileID: 740420938} + m_Layer: 5 + m_Name: Text with Globall Parameters + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &740420937 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 740420936} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 1277673355} + m_RootOrder: 3 + m_AnchorMin: {x: 0.005109489, y: 0.39125} + m_AnchorMax: {x: 1.0007299, y: 0.45875} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &740420938 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 740420936} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 344445a89b4f74a0e9a0a766903df87e, type: 3} + m_Name: + m_EditorClassIdentifier: + mTerm: LocalParams Text + mTermSecondary: + PrimaryTermModifier: 0 + SecondaryTermModifier: 0 + TermPrefix: + TermSuffix: + LocalizeOnAwake: 1 + Source: {fileID: 1364070359} + IgnoreRTL: 0 + MaxCharactersInRTL: 0 + IgnoreNumbersInRTL: 1 + CorrectAlignmentForRTL: 1 + AddSpacesToJoinedLanguages: 0 + TranslatedObjects: [] + LocalizeEvent: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine, Version=0.0.0.0, Culture=neutral, + PublicKeyToken=null + AlwaysForceLocalize: 1 + LocalizeCallBack: + Target: {fileID: 0} + MethodName: OnModifyLocalization + mGUI_ShowReferences: 0 + mGUI_ShowTems: 1 + mGUI_ShowCallback: 0 + mLocalizeTarget: {fileID: 258109821} + mLocalizeTargetName: I2.Loc.LocalizeTarget_UnityUI_Text +--- !u!114 &740420939 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 740420936} + 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: 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 25 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 1 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: '{[WINNER]} is the first of {[NUM PLAYERS]} players.' +--- !u!222 &740420940 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 740420936} +--- !u!114 &764471934 +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: 332e36893e7cf4a49b3c1f72f76cd5e1, type: 3} + m_Name: + m_EditorClassIdentifier: + mTarget: {fileID: 1115346778} +--- !u!1 &1045395101 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 224: {fileID: 1045395102} + m_Layer: 0 + m_Name: Buttons + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1045395102 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1045395101} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 1405865223} + - {fileID: 1714070056} + - {fileID: 326863486} + - {fileID: 1962922074} + m_Father: {fileID: 722395055} + m_RootOrder: 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 &1115346775 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 224: {fileID: 1115346776} + - 222: {fileID: 1115346779} + - 114: {fileID: 1115346778} + - 114: {fileID: 1115346777} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1115346776 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1115346775} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 1277673355} + m_RootOrder: 0 + m_AnchorMin: {x: 0.005109489, y: 0.9} + m_AnchorMax: {x: 1.0007299, y: 0.94} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1115346777 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1115346775} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 344445a89b4f74a0e9a0a766903df87e, type: 3} + m_Name: + m_EditorClassIdentifier: + mTerm: Basic Text + mTermSecondary: + PrimaryTermModifier: 0 + SecondaryTermModifier: 0 + TermPrefix: + TermSuffix: + LocalizeOnAwake: 1 + Source: {fileID: 1364070359} + IgnoreRTL: 0 + MaxCharactersInRTL: 0 + IgnoreNumbersInRTL: 1 + CorrectAlignmentForRTL: 1 + AddSpacesToJoinedLanguages: 0 + TranslatedObjects: [] + LocalizeEvent: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine, Version=0.0.0.0, Culture=neutral, + PublicKeyToken=null + AlwaysForceLocalize: 1 + LocalizeCallBack: + Target: {fileID: 0} + MethodName: + mGUI_ShowReferences: 0 + mGUI_ShowTems: 1 + mGUI_ShowCallback: 0 + mLocalizeTarget: {fileID: 764471934} + mLocalizeTargetName: I2.Loc.LocalizeTarget_UnityUI_Text +--- !u!114 &1115346778 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1115346775} + 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: 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 25 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 1 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: This is a localized Unity UI Text +--- !u!222 &1115346779 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1115346775} +--- !u!1 &1277673354 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 224: {fileID: 1277673355} + m_Layer: 5 + m_Name: Localized Examples + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1277673355 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1277673354} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 1115346776} + - {fileID: 2121495947} + - {fileID: 2062717369} + - {fileID: 740420937} + m_Father: {fileID: 722395055} + m_RootOrder: 1 + 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 &1364070357 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 1364070358} + - 114: {fileID: 1364070359} + m_Layer: 0 + m_Name: LocalizationSource + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1364070358 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1364070357} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 +--- !u!114 &1364070359 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1364070357} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 488051eaa73ba421e8fe4868f2e0f364, type: 3} + m_Name: + m_EditorClassIdentifier: + NeverDestroy: 0 + UserAgreesToHaveItOnTheScene: 0 + UserAgreesToHaveItInsideThePluginsFolder: 0 + Spreadsheet_LocalFileName: C:/Data/Frank/Unity Projects/Unity Plugins/Localization.csv + Spreadsheet_LocalCSVSeparator: ',' + Spreadsheet_LocalCSVEncoding: Unicode (UTF-8) + Spreadsheet_SpecializationAsRows: 1 + Assets: + - {fileID: 12800000, guid: 769d4a2288b99004184236f5fc4469c8, type: 3} + Google_WebServiceURL: + Google_SpreadsheetKey: teVYmvqeNTF8ZkQhQ21a0Gw + Google_SpreadsheetName: + Google_LastUpdatedVersion: + GoogleUpdateFrequency: 3 + GoogleInEditorCheckFrequency: 2 + GoogleUpdateDelay: 5 + mLanguages: + - Name: English + Code: en-US + Flags: 0 + - Name: Spanish + Code: es + Flags: 0 + - Name: French + Code: fr-BE + Flags: 0 + IgnoreDeviceLanguage: 0 + mTerms: + - Term: Basic Text + TermType: 0 + Description: + Languages: + - This is a localized Unity UI Text + - Se trata de un texto Unidad de interfaz de usuario localizada + - "Ceci est une unit\xE9 localis\xE9e UI texte" + Flags: 000101 + Languages_Touch: [] + - Term: Callback Text + TermType: 0 + Description: + Languages: + - The winner is the {PLAYER_COLOR} player + - El ganador es el jugador {PLAYER_COLOR} + - Le gagnant est le joueur {PLAYER_COLOR} + Flags: 000000 + Languages_Touch: [] + - Term: Color/Red + TermType: 0 + Description: + Languages: + - Red + - Rojo + - Rouge + Flags: 010101 + Languages_Touch: [] + - Term: LocalParams Text + TermType: 0 + Description: + Languages: + - '{[WINNER]} is the first of {[NUM PLAYERS]} players.' + - '{[WINNER]} es el primero de los {[NUM PLAYERS]} jugadores.' + - "{[WINNER]} est la premi\xE8re de {[NUM PLAYERS]} joueurs." + Flags: 000000 + Languages_Touch: [] + CaseInsensitiveTerms: 0 + OnMissingTranslation: 1 + mTerm_AppName: +--- !u!1 &1405865220 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 224: {fileID: 1405865223} + - 222: {fileID: 1405865222} + - 114: {fileID: 1405865221} + m_Layer: 0 + m_Name: Window + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1405865221 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1405865220} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, 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_Texture: {fileID: 2800000, guid: 8d412f782b72d2d49a240c947362048f, type: 3} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &1405865222 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1405865220} +--- !u!224 &1405865223 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1405865220} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 1045395102} + m_RootOrder: 0 + m_AnchorMin: {x: 0.009857897, y: 0.1075} + m_AnchorMax: {x: 0.9991135, y: 0.29785714} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1714070055 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 224: {fileID: 1714070056} + - 222: {fileID: 1714070060} + - 114: {fileID: 1714070059} + - 114: {fileID: 1714070058} + - 114: {fileID: 1714070057} + - 114: {fileID: 1714070061} + m_Layer: 0 + m_Name: English + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1714070056 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1714070055} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 1045395102} + m_RootOrder: 1 + m_AnchorMin: {x: 0.4425985, y: 0.13580357} + m_AnchorMax: {x: 0.54885465, y: 0.26955357} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1714070057 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1714070055} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1573420865, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_EffectColor: {r: 0, g: 0, b: 0, a: 1} + m_EffectDistance: {x: 3, y: -3} + m_UseGraphicAlpha: 1 +--- !u!114 &1714070058 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1714070055} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, 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.5019608, g: 0.5019608, b: 0.5019608, a: 0.5019608} + m_HighlightedColor: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 0.69803923} + m_PressedColor: {r: 0.34509805, g: 0.34509805, b: 0.34509805, a: 0.69803923} + m_DisabledColor: {r: 0.2509804, g: 0.2509804, b: 0.2509804, a: 0.5019608} + m_ColorMultiplier: 2 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1714070059} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1714070061} + m_MethodName: ApplyLanguage + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: English + m_BoolArgument: 0 + m_CallState: 1 + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &1714070059 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1714070055} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, 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_Texture: {fileID: 2800000, guid: 8f7115ef5a3ecfd42935c3ff54434ae8, type: 3} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &1714070060 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1714070055} +--- !u!114 &1714070061 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1714070055} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f8d7972c568b50940a54c7f599af66c5, type: 3} + m_Name: + m_EditorClassIdentifier: + _Language: English + mSource: {fileID: 1364070359} +--- !u!1 &1797551106 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 1797551111} + - 20: {fileID: 1797551110} + - 124: {fileID: 1797551108} + - 81: {fileID: 1797551107} + 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 &1797551107 +AudioListener: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1797551106} + m_Enabled: 1 +--- !u!124 &1797551108 +Behaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1797551106} + m_Enabled: 1 +--- !u!20 &1797551110 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1797551106} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + 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: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 + m_StereoMirrorMode: 0 +--- !u!4 &1797551111 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1797551106} + 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_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 +--- !u!1 &1912490372 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 1912490376} + - 114: {fileID: 1912490375} + - 114: {fileID: 1912490374} + - 114: {fileID: 1912490373} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1912490373 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1912490372} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1997211142, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ForceModuleActive: 0 +--- !u!114 &1912490374 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1912490372} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1077351063, guid: f5f67c52d1564df4a8936ccd202a3bd8, 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 &1912490375 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1912490372} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -619905303, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!4 &1912490376 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1912490372} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 5 +--- !u!1 &1962922073 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 224: {fileID: 1962922074} + - 222: {fileID: 1962922078} + - 114: {fileID: 1962922077} + - 114: {fileID: 1962922076} + - 114: {fileID: 1962922075} + - 114: {fileID: 1962922079} + m_Layer: 0 + m_Name: French + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1962922074 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1962922073} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 1045395102} + m_RootOrder: 3 + m_AnchorMin: {x: 0.6857677, y: 0.13830356} + m_AnchorMax: {x: 0.79202384, y: 0.27205357} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1962922075 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1962922073} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1573420865, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_EffectColor: {r: 0, g: 0, b: 0, a: 1} + m_EffectDistance: {x: 3, y: -3} + m_UseGraphicAlpha: 1 +--- !u!114 &1962922076 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1962922073} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, 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.5019608, g: 0.5019608, b: 0.5019608, a: 0.5019608} + m_HighlightedColor: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 0.69803923} + m_PressedColor: {r: 0.34509805, g: 0.34509805, b: 0.34509805, a: 0.69803923} + m_DisabledColor: {r: 0.2509804, g: 0.2509804, b: 0.2509804, a: 0.5019608} + m_ColorMultiplier: 2 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1962922077} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1962922079} + m_MethodName: ApplyLanguage + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: French + m_BoolArgument: 0 + m_CallState: 1 + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &1962922077 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1962922073} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, 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_Texture: {fileID: 2800000, guid: fdd6d36bfa4c41c4f988be3be486b5f8, type: 3} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &1962922078 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1962922073} +--- !u!114 &1962922079 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1962922073} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f8d7972c568b50940a54c7f599af66c5, type: 3} + m_Name: + m_EditorClassIdentifier: + _Language: French + mSource: {fileID: 1364070359} +--- !u!1 &2062717368 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 224: {fileID: 2062717369} + - 222: {fileID: 2062717373} + - 114: {fileID: 2062717372} + - 114: {fileID: 2062717371} + - 114: {fileID: 2062717370} + m_Layer: 5 + m_Name: Text with Local Parameters + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2062717369 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2062717368} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 1277673355} + m_RootOrder: 2 + m_AnchorMin: {x: 0.005109489, y: 0.56125} + m_AnchorMax: {x: 1.0007299, y: 0.62875} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2062717370 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2062717368} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c9586cfd190ca384a8dd72aa92c86152, type: 3} + m_Name: + m_EditorClassIdentifier: + _Params: + - Name: WINNER + Value: Frank + - Name: NUM PLAYERS + Value: 3 + _AutoRegister: 0 +--- !u!114 &2062717371 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2062717368} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 344445a89b4f74a0e9a0a766903df87e, type: 3} + m_Name: + m_EditorClassIdentifier: + mTerm: LocalParams Text + mTermSecondary: + PrimaryTermModifier: 0 + SecondaryTermModifier: 0 + TermPrefix: + TermSuffix: + LocalizeOnAwake: 1 + Source: {fileID: 1364070359} + IgnoreRTL: 0 + MaxCharactersInRTL: 0 + IgnoreNumbersInRTL: 1 + CorrectAlignmentForRTL: 1 + AddSpacesToJoinedLanguages: 0 + TranslatedObjects: [] + LocalizeEvent: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine, Version=0.0.0.0, Culture=neutral, + PublicKeyToken=null + AlwaysForceLocalize: 1 + LocalizeCallBack: + Target: {fileID: 0} + MethodName: OnModifyLocalization + mGUI_ShowReferences: 0 + mGUI_ShowTems: 1 + mGUI_ShowCallback: 1 + mLocalizeTarget: {fileID: 2121009178} + mLocalizeTargetName: I2.Loc.LocalizeTarget_UnityUI_Text +--- !u!114 &2062717372 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2062717368} + 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: 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 25 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 1 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: '{[WINNER]} is the first of {[NUM PLAYERS]} players.' +--- !u!222 &2062717373 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2062717368} +--- !u!114 &2121009178 +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: 332e36893e7cf4a49b3c1f72f76cd5e1, type: 3} + m_Name: + m_EditorClassIdentifier: + mTarget: {fileID: 2062717372} +--- !u!1 &2121495946 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 224: {fileID: 2121495947} + - 222: {fileID: 2121495951} + - 114: {fileID: 2121495950} + - 114: {fileID: 2121495949} + - 114: {fileID: 2121495948} + m_Layer: 5 + m_Name: Text with Callback + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2121495947 +RectTransform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2121495946} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 1277673355} + m_RootOrder: 1 + m_AnchorMin: {x: 0.005109489, y: 0.73125} + m_AnchorMax: {x: 1.0007299, y: 0.79875} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2121495948 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2121495946} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fc44345ca9310574fa50c645e6a7254f, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &2121495949 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2121495946} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 344445a89b4f74a0e9a0a766903df87e, type: 3} + m_Name: + m_EditorClassIdentifier: + mTerm: Callback Text + mTermSecondary: + PrimaryTermModifier: 0 + SecondaryTermModifier: 0 + TermPrefix: + TermSuffix: + LocalizeOnAwake: 1 + Source: {fileID: 1364070359} + IgnoreRTL: 0 + MaxCharactersInRTL: 0 + IgnoreNumbersInRTL: 1 + CorrectAlignmentForRTL: 1 + AddSpacesToJoinedLanguages: 0 + TranslatedObjects: [] + LocalizeEvent: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 2121495948} + m_MethodName: OnModifyLocalization + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine, Version=0.0.0.0, Culture=neutral, + PublicKeyToken=null + AlwaysForceLocalize: 1 + LocalizeCallBack: + Target: {fileID: 0} + MethodName: + mGUI_ShowReferences: 0 + mGUI_ShowTems: 1 + mGUI_ShowCallback: 0 + mLocalizeTarget: {fileID: 2140075592} + mLocalizeTargetName: I2.Loc.LocalizeTarget_UnityUI_Text +--- !u!114 &2121495950 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2121495946} + 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: 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 25 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 1 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: The winner is the {PLAYER_COLOR} player +--- !u!222 &2121495951 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2121495946} +--- !u!114 &2140075592 +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: 332e36893e7cf4a49b3c1f72f76cd5e1, type: 3} + m_Name: + m_EditorClassIdentifier: + mTarget: {fileID: 2121495950} diff --git a/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization features Callbacks and Parameters.unity.meta b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization features Callbacks and Parameters.unity.meta new file mode 100644 index 00000000..08a6c1aa --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization features Callbacks and Parameters.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f6a59dc271eb27c4b888619b11923a66 +timeCreated: 1468127705 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization features LocalizedString.unity b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization features LocalizedString.unity new file mode 100644 index 00000000..4ac934e7 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization features LocalizedString.unity @@ -0,0 +1,1376 @@ +%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: -431602080, g: -431602080, b: -431602080, a: -431602080} + m_AmbientEquatorColor: {r: -431602080, g: -431602080, b: -431602080, a: -431602080} + m_AmbientGroundColor: {r: -431602080, g: -431602080, b: -431602080, a: -431602080} + 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: 10 + m_Resolution: 1 + m_BakeResolution: 1 + m_AtlasSize: 1024 + m_AO: 1 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 0 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringMode: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + 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 &212256506 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 212256507} + - component: {fileID: 212256509} + - component: {fileID: 212256508} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &212256507 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 212256506} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1102590965} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.1652763} + m_AnchorMax: {x: 1, y: 0.8787974} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &212256508 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 212256506} + 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: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 1 + 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: Spanish +--- !u!222 &212256509 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 212256506} + m_CullTransparentMesh: 0 +--- !u!1 &486188279 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 486188280} + - component: {fileID: 486188284} + - component: {fileID: 486188283} + - component: {fileID: 486188282} + - component: {fileID: 486188281} + m_Layer: 5 + m_Name: Button English + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &486188280 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 486188279} + m_LocalRotation: {x: 0, 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: 1297731049} + m_Father: {fileID: 1751589546} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.07642616, y: 0.20877483} + m_AnchorMax: {x: 0.35873947, y: 0.31} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &486188281 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 486188279} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1cbcdd875c93e1e4fb87f997228fbd7a, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &486188282 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 486188279} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 486188283} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 486188281} + m_MethodName: SetLanguage + m_Mode: 5 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: English + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 653692970} + m_MethodName: Start + 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 &486188283 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 486188279} + 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_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 +--- !u!222 &486188284 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 486188279} + m_CullTransparentMesh: 0 +--- !u!1 &605339273 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 605339275} + - component: {fileID: 605339274} + m_Layer: 0 + m_Name: Global Parameters + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &605339274 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 605339273} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c9586cfd190ca384a8dd72aa92c86152, type: 3} + m_Name: + m_EditorClassIdentifier: + _Params: + - Name: VALUE + Value: Frank Puig + - Name: VALUE2 + Value: 123 + _IsGlobalManager: 1 +--- !u!4 &605339275 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 605339273} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 344, y: 220.5, 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 &642855044 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 642855045} + - component: {fileID: 642855047} + - component: {fileID: 642855046} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &642855045 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 642855044} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1751589546} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.0771561, y: 0.4414884} + m_AnchorMax: {x: 0.94747895, y: 0.84725} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &642855046 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 642855044} + 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: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 31 + m_FontStyle: 0 + m_BestFit: 1 + 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: 'This is an example of how to use the LocalizeString class to access Translations. + + + Clicking the buttons will show the translations of the selected term in the console + + + Check the console to see the results of the script after pressing the language + buttons' +--- !u!222 &642855047 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 642855044} + m_CullTransparentMesh: 0 +--- !u!1 &653692969 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 653692971} + - component: {fileID: 653692970} + m_Layer: 5 + m_Name: LocalizedString <-- Check this script + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &653692970 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 653692969} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 60b32d3b3e0ad124aa1fed397539a9ad, type: 3} + m_Name: + m_EditorClassIdentifier: + _MyLocalizedString: + mTerm: Term1 + mRTL_IgnoreArabicFix: 0 + mRTL_MaxLineLength: 0 + mRTL_ConvertNumbers: 0 + m_DontLocalizeParameters: 0 + _NormalString: Term1 + _StringWithTermPopup: Term1 +--- !u!224 &653692971 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 653692969} + m_LocalRotation: {x: -0, y: -0, z: -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.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 520, y: 226.5} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &674536240 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 674536243} + - component: {fileID: 674536242} + - component: {fileID: 674536241} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &674536241 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 674536240} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1077351063, guid: f5f67c52d1564df4a8936ccd202a3bd8, 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 &674536242 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 674536240} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -619905303, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!4 &674536243 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 674536240} + m_LocalRotation: {x: 0, y: 0, z: 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 &1102590964 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1102590965} + - component: {fileID: 1102590969} + - component: {fileID: 1102590968} + - component: {fileID: 1102590967} + - component: {fileID: 1102590966} + m_Layer: 5 + m_Name: Button Spanish + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1102590965 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1102590964} + m_LocalRotation: {x: -0, 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: 212256507} + m_Father: {fileID: 1751589546} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.37086275, y: 0.20627482} + m_AnchorMax: {x: 0.6516788, y: 0.3075} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1102590966 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1102590964} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1cbcdd875c93e1e4fb87f997228fbd7a, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &1102590967 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1102590964} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1102590968} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1102590966} + m_MethodName: SetLanguage + m_Mode: 5 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: Spanish + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 653692970} + m_MethodName: Start + 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 &1102590968 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1102590964} + 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_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 +--- !u!222 &1102590969 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1102590964} + m_CullTransparentMesh: 0 +--- !u!1 &1191223536 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1191223537} + - component: {fileID: 1191223539} + - component: {fileID: 1191223538} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1191223537 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1191223536} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1872411005} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.1652763} + m_AnchorMax: {x: 1, y: 0.8787974} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1191223538 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1191223536} + 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: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 1 + 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: Arabic +--- !u!222 &1191223539 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1191223536} + m_CullTransparentMesh: 0 +--- !u!1 &1297731048 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1297731049} + - component: {fileID: 1297731051} + - component: {fileID: 1297731050} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1297731049 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1297731048} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 486188280} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.1652763} + m_AnchorMax: {x: 1, y: 0.8787974} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1297731050 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1297731048} + 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: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 1 + 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: English +--- !u!222 &1297731051 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1297731048} + m_CullTransparentMesh: 0 +--- !u!1 &1364070357 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1364070358} + - component: {fileID: 1364070359} + m_Layer: 0 + m_Name: LanguageSource + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1364070358 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1364070357} + m_LocalRotation: {x: 0, y: 0, z: 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} +--- !u!114 &1364070359 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1364070357} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 488051eaa73ba421e8fe4868f2e0f364, type: 3} + m_Name: + m_EditorClassIdentifier: + mSource: + UserAgreesToHaveItOnTheScene: 0 + UserAgreesToHaveItInsideThePluginsFolder: 0 + GoogleLiveSyncIsUptoDate: 1 + mTerms: + - Term: Term1 + TermType: 0 + Description: + Languages: + - Translation in English + - "La traducci\xF3n en espa\xF1ol" + - "\u062A\u0631\u062C\u0645\u0629 \u0628\u0627\u0644\u0644\u063A\u0629 \u0627\u0644\u0625\u0646\u062C\u0644\u064A\u0632\u064A\u0629" + Flags: 000000 + Languages_Touch: [] + - Term: Term2 + TermType: 0 + Description: + Languages: + - Another translation + - "Otra traducci\xF3n" + - "\u062A\u0631\u062C\u0645\u0629 \u0623\u062E\u0631\u0649" + Flags: 000000 + Languages_Touch: [] + - Term: Term3 + TermType: 0 + Description: + Languages: + - This is an example with numbers like 1, 2, 3 and tags [color=#ffffff] like + this one [/color] and parameters like {[VALUE]} and {[VALUE2]}. + - "Este es un ejemplo con n\xFAmeros como 1, 2, 3 y etiquetas [color=#ffffff] + como \xE9sta [/color] y par\xE1metros como {[VALUE]} y {[VALUE2]}." + - "\u0647\u0630\u0627 \u0647\u0648 \u0645\u062B\u0627\u0644 \u0645\u0639 \u0623\u0631\u0642\u0627\u0645 + \u0645\u062B\u0644 1\u060C 2\u060C 3 \u0648\u0627\u0644\u0639\u0644\u0627\u0645\u0627\u062A + [color=#ffffff] \u0645\u062B\u0644 \u0647\u0630\u0627 \u0648\u0627\u062D\u062F + [/color] \u0648\u0627\u0644\u0645\u0639\u0644\u0645\u0627\u062A \u0645\u062B\u0644 + {[VALUE]} \u0648 {[VALUE2]}." + Flags: 000000 + Languages_Touch: [] + CaseInsensitiveTerms: 0 + OnMissingTranslation: 1 + mTerm_AppName: + mLanguages: + - Name: English + Code: en-US + Flags: 0 + - Name: Spanish + Code: es + Flags: 0 + - Name: Arabic + Code: ar + Flags: 0 + IgnoreDeviceLanguage: 0 + _AllowUnloadingLanguages: 0 + Google_WebServiceURL: + Google_SpreadsheetKey: teVYmvqeNTF8ZkQhQ21a0Gw + Google_SpreadsheetName: + Google_LastUpdatedVersion: + Google_Password: change_this + GoogleUpdateFrequency: 3 + GoogleInEditorCheckFrequency: 2 + GoogleUpdateSynchronization: 1 + GoogleUpdateDelay: 5 + Assets: + - {fileID: 12800000, guid: 769d4a2288b99004184236f5fc4469c8, type: 3} + Spreadsheet_LocalFileName: + Spreadsheet_LocalCSVSeparator: ',' + Spreadsheet_LocalCSVEncoding: utf-8 + Spreadsheet_SpecializationAsRows: 1 + version: 1 + NeverDestroy: 0 + UserAgreesToHaveItOnTheScene: 0 + UserAgreesToHaveItInsideThePluginsFolder: 0 + GoogleLiveSyncIsUptoDate: 1 + Assets: [] + Google_WebServiceURL: + Google_SpreadsheetKey: teVYmvqeNTF8ZkQhQ21a0Gw + Google_SpreadsheetName: + Google_LastUpdatedVersion: + GoogleUpdateFrequency: 3 + GoogleUpdateDelay: 5 + mLanguages: [] + IgnoreDeviceLanguage: 0 + _AllowUnloadingLanguages: 0 + mTerms: [] + CaseInsensitiveTerms: 0 + OnMissingTranslation: 1 + mTerm_AppName: + Spreadsheet_LocalFileName: C:/Data/Frank/Unity Projects/Unity Plugins/Localization.csv + Spreadsheet_LocalCSVSeparator: ',' + Spreadsheet_LocalCSVEncoding: Unicode (UTF-8) + Spreadsheet_SpecializationAsRows: 1 + Google_Password: change_this + GoogleInEditorCheckFrequency: 2 +--- !u!1 &1751589542 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1751589546} + - component: {fileID: 1751589545} + - component: {fileID: 1751589544} + - component: {fileID: 1751589543} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1751589543 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1751589542} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &1751589544 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1751589542} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f5f67c52d1564df4a8936ccd202a3bd8, 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 &1751589545 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1751589542} + 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 &1751589546 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1751589542} + 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: 642855045} + - {fileID: 486188280} + - {fileID: 1102590965} + - {fileID: 1872411005} + m_Father: {fileID: 0} + 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 &1797551106 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1797551111} + - component: {fileID: 1797551110} + - component: {fileID: 1797551108} + - component: {fileID: 1797551107} + m_Layer: 0 + m_Name: Main Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1797551107 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1797551106} + m_Enabled: 1 +--- !u!124 &1797551108 +Behaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1797551106} + m_Enabled: 1 +--- !u!20 &1797551110 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1797551106} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_projectionMatrixMode: 1 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_GateFitMode: 2 + 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: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1797551111 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1797551106} + 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: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1872411004 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1872411005} + - component: {fileID: 1872411009} + - component: {fileID: 1872411008} + - component: {fileID: 1872411007} + - component: {fileID: 1872411006} + m_Layer: 5 + m_Name: Button Arabic + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1872411005 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1872411004} + m_LocalRotation: {x: 0, 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: 1191223537} + m_Father: {fileID: 1751589546} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.68195397, y: 0.2062086} + m_AnchorMax: {x: 0.96426725, y: 0.3075} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1872411006 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1872411004} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1cbcdd875c93e1e4fb87f997228fbd7a, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &1872411007 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1872411004} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1872411008} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1872411006} + m_MethodName: SetLanguage + m_Mode: 5 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: Arabic + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 653692970} + m_MethodName: Start + 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 &1872411008 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1872411004} + 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_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 +--- !u!222 &1872411009 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1872411004} + m_CullTransparentMesh: 0 diff --git a/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization features LocalizedString.unity.meta b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization features LocalizedString.unity.meta new file mode 100644 index 00000000..4196e2dd --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization features LocalizedString.unity.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: 4d999b05c44207e49ad70ed30077eb9a +DefaultImporter: + userData: diff --git a/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization features Plurals.unity b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization features Plurals.unity new file mode 100644 index 00000000..e1d8f68e --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization features Plurals.unity @@ -0,0 +1,1638 @@ +%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: -431602080, g: -431602080, b: -431602080, a: -431602080} + m_AmbientEquatorColor: {r: -431602080, g: -431602080, b: -431602080, a: -431602080} + m_AmbientGroundColor: {r: -431602080, g: -431602080, b: -431602080, a: -431602080} + 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: 10 + m_Resolution: 1 + m_BakeResolution: 1 + m_AtlasSize: 1024 + m_AO: 1 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 0 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringMode: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + 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 &255260278 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 255260279} + - component: {fileID: 255260282} + - component: {fileID: 255260281} + - component: {fileID: 255260280} + - component: {fileID: 255260283} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &255260279 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 255260278} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1277673355} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.16584158, y: 0.29285845} + m_AnchorMax: {x: 0.8341584, y: 0.4183313} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &255260280 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 255260278} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 344445a89b4f74a0e9a0a766903df87e, type: 3} + m_Name: + m_EditorClassIdentifier: + mTerm: Plural Example1 + mTermSecondary: + PrimaryTermModifier: 0 + SecondaryTermModifier: 0 + TermPrefix: + TermSuffix: + LocalizeOnAwake: 1 + IgnoreRTL: 0 + MaxCharactersInRTL: 0 + IgnoreNumbersInRTL: 0 + CorrectAlignmentForRTL: 1 + AddSpacesToJoinedLanguages: 0 + AllowLocalizedParameters: 1 + TranslatedObjects: [] + LocalizeEvent: + m_PersistentCalls: + m_Calls: [] + AlwaysForceLocalize: 0 + LocalizeCallBack: + Target: {fileID: 0} + MethodName: + mGUI_ShowReferences: 0 + mGUI_ShowTems: 1 + mGUI_ShowCallback: 0 + mLocalizeTarget: {fileID: 460679103} + mLocalizeTargetName: I2.Loc.LocalizeTarget_UnityUI_Text +--- !u!114 &255260281 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 255260278} + 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: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 25 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 1 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: You have {[VALUE]} points +--- !u!222 &255260282 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 255260278} + m_CullTransparentMesh: 0 +--- !u!114 &255260283 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 255260278} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c9586cfd190ca384a8dd72aa92c86152, type: 3} + m_Name: + m_EditorClassIdentifier: + _Params: + - Name: VALUE + Value: 4 + _IsGlobalManager: 0 +--- !u!114 &271473799 +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: 332e36893e7cf4a49b3c1f72f76cd5e1, type: 3} + m_Name: + m_EditorClassIdentifier: + mTarget: {fileID: 2139607924} +--- !u!1 &348688339 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 348688340} + - component: {fileID: 348688342} + - component: {fileID: 348688341} + m_Layer: 0 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &348688340 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 348688339} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 353506514} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.06374711, y: 0.21663244} + m_AnchorMax: {x: 0.928158, y: 0.8449692} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &348688341 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 348688339} + 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: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 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: 1 + 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: Russian +--- !u!222 &348688342 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 348688339} + m_CullTransparentMesh: 0 +--- !u!1 &353506513 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 353506514} + - component: {fileID: 353506518} + - component: {fileID: 353506517} + - component: {fileID: 353506516} + - component: {fileID: 353506515} + m_Layer: 0 + m_Name: Button Russian + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &353506514 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 353506513} + m_LocalRotation: {x: -0, 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: 348688340} + m_Father: {fileID: 1045395102} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.6828147, y: 0.3082175} + m_AnchorMax: {x: 0.8560615, y: 0.74363965} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &353506515 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 353506513} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f8d7972c568b50940a54c7f599af66c5, type: 3} + m_Name: + m_EditorClassIdentifier: + _Language: Russian + mSource: {fileID: 1364070359} +--- !u!114 &353506516 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 353506513} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 353506517} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 353506515} + m_MethodName: ApplyLanguage + 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 &353506517 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 353506513} + 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_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 +--- !u!222 &353506518 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 353506513} + m_CullTransparentMesh: 0 +--- !u!114 &460679103 +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: 332e36893e7cf4a49b3c1f72f76cd5e1, type: 3} + m_Name: + m_EditorClassIdentifier: + mTarget: {fileID: 255260281} +--- !u!1 &722395052 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 722395055} + - component: {fileID: 722395054} + - component: {fileID: 722395053} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &722395053 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 722395052} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!223 &722395054 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 722395052} + 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 &722395055 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 722395052} + 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: 1045395102} + - {fileID: 1277673355} + 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 &1045395101 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1045395102} + m_Layer: 0 + m_Name: Buttons + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1045395102 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1045395101} + m_LocalRotation: {x: -0, 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: 1405865223} + - {fileID: 1571160601} + - {fileID: 353506514} + m_Father: {fileID: 722395055} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.1519174, y: 0.15370862} + m_AnchorMax: {x: 0.85791546, y: 0.36121413} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1115346775 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1115346776} + - component: {fileID: 1115346779} + - component: {fileID: 1115346778} + - component: {fileID: 1115346777} + - component: {fileID: 1115346780} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1115346776 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1115346775} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1277673355} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.16584158, y: 0.6284426} + m_AnchorMax: {x: 0.8341584, y: 0.7540639} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1115346777 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1115346775} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 344445a89b4f74a0e9a0a766903df87e, type: 3} + m_Name: + m_EditorClassIdentifier: + mTerm: Plural Example1 + mTermSecondary: + PrimaryTermModifier: 0 + SecondaryTermModifier: 0 + TermPrefix: + TermSuffix: + LocalizeOnAwake: 1 + IgnoreRTL: 0 + MaxCharactersInRTL: 0 + IgnoreNumbersInRTL: 0 + CorrectAlignmentForRTL: 1 + AddSpacesToJoinedLanguages: 0 + AllowLocalizedParameters: 1 + TranslatedObjects: [] + LocalizeEvent: + m_PersistentCalls: + m_Calls: [] + AlwaysForceLocalize: 0 + LocalizeCallBack: + Target: {fileID: 0} + MethodName: + mGUI_ShowReferences: 0 + mGUI_ShowTems: 1 + mGUI_ShowCallback: 0 + mLocalizeTarget: {fileID: 1413017613} + mLocalizeTargetName: I2.Loc.LocalizeTarget_UnityUI_Text +--- !u!114 &1115346778 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1115346775} + 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: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 25 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 1 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: You have {[VALUE]} points +--- !u!222 &1115346779 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1115346775} + m_CullTransparentMesh: 0 +--- !u!114 &1115346780 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1115346775} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c9586cfd190ca384a8dd72aa92c86152, type: 3} + m_Name: + m_EditorClassIdentifier: + _Params: + - Name: VALUE + Value: 0 + _IsGlobalManager: 0 +--- !u!1 &1277673354 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1277673355} + m_Layer: 5 + m_Name: Localized Examples + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1277673355 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1277673354} + m_LocalRotation: {x: 0, 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: 1115346776} + - {fileID: 2139607922} + - {fileID: 255260279} + - {fileID: 1646706519} + m_Father: {fileID: 722395055} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.37527594} + 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 &1364070357 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1364070358} + - component: {fileID: 1364070359} + m_Layer: 0 + m_Name: LanguageSource + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1364070358 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1364070357} + m_LocalRotation: {x: 0, y: 0, z: 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} +--- !u!114 &1364070359 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1364070357} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 488051eaa73ba421e8fe4868f2e0f364, type: 3} + m_Name: + m_EditorClassIdentifier: + mSource: + UserAgreesToHaveItOnTheScene: 0 + UserAgreesToHaveItInsideThePluginsFolder: 0 + GoogleLiveSyncIsUptoDate: 1 + mTerms: + - Term: Plural Example1 + TermType: 0 + Description: + Languages: + - You have {[VALUE]} points[i2p_Zero]You have no points[i2p_One]You have 1 point + - "\u0423 \u0432\u0430\u0441 {[VALUE]} \u043E\u0447\u043A\u043E\u0432.[i2p_Zero]\u0423 + \u0432\u0430\u0441 \u043D\u0435\u0442 \u043E\u0447\u043A\u043E\u0432.[i2p_One]\u0423 + \u0432\u0430\u0441 \u0435\u0441\u0442\u044C {[VALUE]} \u043E\u0447\u043A\u043E.[i2p_Few]\u0423 + \u0432\u0430\u0441 {[VALUE]} \u0431\u0430\u043B\u043B\u0430." + Flags: 0000 + Languages_Touch: [] + CaseInsensitiveTerms: 0 + OnMissingTranslation: 1 + mTerm_AppName: + mLanguages: + - Name: English + Code: en-US + Flags: 0 + - Name: Russian + Code: ru + Flags: 0 + IgnoreDeviceLanguage: 0 + _AllowUnloadingLanguages: 0 + Google_WebServiceURL: + Google_SpreadsheetKey: teVYmvqeNTF8ZkQhQ21a0Gw + Google_SpreadsheetName: + Google_LastUpdatedVersion: + Google_Password: change_this + GoogleUpdateFrequency: 3 + GoogleInEditorCheckFrequency: 2 + GoogleUpdateSynchronization: 1 + GoogleUpdateDelay: 5 + Assets: + - {fileID: 12800000, guid: 769d4a2288b99004184236f5fc4469c8, type: 3} + Spreadsheet_LocalFileName: + Spreadsheet_LocalCSVSeparator: ',' + Spreadsheet_LocalCSVEncoding: utf-8 + Spreadsheet_SpecializationAsRows: 1 + version: 1 + NeverDestroy: 0 + UserAgreesToHaveItOnTheScene: 0 + UserAgreesToHaveItInsideThePluginsFolder: 0 + GoogleLiveSyncIsUptoDate: 1 + Assets: [] + Google_WebServiceURL: + Google_SpreadsheetKey: teVYmvqeNTF8ZkQhQ21a0Gw + Google_SpreadsheetName: + Google_LastUpdatedVersion: + GoogleUpdateFrequency: 3 + GoogleUpdateDelay: 5 + mLanguages: [] + IgnoreDeviceLanguage: 0 + _AllowUnloadingLanguages: 0 + mTerms: [] + CaseInsensitiveTerms: 0 + OnMissingTranslation: 1 + mTerm_AppName: + Spreadsheet_LocalFileName: C:/Data/Frank/Unity Projects/Unity Plugins/Localization.csv + Spreadsheet_LocalCSVSeparator: ',' + Spreadsheet_LocalCSVEncoding: utf-8 + Spreadsheet_SpecializationAsRows: 1 + Google_Password: change_this + GoogleInEditorCheckFrequency: 2 +--- !u!1 &1405865220 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1405865223} + - component: {fileID: 1405865222} + - component: {fileID: 1405865221} + m_Layer: 0 + m_Name: Windows + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1405865221 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1405865220} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.29044116, g: 0.5808823, b: 0.34051722, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Texture: {fileID: 2800000, guid: 8d412f782b72d2d49a240c947362048f, type: 3} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &1405865222 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1405865220} + m_CullTransparentMesh: 0 +--- !u!224 &1405865223 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1405865220} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1045395102} + 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 &1413017613 +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: 332e36893e7cf4a49b3c1f72f76cd5e1, type: 3} + m_Name: + m_EditorClassIdentifier: + mTarget: {fileID: 1115346778} +--- !u!114 &1563843695 +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: 332e36893e7cf4a49b3c1f72f76cd5e1, type: 3} + m_Name: + m_EditorClassIdentifier: + mTarget: {fileID: 1646706522} +--- !u!1 &1571160600 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1571160601} + - component: {fileID: 1571160605} + - component: {fileID: 1571160604} + - component: {fileID: 1571160603} + - component: {fileID: 1571160602} + m_Layer: 0 + m_Name: Button English + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1571160601 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1571160600} + m_LocalRotation: {x: 0, 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: 1656053494} + m_Father: {fileID: 1045395102} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.10912367, y: 0.30821753} + m_AnchorMax: {x: 0.28237045, y: 0.7436397} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1571160602 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1571160600} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f8d7972c568b50940a54c7f599af66c5, type: 3} + m_Name: + m_EditorClassIdentifier: + _Language: English + mSource: {fileID: 1364070359} +--- !u!114 &1571160603 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1571160600} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1571160604} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1571160602} + m_MethodName: ApplyLanguage + 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 &1571160604 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1571160600} + 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_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 +--- !u!222 &1571160605 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1571160600} + m_CullTransparentMesh: 0 +--- !u!1 &1646706518 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1646706519} + - component: {fileID: 1646706523} + - component: {fileID: 1646706522} + - component: {fileID: 1646706521} + - component: {fileID: 1646706520} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1646706519 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1646706518} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1277673355} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.16584158, y: 0.12952098} + m_AnchorMax: {x: 0.8341584, y: 0.25499383} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1646706520 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1646706518} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c9586cfd190ca384a8dd72aa92c86152, type: 3} + m_Name: + m_EditorClassIdentifier: + _Params: + - Name: VALUE + Value: 10 + _IsGlobalManager: 0 +--- !u!114 &1646706521 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1646706518} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 344445a89b4f74a0e9a0a766903df87e, type: 3} + m_Name: + m_EditorClassIdentifier: + mTerm: Plural Example1 + mTermSecondary: + PrimaryTermModifier: 0 + SecondaryTermModifier: 0 + TermPrefix: + TermSuffix: + LocalizeOnAwake: 1 + IgnoreRTL: 0 + MaxCharactersInRTL: 0 + IgnoreNumbersInRTL: 0 + CorrectAlignmentForRTL: 1 + AddSpacesToJoinedLanguages: 0 + AllowLocalizedParameters: 1 + TranslatedObjects: [] + LocalizeEvent: + m_PersistentCalls: + m_Calls: [] + AlwaysForceLocalize: 0 + LocalizeCallBack: + Target: {fileID: 0} + MethodName: + mGUI_ShowReferences: 0 + mGUI_ShowTems: 1 + mGUI_ShowCallback: 0 + mLocalizeTarget: {fileID: 1563843695} + mLocalizeTargetName: I2.Loc.LocalizeTarget_UnityUI_Text +--- !u!114 &1646706522 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1646706518} + 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: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 25 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 1 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: You have {[VALUE]} points +--- !u!222 &1646706523 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1646706518} + m_CullTransparentMesh: 0 +--- !u!1 &1656053493 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1656053494} + - component: {fileID: 1656053496} + - component: {fileID: 1656053495} + m_Layer: 0 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1656053494 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1656053493} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1571160601} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.06374711, y: 0.21663244} + m_AnchorMax: {x: 0.92006314, y: 0.8449692} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0.00000047683716, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1656053495 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1656053493} + 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: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 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: 1 + 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: English +--- !u!222 &1656053496 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1656053493} + m_CullTransparentMesh: 0 +--- !u!1 &1797551106 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1797551111} + - component: {fileID: 1797551110} + - component: {fileID: 1797551108} + - component: {fileID: 1797551107} + 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 &1797551107 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1797551106} + m_Enabled: 1 +--- !u!124 &1797551108 +Behaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1797551106} + m_Enabled: 1 +--- !u!20 &1797551110 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1797551106} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_projectionMatrixMode: 1 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_GateFitMode: 2 + 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: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1797551111 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1797551106} + 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!1 &1912490372 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1912490376} + - component: {fileID: 1912490375} + - component: {fileID: 1912490374} + - component: {fileID: 1912490373} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1912490373 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1912490372} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1997211142, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ForceModuleActive: 0 +--- !u!114 &1912490374 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1912490372} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1077351063, guid: f5f67c52d1564df4a8936ccd202a3bd8, 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 &1912490375 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1912490372} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -619905303, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!4 &1912490376 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1912490372} + m_LocalRotation: {x: 0, y: 0, z: 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 &2139607921 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2139607922} + - component: {fileID: 2139607925} + - component: {fileID: 2139607924} + - component: {fileID: 2139607923} + - component: {fileID: 2139607926} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2139607922 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2139607921} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1277673355} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.16584158, y: 0.4561959} + m_AnchorMax: {x: 0.8341584, y: 0.58166873} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2139607923 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2139607921} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 344445a89b4f74a0e9a0a766903df87e, type: 3} + m_Name: + m_EditorClassIdentifier: + mTerm: Plural Example1 + mTermSecondary: + PrimaryTermModifier: 0 + SecondaryTermModifier: 0 + TermPrefix: + TermSuffix: + LocalizeOnAwake: 1 + IgnoreRTL: 0 + MaxCharactersInRTL: 0 + IgnoreNumbersInRTL: 0 + CorrectAlignmentForRTL: 1 + AddSpacesToJoinedLanguages: 0 + AllowLocalizedParameters: 1 + TranslatedObjects: [] + LocalizeEvent: + m_PersistentCalls: + m_Calls: [] + AlwaysForceLocalize: 0 + LocalizeCallBack: + Target: {fileID: 0} + MethodName: + mGUI_ShowReferences: 0 + mGUI_ShowTems: 1 + mGUI_ShowCallback: 0 + mLocalizeTarget: {fileID: 271473799} + mLocalizeTargetName: I2.Loc.LocalizeTarget_UnityUI_Text +--- !u!114 &2139607924 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2139607921} + 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: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 25 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 1 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: You have {[VALUE]} points +--- !u!222 &2139607925 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2139607921} + m_CullTransparentMesh: 0 +--- !u!114 &2139607926 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2139607921} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c9586cfd190ca384a8dd72aa92c86152, type: 3} + m_Name: + m_EditorClassIdentifier: + _Params: + - Name: VALUE + Value: 1 + _IsGlobalManager: 0 diff --git a/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization features Plurals.unity.meta b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization features Plurals.unity.meta new file mode 100644 index 00000000..87b43bc0 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization features Plurals.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5fdd7b713bef81f418e2ff121bc4745d +timeCreated: 1508906910 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization features Realtime Translation.unity b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization features Realtime Translation.unity new file mode 100644 index 00000000..240a9544 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization features Realtime Translation.unity @@ -0,0 +1,248 @@ +%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: 10 + m_Resolution: 1 + m_BakeResolution: 50 + m_AtlasSize: 1024 + m_AO: 1 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 0 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringMode: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + 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 &1273751619 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1273751621} + - component: {fileID: 1273751620} + m_Layer: 0 + m_Name: Translation << Click Play >> + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1273751620 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1273751619} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c09397e14dc19fb4ab38f8216b0759a4, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &1273751621 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1273751619} + m_LocalRotation: {x: 0, y: 0, z: 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} +--- !u!1 &1962683259 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1962683264} + - component: {fileID: 1962683263} + - component: {fileID: 1962683261} + - component: {fileID: 1962683260} + 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 &1962683260 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1962683259} + m_Enabled: 1 +--- !u!124 &1962683261 +Behaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1962683259} + m_Enabled: 1 +--- !u!20 &1962683263 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1962683259} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_projectionMatrixMode: 1 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_GateFitMode: 2 + 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: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1962683264 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1962683259} + 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} diff --git a/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization features Realtime Translation.unity.meta b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization features Realtime Translation.unity.meta new file mode 100644 index 00000000..171628d7 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization features Realtime Translation.unity.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: c79e8762cdeadd24ab3a1e27a98874c3 +DefaultImporter: + userData: diff --git a/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization features RightToLeft Text Rendering.unity b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization features RightToLeft Text Rendering.unity new file mode 100644 index 00000000..1ed22893 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization features RightToLeft Text Rendering.unity @@ -0,0 +1,1847 @@ +%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: -431602080, g: -431602080, b: -431602080, a: -431602080} + m_AmbientEquatorColor: {r: -431602080, g: -431602080, b: -431602080, a: -431602080} + m_AmbientGroundColor: {r: -431602080, g: -431602080, b: -431602080, a: -431602080} + 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: 10 + m_Resolution: 1 + m_BakeResolution: 1 + m_AtlasSize: 1024 + m_AO: 1 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 0 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringMode: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + 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!114 &31636047 +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: 332e36893e7cf4a49b3c1f72f76cd5e1, type: 3} + m_Name: + m_EditorClassIdentifier: + mTarget: {fileID: 1506865250} +--- !u!1 &75209577 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 75209580} + - component: {fileID: 75209579} + - component: {fileID: 75209578} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &75209578 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 75209577} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1077351063, guid: f5f67c52d1564df4a8936ccd202a3bd8, 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 &75209579 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 75209577} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -619905303, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!4 &75209580 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 75209577} + m_LocalRotation: {x: 0, y: 0, z: 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} +--- !u!1 &311464223 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 311464224} + - component: {fileID: 311464226} + - component: {fileID: 311464225} + m_Layer: 5 + m_Name: WrongLineWrap Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &311464224 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 311464223} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 805394856} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.677305, y: 0.24107143} + m_AnchorMax: {x: 0.9787234, y: 0.4955357} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &311464225 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 311464223} + 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: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 20 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 40 + m_Alignment: 2 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: ".\uFEBA\uFEE8\uFEDF\u0627 \uFEDE\uFECC\uFE9F \uFE84\uFEC4\uFEA8\uFEDF\u0627\u0648 + \u0628\u0627\uFEEE\uFEBC\uFEDF\u0627 \uFEA2\uFEBF\uFEEE\uFEF3 \u0644\uFE8E\uFE9C\uFEE3 + \uFEBA\uFEE7 \uFEEE\uFEEB \u0627\uFEAC\uFEEB" +--- !u!222 &311464226 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 311464223} + m_CullTransparentMesh: 0 +--- !u!1 &528937037 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 528937038} + m_Layer: 5 + m_Name: Titles + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &528937038 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 528937037} + m_LocalRotation: {x: 0, 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: 1601102845} + - {fileID: 1801269861} + - {fileID: 680269090} + - {fileID: 1296757691} + m_Father: {fileID: 805394856} + 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: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &574518342 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 574518344} + - component: {fileID: 574518343} + 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 &574518343 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 574518342} + m_Enabled: 1 + serializedVersion: 8 + m_Type: 1 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + 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_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_Lightmapping: 1 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &574518344 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 574518342} + m_LocalRotation: {x: 0.40821794, y: -0.23456973, z: 0.10938166, w: 0.8754261} + m_LocalPosition: {x: -2.589727, y: -5.6618614, z: 6.31061} + 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 &680269089 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 680269090} + - component: {fileID: 680269092} + - component: {fileID: 680269091} + m_Layer: 5 + m_Name: RightLineWrap Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &680269090 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 680269089} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 528937038} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.677305, y: 0.8738839} + m_AnchorMax: {x: 0.9787234, y: 0.9296875} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &680269091 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 680269089} + 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: 0.5147059, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 16 + 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: 'Correct Line Wrap:' +--- !u!222 &680269092 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 680269089} + m_CullTransparentMesh: 0 +--- !u!1 &700952811 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 700952812} + - component: {fileID: 700952815} + - component: {fileID: 700952814} + - component: {fileID: 700952813} + m_Layer: 5 + m_Name: RightLineWrap Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &700952812 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 700952811} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 805394856} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.677305, y: 0.6183036} + m_AnchorMax: {x: 0.9787234, y: 0.87276787} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &700952813 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 700952811} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 344445a89b4f74a0e9a0a766903df87e, type: 3} + m_Name: + m_EditorClassIdentifier: + mTerm: Text Example + mTermSecondary: + PrimaryTermModifier: 0 + SecondaryTermModifier: 0 + TermPrefix: + TermSuffix: + LocalizeOnAwake: 1 + IgnoreRTL: 0 + MaxCharactersInRTL: 20 + IgnoreNumbersInRTL: 1 + CorrectAlignmentForRTL: 1 + AddSpacesToJoinedLanguages: 0 + AllowLocalizedParameters: 1 + TranslatedObjects: [] + LocalizeEvent: + m_PersistentCalls: + m_Calls: [] + AlwaysForceLocalize: 0 + LocalizeCallBack: + Target: {fileID: 0} + MethodName: + mGUI_ShowReferences: 0 + mGUI_ShowTems: 1 + mGUI_ShowCallback: 0 + mLocalizeTarget: {fileID: 893795303} + mLocalizeTargetName: I2.Loc.LocalizeTarget_UnityUI_Text +--- !u!114 &700952814 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 700952811} + 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: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 20 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 40 + m_Alignment: 2 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: "\u0644\uFE8E\uFE9C\uFEE3 \uFEBA\uFEE7 \uFEEE\uFEEB \u0627\uFEAC\uFEEB\r\n\uFE84\uFEC4\uFEA8\uFEDF\u0627\u0648 + \u0628\u0627\uFEEE\uFEBC\uFEDF\u0627 \uFEA2\uFEBF\uFEEE\uFEF3\r\n.\uFEBA\uFEE8\uFEDF\u0627 + \uFEDE\uFECC\uFE9F" +--- !u!222 &700952815 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 700952811} + m_CullTransparentMesh: 0 +--- !u!114 &732550129 +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: 332e36893e7cf4a49b3c1f72f76cd5e1, type: 3} + m_Name: + m_EditorClassIdentifier: + mTarget: {fileID: 1506865250} +--- !u!1 &805394852 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 805394856} + - component: {fileID: 805394855} + - component: {fileID: 805394854} + - component: {fileID: 805394853} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &805394853 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 805394852} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &805394854 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 805394852} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f5f67c52d1564df4a8936ccd202a3bd8, 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 &805394855 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 805394852} + 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 &805394856 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 805394852} + 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: 1654165532} + - {fileID: 1176328331} + - {fileID: 1506865247} + - {fileID: 700952812} + - {fileID: 311464224} + - {fileID: 528937038} + 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 &881740141 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 881740142} + - component: {fileID: 881740147} + - component: {fileID: 881740146} + - component: {fileID: 881740145} + - component: {fileID: 881740144} + - component: {fileID: 881740143} + m_Layer: 0 + m_Name: English + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &881740142 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 881740141} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1654165532} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.62817025, y: 0.050781254} + m_AnchorMax: {x: 0.7389869, y: 0.1733259} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0.00000047683716, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &881740143 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 881740141} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f8d7972c568b50940a54c7f599af66c5, type: 3} + m_Name: + m_EditorClassIdentifier: + _Language: English + mSource: {fileID: 1364070359} +--- !u!114 &881740144 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 881740141} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1573420865, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_EffectColor: {r: 0, g: 0, b: 0, a: 1} + m_EffectDistance: {x: 3, y: -3} + m_UseGraphicAlpha: 1 +--- !u!114 &881740145 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 881740141} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, 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.5019608, g: 0.5019608, b: 0.5019608, a: 0.5019608} + m_HighlightedColor: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 0.69803923} + m_PressedColor: {r: 0.34509805, g: 0.34509805, b: 0.34509805, a: 0.69803923} + m_DisabledColor: {r: 0.2509804, g: 0.2509804, b: 0.2509804, a: 0.5019608} + m_ColorMultiplier: 2 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 881740146} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 881740143} + m_MethodName: ApplyLanguage + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: English + m_BoolArgument: 0 + m_CallState: 1 +--- !u!114 &881740146 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 881740141} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, 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_Texture: {fileID: 2800000, guid: 8f7115ef5a3ecfd42935c3ff54434ae8, type: 3} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &881740147 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 881740141} + m_CullTransparentMesh: 0 +--- !u!114 &893795303 +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: 332e36893e7cf4a49b3c1f72f76cd5e1, type: 3} + m_Name: + m_EditorClassIdentifier: + mTarget: {fileID: 700952814} +--- !u!1 &1176328330 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1176328331} + - component: {fileID: 1176328334} + - component: {fileID: 1176328333} + - component: {fileID: 1176328332} + m_Layer: 5 + m_Name: Right Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1176328331 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1176328330} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 805394856} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.040780142, y: 0.6183036} + m_AnchorMax: {x: 0.46631205, y: 0.87276787} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1176328332 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1176328330} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 344445a89b4f74a0e9a0a766903df87e, type: 3} + m_Name: + m_EditorClassIdentifier: + mTerm: Text Example + mTermSecondary: + PrimaryTermModifier: 0 + SecondaryTermModifier: 0 + TermPrefix: + TermSuffix: + LocalizeOnAwake: 1 + IgnoreRTL: 0 + MaxCharactersInRTL: 0 + IgnoreNumbersInRTL: 1 + CorrectAlignmentForRTL: 1 + AddSpacesToJoinedLanguages: 0 + AllowLocalizedParameters: 1 + TranslatedObjects: [] + LocalizeEvent: + m_PersistentCalls: + m_Calls: [] + AlwaysForceLocalize: 0 + LocalizeCallBack: + Target: {fileID: 0} + MethodName: + mGUI_ShowReferences: 0 + mGUI_ShowTems: 1 + mGUI_ShowCallback: 0 + mLocalizeTarget: {fileID: 1871480941} + mLocalizeTargetName: I2.Loc.LocalizeTarget_UnityUI_Text +--- !u!114 &1176328333 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1176328330} + 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: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 20 + 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: ".\uFEBA\uFEE8\uFEDF\u0627 \uFEDE\uFECC\uFE9F \uFE84\uFEC4\uFEA8\uFEDF\u0627\u0648 + \u0628\u0627\uFEEE\uFEBC\uFEDF\u0627 \uFEA2\uFEBF\uFEEE\uFEF3 \u0644\uFE8E\uFE9C\uFEE3 + \uFEBA\uFEE7 \uFEEE\uFEEB \u0627\uFEAC\uFEEB" +--- !u!222 &1176328334 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1176328330} + m_CullTransparentMesh: 0 +--- !u!1 &1296757690 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1296757691} + - component: {fileID: 1296757693} + - component: {fileID: 1296757692} + m_Layer: 5 + m_Name: WrongLineWrap Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1296757691 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1296757690} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 528937038} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.677305, y: 0.4966518} + m_AnchorMax: {x: 0.9787234, y: 0.55245537} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1296757692 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1296757690} + 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: 0.5147059, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 16 + 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: 'Wrong Line Wrap:' +--- !u!222 &1296757693 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1296757690} + m_CullTransparentMesh: 0 +--- !u!1 &1364070357 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1364070358} + - component: {fileID: 1364070359} + m_Layer: 0 + m_Name: LocalizationSource + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1364070358 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1364070357} + m_LocalRotation: {x: 0, y: 0, z: 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} +--- !u!114 &1364070359 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1364070357} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 488051eaa73ba421e8fe4868f2e0f364, type: 3} + m_Name: + m_EditorClassIdentifier: + mSource: + UserAgreesToHaveItOnTheScene: 0 + UserAgreesToHaveItInsideThePluginsFolder: 0 + GoogleLiveSyncIsUptoDate: 1 + mTerms: + - Term: Text Example + TermType: 0 + Description: + Languages: + - "This is an example text showing \nright and wrong text rendering." + - "\u0647\u0630\u0627 \u0647\u0648 \u0646\u0635 \u0645\u062B\u0627\u0644 \u064A\u0648\u0636\u062D + \u0627\u0644\u0635\u0648\u0627\u0628 \u0648\u0627\u0644\u062E\u0637\u0623 + \u062C\u0639\u0644 \u0627\u0644\u0646\u0635." + - + - + - + - + - + - + Flags: 0000000000000000 + Languages_Touch: [] + CaseInsensitiveTerms: 0 + OnMissingTranslation: 1 + mTerm_AppName: + mLanguages: + - Name: English + Code: en-US + Flags: 0 + - Name: Arabic + Code: ar + Flags: 0 + IgnoreDeviceLanguage: 0 + _AllowUnloadingLanguages: 0 + Google_WebServiceURL: + Google_SpreadsheetKey: teVYmvqeNTF8ZkQhQ21a0Gw + Google_SpreadsheetName: + Google_LastUpdatedVersion: + Google_Password: change_this + GoogleUpdateFrequency: 3 + GoogleInEditorCheckFrequency: 2 + GoogleUpdateSynchronization: 1 + GoogleUpdateDelay: 5 + Assets: + - {fileID: 12800000, guid: 769d4a2288b99004184236f5fc4469c8, type: 3} + Spreadsheet_LocalFileName: + Spreadsheet_LocalCSVSeparator: ',' + Spreadsheet_LocalCSVEncoding: utf-8 + Spreadsheet_SpecializationAsRows: 1 + version: 1 + NeverDestroy: 0 + UserAgreesToHaveItOnTheScene: 0 + UserAgreesToHaveItInsideThePluginsFolder: 0 + GoogleLiveSyncIsUptoDate: 1 + Assets: [] + Google_WebServiceURL: + Google_SpreadsheetKey: teVYmvqeNTF8ZkQhQ21a0Gw + Google_SpreadsheetName: + Google_LastUpdatedVersion: + GoogleUpdateFrequency: 3 + GoogleUpdateDelay: 5 + mLanguages: [] + IgnoreDeviceLanguage: 0 + _AllowUnloadingLanguages: 0 + mTerms: [] + CaseInsensitiveTerms: 0 + OnMissingTranslation: 1 + mTerm_AppName: + Spreadsheet_LocalFileName: C:/Data/Frank/Unity Projects/Unity Plugins/Localization.csv + Spreadsheet_LocalCSVSeparator: ',' + Spreadsheet_LocalCSVEncoding: Unicode (UTF-8) + Spreadsheet_SpecializationAsRows: 1 + Google_Password: change_this + GoogleInEditorCheckFrequency: 2 +--- !u!1 &1483615947 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1483615948} + - component: {fileID: 1483615950} + - component: {fileID: 1483615949} + m_Layer: 0 + m_Name: Window + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1483615948 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1483615947} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1654165532} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.0349026, y: 0.042410713} + m_AnchorMax: {x: 0.97483766, y: 0.18080357} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1483615949 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1483615947} + 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_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 +--- !u!222 &1483615950 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1483615947} + m_CullTransparentMesh: 0 +--- !u!1 &1506865246 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1506865247} + - component: {fileID: 1506865251} + - component: {fileID: 1506865250} + - component: {fileID: 1506865249} + - component: {fileID: 1506865248} + m_Layer: 5 + m_Name: Wrong Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1506865247 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1506865246} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 805394856} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.040780142, y: 0.24107143} + m_AnchorMax: {x: 0.46631205, y: 0.4955357} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1506865248 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1506865246} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 344445a89b4f74a0e9a0a766903df87e, type: 3} + m_Name: + m_EditorClassIdentifier: + mTerm: Text Example + mTermSecondary: + PrimaryTermModifier: 0 + SecondaryTermModifier: 0 + TermPrefix: + TermSuffix: + LocalizeOnAwake: 1 + IgnoreRTL: 1 + MaxCharactersInRTL: 0 + IgnoreNumbersInRTL: 1 + CorrectAlignmentForRTL: 1 + AddSpacesToJoinedLanguages: 0 + AllowLocalizedParameters: 1 + TranslatedObjects: [] + LocalizeEvent: + m_PersistentCalls: + m_Calls: [] + AlwaysForceLocalize: 0 + LocalizeCallBack: + Target: {fileID: 0} + MethodName: + mGUI_ShowReferences: 0 + mGUI_ShowTems: 1 + mGUI_ShowCallback: 0 + mLocalizeTarget: {fileID: 31636047} + mLocalizeTargetName: I2.Loc.LocalizeTarget_UnityUI_Text +--- !u!114 &1506865249 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1506865246} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 344445a89b4f74a0e9a0a766903df87e, type: 3} + m_Name: + m_EditorClassIdentifier: + mTerm: Text Example + mTermSecondary: + PrimaryTermModifier: 0 + SecondaryTermModifier: 0 + TermPrefix: + TermSuffix: + LocalizeOnAwake: 1 + IgnoreRTL: 1 + MaxCharactersInRTL: 20 + IgnoreNumbersInRTL: 1 + CorrectAlignmentForRTL: 1 + AddSpacesToJoinedLanguages: 0 + AllowLocalizedParameters: 1 + TranslatedObjects: [] + LocalizeEvent: + m_PersistentCalls: + m_Calls: [] + AlwaysForceLocalize: 0 + LocalizeCallBack: + Target: {fileID: 0} + MethodName: + mGUI_ShowReferences: 0 + mGUI_ShowTems: 1 + mGUI_ShowCallback: 0 + mLocalizeTarget: {fileID: 732550129} + mLocalizeTargetName: I2.Loc.LocalizeTarget_UnityUI_Text +--- !u!114 &1506865250 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1506865246} + 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: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 20 + 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: "\u0647\u0630\u0627 \u0647\u0648 \u0646\u0635 \u0645\u062B\u0627\u0644 + \u064A\u0648\u0636\u062D \u0627\u0644\u0635\u0648\u0627\u0628 \u0648\u0627\u0644\u062E\u0637\u0623 + \u062C\u0639\u0644 \u0627\u0644\u0646\u0635." +--- !u!222 &1506865251 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1506865246} + m_CullTransparentMesh: 0 +--- !u!1 &1576287307 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1576287308} + - component: {fileID: 1576287313} + - component: {fileID: 1576287312} + - component: {fileID: 1576287311} + - component: {fileID: 1576287310} + - component: {fileID: 1576287309} + m_Layer: 0 + m_Name: Arabic + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1576287308 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1576287307} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1654165532} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.2946918, y: 0.050781254} + m_AnchorMax: {x: 0.40361574, y: 0.1733259} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1576287309 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1576287307} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f8d7972c568b50940a54c7f599af66c5, type: 3} + m_Name: + m_EditorClassIdentifier: + _Language: Arabic + mSource: {fileID: 1364070359} +--- !u!114 &1576287310 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1576287307} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1573420865, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_EffectColor: {r: 0, g: 0, b: 0, a: 1} + m_EffectDistance: {x: 3, y: -3} + m_UseGraphicAlpha: 1 +--- !u!114 &1576287311 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1576287307} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, 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.5019608, g: 0.5019608, b: 0.5019608, a: 0.5019608} + m_HighlightedColor: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 0.69803923} + m_PressedColor: {r: 0.34509805, g: 0.34509805, b: 0.34509805, a: 0.69803923} + m_DisabledColor: {r: 0.2509804, g: 0.2509804, b: 0.2509804, a: 0.5019608} + m_ColorMultiplier: 2 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1576287312} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1576287309} + m_MethodName: ApplyLanguage + 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: 1 +--- !u!114 &1576287312 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1576287307} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, 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_Texture: {fileID: 2800000, guid: 87e96283e85053343bc47c9691614f7c, type: 3} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &1576287313 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1576287307} + m_CullTransparentMesh: 0 +--- !u!1 &1601102844 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1601102845} + - component: {fileID: 1601102847} + - component: {fileID: 1601102846} + m_Layer: 5 + m_Name: Right Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1601102845 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1601102844} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 528937038} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.040780142, y: 0.8738839} + m_AnchorMax: {x: 0.46631205, y: 0.9296875} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1601102846 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1601102844} + 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: 0.5147059, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 16 + 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: 'Right Rendering:' +--- !u!222 &1601102847 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1601102844} + m_CullTransparentMesh: 0 +--- !u!1 &1654165531 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1654165532} + m_Layer: 0 + m_Name: Buttons + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1654165532 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1654165531} + m_LocalRotation: {x: -0, 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: 1483615948} + - {fileID: 881740142} + - {fileID: 1576287308} + m_Father: {fileID: 805394856} + 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 &1797551106 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1797551111} + - component: {fileID: 1797551110} + - component: {fileID: 1797551108} + - component: {fileID: 1797551107} + 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 &1797551107 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1797551106} + m_Enabled: 1 +--- !u!124 &1797551108 +Behaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1797551106} + m_Enabled: 1 +--- !u!20 &1797551110 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1797551106} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_projectionMatrixMode: 1 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_GateFitMode: 2 + 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: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1797551111 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1797551106} + 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: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1801269860 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1801269861} + - component: {fileID: 1801269863} + - component: {fileID: 1801269862} + m_Layer: 5 + m_Name: Wrong Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1801269861 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1801269860} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 528937038} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.040780142, y: 0.4966518} + m_AnchorMax: {x: 0.46631205, y: 0.55245537} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1801269862 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1801269860} + 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: 0.5147059, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 16 + 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: Wrong Rendering +--- !u!222 &1801269863 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1801269860} + m_CullTransparentMesh: 0 +--- !u!114 &1871480941 +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: 332e36893e7cf4a49b3c1f72f76cd5e1, type: 3} + m_Name: + m_EditorClassIdentifier: + mTarget: {fileID: 1176328333} diff --git a/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization features RightToLeft Text Rendering.unity.meta b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization features RightToLeft Text Rendering.unity.meta new file mode 100644 index 00000000..33893097 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization features RightToLeft Text Rendering.unity.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: 6c2ef0a4fea17b24daea6d945f40158b +DefaultImporter: + userData: diff --git a/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization 2DToolKit.unity b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization 2DToolKit.unity new file mode 100644 index 00000000..607a051a --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization 2DToolKit.unity @@ -0,0 +1,2447 @@ +%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: 10 + m_Resolution: 1 + m_BakeResolution: 1 + m_AtlasSize: 1024 + m_AO: 1 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 0 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringMode: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 0 +--- !u!1 &13 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 25} + - component: {fileID: 39} + - component: {fileID: 84} + - component: {fileID: 74} + - component: {fileID: 80} + m_Layer: 8 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &14 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 26} + - component: {fileID: 49} + - component: {fileID: 40} + - component: {fileID: 67} + - component: {fileID: 66} + - component: {fileID: 59} + - component: {fileID: 87} + m_Layer: 8 + m_Name: Button_French + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &15 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 27} + - component: {fileID: 50} + - component: {fileID: 41} + - component: {fileID: 68} + - component: {fileID: 69} + - component: {fileID: 60} + - component: {fileID: 85} + m_Layer: 8 + m_Name: Button_English + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &16 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 28} + - component: {fileID: 42} + - component: {fileID: 65} + - component: {fileID: 51} + - component: {fileID: 79} + m_Layer: 8 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &17 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 29} + - component: {fileID: 43} + - component: {fileID: 71} + - component: {fileID: 52} + - component: {fileID: 81} + m_Layer: 8 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &18 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 30} + - component: {fileID: 53} + - component: {fileID: 44} + - component: {fileID: 73} + - component: {fileID: 72} + - component: {fileID: 61} + - component: {fileID: 83} + - component: {fileID: 86} + m_Layer: 8 + m_Name: Button_Spanish + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &19 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 31} + - component: {fileID: 45} + - component: {fileID: 54} + - component: {fileID: 70} + - component: {fileID: 76} + m_Layer: 0 + m_Name: TextMesh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &20 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 32} + - component: {fileID: 46} + - component: {fileID: 55} + - component: {fileID: 75} + - component: {fileID: 82} + - component: {fileID: 48} + m_Layer: 0 + m_Name: Sprite + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &21 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 33} + - component: {fileID: 63} + m_Layer: 0 + m_Name: Directional light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &22 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 34} + - component: {fileID: 56} + - component: {fileID: 57} + - component: {fileID: 47} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &23 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 35} + - component: {fileID: 37} + - component: {fileID: 78} + m_Layer: 0 + m_Name: GuiCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &24 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 36} + - component: {fileID: 38} + - component: {fileID: 64} + - component: {fileID: 58} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &25 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 13} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -0.06787187, z: -0.020000458} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 26} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &26 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 14} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.8027859, y: -0.8436719, z: 10} + m_LocalScale: {x: 0.8552129, y: 0.8552129, z: 0.8552129} + m_Children: + - {fileID: 25} + m_Father: {fileID: 35} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &27 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 15} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.89666367, y: -0.8398513, z: 10} + m_LocalScale: {x: 0.8552129, y: 0.8552129, z: 0.8552129} + m_Children: + - {fileID: 28} + m_Father: {fileID: 35} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &28 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 16} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -0.06787187, z: -0.020000458} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 27} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &29 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 17} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -0.06787187, z: -0.020000458} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 30} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &30 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 18} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.040815353, y: -0.8396124, z: 10} + m_LocalScale: {x: 0.8552129, y: 0.8552129, z: 0.8552129} + m_Children: + - {fileID: 29} + m_Father: {fileID: 35} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &31 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 19} + m_LocalRotation: {x: 0, y: -0.575719, z: 0, w: 0.81764764} + m_LocalPosition: {x: -0.56, y: 0.57, z: -1.41} + m_LocalScale: {x: 2, y: 2, z: 2} + m_Children: [] + m_Father: {fileID: 34} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &32 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 20} + m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: -0.7071068} + m_LocalPosition: {x: 0.5338029, y: 0.14883651, z: 0.000000044478032} + m_LocalScale: {x: 2, y: 2, z: 2} + m_Children: [] + m_Father: {fileID: 34} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &33 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 21} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.08863126, y: -0.0074581355, z: -0.0015500784} + 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!4 &34 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 22} + m_LocalRotation: {x: -0.27909058, y: 0.4551833, z: 0.057969317, w: 0.8435379} + m_LocalPosition: {x: -0.08863126, y: -1.24, z: -0.0015500784} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 32} + - {fileID: 31} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &35 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 23} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 16.630077, y: 0, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 30} + - {fileID: 27} + - {fileID: 26} + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &36 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 24} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -4.7100325} + 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!20 &37 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 23} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 3 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_projectionMatrixMode: 1 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_GateFitMode: 2 + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: -0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 10 + field of view: 60 + orthographic: 1 + orthographic size: 1 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 256 + 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!20 &38 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 24} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_projectionMatrixMode: 1 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_GateFitMode: 2 + 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: 1 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967039 + 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!23 &39 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 13} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 4f7adb5944587434eb05c98ae8cf0936, 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!23 &40 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 14} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c588c2d12d3f5514195827aeb65feb8a, 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!23 &41 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 15} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c588c2d12d3f5514195827aeb65feb8a, 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!23 &42 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 16} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 4f7adb5944587434eb05c98ae8cf0936, 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!23 &43 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 17} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 4f7adb5944587434eb05c98ae8cf0936, 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!23 &44 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 18} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c588c2d12d3f5514195827aeb65feb8a, 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!23 &45 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 19} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 4f7adb5944587434eb05c98ae8cf0936, 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!23 &46 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 20} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 32286741c6a400a44a969d7d318b1ca5, 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!23 &47 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 22} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10302, 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_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 &48 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 20} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.203125, y: 0.20625, z: 0.2} + m_Center: {x: 0.0015624985, y: 0, z: 0} +--- !u!33 &49 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 14} + m_Mesh: {fileID: 0} +--- !u!33 &50 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 15} + m_Mesh: {fileID: 0} +--- !u!114 &51 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 16} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 994457055a9434b4aa7b65ad37262d67, type: 3} + m_Name: + m_EditorClassIdentifier: + _font: {fileID: 0} + _text: + _color: {r: 1, g: 1, b: 1, a: 1} + _color2: {r: 1, g: 1, b: 1, a: 1} + _useGradient: 0 + _textureGradient: 0 + _anchor: 6 + _scale: {x: 1, y: 1, z: 1} + _kerning: 0 + _maxChars: 16 + _inlineStyling: 0 + _formatting: 0 + _wordWrapWidth: 0 + spacing: 0 + lineSpacing: 0 + data: + version: 1 + font: {fileID: 11400000, guid: e7a6b09a73c6b2b4f8060096ddbd3b5e, type: 2} + text: English + color: {r: 1, g: 1, b: 1, a: 1} + color2: {r: 1, g: 1, b: 1, a: 1} + useGradient: 0 + textureGradient: 0 + anchor: 7 + renderLayer: 0 + scale: {x: 1, y: 1, z: 1} + kerning: 0 + maxChars: 16 + inlineStyling: 0 + formatting: 0 + wordWrapWidth: 0 + spacing: 0 + lineSpacing: 0 +--- !u!114 &52 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 17} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 994457055a9434b4aa7b65ad37262d67, type: 3} + m_Name: + m_EditorClassIdentifier: + _font: {fileID: 0} + _text: + _color: {r: 1, g: 1, b: 1, a: 1} + _color2: {r: 1, g: 1, b: 1, a: 1} + _useGradient: 0 + _textureGradient: 0 + _anchor: 6 + _scale: {x: 1, y: 1, z: 1} + _kerning: 0 + _maxChars: 16 + _inlineStyling: 0 + _formatting: 0 + _wordWrapWidth: 0 + spacing: 0 + lineSpacing: 0 + data: + version: 1 + font: {fileID: 11400000, guid: e7a6b09a73c6b2b4f8060096ddbd3b5e, type: 2} + text: Spanish + color: {r: 1, g: 1, b: 1, a: 1} + color2: {r: 1, g: 1, b: 1, a: 1} + useGradient: 0 + textureGradient: 0 + anchor: 7 + renderLayer: 0 + scale: {x: 1, y: 1, z: 1} + kerning: 0 + maxChars: 16 + inlineStyling: 0 + formatting: 0 + wordWrapWidth: 0 + spacing: 0 + lineSpacing: 0 +--- !u!33 &53 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 18} + m_Mesh: {fileID: 0} +--- !u!33 &54 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 19} + m_Mesh: {fileID: 0} +--- !u!33 &55 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 20} + m_Mesh: {fileID: 0} +--- !u!33 &56 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 22} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &57 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 22} + 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!81 &58 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 24} + m_Enabled: 1 +--- !u!82 &59 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 14} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 0} + 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: 1 + 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!82 &60 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 15} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 0} + 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: 1 + 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!82 &61 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 18} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 0} + 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: 1 + 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!108 &63 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 21} + m_Enabled: 1 + serializedVersion: 8 + m_Type: 1 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + 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_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_Lightmapping: 1 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!124 &64 +Behaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 24} + m_Enabled: 1 +--- !u!33 &65 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 16} + m_Mesh: {fileID: 0} +--- !u!114 &66 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 14} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d7eeb7d27f0df004e90cb9fda2d821bd, type: 3} + m_Name: + m_EditorClassIdentifier: + viewCamera: {fileID: 0} + buttonDownSprite: button_down + buttonUpSprite: button_up + buttonPressedSprite: button_up + buttonDownSound: {fileID: 0} + buttonUpSound: {fileID: 0} + buttonPressedSound: {fileID: 0} + targetObject: {fileID: 14} + messageName: ApplyLanguage + targetScale: 1.1 + scaleTime: 0.05 + pressedWaitTime: 0.3 +--- !u!114 &67 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 14} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3fac570381f34f647b768dc5a5aa1364, type: 3} + m_Name: + m_EditorClassIdentifier: + collection: {fileID: 11400000, guid: a7b2ba5d04adf144faffa96ff7497955, type: 2} + _color: {r: 1, g: 1, b: 1, a: 1} + _scale: {x: 4.61, y: 1, z: 1} + _spriteId: 0 + boxCollider2D: {fileID: 0} + polygonCollider2D: [] + edgeCollider2D: [] + boxCollider: {fileID: 0} + meshCollider: {fileID: 0} + meshColliderPositions: [] + meshColliderMesh: {fileID: 0} + renderLayer: 0 +--- !u!114 &68 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 15} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3fac570381f34f647b768dc5a5aa1364, type: 3} + m_Name: + m_EditorClassIdentifier: + collection: {fileID: 11400000, guid: a7b2ba5d04adf144faffa96ff7497955, type: 2} + _color: {r: 1, g: 1, b: 1, a: 1} + _scale: {x: 4.61, y: 1, z: 1} + _spriteId: 0 + boxCollider2D: {fileID: 0} + polygonCollider2D: [] + edgeCollider2D: [] + boxCollider: {fileID: 0} + meshCollider: {fileID: 0} + meshColliderPositions: [] + meshColliderMesh: {fileID: 0} + renderLayer: 0 +--- !u!114 &69 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 15} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d7eeb7d27f0df004e90cb9fda2d821bd, type: 3} + m_Name: + m_EditorClassIdentifier: + viewCamera: {fileID: 0} + buttonDownSprite: button_down + buttonUpSprite: button_up + buttonPressedSprite: button_up + buttonDownSound: {fileID: 0} + buttonUpSound: {fileID: 0} + buttonPressedSound: {fileID: 0} + targetObject: {fileID: 15} + messageName: ApplyLanguage + targetScale: 1.1 + scaleTime: 0.05 + pressedWaitTime: 0.3 +--- !u!114 &70 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 19} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 994457055a9434b4aa7b65ad37262d67, type: 3} + m_Name: + m_EditorClassIdentifier: + _font: {fileID: 0} + _text: + _color: {r: 1, g: 1, b: 1, a: 1} + _color2: {r: 1, g: 1, b: 1, a: 1} + _useGradient: 0 + _textureGradient: 0 + _anchor: 6 + _scale: {x: 1, y: 1, z: 1} + _kerning: 0 + _maxChars: 16 + _inlineStyling: 0 + _formatting: 0 + _wordWrapWidth: 0 + spacing: 0 + lineSpacing: 0 + data: + version: 1 + font: {fileID: 11400000, guid: e7a6b09a73c6b2b4f8060096ddbd3b5e, type: 2} + text: 2D-ToolKit Localisation Exemple + color: {r: 1, g: 1, b: 1, a: 1} + color2: {r: 1, g: 1, b: 1, a: 1} + useGradient: 0 + textureGradient: 0 + anchor: 6 + renderLayer: 0 + scale: {x: 1, y: 1, z: 1} + kerning: 0 + maxChars: 160 + inlineStyling: 0 + formatting: 0 + wordWrapWidth: 0 + spacing: 0 + lineSpacing: 0 +--- !u!33 &71 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 17} + m_Mesh: {fileID: 0} +--- !u!114 &72 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 18} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d7eeb7d27f0df004e90cb9fda2d821bd, type: 3} + m_Name: + m_EditorClassIdentifier: + viewCamera: {fileID: 0} + buttonDownSprite: button_down + buttonUpSprite: button_up + buttonPressedSprite: button_up + buttonDownSound: {fileID: 0} + buttonUpSound: {fileID: 0} + buttonPressedSound: {fileID: 0} + targetObject: {fileID: 18} + messageName: ApplyLanguage + targetScale: 1.1 + scaleTime: 0.05 + pressedWaitTime: 0.3 +--- !u!114 &73 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 18} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3fac570381f34f647b768dc5a5aa1364, type: 3} + m_Name: + m_EditorClassIdentifier: + collection: {fileID: 11400000, guid: a7b2ba5d04adf144faffa96ff7497955, type: 2} + _color: {r: 1, g: 1, b: 1, a: 1} + _scale: {x: 4.61, y: 1, z: 1} + _spriteId: 0 + boxCollider2D: {fileID: 0} + polygonCollider2D: [] + edgeCollider2D: [] + boxCollider: {fileID: 83} + meshCollider: {fileID: 0} + meshColliderPositions: [] + meshColliderMesh: {fileID: 0} + renderLayer: 0 +--- !u!114 &74 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 13} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 994457055a9434b4aa7b65ad37262d67, type: 3} + m_Name: + m_EditorClassIdentifier: + _font: {fileID: 0} + _text: + _color: {r: 1, g: 1, b: 1, a: 1} + _color2: {r: 1, g: 1, b: 1, a: 1} + _useGradient: 0 + _textureGradient: 0 + _anchor: 6 + _scale: {x: 1, y: 1, z: 1} + _kerning: 0 + _maxChars: 16 + _inlineStyling: 0 + _formatting: 0 + _wordWrapWidth: 0 + spacing: 0 + lineSpacing: 0 + data: + version: 1 + font: {fileID: 11400000, guid: e7a6b09a73c6b2b4f8060096ddbd3b5e, type: 2} + text: French + color: {r: 1, g: 1, b: 1, a: 1} + color2: {r: 1, g: 1, b: 1, a: 1} + useGradient: 0 + textureGradient: 0 + anchor: 7 + renderLayer: 0 + scale: {x: 1, y: 1, z: 1} + kerning: 0 + maxChars: 16 + inlineStyling: 0 + formatting: 0 + wordWrapWidth: 0 + spacing: 0 + lineSpacing: 0 +--- !u!114 &75 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 20} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3fac570381f34f647b768dc5a5aa1364, type: 3} + m_Name: + m_EditorClassIdentifier: + collection: {fileID: 11400000, guid: b5aec6ebd1a8ffc458a2e46a3236acab, type: 2} + _color: {r: 1, g: 1, b: 1, a: 1} + _scale: {x: 1, y: 1, z: 1} + _spriteId: 20 + boxCollider2D: {fileID: 0} + polygonCollider2D: [] + edgeCollider2D: [] + boxCollider: {fileID: 48} + meshCollider: {fileID: 0} + meshColliderPositions: [] + meshColliderMesh: {fileID: 0} + renderLayer: 0 +--- !u!114 &76 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 19} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 344445a89b4f74a0e9a0a766903df87e, type: 3} + m_Name: + m_EditorClassIdentifier: + mTerm: Language Window s Title + mTermSecondary: + PrimaryTermModifier: 0 + SecondaryTermModifier: 0 + TermPrefix: + TermSuffix: + LocalizeOnAwake: 1 + IgnoreRTL: 0 + MaxCharactersInRTL: 0 + IgnoreNumbersInRTL: 1 + CorrectAlignmentForRTL: 1 + AddSpacesToJoinedLanguages: 0 + AllowLocalizedParameters: 1 + TranslatedObjects: [] + LocalizeEvent: + m_PersistentCalls: + m_Calls: [] + AlwaysForceLocalize: 0 + LocalizeCallBack: + Target: {fileID: 0} + MethodName: + mGUI_ShowReferences: 0 + mGUI_ShowTems: 1 + mGUI_ShowCallback: 0 + mLocalizeTarget: {fileID: 702637707} + mLocalizeTargetName: I2.Loc.LocalizeTarget_UnityStandard_Prefab +--- !u!196 &77 +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!114 &78 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 23} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1cbcdd875c93e1e4fb87f997228fbd7a, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &79 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 16} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 344445a89b4f74a0e9a0a766903df87e, type: 3} + m_Name: + m_EditorClassIdentifier: + mTerm: English + mTermSecondary: + PrimaryTermModifier: 0 + SecondaryTermModifier: 0 + TermPrefix: + TermSuffix: + LocalizeOnAwake: 1 + IgnoreRTL: 0 + MaxCharactersInRTL: 0 + IgnoreNumbersInRTL: 1 + CorrectAlignmentForRTL: 1 + AddSpacesToJoinedLanguages: 0 + AllowLocalizedParameters: 1 + TranslatedObjects: [] + LocalizeEvent: + m_PersistentCalls: + m_Calls: [] + AlwaysForceLocalize: 0 + LocalizeCallBack: + Target: {fileID: 0} + MethodName: + mGUI_ShowReferences: 0 + mGUI_ShowTems: 1 + mGUI_ShowCallback: 0 + mLocalizeTarget: {fileID: 1282930313} + mLocalizeTargetName: I2.Loc.LocalizeTarget_UnityStandard_Prefab +--- !u!114 &80 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 13} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 344445a89b4f74a0e9a0a766903df87e, type: 3} + m_Name: + m_EditorClassIdentifier: + mTerm: French + mTermSecondary: + PrimaryTermModifier: 0 + SecondaryTermModifier: 0 + TermPrefix: + TermSuffix: + LocalizeOnAwake: 1 + IgnoreRTL: 0 + MaxCharactersInRTL: 0 + IgnoreNumbersInRTL: 1 + CorrectAlignmentForRTL: 1 + AddSpacesToJoinedLanguages: 0 + AllowLocalizedParameters: 1 + TranslatedObjects: [] + LocalizeEvent: + m_PersistentCalls: + m_Calls: [] + AlwaysForceLocalize: 0 + LocalizeCallBack: + Target: {fileID: 0} + MethodName: + mGUI_ShowReferences: 0 + mGUI_ShowTems: 1 + mGUI_ShowCallback: 0 + mLocalizeTarget: {fileID: 1657844648} + mLocalizeTargetName: I2.Loc.LocalizeTarget_UnityStandard_Prefab +--- !u!114 &81 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 17} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 344445a89b4f74a0e9a0a766903df87e, type: 3} + m_Name: + m_EditorClassIdentifier: + mTerm: Spanish + mTermSecondary: + PrimaryTermModifier: 0 + SecondaryTermModifier: 0 + TermPrefix: + TermSuffix: + LocalizeOnAwake: 1 + IgnoreRTL: 0 + MaxCharactersInRTL: 0 + IgnoreNumbersInRTL: 1 + CorrectAlignmentForRTL: 1 + AddSpacesToJoinedLanguages: 0 + AllowLocalizedParameters: 1 + TranslatedObjects: [] + LocalizeEvent: + m_PersistentCalls: + m_Calls: [] + AlwaysForceLocalize: 0 + LocalizeCallBack: + Target: {fileID: 0} + MethodName: + mGUI_ShowReferences: 0 + mGUI_ShowTems: 1 + mGUI_ShowCallback: 0 + mLocalizeTarget: {fileID: 1813393269} + mLocalizeTargetName: I2.Loc.LocalizeTarget_UnityStandard_Prefab +--- !u!114 &82 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 20} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 344445a89b4f74a0e9a0a766903df87e, type: 3} + m_Name: + m_EditorClassIdentifier: + mTerm: ExampleSprite + mTermSecondary: ExampleCollection + PrimaryTermModifier: 0 + SecondaryTermModifier: 0 + TermPrefix: + TermSuffix: + LocalizeOnAwake: 1 + IgnoreRTL: 0 + MaxCharactersInRTL: 0 + IgnoreNumbersInRTL: 1 + CorrectAlignmentForRTL: 1 + AddSpacesToJoinedLanguages: 0 + AllowLocalizedParameters: 1 + TranslatedObjects: [] + LocalizeEvent: + m_PersistentCalls: + m_Calls: [] + AlwaysForceLocalize: 0 + LocalizeCallBack: + Target: {fileID: 0} + MethodName: + mGUI_ShowReferences: 0 + mGUI_ShowTems: 1 + mGUI_ShowCallback: 0 + mLocalizeTarget: {fileID: 453048066} + mLocalizeTargetName: I2.Loc.LocalizeTarget_UnityStandard_Prefab +--- !u!65 &83 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 18} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1.6, y: 1.6, z: 2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &84 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 13} + m_Mesh: {fileID: 0} +--- !u!114 &85 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 15} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f8d7972c568b50940a54c7f599af66c5, type: 3} + m_Name: + m_EditorClassIdentifier: + _Language: English + mSource: {fileID: 0} +--- !u!114 &86 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 18} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f8d7972c568b50940a54c7f599af66c5, type: 3} + m_Name: + m_EditorClassIdentifier: + _Language: Spanish + mSource: {fileID: 0} +--- !u!114 &87 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 14} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f8d7972c568b50940a54c7f599af66c5, type: 3} + m_Name: + m_EditorClassIdentifier: + _Language: French + mSource: {fileID: 0} +--- !u!1 &44565824 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 44565826} + - component: {fileID: 44565825} + m_Layer: 0 + m_Name: LocalizationSource + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &44565825 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 44565824} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 488051eaa73ba421e8fe4868f2e0f364, type: 3} + m_Name: + m_EditorClassIdentifier: + mSource: + UserAgreesToHaveItOnTheScene: 0 + UserAgreesToHaveItInsideThePluginsFolder: 0 + GoogleLiveSyncIsUptoDate: 1 + mTerms: + - Term: English + TermType: 0 + Description: + Languages: + - English + - Ingles + - Anglais + Flags: 000000 + Languages_Touch: [] + - Term: ExampleCollection + TermType: 10 + Description: + Languages: + - DemoSpriteCollection + - DemoSpriteCollection + - UIDemoSpriteCollection + Flags: 000000 + Languages_Touch: [] + - Term: ExampleSprite + TermType: 0 + Description: + Languages: + - Chest Closed + - crate + - Checkbox + Flags: 000000 + Languages_Touch: [] + - Term: Flag + TermType: 0 + Description: + Languages: + - crosshairs-highlight + - grid + - list + Flags: 000000 + Languages_Touch: [] + - Term: French + TermType: 0 + Description: + Languages: + - French + - Frances + - Fransais + Flags: 000000 + Languages_Touch: [] + - Term: Language Buttons Description + TermType: 0 + Description: + Languages: + - Click on any of the buttons bellow to change the language + - Haga clic en los botones de abajo para cambiar el idioma + - Cliquez sur un des boutons ci-dessous pour changer la langue + Flags: 000000 + Languages_Touch: [] + - Term: Language Window s Title + TermType: 0 + Description: + Languages: + - 2D-ToolKit Localization Example + - Ejemplo de Localization 2D ToolKit + - 2D-ToolKit Localisation Exemple + Flags: 000000 + Languages_Touch: [] + - Term: OpenSansSemibold18 + TermType: 0 + Description: + Languages: + - OpenSansSemibold18 + - OpenSansSemibold14 + - OpenSansSemibold18 + Flags: 000000 + Languages_Touch: [] + - Term: Spanish + TermType: 0 + Description: + Languages: + - Spanish + - Espannol + - Espagnol + Flags: 000000 + Languages_Touch: [] + CaseInsensitiveTerms: 0 + OnMissingTranslation: 1 + mTerm_AppName: + mLanguages: + - Name: English + Code: en-AU + Flags: 0 + - Name: Spanish + Code: es-AR + Flags: 0 + - Name: French + Code: fr-BE + Flags: 0 + IgnoreDeviceLanguage: 0 + _AllowUnloadingLanguages: 0 + Google_WebServiceURL: + Google_SpreadsheetKey: + Google_SpreadsheetName: + Google_LastUpdatedVersion: + Google_Password: change_this + GoogleUpdateFrequency: 3 + GoogleInEditorCheckFrequency: 2 + GoogleUpdateSynchronization: 1 + GoogleUpdateDelay: 5 + Assets: [] + Spreadsheet_LocalFileName: + Spreadsheet_LocalCSVSeparator: ',' + Spreadsheet_LocalCSVEncoding: utf-8 + Spreadsheet_SpecializationAsRows: 1 + version: 1 + NeverDestroy: 1 + UserAgreesToHaveItOnTheScene: 0 + UserAgreesToHaveItInsideThePluginsFolder: 0 + GoogleLiveSyncIsUptoDate: 1 + Assets: [] + Google_WebServiceURL: + Google_SpreadsheetKey: + Google_SpreadsheetName: + Google_LastUpdatedVersion: + GoogleUpdateFrequency: 3 + GoogleUpdateDelay: 5 + mLanguages: [] + IgnoreDeviceLanguage: 0 + _AllowUnloadingLanguages: 0 + mTerms: [] + CaseInsensitiveTerms: 0 + OnMissingTranslation: 1 + mTerm_AppName: + Spreadsheet_LocalFileName: + Spreadsheet_LocalCSVSeparator: ',' + Spreadsheet_LocalCSVEncoding: Unicode (UTF-8) + Spreadsheet_SpecializationAsRows: 1 + Google_Password: change_this + GoogleInEditorCheckFrequency: 2 +--- !u!4 &44565826 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 44565824} + m_LocalRotation: {x: 0, y: 0, z: 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!114 &453048066 +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: bd8b481d182cbcd4293524eb92ee520c, type: 3} + m_Name: + m_EditorClassIdentifier: + mTarget: {fileID: 0} +--- !u!114 &702637707 +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: bd8b481d182cbcd4293524eb92ee520c, type: 3} + m_Name: + m_EditorClassIdentifier: + mTarget: {fileID: 0} +--- !u!114 &1282930313 +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: bd8b481d182cbcd4293524eb92ee520c, type: 3} + m_Name: + m_EditorClassIdentifier: + mTarget: {fileID: 0} +--- !u!1 &1398319543 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1398319544} + m_Layer: 0 + m_Name: text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1398319544 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1398319543} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.0030691037, y: 0.015356608, z: -0.96700823} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1515510067} + m_Father: {fileID: 0} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1515510066 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1515510067} + - component: {fileID: 1515510070} + - component: {fileID: 1515510069} + - component: {fileID: 1515510068} + - component: {fileID: 1515510071} + m_Layer: 0 + m_Name: TextMesh Desc + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1515510067 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1515510066} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -2.709316, y: 0.10504996, z: 0.060000002} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1398319544} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1515510068 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1515510066} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 994457055a9434b4aa7b65ad37262d67, type: 3} + m_Name: + m_EditorClassIdentifier: + _font: {fileID: 0} + _text: + _color: {r: 1, g: 1, b: 1, a: 1} + _color2: {r: 1, g: 1, b: 1, a: 1} + _useGradient: 0 + _textureGradient: 0 + _anchor: 6 + _scale: {x: 1, y: 1, z: 1} + _kerning: 0 + _maxChars: 16 + _inlineStyling: 0 + _formatting: 0 + _wordWrapWidth: 0 + spacing: 0 + lineSpacing: 0 + data: + version: 1 + font: {fileID: 11400000, guid: e7a6b09a73c6b2b4f8060096ddbd3b5e, type: 2} + text: Click on any of the buttons bellow to change the language + color: {r: 1, g: 1, b: 1, a: 1} + color2: {r: 1, g: 1, b: 1, a: 1} + useGradient: 0 + textureGradient: 0 + anchor: 6 + renderLayer: 0 + scale: {x: 6, y: 2, z: 0} + kerning: 0 + maxChars: 160 + inlineStyling: 0 + formatting: 1 + wordWrapWidth: 2000 + spacing: 0 + lineSpacing: 0 +--- !u!33 &1515510069 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1515510066} + m_Mesh: {fileID: 0} +--- !u!23 &1515510070 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1515510066} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 4f7adb5944587434eb05c98ae8cf0936, 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!114 &1515510071 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1515510066} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 344445a89b4f74a0e9a0a766903df87e, type: 3} + m_Name: + m_EditorClassIdentifier: + mTerm: Language Buttons Description + mTermSecondary: + PrimaryTermModifier: 0 + SecondaryTermModifier: 0 + TermPrefix: + TermSuffix: + LocalizeOnAwake: 1 + IgnoreRTL: 0 + MaxCharactersInRTL: 0 + IgnoreNumbersInRTL: 1 + CorrectAlignmentForRTL: 1 + AddSpacesToJoinedLanguages: 0 + AllowLocalizedParameters: 1 + TranslatedObjects: [] + LocalizeEvent: + m_PersistentCalls: + m_Calls: [] + AlwaysForceLocalize: 0 + LocalizeCallBack: + Target: {fileID: 0} + MethodName: + mGUI_ShowReferences: 0 + mGUI_ShowTems: 1 + mGUI_ShowCallback: 0 + mLocalizeTarget: {fileID: 1947894978} + mLocalizeTargetName: I2.Loc.LocalizeTarget_UnityStandard_Prefab +--- !u!114 &1657844648 +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: bd8b481d182cbcd4293524eb92ee520c, type: 3} + m_Name: + m_EditorClassIdentifier: + mTarget: {fileID: 0} +--- !u!114 &1813393269 +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: bd8b481d182cbcd4293524eb92ee520c, type: 3} + m_Name: + m_EditorClassIdentifier: + mTarget: {fileID: 0} +--- !u!114 &1947894978 +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: bd8b481d182cbcd4293524eb92ee520c, type: 3} + m_Name: + m_EditorClassIdentifier: + mTarget: {fileID: 0} diff --git a/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization 2DToolKit.unity.meta b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization 2DToolKit.unity.meta new file mode 100644 index 00000000..4eade142 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization 2DToolKit.unity.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: 0cd6ab4cb00926c4bb2580688e442b07 +DefaultImporter: + userData: diff --git a/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization NGUI.unity b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization NGUI.unity new file mode 100644 index 00000000..51da0314 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization NGUI.unity @@ -0,0 +1,2392 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +SceneSettings: + m_ObjectHideFlags: 0 + m_PVSData: + m_PVSObjectsArray: [] + m_PVSPortalsArray: [] + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 7 + 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_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} +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 7 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_TemporalCoherenceThreshold: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 4 + m_Resolution: 1 + m_BakeResolution: 1 + m_TextureWidth: 1024 + m_TextureHeight: 1024 + m_AO: 1 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 0 + m_DirectLightInLightProbes: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_LightingDataAsset: {fileID: 0} + m_RuntimeCPUUsage: 25 +--- !u!196 &142 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + accuratePlacement: 0 + minRegionArea: 2 + cellSize: 0.16666666 + manualCellSize: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &47460365 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 47460366} + - 114: {fileID: 47460367} + m_Layer: 8 + m_Name: TiledSprite (Wooden Background) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &47460366 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 47460365} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 1639879716} + m_RootOrder: 6 +--- !u!114 &47460367 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 47460365} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1b3dc54f924693f41b5cbecb267e647a, type: 3} + m_Name: + m_EditorClassIdentifier: + leftAnchor: + target: {fileID: 0} + relative: 0 + absolute: 0 + rightAnchor: + target: {fileID: 0} + relative: 1 + absolute: 0 + bottomAnchor: + target: {fileID: 0} + relative: 0 + absolute: 0 + topAnchor: + target: {fileID: 0} + relative: 1 + absolute: 0 + updateAnchors: 1 + mColor: {r: 1, g: 0.90940404, b: 0.76865673, a: 1} + mPivot: 4 + mWidth: 498 + mHeight: 498 + mDepth: 0 + mMat: {fileID: 0} + autoResizeBoxCollider: 0 + hideIfOffScreen: 0 + keepAspectRatio: 0 + aspectRatio: 1 + mType: 2 + mFillDirection: 4 + mFillAmount: 1 + mInvert: 0 + mFlip: 0 + mApplyGradient: 0 + mGradientTop: {r: 1, g: 1, b: 1, a: 1} + mGradientBottom: {r: 0.7, g: 0.7, b: 0.7, a: 1} + centerType: 1 + leftType: 1 + rightType: 1 + bottomType: 1 + topType: 1 + mAtlas: {fileID: 11400000, guid: 62adb30369acbf943a67cee0f69267a3, type: 2} + mSpriteName: Wooden Background + mFillCenter: 1 +--- !u!1 &58861211 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 58861212} + - 114: {fileID: 58861214} + - 114: {fileID: 58861213} + m_Layer: 8 + m_Name: Label - Description + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &58861212 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 58861211} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -214, y: 82, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 135712070} + m_RootOrder: 0 +--- !u!114 &58861213 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 58861211} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 344445a89b4f74a0e9a0a766903df87e, type: 3} + m_Name: + m_EditorClassIdentifier: + mTerm: Paragraph + mTermSecondary: Arial + PrimaryTermModifier: 0 + SecondaryTermModifier: 0 + TermPrefix: + TermSuffix: + LocalizeOnAwake: 1 + Source: {fileID: 0} + mTarget: {fileID: 58861214} + IgnoreRTL: 0 + MaxCharactersInRTL: 0 + IgnoreNumbersInRTL: 1 + CorrectAlignmentForRTL: 1 + AddSpacesToJoinedLanguages: 0 + TranslatedObjects: + - {fileID: 11400000, guid: 0f5e030a8cdc292438f880d3ec49ef64, type: 2} + - {fileID: 11400000, guid: 93e68f7902ba67545ba1e60502873fb5, type: 2} + - {fileID: 11400000, guid: 800fce3d977b52d4cadf1a0790a413f0, type: 2} + LocalizeCallBack: + Target: {fileID: 0} + MethodName: + AlwaysForceLocalize: 0 + mGUI_ShowReferences: 0 + mGUI_ShowTems: 1 + mGUI_ShowCallback: 0 +--- !u!114 &58861214 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 58861211} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e9d0b5f3bbe925a408bd595c79d0bf63, type: 3} + m_Name: + m_EditorClassIdentifier: + leftAnchor: + target: {fileID: 0} + relative: 0 + absolute: 0 + rightAnchor: + target: {fileID: 0} + relative: 1 + absolute: 0 + bottomAnchor: + target: {fileID: 0} + relative: 0 + absolute: 0 + topAnchor: + target: {fileID: 0} + relative: 1 + absolute: 0 + updateAnchors: 1 + mColor: {r: 0.23880595, g: 0.16229041, b: 0.09801737, a: 1} + mPivot: 0 + mWidth: 432 + mHeight: 80 + mDepth: 18 + mMat: {fileID: 0} + autoResizeBoxCollider: 0 + hideIfOffScreen: 0 + keepAspectRatio: 0 + aspectRatio: 5.4 + keepCrispWhenShrunk: 1 + mTrueTypeFont: {fileID: 0} + mFont: {fileID: 11400000, guid: 800fce3d977b52d4cadf1a0790a413f0, type: 2} + mText: "Este ejemplo muestra como localizar NGUI.\r\n[000000]UILabels, UISprites + y UITextures[-] pueden traducirse con solo a\xF1adirles un componente [0000FF]Localize[-] + y la crear un [0000FF]LanguageSource[-] en la escena / Proyecto." + mFontSize: 20 + mFontStyle: 0 + mAlignment: 1 + mEncoding: 1 + mMaxLineCount: 0 + mEffectStyle: 1 + mEffectColor: {r: 0.91791046, g: 0.71133053, b: 0.5000557, a: 1} + mSymbols: 1 + mEffectDistance: {x: 1, y: 1} + mOverflow: 3 + mApplyGradient: 0 + mGradientTop: {r: 1, g: 1, b: 1, a: 1} + mGradientBottom: {r: 0.5, g: 0.5, b: 0.5, a: 1} + mSpacingX: 0 + mSpacingY: 0 + mUseFloatSpacing: 0 + mFloatSpacingX: 0 + mFloatSpacingY: 0 + mOverflowEllipsis: 0 + mOverflowWidth: 0 + mModifier: 0 + mShrinkToFit: 0 + mMaxLineWidth: 0 + mMaxLineHeight: 0 + mLineWidth: 0 + mMultiline: 1 +--- !u!1 &67446545 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 67446546} + - 114: {fileID: 67446547} + m_Layer: 8 + m_Name: SlicedSprite (Border) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &67446546 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 67446545} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 1639879716} + m_RootOrder: 0 +--- !u!114 &67446547 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 67446545} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1b3dc54f924693f41b5cbecb267e647a, type: 3} + m_Name: + m_EditorClassIdentifier: + leftAnchor: + target: {fileID: 0} + relative: 0 + absolute: 0 + rightAnchor: + target: {fileID: 0} + relative: 1 + absolute: 0 + bottomAnchor: + target: {fileID: 0} + relative: 0 + absolute: 0 + topAnchor: + target: {fileID: 0} + relative: 1 + absolute: 0 + updateAnchors: 1 + mColor: {r: 0, g: 0, b: 0, a: 1} + mPivot: 4 + mWidth: 542 + mHeight: 542 + mDepth: 2 + mMat: {fileID: 0} + autoResizeBoxCollider: 0 + hideIfOffScreen: 0 + keepAspectRatio: 0 + aspectRatio: 1 + mType: 1 + mFillDirection: 4 + mFillAmount: 1 + mInvert: 0 + mFlip: 0 + mApplyGradient: 0 + mGradientTop: {r: 1, g: 1, b: 1, a: 1} + mGradientBottom: {r: 0.7, g: 0.7, b: 0.7, a: 1} + centerType: 0 + leftType: 1 + rightType: 1 + bottomType: 1 + topType: 1 + mAtlas: {fileID: 11400000, guid: 62adb30369acbf943a67cee0f69267a3, type: 2} + mSpriteName: Glow - Outer + mFillCenter: 1 +--- !u!1 &135712069 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 135712070} + - 114: {fileID: 135712072} + - 54: {fileID: 135712071} + m_Layer: 8 + m_Name: Panel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &135712070 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 135712069} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -121.03, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 58861212} + - {fileID: 835738579} + - {fileID: 801415914} + - {fileID: 997192510} + - {fileID: 829023034} + - {fileID: 1639879716} + - {fileID: 727932026} + m_Father: {fileID: 703824484} + m_RootOrder: 2 +--- !u!54 &135712071 +Rigidbody: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 135712069} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 0 + m_IsKinematic: 1 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!114 &135712072 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 135712069} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ae942c9068183dc40a9d01f648273726, type: 3} + m_Name: + m_EditorClassIdentifier: + leftAnchor: + target: {fileID: 0} + relative: 0 + absolute: 0 + rightAnchor: + target: {fileID: 0} + relative: 1 + absolute: 0 + bottomAnchor: + target: {fileID: 0} + relative: 0 + absolute: 0 + topAnchor: + target: {fileID: 0} + relative: 1 + absolute: 0 + updateAnchors: 1 + showInPanelTool: 1 + generateNormals: 0 + generateUV2: 0 + shadowMode: 0 + widgetsAreStatic: 0 + cullWhileDragging: 0 + alwaysOnScreen: 0 + anchorOffset: 0 + softBorderPadding: 1 + renderQueue: 0 + startingRenderQueue: 3001 + mClipTexture: {fileID: 0} + mAlpha: 1 + mClipping: 0 + mClipRange: {x: 0, y: 0, z: 100, w: 100} + mClipSoftness: {x: 40, y: 40} + mDepth: 2 + mSortingOrder: 0 + mSortingLayerName: + mClipOffset: {x: 0, y: 0} +--- !u!1 &144047939 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 144047940} + - 114: {fileID: 144047941} + m_Layer: 8 + m_Name: SlicedSprite + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &144047940 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 144047939} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 801415914} + m_RootOrder: 2 +--- !u!114 &144047941 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 144047939} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1b3dc54f924693f41b5cbecb267e647a, type: 3} + m_Name: + m_EditorClassIdentifier: + leftAnchor: + target: {fileID: 0} + relative: 0 + absolute: 0 + rightAnchor: + target: {fileID: 0} + relative: 1 + absolute: 0 + bottomAnchor: + target: {fileID: 0} + relative: 0 + absolute: 0 + topAnchor: + target: {fileID: 0} + relative: 1 + absolute: 0 + updateAnchors: 1 + mColor: {r: 0.738806, g: 0.54429054, b: 0.3418356, a: 1} + mPivot: 3 + mWidth: 150 + mHeight: 34 + mDepth: 24 + mMat: {fileID: 0} + autoResizeBoxCollider: 0 + hideIfOffScreen: 0 + keepAspectRatio: 0 + aspectRatio: 4.4117646 + mType: 1 + mFillDirection: 4 + mFillAmount: 1 + mInvert: 0 + mFlip: 0 + mApplyGradient: 0 + mGradientTop: {r: 1, g: 1, b: 1, a: 1} + mGradientBottom: {r: 0.7, g: 0.7, b: 0.7, a: 1} + centerType: 1 + leftType: 1 + rightType: 1 + bottomType: 1 + topType: 1 + mAtlas: {fileID: 11400000, guid: 62adb30369acbf943a67cee0f69267a3, type: 2} + mSpriteName: Button + mFillCenter: 1 +--- !u!1 &191174248 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 191174249} + - 114: {fileID: 191174250} + m_Layer: 8 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &191174249 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 191174248} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0, y: 1, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 703824484} + m_RootOrder: 1 +--- !u!114 &191174250 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 191174248} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d5c5ca47aa5c01740810b7c66662099f, type: 3} + m_Name: + m_EditorClassIdentifier: + leftAnchor: + target: {fileID: 703824484} + relative: -0.1 + absolute: 0 + rightAnchor: + target: {fileID: 703824484} + relative: 1.1 + absolute: 0 + bottomAnchor: + target: {fileID: 703824484} + relative: 0 + absolute: 0 + topAnchor: + target: {fileID: 703824484} + relative: 1 + absolute: 2 + updateAnchors: 1 + mColor: {r: 1, g: 1, b: 1, a: 1} + mPivot: 4 + mWidth: 1202 + mHeight: 381 + mDepth: -8 + mMat: {fileID: 0} + autoResizeBoxCollider: 0 + hideIfOffScreen: 0 + keepAspectRatio: 0 + aspectRatio: 3.1548557 + mType: 0 + mFillDirection: 4 + mFillAmount: 1 + mInvert: 0 + mFlip: 0 + mApplyGradient: 0 + mGradientTop: {r: 1, g: 1, b: 1, a: 1} + mGradientBottom: {r: 0.7, g: 0.7, b: 0.7, a: 1} + centerType: 1 + leftType: 1 + rightType: 1 + bottomType: 1 + topType: 1 + mRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + mTexture: {fileID: 2800000, guid: 20f7cab44eaf6e849a8b7131f390055a, type: 3} + mShader: {fileID: 4800000, guid: e75727d9555d9d14ca51d91908c681bc, type: 3} + mBorder: {x: 0, y: 0, z: 0, w: 0} + mFixedAspect: 0 +--- !u!1 &273434654 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 273434655} + - 114: {fileID: 273434656} + m_Layer: 8 + m_Name: Sprite (Screw) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &273434655 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 273434654} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 230, y: 230, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 1639879716} + m_RootOrder: 2 +--- !u!114 &273434656 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 273434654} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1b3dc54f924693f41b5cbecb267e647a, type: 3} + m_Name: + m_EditorClassIdentifier: + leftAnchor: + target: {fileID: 0} + relative: 0 + absolute: 0 + rightAnchor: + target: {fileID: 0} + relative: 1 + absolute: 0 + bottomAnchor: + target: {fileID: 0} + relative: 0 + absolute: 0 + topAnchor: + target: {fileID: 0} + relative: 1 + absolute: 0 + updateAnchors: 1 + mColor: {r: 0.7761194, g: 0.7482533, b: 0.72978395, a: 1} + mPivot: 4 + mWidth: 30 + mHeight: 32 + mDepth: 8 + mMat: {fileID: 0} + autoResizeBoxCollider: 0 + hideIfOffScreen: 0 + keepAspectRatio: 0 + aspectRatio: 0.9375 + mType: 0 + mFillDirection: 4 + mFillAmount: 1 + mInvert: 0 + mFlip: 0 + mApplyGradient: 0 + mGradientTop: {r: 1, g: 1, b: 1, a: 1} + mGradientBottom: {r: 0.7, g: 0.7, b: 0.7, a: 1} + centerType: 1 + leftType: 1 + rightType: 1 + bottomType: 1 + topType: 1 + mAtlas: {fileID: 11400000, guid: 62adb30369acbf943a67cee0f69267a3, type: 2} + mSpriteName: Screw + mFillCenter: 1 +--- !u!1 &419819764 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 419819768} + - 20: {fileID: 419819767} + - 81: {fileID: 419819766} + - 114: {fileID: 419819765} + m_Layer: 8 + m_Name: Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &419819765 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 419819764} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2a92b5d748695fd44aac9feef17ba415, type: 3} + m_Name: + m_EditorClassIdentifier: + eventType: 1 + eventsGoToColliders: 0 + eventReceiverMask: + serializedVersion: 2 + m_Bits: 4294967295 + processEventsIn: 0 + debug: 0 + useMouse: 1 + useTouch: 1 + allowMultiTouch: 1 + useKeyboard: 1 + useController: 1 + stickyTooltip: 1 + tooltipDelay: 1 + longPressTooltip: 0 + mouseDragThreshold: 4 + mouseClickThreshold: 10 + touchDragThreshold: 40 + touchClickThreshold: 40 + rangeDistance: -1 + horizontalAxisName: Horizontal + verticalAxisName: Vertical + horizontalPanAxisName: + verticalPanAxisName: + scrollAxisName: Mouse ScrollWheel + commandClick: 1 + submitKey0: 13 + submitKey1: 330 + cancelKey0: 27 + cancelKey1: 331 + autoHideCursor: 1 +--- !u!81 &419819766 +AudioListener: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 419819764} + m_Enabled: 1 +--- !u!20 &419819767 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 419819764} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: -2 + far clip plane: 2 + field of view: 60 + orthographic: 1 + orthographic size: 1 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 256 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 + m_StereoMirrorMode: 0 +--- !u!4 &419819768 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 419819764} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 703824484} + m_RootOrder: 0 +--- !u!1 &546858249 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 546858250} + - 114: {fileID: 546858253} + - 65: {fileID: 546858252} + - 114: {fileID: 546858251} + m_Layer: 8 + m_Name: Sprite (NGUI) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &546858250 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 546858249} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 727932026} + m_RootOrder: 1 +--- !u!114 &546858251 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 546858249} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b90fc8427bee38c478f5b2f6f0ae9580, type: 3} + m_Name: + m_EditorClassIdentifier: + target: {fileID: 0} + panelRegion: {fileID: 0} + scrollMomentum: {x: 0, y: 0, z: 0} + restrictWithinPanel: 0 + contentRect: {fileID: 0} + dragEffect: 0 + momentumAmount: 35 + scale: {x: 1, y: 1, z: 0} + scrollWheelFactor: 0 +--- !u!65 &546858252 +BoxCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 546858249} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 255.00003, y: 76, z: 0} + m_Center: {x: 0, y: 0, z: -5.25} +--- !u!114 &546858253 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 546858249} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1b3dc54f924693f41b5cbecb267e647a, type: 3} + m_Name: + m_EditorClassIdentifier: + leftAnchor: + target: {fileID: 0} + relative: 0 + absolute: 0 + rightAnchor: + target: {fileID: 0} + relative: 1 + absolute: 0 + bottomAnchor: + target: {fileID: 0} + relative: 0 + absolute: 0 + topAnchor: + target: {fileID: 0} + relative: 1 + absolute: 0 + updateAnchors: 1 + mColor: {r: 1, g: 1, b: 1, a: 1} + mPivot: 4 + mWidth: 256 + mHeight: 76 + mDepth: 20 + mMat: {fileID: 0} + autoResizeBoxCollider: 0 + hideIfOffScreen: 0 + keepAspectRatio: 0 + aspectRatio: 3.368421 + mType: 0 + mFillDirection: 4 + mFillAmount: 1 + mInvert: 0 + mFlip: 0 + mApplyGradient: 0 + mGradientTop: {r: 1, g: 1, b: 1, a: 1} + mGradientBottom: {r: 0.7, g: 0.7, b: 0.7, a: 1} + centerType: 1 + leftType: 1 + rightType: 1 + bottomType: 1 + topType: 1 + mAtlas: {fileID: 11400000, guid: 62adb30369acbf943a67cee0f69267a3, type: 2} + mSpriteName: NGUI + mFillCenter: 1 +--- !u!1 &592293685 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 592293686} + - 114: {fileID: 592293687} + m_Layer: 8 + m_Name: Sprite (Screw) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &592293686 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 592293685} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -232, y: 230, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 1639879716} + m_RootOrder: 4 +--- !u!114 &592293687 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 592293685} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1b3dc54f924693f41b5cbecb267e647a, type: 3} + m_Name: + m_EditorClassIdentifier: + leftAnchor: + target: {fileID: 0} + relative: 0 + absolute: 0 + rightAnchor: + target: {fileID: 0} + relative: 1 + absolute: 0 + bottomAnchor: + target: {fileID: 0} + relative: 0 + absolute: 0 + topAnchor: + target: {fileID: 0} + relative: 1 + absolute: 0 + updateAnchors: 1 + mColor: {r: 0.7761194, g: 0.7482533, b: 0.72978395, a: 1} + mPivot: 4 + mWidth: 30 + mHeight: 32 + mDepth: 8 + mMat: {fileID: 0} + autoResizeBoxCollider: 0 + hideIfOffScreen: 0 + keepAspectRatio: 0 + aspectRatio: 0.9375 + mType: 0 + mFillDirection: 4 + mFillAmount: 1 + mInvert: 0 + mFlip: 0 + mApplyGradient: 0 + mGradientTop: {r: 1, g: 1, b: 1, a: 1} + mGradientBottom: {r: 0.7, g: 0.7, b: 0.7, a: 1} + centerType: 1 + leftType: 1 + rightType: 1 + bottomType: 1 + topType: 1 + mAtlas: {fileID: 11400000, guid: 62adb30369acbf943a67cee0f69267a3, type: 2} + mSpriteName: Screw + mFillCenter: 1 +--- !u!1 &703824483 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 703824484} + - 114: {fileID: 703824487} + - 114: {fileID: 703824486} + - 54: {fileID: 703824485} + m_Layer: 8 + m_Name: UI Root (2D) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &703824484 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 703824483} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.005277045, y: 0.005277045, z: 0.005277045} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 419819768} + - {fileID: 191174249} + - {fileID: 135712070} + m_Father: {fileID: 0} + m_RootOrder: 1 +--- !u!54 &703824485 +Rigidbody: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 703824483} + serializedVersion: 2 + m_Mass: 1 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 0 + m_IsKinematic: 1 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 0 +--- !u!114 &703824486 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 703824483} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ae942c9068183dc40a9d01f648273726, type: 3} + m_Name: + m_EditorClassIdentifier: + leftAnchor: + target: {fileID: 0} + relative: 0 + absolute: 0 + rightAnchor: + target: {fileID: 0} + relative: 1 + absolute: 0 + bottomAnchor: + target: {fileID: 0} + relative: 0 + absolute: 0 + topAnchor: + target: {fileID: 0} + relative: 1 + absolute: 0 + updateAnchors: 1 + showInPanelTool: 1 + generateNormals: 0 + generateUV2: 0 + shadowMode: 0 + widgetsAreStatic: 0 + cullWhileDragging: 0 + alwaysOnScreen: 0 + anchorOffset: 0 + softBorderPadding: 1 + renderQueue: 0 + startingRenderQueue: 3000 + mClipTexture: {fileID: 0} + mAlpha: 1 + mClipping: 0 + mClipRange: {x: 0, y: 0, z: 0, w: 0} + mClipSoftness: {x: 40, y: 40} + mDepth: 0 + mSortingOrder: 0 + mSortingLayerName: + mClipOffset: {x: 0, y: 0} +--- !u!114 &703824487 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 703824483} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2c5ecb5660b11414fb042fb826e03b73, type: 3} + m_Name: + m_EditorClassIdentifier: + scalingStyle: 1 + manualWidth: 490 + manualHeight: 379 + minimumHeight: 320 + maximumHeight: 1536 + fitWidth: 1 + fitHeight: 1 + adjustByDPI: 0 + shrinkPortraitUI: 0 +--- !u!1 &727932025 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 727932026} + m_Layer: 8 + m_Name: Logo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &727932026 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 727932025} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 268, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 1782326303} + - {fileID: 546858250} + m_Father: {fileID: 135712070} + m_RootOrder: 6 +--- !u!1 &801415913 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 801415914} + - 65: {fileID: 801415919} + - 114: {fileID: 801415918} + - 114: {fileID: 801415917} + - 114: {fileID: 801415916} + - 114: {fileID: 801415915} + m_Layer: 8 + m_Name: Popup List + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &801415914 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 801415913} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -28, y: 176, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 1037161335} + - {fileID: 1488745743} + - {fileID: 144047940} + m_Father: {fileID: 135712070} + m_RootOrder: 2 +--- !u!114 &801415915 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 801415913} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 36d92fc19cfafc84d8014a1589d64233, type: 3} + m_Name: + m_EditorClassIdentifier: + Source: {fileID: 1849336303} +--- !u!114 &801415916 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 801415913} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7d44bc69c2ca5f943b845318866dc1bd, type: 3} + m_Name: + m_EditorClassIdentifier: + audioClip: {fileID: 8300000, guid: b5083cfe83bb875479bd797c61594131, type: 3} + trigger: 0 + volume: 1 + pitch: 1 +--- !u!114 &801415917 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 801415913} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 15cc9c62605319f4a9b20b15918913fa, type: 3} + m_Name: + m_EditorClassIdentifier: + tweenTarget: {fileID: 144047939} + hover: {r: 0.6, g: 1, b: 0.2, a: 1} + pressed: {r: 0.47014928, g: 0.28811607, b: 0.12630877, a: 1} + disabledColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + duration: 0.2 +--- !u!114 &801415918 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 801415913} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 57e428c9b6087304da439ec665b56a2d, type: 3} + m_Name: + m_EditorClassIdentifier: + atlas: {fileID: 11400000, guid: 62adb30369acbf943a67cee0f69267a3, type: 2} + bitmapFont: {fileID: 11400000, guid: 29056518aafb01b49a5b08faf8e30cff, type: 2} + trueTypeFont: {fileID: 0} + fontSize: 20 + fontStyle: 0 + backgroundSprite: Button + highlightSprite: Button + background2DSprite: {fileID: 0} + highlight2DSprite: {fileID: 0} + position: 0 + alignment: 1 + items: + - Language + padding: {x: 5, y: 5} + textColor: {r: 1, g: 1, b: 1, a: 1} + backgroundColor: {r: 0.33446294, g: 0.48507464, b: 0.1882379, a: 1} + highlightColor: {r: 0.59607846, g: 1, b: 0.2, a: 1} + isAnimated: 1 + isLocalized: 0 + separatePanel: 1 + overlap: 0 + openOn: 0 + onChange: + - mTarget: {fileID: 1037161336} + mMethodName: SetCurrentSelection + mParameters: [] + oneShot: 0 + mSelectedItem: + mPanel: {fileID: 0} + mBackground: {fileID: 0} + mHighlight: {fileID: 0} + mHighlightedLabel: {fileID: 0} + mLabelList: [] + mBgBorder: 0 + keepValue: 0 + eventReceiver: {fileID: 0} + functionName: + textScale: 0 + font: {fileID: 0} + textLabel: {fileID: 0} + source: {fileID: 0} +--- !u!65 &801415919 +BoxCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 801415913} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 150, y: 34, z: 0} + m_Center: {x: 75, y: 0, z: -6.5} +--- !u!1 &829023033 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 829023034} + - 114: {fileID: 829023035} + m_Layer: 8 + m_Name: SlicedSprite (Row Outline) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &829023034 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 829023033} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 104, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 135712070} + m_RootOrder: 4 +--- !u!114 &829023035 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 829023033} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1b3dc54f924693f41b5cbecb267e647a, type: 3} + m_Name: + m_EditorClassIdentifier: + leftAnchor: + target: {fileID: 0} + relative: 0 + absolute: 0 + rightAnchor: + target: {fileID: 0} + relative: 1 + absolute: 0 + bottomAnchor: + target: {fileID: 0} + relative: 0 + absolute: 0 + topAnchor: + target: {fileID: 0} + relative: 1 + absolute: 0 + updateAnchors: 1 + mColor: {r: 0.22745098, g: 0.13333334, b: 0.050980393, a: 0.6784314} + mPivot: 4 + mWidth: 426 + mHeight: 30 + mDepth: 16 + mMat: {fileID: 0} + autoResizeBoxCollider: 0 + hideIfOffScreen: 0 + keepAspectRatio: 0 + aspectRatio: 14.2 + mType: 1 + mFillDirection: 4 + mFillAmount: 1 + mInvert: 0 + mFlip: 0 + mApplyGradient: 0 + mGradientTop: {r: 1, g: 1, b: 1, a: 1} + mGradientBottom: {r: 0.7, g: 0.7, b: 0.7, a: 1} + centerType: 1 + leftType: 1 + rightType: 1 + bottomType: 1 + topType: 1 + mAtlas: {fileID: 11400000, guid: 62adb30369acbf943a67cee0f69267a3, type: 2} + mSpriteName: Row Outline + mFillCenter: 1 +--- !u!1 &835738578 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 835738579} + - 114: {fileID: 835738581} + - 114: {fileID: 835738580} + - 114: {fileID: 835738582} + m_Layer: 8 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &835738579 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 835738578} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -4, y: 104, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 135712070} + m_RootOrder: 1 +--- !u!114 &835738580 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 835738578} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 344445a89b4f74a0e9a0a766903df87e, type: 3} + m_Name: + m_EditorClassIdentifier: + mTerm: MyCallBack + mTermSecondary: + PrimaryTermModifier: 0 + SecondaryTermModifier: 0 + TermPrefix: + TermSuffix: + LocalizeOnAwake: 1 + Source: {fileID: 1849336303} + mTarget: {fileID: 835738581} + IgnoreRTL: 0 + MaxCharactersInRTL: 0 + IgnoreNumbersInRTL: 1 + CorrectAlignmentForRTL: 1 + AddSpacesToJoinedLanguages: 0 + TranslatedObjects: [] + LocalizeCallBack: + Target: {fileID: 835738582} + MethodName: OnModifyLocalization + AlwaysForceLocalize: 0 + mGUI_ShowReferences: 0 + mGUI_ShowTems: 1 + mGUI_ShowCallback: 0 +--- !u!114 &835738581 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 835738578} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e9d0b5f3bbe925a408bd595c79d0bf63, type: 3} + m_Name: + m_EditorClassIdentifier: + leftAnchor: + target: {fileID: 0} + relative: 0 + absolute: 0 + rightAnchor: + target: {fileID: 0} + relative: 1 + absolute: 0 + bottomAnchor: + target: {fileID: 0} + relative: 0 + absolute: 0 + topAnchor: + target: {fileID: 0} + relative: 1 + absolute: 0 + updateAnchors: 1 + mColor: {r: 0.2835821, g: 0.18351865, b: 0.09946536, a: 1} + mPivot: 4 + mWidth: 356 + mHeight: 20 + mDepth: 28 + mMat: {fileID: 0} + autoResizeBoxCollider: 0 + hideIfOffScreen: 0 + keepAspectRatio: 0 + aspectRatio: 17.8 + keepCrispWhenShrunk: 1 + mTrueTypeFont: {fileID: 0} + mFont: {fileID: 11400000, guid: 29056518aafb01b49a5b08faf8e30cff, type: 2} + mText: El jugador {PLAYER_COLOR} ha ganado! + mFontSize: 20 + mFontStyle: 0 + mAlignment: 0 + mEncoding: 1 + mMaxLineCount: 0 + mEffectStyle: 1 + mEffectColor: {r: 0.8862745, g: 0.654902, b: 0.41568628, a: 1} + mSymbols: 1 + mEffectDistance: {x: 1, y: 1} + mOverflow: 2 + mApplyGradient: 0 + mGradientTop: {r: 1, g: 1, b: 1, a: 1} + mGradientBottom: {r: 0.5, g: 0.5, b: 0.5, a: 1} + mSpacingX: 0 + mSpacingY: 0 + mUseFloatSpacing: 0 + mFloatSpacingX: 0 + mFloatSpacingY: 0 + mOverflowEllipsis: 0 + mOverflowWidth: 0 + mModifier: 0 + mShrinkToFit: 0 + mMaxLineWidth: 0 + mMaxLineHeight: 0 + mLineWidth: 0 + mMultiline: 1 +--- !u!114 &835738582 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 835738578} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fc44345ca9310574fa50c645e6a7254f, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &952985842 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 952985843} + - 114: {fileID: 952985845} + - 65: {fileID: 952985844} + m_Layer: 8 + m_Name: SlicedSprite (Glow - Inner) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &952985843 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 952985842} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 1639879716} + m_RootOrder: 1 +--- !u!65 &952985844 +BoxCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 952985842} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 0.99999994, z: 0} + m_Center: {x: -0.000000059604645, y: 0, z: -0.25} +--- !u!114 &952985845 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 952985842} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1b3dc54f924693f41b5cbecb267e647a, type: 3} + m_Name: + m_EditorClassIdentifier: + leftAnchor: + target: {fileID: 0} + relative: 0 + absolute: 0 + rightAnchor: + target: {fileID: 0} + relative: 1 + absolute: 0 + bottomAnchor: + target: {fileID: 0} + relative: 0 + absolute: 0 + topAnchor: + target: {fileID: 0} + relative: 1 + absolute: 0 + updateAnchors: 1 + mColor: {r: 0, g: 0, b: 0, a: 0.4117647} + mPivot: 4 + mWidth: 500 + mHeight: 500 + mDepth: 1 + mMat: {fileID: 0} + autoResizeBoxCollider: 0 + hideIfOffScreen: 0 + keepAspectRatio: 0 + aspectRatio: 1 + mType: 1 + mFillDirection: 4 + mFillAmount: 1 + mInvert: 0 + mFlip: 0 + mApplyGradient: 0 + mGradientTop: {r: 1, g: 1, b: 1, a: 1} + mGradientBottom: {r: 0.7, g: 0.7, b: 0.7, a: 1} + centerType: 1 + leftType: 1 + rightType: 1 + bottomType: 1 + topType: 1 + mAtlas: {fileID: 11400000, guid: 62adb30369acbf943a67cee0f69267a3, type: 2} + mSpriteName: Glow - Inner + mFillCenter: 1 +--- !u!1 &997192509 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 997192510} + - 114: {fileID: 997192512} + - 114: {fileID: 997192511} + m_Layer: 8 + m_Name: Sprite (Flag-US) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &997192510 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 997192509} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -85, y: 179, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 135712070} + m_RootOrder: 3 +--- !u!114 &997192511 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 997192509} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 344445a89b4f74a0e9a0a766903df87e, type: 3} + m_Name: + m_EditorClassIdentifier: + mTerm: Flag + mTermSecondary: + PrimaryTermModifier: 0 + SecondaryTermModifier: 0 + TermPrefix: + TermSuffix: + LocalizeOnAwake: 1 + Source: {fileID: 0} + mTarget: {fileID: 997192512} + IgnoreRTL: 0 + MaxCharactersInRTL: 0 + IgnoreNumbersInRTL: 1 + CorrectAlignmentForRTL: 1 + AddSpacesToJoinedLanguages: 0 + TranslatedObjects: [] + LocalizeCallBack: + Target: {fileID: 0} + MethodName: + AlwaysForceLocalize: 0 + mGUI_ShowReferences: 0 + mGUI_ShowTems: 1 + mGUI_ShowCallback: 0 +--- !u!114 &997192512 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 997192509} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1b3dc54f924693f41b5cbecb267e647a, type: 3} + m_Name: + m_EditorClassIdentifier: + leftAnchor: + target: {fileID: 0} + relative: 0 + absolute: 0 + rightAnchor: + target: {fileID: 0} + relative: 1 + absolute: 0 + bottomAnchor: + target: {fileID: 0} + relative: 0 + absolute: 0 + topAnchor: + target: {fileID: 0} + relative: 1 + absolute: 0 + updateAnchors: 1 + mColor: {r: 1, g: 1, b: 1, a: 1} + mPivot: 4 + mWidth: 32 + mHeight: 32 + mDepth: 23 + mMat: {fileID: 0} + autoResizeBoxCollider: 0 + hideIfOffScreen: 0 + keepAspectRatio: 0 + aspectRatio: 1 + mType: 0 + mFillDirection: 4 + mFillAmount: 1 + mInvert: 0 + mFlip: 0 + mApplyGradient: 0 + mGradientTop: {r: 1, g: 1, b: 1, a: 1} + mGradientBottom: {r: 0.7, g: 0.7, b: 0.7, a: 1} + centerType: 1 + leftType: 1 + rightType: 1 + bottomType: 1 + topType: 1 + mAtlas: {fileID: 11400000, guid: 62adb30369acbf943a67cee0f69267a3, type: 2} + mSpriteName: X Mark + mFillCenter: 1 +--- !u!1 &1037161334 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 1037161335} + - 114: {fileID: 1037161336} + m_Layer: 8 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1037161335 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1037161334} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 5, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 801415914} + m_RootOrder: 0 +--- !u!114 &1037161336 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1037161334} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e9d0b5f3bbe925a408bd595c79d0bf63, type: 3} + m_Name: + m_EditorClassIdentifier: + leftAnchor: + target: {fileID: 0} + relative: 0 + absolute: 0 + rightAnchor: + target: {fileID: 0} + relative: 1 + absolute: 0 + bottomAnchor: + target: {fileID: 0} + relative: 0 + absolute: 0 + topAnchor: + target: {fileID: 0} + relative: 1 + absolute: 0 + updateAnchors: 1 + mColor: {r: 0.2835821, g: 0.18351865, b: 0.09946536, a: 1} + mPivot: 3 + mWidth: 86 + mHeight: 20 + mDepth: 25 + mMat: {fileID: 0} + autoResizeBoxCollider: 0 + hideIfOffScreen: 0 + keepAspectRatio: 0 + aspectRatio: 4.3 + keepCrispWhenShrunk: 1 + mTrueTypeFont: {fileID: 0} + mFont: {fileID: 11400000, guid: 29056518aafb01b49a5b08faf8e30cff, type: 2} + mText: Language + mFontSize: 20 + mFontStyle: 0 + mAlignment: 0 + mEncoding: 1 + mMaxLineCount: 0 + mEffectStyle: 0 + mEffectColor: {r: 0, g: 0, b: 0, a: 1} + mSymbols: 1 + mEffectDistance: {x: 1, y: 1} + mOverflow: 2 + mApplyGradient: 0 + mGradientTop: {r: 1, g: 1, b: 1, a: 1} + mGradientBottom: {r: 0.5, g: 0.5, b: 0.5, a: 1} + mSpacingX: 0 + mSpacingY: 0 + mUseFloatSpacing: 0 + mFloatSpacingX: 0 + mFloatSpacingY: 0 + mOverflowEllipsis: 0 + mOverflowWidth: 0 + mModifier: 0 + mShrinkToFit: 0 + mMaxLineWidth: 0 + mMaxLineHeight: 0 + mLineWidth: 0 + mMultiline: 1 +--- !u!1 &1417586481 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 1417586482} + - 114: {fileID: 1417586483} + m_Layer: 8 + m_Name: Sprite (Screw) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1417586482 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1417586481} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 230, y: -230, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 1639879716} + m_RootOrder: 5 +--- !u!114 &1417586483 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1417586481} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1b3dc54f924693f41b5cbecb267e647a, type: 3} + m_Name: + m_EditorClassIdentifier: + leftAnchor: + target: {fileID: 0} + relative: 0 + absolute: 0 + rightAnchor: + target: {fileID: 0} + relative: 1 + absolute: 0 + bottomAnchor: + target: {fileID: 0} + relative: 0 + absolute: 0 + topAnchor: + target: {fileID: 0} + relative: 1 + absolute: 0 + updateAnchors: 1 + mColor: {r: 0.7761194, g: 0.7482533, b: 0.72978395, a: 1} + mPivot: 4 + mWidth: 30 + mHeight: 32 + mDepth: 8 + mMat: {fileID: 0} + autoResizeBoxCollider: 0 + hideIfOffScreen: 0 + keepAspectRatio: 0 + aspectRatio: 0.9375 + mType: 0 + mFillDirection: 4 + mFillAmount: 1 + mInvert: 0 + mFlip: 0 + mApplyGradient: 0 + mGradientTop: {r: 1, g: 1, b: 1, a: 1} + mGradientBottom: {r: 0.7, g: 0.7, b: 0.7, a: 1} + centerType: 1 + leftType: 1 + rightType: 1 + bottomType: 1 + topType: 1 + mAtlas: {fileID: 11400000, guid: 62adb30369acbf943a67cee0f69267a3, type: 2} + mSpriteName: Screw + mFillCenter: 1 +--- !u!1 &1488745742 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 1488745743} + - 114: {fileID: 1488745744} + m_Layer: 8 + m_Name: SlicedSprite (Highlight - Shadowed) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1488745743 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1488745742} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -3, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 801415914} + m_RootOrder: 1 +--- !u!114 &1488745744 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1488745742} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1b3dc54f924693f41b5cbecb267e647a, type: 3} + m_Name: + m_EditorClassIdentifier: + leftAnchor: + target: {fileID: 0} + relative: 0 + absolute: 0 + rightAnchor: + target: {fileID: 0} + relative: 1 + absolute: 0 + bottomAnchor: + target: {fileID: 0} + relative: 0 + absolute: 0 + topAnchor: + target: {fileID: 0} + relative: 1 + absolute: 0 + updateAnchors: 1 + mColor: {r: 1, g: 1, b: 1, a: 0.6431373} + mPivot: 3 + mWidth: 156 + mHeight: 40 + mDepth: 23 + mMat: {fileID: 0} + autoResizeBoxCollider: 0 + hideIfOffScreen: 0 + keepAspectRatio: 0 + aspectRatio: 3.9 + mType: 1 + mFillDirection: 4 + mFillAmount: 1 + mInvert: 0 + mFlip: 0 + mApplyGradient: 0 + mGradientTop: {r: 1, g: 1, b: 1, a: 1} + mGradientBottom: {r: 0.7, g: 0.7, b: 0.7, a: 1} + centerType: 0 + leftType: 1 + rightType: 1 + bottomType: 1 + topType: 1 + mAtlas: {fileID: 11400000, guid: 62adb30369acbf943a67cee0f69267a3, type: 2} + mSpriteName: Highlight - Shadowed + mFillCenter: 1 +--- !u!1 &1535978932 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 1535978933} + - 114: {fileID: 1535978934} + m_Layer: 8 + m_Name: Sprite (Screw) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1535978933 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1535978932} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -232, y: -230, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 1639879716} + m_RootOrder: 3 +--- !u!114 &1535978934 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1535978932} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1b3dc54f924693f41b5cbecb267e647a, type: 3} + m_Name: + m_EditorClassIdentifier: + leftAnchor: + target: {fileID: 0} + relative: 0 + absolute: 0 + rightAnchor: + target: {fileID: 0} + relative: 1 + absolute: 0 + bottomAnchor: + target: {fileID: 0} + relative: 0 + absolute: 0 + topAnchor: + target: {fileID: 0} + relative: 1 + absolute: 0 + updateAnchors: 1 + mColor: {r: 0.7761194, g: 0.7482533, b: 0.72978395, a: 1} + mPivot: 4 + mWidth: 30 + mHeight: 32 + mDepth: 8 + mMat: {fileID: 0} + autoResizeBoxCollider: 0 + hideIfOffScreen: 0 + keepAspectRatio: 0 + aspectRatio: 0.9375 + mType: 0 + mFillDirection: 4 + mFillAmount: 1 + mInvert: 0 + mFlip: 0 + mApplyGradient: 0 + mGradientTop: {r: 1, g: 1, b: 1, a: 1} + mGradientBottom: {r: 0.7, g: 0.7, b: 0.7, a: 1} + centerType: 1 + leftType: 1 + rightType: 1 + bottomType: 1 + topType: 1 + mAtlas: {fileID: 11400000, guid: 62adb30369acbf943a67cee0f69267a3, type: 2} + mSpriteName: Screw + mFillCenter: 1 +--- !u!1 &1639879715 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 1639879716} + m_Layer: 8 + m_Name: Window + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1639879716 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1639879715} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 67446546} + - {fileID: 952985843} + - {fileID: 273434655} + - {fileID: 1535978933} + - {fileID: 592293686} + - {fileID: 1417586482} + - {fileID: 47460366} + m_Father: {fileID: 135712070} + m_RootOrder: 5 +--- !u!1 &1782326302 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 1782326303} + - 114: {fileID: 1782326304} + m_Layer: 8 + m_Name: SlicedSprite (Thick Border) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1782326303 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1782326302} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 727932026} + m_RootOrder: 0 +--- !u!114 &1782326304 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1782326302} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1b3dc54f924693f41b5cbecb267e647a, type: 3} + m_Name: + m_EditorClassIdentifier: + leftAnchor: + target: {fileID: 0} + relative: 0 + absolute: 0 + rightAnchor: + target: {fileID: 0} + relative: 1 + absolute: 0 + bottomAnchor: + target: {fileID: 0} + relative: 0 + absolute: 0 + topAnchor: + target: {fileID: 0} + relative: 1 + absolute: 0 + updateAnchors: 1 + mColor: {r: 0, g: 0, b: 0, a: 1} + mPivot: 4 + mWidth: 292 + mHeight: 116 + mDepth: 4 + mMat: {fileID: 0} + autoResizeBoxCollider: 0 + hideIfOffScreen: 0 + keepAspectRatio: 0 + aspectRatio: 2.5172415 + mType: 1 + mFillDirection: 4 + mFillAmount: 1 + mInvert: 0 + mFlip: 0 + mApplyGradient: 0 + mGradientTop: {r: 1, g: 1, b: 1, a: 1} + mGradientBottom: {r: 0.7, g: 0.7, b: 0.7, a: 1} + centerType: 0 + leftType: 1 + rightType: 1 + bottomType: 1 + topType: 1 + mAtlas: {fileID: 11400000, guid: 62adb30369acbf943a67cee0f69267a3, type: 2} + mSpriteName: Glow - Outer + mFillCenter: 1 +--- !u!1 &1849336301 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 4 + m_Component: + - 4: {fileID: 1849336302} + - 114: {fileID: 1849336303} + m_Layer: 0 + m_Name: LanguageSource + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1849336302 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1849336301} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 +--- !u!114 &1849336303 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1849336301} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 488051eaa73ba421e8fe4868f2e0f364, type: 3} + m_Name: + m_EditorClassIdentifier: + Google_WebServiceURL: + Google_SpreadsheetKey: teVYmvqeNTF8ZkQhQ21a0Gw + Google_SpreadsheetName: + Google_LastUpdatedVersion: + GoogleUpdateFrequency: 3 + GoogleUpdateDelay: 5 + mTerms: + - Term: Color/Red + TermType: 0 + Description: + Languages: + - Red + - Rouge + - Rojo + Languages_Touch: + - + - + - + Flags: 000000 + - Term: Flag + TermType: 0 + Description: + Languages: + - Flag-US + - Flag-FR + - X Mark + Languages_Touch: + - + - + - + Flags: 000000 + - Term: MyCallBack + TermType: 0 + Description: + Languages: + - '{PLAYER_COLOR} Player Wins!' + - Joueur {PLAYER_COLOR} gagne! + - El jugador {PLAYER_COLOR} ha ganado! + Languages_Touch: + - + - + - + Flags: 000000 + - Term: Paragraph + TermType: 0 + Description: + Languages: + - "This example shows how to localize NGUI.\r\n[000000]UILabels, UISprites and + UITextures[-] are supported by simply adding a [000000]Localize[-] component + to them and setting up a [000000]LanguageSource[-] in the Scene/Project." + - "Cet exemple montre comment localiser NGUI.\r\n[000000]UILabels, UISprites et + UITextures[-] sont pris en charge par le simple ajout d'un composant [0000FF]Localize[-] + pour eux et la mise en place d'une [0000FF]LanguageSource[-] dans la Sc\xE8ne + / projet." + - "Este ejemplo muestra como localizar NGUI.\r\n[000000]UILabels, UISprites y + UITextures[-] pueden traducirse con solo a\xF1adirles un componente [0000FF]Localize[-] + y la crear un [0000FF]LanguageSource[-] en la escena / Proyecto." + Languages_Touch: + - + - + - + Flags: 000000 + - Term: Arial + TermType: 8 + Description: + Languages: + - + - + - + Languages_Touch: + - Arimo18 + - Coalition + - Arimo14 + Flags: 000000 + mLanguages: + - Name: English + Code: en-US + Flags: 0 + - Name: French + Code: fr-BE + Flags: 0 + - Name: Spanish + Code: es + Flags: 0 + CaseInsensitiveTerms: 0 + Assets: [] + NeverDestroy: 1 + UserAgreesToHaveItOnTheScene: 0 + UserAgreesToHaveItInsideThePluginsFolder: 0 + OnMissingTranslation: 1 + mTerm_AppName: + IgnoreDeviceLanguage: 0 + Spreadsheet_LocalFileName: + Spreadsheet_LocalCSVSeparator: ',' + Spreadsheet_LocalCSVEncoding: Unicode (UTF-8) diff --git a/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization NGUI.unity.meta b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization NGUI.unity.meta new file mode 100644 index 00000000..b68ae0d8 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization NGUI.unity.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: 24242c1420a4d3543b31f00e0366e1ca +DefaultImporter: + userData: diff --git a/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization SVGImporter.unity b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization SVGImporter.unity new file mode 100644 index 00000000..8384e5b6 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization SVGImporter.unity @@ -0,0 +1,1439 @@ +%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: -431602080, g: -431602080, b: -431602080, a: -431602080} + m_AmbientEquatorColor: {r: -431602080, g: -431602080, b: -431602080, a: -431602080} + m_AmbientGroundColor: {r: -431602080, g: -431602080, b: -431602080, a: -431602080} + 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: 10 + m_Resolution: 1 + m_BakeResolution: 1 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 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_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringMode: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + 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 &77474266 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 77474267} + m_Layer: 5 + m_Name: Extras + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &77474267 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 77474266} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 722395055} + 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: -122, y: 66} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &167348268 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 167348269} + m_Layer: 0 + m_Name: Examples + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &167348269 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 167348268} + m_LocalRotation: {x: 0, y: 0, z: 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} +--- !u!1 &301812439 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 301812443} + - component: {fileID: 301812442} + - component: {fileID: 301812441} + - component: {fileID: 301812440} + - component: {fileID: 301812444} + m_Layer: 0 + m_Name: Renderer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &301812440 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 301812439} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: [] + 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: 0 + 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 &301812441 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 301812439} + m_Mesh: {fileID: 0} +--- !u!114 &301812442 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 301812439} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 485ddf2c093d74abf922b2a83a6cd235, type: 3} + m_Name: + m_EditorClassIdentifier: + _type: 0 + _lastTimeModified: 636040408486060870 + _vectorGraphics: {fileID: 0} + _color: {r: 1, g: 1, b: 1, a: 1} + _opaqueMaterial: {fileID: 0} + _transparentMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, type: 3} + _sortingLayerID: 0 + _sortingLayerName: + _sortingOrder: 0 + _overrideSorter: 0 + _overrideSorterChildren: 0 +--- !u!224 &301812443 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 301812439} + 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: 1277673355} + 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: -31, y: 14.5} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &301812444 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 301812439} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 344445a89b4f74a0e9a0a766903df87e, type: 3} + m_Name: + m_EditorClassIdentifier: + mTerm: cityPlane01 + mTermSecondary: + PrimaryTermModifier: 0 + SecondaryTermModifier: 0 + TermPrefix: + TermSuffix: + LocalizeOnAwake: 1 + IgnoreRTL: 0 + MaxCharactersInRTL: 0 + IgnoreNumbersInRTL: 1 + CorrectAlignmentForRTL: 1 + AddSpacesToJoinedLanguages: 0 + AllowLocalizedParameters: 1 + TranslatedObjects: [] + LocalizeEvent: + m_PersistentCalls: + m_Calls: [] + AlwaysForceLocalize: 0 + LocalizeCallBack: + Target: {fileID: 0} + MethodName: + mGUI_ShowReferences: 0 + mGUI_ShowTems: 1 + mGUI_ShowCallback: 0 + mLocalizeTarget: {fileID: 1172369160} + mLocalizeTargetName: I2.Loc.LocalizeTarget_UnityStandard_Prefab +--- !u!1 &326863485 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 326863486} + - component: {fileID: 326863490} + - component: {fileID: 326863489} + - component: {fileID: 326863488} + - component: {fileID: 326863487} + - component: {fileID: 326863491} + m_Layer: 0 + m_Name: Spanish + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &326863486 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 326863485} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1045395102} + 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: 107, y: 55} + m_SizeDelta: {x: 77, y: 66} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &326863487 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 326863485} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1573420865, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_EffectColor: {r: 0, g: 0, b: 0, a: 1} + m_EffectDistance: {x: 3, y: -3} + m_UseGraphicAlpha: 1 +--- !u!114 &326863488 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 326863485} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, 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.5019608, g: 0.5019608, b: 0.5019608, a: 0.5019608} + m_HighlightedColor: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 0.69803923} + m_PressedColor: {r: 0.34509805, g: 0.34509805, b: 0.34509805, a: 0.69803923} + m_DisabledColor: {r: 0.2509804, g: 0.2509804, b: 0.2509804, a: 0.5019608} + m_ColorMultiplier: 2 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 326863489} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 326863491} + m_MethodName: ApplyLanguage + 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: 1 +--- !u!114 &326863489 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 326863485} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, 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_Texture: {fileID: 2800000, guid: 87e96283e85053343bc47c9691614f7c, type: 3} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &326863490 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 326863485} + m_CullTransparentMesh: 0 +--- !u!114 &326863491 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 326863485} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f8d7972c568b50940a54c7f599af66c5, type: 3} + m_Name: + m_EditorClassIdentifier: + _Language: Spanish + mSource: {fileID: 1364070359} +--- !u!114 &394726437 +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: bd8b481d182cbcd4293524eb92ee520c, type: 3} + m_Name: + m_EditorClassIdentifier: + mTarget: {fileID: 0} +--- !u!1 &722395052 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 722395055} + - component: {fileID: 722395054} + - component: {fileID: 722395053} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &722395053 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 722395052} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!223 &722395054 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 722395052} + 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: 11 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &722395055 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 722395052} + 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: 1045395102} + - {fileID: 77474267} + - {fileID: 1277673355} + 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 &1045395101 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1045395102} + m_Layer: 0 + m_Name: Buttons + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1045395102 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1045395101} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -283, y: -163.87, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1405865223} + - {fileID: 1714070056} + - {fileID: 326863486} + - {fileID: 1962922074} + m_Father: {fileID: 722395055} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1172369160 +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: bd8b481d182cbcd4293524eb92ee520c, type: 3} + m_Name: + m_EditorClassIdentifier: + mTarget: {fileID: 0} +--- !u!1 &1277673354 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1277673355} + m_Layer: 5 + m_Name: Localized Examples + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1277673355 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1277673354} + m_LocalRotation: {x: 0, 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: 301812443} + - {fileID: 2113079818} + m_Father: {fileID: 722395055} + 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!1 &1364070357 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1364070358} + - component: {fileID: 1364070359} + m_Layer: 0 + m_Name: LocalizationSource + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1364070358 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1364070357} + m_LocalRotation: {x: 0, y: 0, z: 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} +--- !u!114 &1364070359 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1364070357} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 488051eaa73ba421e8fe4868f2e0f364, type: 3} + m_Name: + m_EditorClassIdentifier: + mSource: + UserAgreesToHaveItOnTheScene: 0 + UserAgreesToHaveItInsideThePluginsFolder: 0 + GoogleLiveSyncIsUptoDate: 1 + mTerms: + - Term: diamond + TermType: 12 + Description: + Languages: + - island + - bubble + - conicalGradient + Flags: 000000 + Languages_Touch: [] + - Term: cityPlane01 + TermType: 12 + Description: + Languages: + - tiger + - lion + - wheel + Flags: 000000 + Languages_Touch: [] + CaseInsensitiveTerms: 0 + OnMissingTranslation: 1 + mTerm_AppName: + mLanguages: + - Name: English + Code: en-US + Flags: 0 + - Name: Spanish + Code: es + Flags: 0 + - Name: French + Code: fr-BE + Flags: 0 + IgnoreDeviceLanguage: 0 + _AllowUnloadingLanguages: 0 + Google_WebServiceURL: + Google_SpreadsheetKey: teVYmvqeNTF8ZkQhQ21a0Gw + Google_SpreadsheetName: + Google_LastUpdatedVersion: + Google_Password: change_this + GoogleUpdateFrequency: 3 + GoogleInEditorCheckFrequency: 2 + GoogleUpdateSynchronization: 1 + GoogleUpdateDelay: 5 + Assets: [] + Spreadsheet_LocalFileName: + Spreadsheet_LocalCSVSeparator: ',' + Spreadsheet_LocalCSVEncoding: utf-8 + Spreadsheet_SpecializationAsRows: 1 + version: 1 + NeverDestroy: 0 + UserAgreesToHaveItOnTheScene: 0 + UserAgreesToHaveItInsideThePluginsFolder: 0 + GoogleLiveSyncIsUptoDate: 1 + Assets: [] + Google_WebServiceURL: + Google_SpreadsheetKey: teVYmvqeNTF8ZkQhQ21a0Gw + Google_SpreadsheetName: + Google_LastUpdatedVersion: + GoogleUpdateFrequency: 3 + GoogleUpdateDelay: 5 + mLanguages: [] + IgnoreDeviceLanguage: 0 + _AllowUnloadingLanguages: 0 + mTerms: [] + CaseInsensitiveTerms: 0 + OnMissingTranslation: 1 + mTerm_AppName: + Spreadsheet_LocalFileName: C:/Data/Frank/Unity Projects/Unity Plugins/Localization.csv + Spreadsheet_LocalCSVSeparator: ',' + Spreadsheet_LocalCSVEncoding: Unicode (UTF-8) + Spreadsheet_SpecializationAsRows: 1 + Google_Password: change_this + GoogleInEditorCheckFrequency: 2 +--- !u!1 &1405865220 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1405865223} + - component: {fileID: 1405865222} + - component: {fileID: 1405865221} + m_Layer: 0 + m_Name: Window + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1405865221 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1405865220} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, 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_Texture: {fileID: 2800000, guid: 8d412f782b72d2d49a240c947362048f, type: 3} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &1405865222 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1405865220} + m_CullTransparentMesh: 0 +--- !u!224 &1405865223 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1405865220} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1045395102} + 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: 288, y: 54} + m_SizeDelta: {x: 718, y: 94} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1714070055 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1714070056} + - component: {fileID: 1714070060} + - component: {fileID: 1714070059} + - component: {fileID: 1714070058} + - component: {fileID: 1714070057} + - component: {fileID: 1714070061} + m_Layer: 0 + m_Name: English + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1714070056 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1714070055} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1045395102} + 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: 281.01, y: 54} + m_SizeDelta: {x: 77, y: 66} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1714070057 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1714070055} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1573420865, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_EffectColor: {r: 0, g: 0, b: 0, a: 1} + m_EffectDistance: {x: 3, y: -3} + m_UseGraphicAlpha: 1 +--- !u!114 &1714070058 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1714070055} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, 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.5019608, g: 0.5019608, b: 0.5019608, a: 0.5019608} + m_HighlightedColor: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 0.69803923} + m_PressedColor: {r: 0.34509805, g: 0.34509805, b: 0.34509805, a: 0.69803923} + m_DisabledColor: {r: 0.2509804, g: 0.2509804, b: 0.2509804, a: 0.5019608} + m_ColorMultiplier: 2 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1714070059} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1714070061} + m_MethodName: ApplyLanguage + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: English + m_BoolArgument: 0 + m_CallState: 1 +--- !u!114 &1714070059 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1714070055} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, 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_Texture: {fileID: 2800000, guid: 8f7115ef5a3ecfd42935c3ff54434ae8, type: 3} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &1714070060 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1714070055} + m_CullTransparentMesh: 0 +--- !u!114 &1714070061 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1714070055} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f8d7972c568b50940a54c7f599af66c5, type: 3} + m_Name: + m_EditorClassIdentifier: + _Language: English + mSource: {fileID: 1364070359} +--- !u!1 &1797551106 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1797551111} + - component: {fileID: 1797551110} + - component: {fileID: 1797551108} + - component: {fileID: 1797551107} + - component: {fileID: 1797551112} + 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 &1797551107 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1797551106} + m_Enabled: 1 +--- !u!124 &1797551108 +Behaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1797551106} + m_Enabled: 1 +--- !u!20 &1797551110 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1797551106} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_projectionMatrixMode: 1 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_GateFitMode: 2 + 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: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1797551111 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1797551106} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -740} + 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 &1797551112 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1797551106} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 106814ff144f04be5b396814c84d328b, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1912490372 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1912490376} + - component: {fileID: 1912490375} + - component: {fileID: 1912490374} + - component: {fileID: 1912490373} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1912490373 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1912490372} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1997211142, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ForceModuleActive: 0 +--- !u!114 &1912490374 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1912490372} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1077351063, guid: f5f67c52d1564df4a8936ccd202a3bd8, 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 &1912490375 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1912490372} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -619905303, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!4 &1912490376 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1912490372} + m_LocalRotation: {x: 0, y: 0, z: 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} +--- !u!1 &1962922073 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1962922074} + - component: {fileID: 1962922078} + - component: {fileID: 1962922077} + - component: {fileID: 1962922076} + - component: {fileID: 1962922075} + - component: {fileID: 1962922079} + m_Layer: 0 + m_Name: French + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1962922074 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1962922073} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1045395102} + 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: 457.3, y: 55} + m_SizeDelta: {x: 77, y: 66} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1962922075 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1962922073} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1573420865, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_EffectColor: {r: 0, g: 0, b: 0, a: 1} + m_EffectDistance: {x: 3, y: -3} + m_UseGraphicAlpha: 1 +--- !u!114 &1962922076 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1962922073} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, 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.5019608, g: 0.5019608, b: 0.5019608, a: 0.5019608} + m_HighlightedColor: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 0.69803923} + m_PressedColor: {r: 0.34509805, g: 0.34509805, b: 0.34509805, a: 0.69803923} + m_DisabledColor: {r: 0.2509804, g: 0.2509804, b: 0.2509804, a: 0.5019608} + m_ColorMultiplier: 2 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1962922077} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1962922079} + m_MethodName: ApplyLanguage + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: French + m_BoolArgument: 0 + m_CallState: 1 +--- !u!114 &1962922077 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1962922073} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, 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_Texture: {fileID: 2800000, guid: fdd6d36bfa4c41c4f988be3be486b5f8, type: 3} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &1962922078 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1962922073} + m_CullTransparentMesh: 0 +--- !u!114 &1962922079 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1962922073} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f8d7972c568b50940a54c7f599af66c5, type: 3} + m_Name: + m_EditorClassIdentifier: + _Language: French + mSource: {fileID: 1364070359} +--- !u!1 &2113079817 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2113079818} + - component: {fileID: 2113079820} + - component: {fileID: 2113079819} + - component: {fileID: 2113079821} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2113079818 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2113079817} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1277673355} + 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: 67, y: 50} + m_SizeDelta: {x: -463, y: -226} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2113079819 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2113079817} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 17e34ae2138a4405182984330823b51b, 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 + _vectorGraphics: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_UsePivot: 0 +--- !u!222 &2113079820 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2113079817} + m_CullTransparentMesh: 0 +--- !u!114 &2113079821 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2113079817} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 344445a89b4f74a0e9a0a766903df87e, type: 3} + m_Name: + m_EditorClassIdentifier: + mTerm: diamond + mTermSecondary: + PrimaryTermModifier: 0 + SecondaryTermModifier: 0 + TermPrefix: + TermSuffix: + LocalizeOnAwake: 1 + IgnoreRTL: 0 + MaxCharactersInRTL: 0 + IgnoreNumbersInRTL: 1 + CorrectAlignmentForRTL: 1 + AddSpacesToJoinedLanguages: 0 + AllowLocalizedParameters: 1 + TranslatedObjects: [] + LocalizeEvent: + m_PersistentCalls: + m_Calls: [] + AlwaysForceLocalize: 0 + LocalizeCallBack: + Target: {fileID: 0} + MethodName: + mGUI_ShowReferences: 0 + mGUI_ShowTems: 1 + mGUI_ShowCallback: 0 + mLocalizeTarget: {fileID: 394726437} + mLocalizeTargetName: I2.Loc.LocalizeTarget_UnityStandard_Prefab diff --git a/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization SVGImporter.unity.meta b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization SVGImporter.unity.meta new file mode 100644 index 00000000..5f126be6 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization SVGImporter.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 62cdcfbfffab11740933684d102a7cf0 +timeCreated: 1455774701 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization TextMeshPro.unity b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization TextMeshPro.unity new file mode 100644 index 00000000..696fd6ff --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization TextMeshPro.unity @@ -0,0 +1,1791 @@ +%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: -431602080, g: -431602080, b: -431602080, a: -431602080} + m_AmbientEquatorColor: {r: -431602080, g: -431602080, b: -431602080, a: -431602080} + m_AmbientGroundColor: {r: -431602080, g: -431602080, b: -431602080, a: -431602080} + 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: 10 + m_Resolution: 1 + m_BakeResolution: 1 + m_AtlasSize: 1024 + m_AO: 1 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 0 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringMode: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + 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 &39299878 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 39299879} + - component: {fileID: 39299884} + - component: {fileID: 39299883} + - component: {fileID: 39299882} + - component: {fileID: 39299881} + - component: {fileID: 39299880} + m_Layer: 0 + m_Name: Spanish + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &39299879 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 39299878} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1484302855} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.20949675, y: 0.063616075} + m_AnchorMax: {x: 0.2973214, y: 0.15959822} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -0.0000009536743, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &39299880 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 39299878} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f8d7972c568b50940a54c7f599af66c5, type: 3} + m_Name: + m_EditorClassIdentifier: + _Language: Spanish + mSource: {fileID: 0} +--- !u!114 &39299881 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 39299878} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1573420865, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_EffectColor: {r: 0, g: 0, b: 0, a: 1} + m_EffectDistance: {x: 3, y: -3} + m_UseGraphicAlpha: 1 +--- !u!114 &39299882 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 39299878} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, 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.5019608, g: 0.5019608, b: 0.5019608, a: 0.5019608} + m_HighlightedColor: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 0.69803923} + m_PressedColor: {r: 0.34509805, g: 0.34509805, b: 0.34509805, a: 0.69803923} + m_DisabledColor: {r: 0.2509804, g: 0.2509804, b: 0.2509804, a: 0.5019608} + m_ColorMultiplier: 2 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 39299883} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 39299880} + m_MethodName: ApplyLanguage + 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: 1 +--- !u!114 &39299883 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 39299878} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, 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_Texture: {fileID: 2800000, guid: 87e96283e85053343bc47c9691614f7c, type: 3} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &39299884 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 39299878} + m_CullTransparentMesh: 0 +--- !u!114 &94185908 +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: 481ab606793a67349be805c13febeba0, type: 3} + m_Name: + m_EditorClassIdentifier: + mTarget: {fileID: 434853231} + mAlignment_RTL: 260 + mAlignment_LTR: 257 + mAlignmentWasRTL: 0 + mInitializeAlignment: 0 +--- !u!1 &167348268 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 167348269} + m_Layer: 0 + m_Name: Examples + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &167348269 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 167348268} + m_LocalRotation: {x: 0, 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: 2027472998} + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!21 &380255778 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Anton SDF - Drop Shadow (Instance) + m_Shader: {fileID: 4800000, guid: fe393ace9b354375a9cb14cdbbc28be4, type: 3} + m_ShaderKeywords: OUTLINE_ON UNDERLAY_ON + m_LightmapFlags: 5 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 3000 + 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: 2853570, guid: 8a89fa14b10d46a99122fd4f73fca9a2, type: 2} + 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.1 + - _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.1 + - _PerspectiveFilter: 0.875 + - _Reflectivity: 10 + - _ScaleRatioA: 0.8333333 + - _ScaleRatioB: 0.6770833 + - _ScaleRatioC: 0.59375 + - _ScaleX: 1 + - _ScaleY: 1 + - _ShaderFlags: 0 + - _SpecularPower: 2 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _TextureHeight: 512 + - _TextureWidth: 512 + - _UnderlayDilate: 0 + - _UnderlayOffsetX: 0.5 + - _UnderlayOffsetY: -0.5 + - _UnderlaySoftness: 0.05 + - _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!1 &434853228 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 434853229} + - component: {fileID: 434853232} + - component: {fileID: 434853231} + - component: {fileID: 434853230} + m_Layer: 5 + m_Name: TextMeshPro UGUI + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &434853229 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 434853228} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1482511266} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.060356602, y: 0.38338655} + m_AnchorMax: {x: 0.9564211, y: 0.80411345} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &434853230 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 434853228} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 344445a89b4f74a0e9a0a766903df87e, type: 3} + m_Name: + m_EditorClassIdentifier: + mTerm: TextMesh Pro Text + mTermSecondary: ARIAL_MATERIAL + PrimaryTermModifier: 0 + SecondaryTermModifier: 0 + TermPrefix: + TermSuffix: + LocalizeOnAwake: 1 + IgnoreRTL: 0 + MaxCharactersInRTL: 0 + IgnoreNumbersInRTL: 0 + CorrectAlignmentForRTL: 1 + AddSpacesToJoinedLanguages: 0 + AllowLocalizedParameters: 1 + TranslatedObjects: [] + LocalizeEvent: + m_PersistentCalls: + m_Calls: [] + AlwaysForceLocalize: 0 + LocalizeCallBack: + Target: {fileID: 0} + MethodName: + mGUI_ShowReferences: 0 + mGUI_ShowTems: 1 + mGUI_ShowCallback: 0 + mLocalizeTarget: {fileID: 94185908} + mLocalizeTargetName: I2.Loc.LocalizeTarget_TextMeshPro_UGUI +--- !u!114 &434853231 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 434853228} + 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_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: "Texto traducido \nTextMesh Pro" + m_isRightToLeft: 0 + m_fontAsset: {fileID: 0} + m_sharedMaterial: {fileID: 2100000, guid: 79459efec17a4d00a321bdcc27bbc385, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 380255778} + 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_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_outlineColor: + serializedVersion: 2 + rgba: 4278190080 + m_fontSize: 36 + m_fontSizeBase: 36 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_textAlignment: 257 + 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_firstOverflowCharacterIndex: -1 + m_linkedTextComponent: {fileID: 0} + m_isLinkedTextComponent: 0 + m_isTextTruncated: 0 + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_ignoreRectMaskCulling: 0 + m_ignoreCulling: 1 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_VertexBufferAutoSizeReduction: 1 + m_firstVisibleCharacter: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_textInfo: + textComponent: {fileID: 434853231} + characterCount: 42 + spriteCount: 0 + spaceCount: 6 + wordCount: 7 + linkCount: 0 + lineCount: 2 + pageCount: 1 + materialCount: 1 + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_spriteAnimator: {fileID: 0} + m_hasFontAssetChanged: 0 + m_subTextObjects: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &434853232 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 434853228} + m_CullTransparentMesh: 0 +--- !u!114 &523684461 +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: d96a6c3ea7d28744aacc367115a71af5, type: 3} + m_Name: + m_EditorClassIdentifier: + mTarget: {fileID: 2027472999} +--- !u!1 &566742023 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 566742024} + - component: {fileID: 566742029} + - component: {fileID: 566742028} + - component: {fileID: 566742027} + - component: {fileID: 566742026} + - component: {fileID: 566742025} + m_Layer: 0 + m_Name: French + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &566742024 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 566742023} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1484302855} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.66891235, y: 0.063616075} + m_AnchorMax: {x: 0.75933444, y: 0.15959822} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &566742025 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 566742023} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f8d7972c568b50940a54c7f599af66c5, type: 3} + m_Name: + m_EditorClassIdentifier: + _Language: French + mSource: {fileID: 0} +--- !u!114 &566742026 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 566742023} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1573420865, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_EffectColor: {r: 0, g: 0, b: 0, a: 1} + m_EffectDistance: {x: 3, y: -3} + m_UseGraphicAlpha: 1 +--- !u!114 &566742027 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 566742023} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, 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.5019608, g: 0.5019608, b: 0.5019608, a: 0.5019608} + m_HighlightedColor: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 0.69803923} + m_PressedColor: {r: 0.34509805, g: 0.34509805, b: 0.34509805, a: 0.69803923} + m_DisabledColor: {r: 0.2509804, g: 0.2509804, b: 0.2509804, a: 0.5019608} + m_ColorMultiplier: 2 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 566742028} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 566742025} + m_MethodName: ApplyLanguage + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: French + m_BoolArgument: 0 + m_CallState: 1 +--- !u!114 &566742028 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 566742023} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, 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_Texture: {fileID: 2800000, guid: fdd6d36bfa4c41c4f988be3be486b5f8, type: 3} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &566742029 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 566742023} + m_CullTransparentMesh: 0 +--- !u!21 &683115511 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Anton SDF - Drop Shadow (Instance) + m_Shader: {fileID: 4800000, guid: fe393ace9b354375a9cb14cdbbc28be4, type: 3} + m_ShaderKeywords: OUTLINE_ON UNDERLAY_ON + m_LightmapFlags: 5 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 3000 + 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: 2853570, guid: 8a89fa14b10d46a99122fd4f73fca9a2, type: 2} + 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.1 + - _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.1 + - _PerspectiveFilter: 0.875 + - _Reflectivity: 10 + - _ScaleRatioA: 0.8333333 + - _ScaleRatioB: 0.6770833 + - _ScaleRatioC: 0.59375 + - _ScaleX: 1 + - _ScaleY: 1 + - _ShaderFlags: 0 + - _SpecularPower: 2 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _TextureHeight: 512 + - _TextureWidth: 512 + - _UnderlayDilate: 0 + - _UnderlayOffsetX: 0.5 + - _UnderlayOffsetY: -0.5 + - _UnderlaySoftness: 0.05 + - _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!1 &1195434269 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1195434270} + - component: {fileID: 1195434272} + - component: {fileID: 1195434271} + m_Layer: 0 + m_Name: Window + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1195434270 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1195434269} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1484302855} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.0349026, y: 0.042410713} + m_AnchorMax: {x: 0.97483766, y: 0.18080357} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1195434271 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1195434269} + 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_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 +--- !u!222 &1195434272 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1195434269} + m_CullTransparentMesh: 0 +--- !u!1 &1229809390 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1229809391} + - component: {fileID: 1229809396} + - component: {fileID: 1229809395} + - component: {fileID: 1229809394} + - component: {fileID: 1229809393} + - component: {fileID: 1229809392} + m_Layer: 0 + m_Name: English + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1229809391 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1229809390} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1484302855} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.43676952, y: 0.063616075} + m_AnchorMax: {x: 0.52329546, y: 0.15959822} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0.0000009536743, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1229809392 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1229809390} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f8d7972c568b50940a54c7f599af66c5, type: 3} + m_Name: + m_EditorClassIdentifier: + _Language: English + mSource: {fileID: 0} +--- !u!114 &1229809393 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1229809390} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1573420865, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_EffectColor: {r: 0, g: 0, b: 0, a: 1} + m_EffectDistance: {x: 3, y: -3} + m_UseGraphicAlpha: 1 +--- !u!114 &1229809394 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1229809390} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, 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.5019608, g: 0.5019608, b: 0.5019608, a: 0.5019608} + m_HighlightedColor: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 0.69803923} + m_PressedColor: {r: 0.34509805, g: 0.34509805, b: 0.34509805, a: 0.69803923} + m_DisabledColor: {r: 0.2509804, g: 0.2509804, b: 0.2509804, a: 0.5019608} + m_ColorMultiplier: 2 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1229809395} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1229809392} + m_MethodName: ApplyLanguage + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: English + m_BoolArgument: 0 + m_CallState: 1 +--- !u!114 &1229809395 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1229809390} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -98529514, 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_Texture: {fileID: 2800000, guid: 8f7115ef5a3ecfd42935c3ff54434ae8, type: 3} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &1229809396 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1229809390} + m_CullTransparentMesh: 0 +--- !u!1 &1364070357 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1364070358} + - component: {fileID: 1364070359} + m_Layer: 0 + m_Name: LocalizationSource + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1364070358 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1364070357} + m_LocalRotation: {x: 0, y: 0, z: 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} +--- !u!114 &1364070359 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1364070357} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 488051eaa73ba421e8fe4868f2e0f364, type: 3} + m_Name: + m_EditorClassIdentifier: + mSource: + UserAgreesToHaveItOnTheScene: 0 + UserAgreesToHaveItInsideThePluginsFolder: 0 + GoogleLiveSyncIsUptoDate: 1 + mTerms: + - Term: TextMesh Pro Text + TermType: 0 + Description: + Languages: + - "This is a localized \nTextMesh Pro Text" + - "Texto traducido \nTextMesh Pro" + - 'Il s''agit d''un texte localise + + TextMesh Pro' + - + - + - + - + - + - + - + - + - + Flags: 000000000000000000000000 + Languages_Touch: [] + - Term: ARIAL + TermType: 7 + Description: + Languages: + - Fonts & Materials/Roboto-Bold SDF + - Fonts & Materials/Electronic Highway Sign SDF + - Fonts & Materials/Bangers SDF + Flags: 000000 + Languages_Touch: [] + - Term: ARIAL_MATERIAL + TermType: 6 + Description: + Languages: + - Fonts & Materials/Anton SDF - Drop Shadow + - Fonts & Materials/Bangers SDF - Drop Shadow + - Fonts & Materials/LiberationSans SDF - Outline + Flags: 000000 + Languages_Touch: [] + CaseInsensitiveTerms: 0 + OnMissingTranslation: 1 + mTerm_AppName: + mLanguages: + - Name: English + Code: en-US + Flags: 0 + - Name: Spanish + Code: es + Flags: 0 + - Name: French + Code: fr-BE + Flags: 0 + IgnoreDeviceLanguage: 0 + _AllowUnloadingLanguages: 1 + Google_WebServiceURL: + Google_SpreadsheetKey: teVYmvqeNTF8ZkQhQ21a0Gw + Google_SpreadsheetName: + Google_LastUpdatedVersion: + Google_Password: change_this + GoogleUpdateFrequency: 3 + GoogleInEditorCheckFrequency: 2 + GoogleUpdateSynchronization: 1 + GoogleUpdateDelay: 5 + Assets: [] + Spreadsheet_LocalFileName: + Spreadsheet_LocalCSVSeparator: ',' + Spreadsheet_LocalCSVEncoding: utf-8 + Spreadsheet_SpecializationAsRows: 1 + version: 1 + NeverDestroy: 0 + UserAgreesToHaveItOnTheScene: 0 + UserAgreesToHaveItInsideThePluginsFolder: 0 + GoogleLiveSyncIsUptoDate: 1 + Assets: [] + Google_WebServiceURL: + Google_SpreadsheetKey: teVYmvqeNTF8ZkQhQ21a0Gw + Google_SpreadsheetName: + Google_LastUpdatedVersion: + GoogleUpdateFrequency: 3 + GoogleUpdateDelay: 5 + mLanguages: [] + IgnoreDeviceLanguage: 0 + _AllowUnloadingLanguages: 1 + mTerms: [] + CaseInsensitiveTerms: 0 + OnMissingTranslation: 1 + mTerm_AppName: + Spreadsheet_LocalFileName: C:/Data/Frank/Unity Projects/Unity Plugins/Localization.csv + Spreadsheet_LocalCSVSeparator: ',' + Spreadsheet_LocalCSVEncoding: Unicode (UTF-8) + Spreadsheet_SpecializationAsRows: 1 + Google_Password: change_this + GoogleInEditorCheckFrequency: 2 +--- !u!1 &1482511262 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1482511266} + - component: {fileID: 1482511265} + - component: {fileID: 1482511264} + - component: {fileID: 1482511263} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1482511263 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1482511262} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &1482511264 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1482511262} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f5f67c52d1564df4a8936ccd202a3bd8, 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 &1482511265 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1482511262} + 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 &1482511266 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1482511262} + 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: 434853229} + - {fileID: 1484302855} + 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 &1484302854 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1484302855} + m_Layer: 0 + m_Name: Buttons + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1484302855 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1484302854} + m_LocalRotation: {x: -0, 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: 1195434270} + - {fileID: 1229809391} + - {fileID: 39299879} + - {fileID: 566742024} + m_Father: {fileID: 1482511266} + 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!1 &1496215549 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1496215553} + - component: {fileID: 1496215552} + - component: {fileID: 1496215551} + - component: {fileID: 1496215550} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1496215550 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1496215549} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1997211142, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ForceModuleActive: 0 +--- !u!114 &1496215551 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1496215549} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1077351063, guid: f5f67c52d1564df4a8936ccd202a3bd8, 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 &1496215552 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1496215549} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -619905303, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!4 &1496215553 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1496215549} + m_LocalRotation: {x: 0, y: 0, z: 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: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1797551106 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1797551111} + - component: {fileID: 1797551110} + - component: {fileID: 1797551108} + - component: {fileID: 1797551107} + 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 &1797551107 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1797551106} + m_Enabled: 1 +--- !u!124 &1797551108 +Behaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1797551106} + m_Enabled: 1 +--- !u!20 &1797551110 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1797551106} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_projectionMatrixMode: 1 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_GateFitMode: 2 + 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: 4294967263 + 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 &1797551111 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1797551106} + 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!1 &2027472997 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2027472998} + - component: {fileID: 2027473001} + - component: {fileID: 2027473000} + - component: {fileID: 2027472999} + - component: {fileID: 2027473002} + - component: {fileID: 2027473003} + m_Layer: 0 + m_Name: TextMeshPro + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2027472998 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2027472997} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 167348269} + 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: -1.7, y: -0.5} + m_SizeDelta: {x: 14.21, y: 3.99} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2027472999 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2027472997} + 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_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: "Texto traducido \nTextMesh Pro" + m_isRightToLeft: 0 + m_fontAsset: {fileID: 0} + m_sharedMaterial: {fileID: 2100000, guid: 79459efec17a4d00a321bdcc27bbc385, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 683115511} + 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_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_outlineColor: + serializedVersion: 2 + rgba: 4278190080 + m_fontSize: 12.55 + m_fontSizeBase: 10 + m_fontWeight: 400 + m_enableAutoSizing: 1 + m_fontSizeMin: 10 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_textAlignment: 257 + 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_firstOverflowCharacterIndex: -1 + m_linkedTextComponent: {fileID: 0} + m_isLinkedTextComponent: 0 + m_isTextTruncated: 0 + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 0 + m_isCullingEnabled: 0 + m_ignoreRectMaskCulling: 0 + m_ignoreCulling: 1 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_VertexBufferAutoSizeReduction: 1 + m_firstVisibleCharacter: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_textInfo: + textComponent: {fileID: 2027472999} + characterCount: 42 + spriteCount: 0 + spaceCount: 6 + wordCount: 7 + linkCount: 0 + lineCount: 2 + pageCount: 1 + materialCount: 1 + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_spriteAnimator: {fileID: 0} + m_hasFontAssetChanged: 0 + m_renderer: {fileID: 2027473001} + m_subTextObjects: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + m_maskType: 0 +--- !u!33 &2027473000 +MeshFilter: + m_ObjectHideFlags: 2 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2027472997} + m_Mesh: {fileID: 0} +--- !u!23 &2027473001 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2027472997} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 79459efec17a4d00a321bdcc27bbc385, 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!114 &2027473002 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2027472997} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 344445a89b4f74a0e9a0a766903df87e, type: 3} + m_Name: + m_EditorClassIdentifier: + mTerm: TextMesh Pro Text + mTermSecondary: ARIAL_MATERIAL + PrimaryTermModifier: 0 + SecondaryTermModifier: 0 + TermPrefix: + TermSuffix: + LocalizeOnAwake: 1 + IgnoreRTL: 0 + MaxCharactersInRTL: 0 + IgnoreNumbersInRTL: 0 + CorrectAlignmentForRTL: 1 + AddSpacesToJoinedLanguages: 0 + AllowLocalizedParameters: 1 + TranslatedObjects: [] + LocalizeEvent: + m_PersistentCalls: + m_Calls: [] + AlwaysForceLocalize: 0 + LocalizeCallBack: + Target: {fileID: 0} + MethodName: + mGUI_ShowReferences: 0 + mGUI_ShowTems: 1 + mGUI_ShowCallback: 0 + mLocalizeTarget: {fileID: 523684461} + mLocalizeTargetName: I2.Loc.LocalizeTarget_TextMeshPro_Label +--- !u!222 &2027473003 +CanvasRenderer: + m_ObjectHideFlags: 2 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2027472997} + m_CullTransparentMesh: 0 diff --git a/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization TextMeshPro.unity.meta b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization TextMeshPro.unity.meta new file mode 100644 index 00000000..760c8be8 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Examples/Scenes/I2Localization TextMeshPro.unity.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: e7ed6858cb4189046a080a521e337fd1 +DefaultImporter: + userData: diff --git a/popcorn/Assets/I2/Localization/I2 Localization - Readme.txt b/popcorn/Assets/I2/Localization/I2 Localization - Readme.txt new file mode 100644 index 00000000..94146fa6 --- /dev/null +++ b/popcorn/Assets/I2/Localization/I2 Localization - Readme.txt @@ -0,0 +1,864 @@ +---------------------------------------------- + I2 Localization + 2.8.16 + http://www.inter-illusion.com + inter.illusion@gmail.com +---------------------------------------------- + +Thank you for buying I2 Localization! + +Documentation can be found here: http://www.inter-illusion.com/assets/I2LocalizationManual/I2LocalizationManual.html + +A few basic tutorials and more info: http://www.inter-illusion.com/tools/i2-localization + +If you have any questions, suggestions, comments or feature requests, please +drop by the I2 forum: http://www.inter-illusion.com/forum/index + +---------------------- + Installation +---------------------- + +1- Import the plugin package into a Unity project. +2- Enable the support for third party plugins installed on the project + (Menu: Tools\I2 Localization\Enable Plugins) +3- Open any of the example scenes to see how to setup and localize Components + (Assets/I2/Localization/Examples) +4- To create your own localizations, open the prefab I2\Localization\Resources\I2Languages +5- Create the languages you will support. +6- The I2Languages source is a global source accessible by all scenes + +The documentation provides further explanaition on each of those steps and some tutorials. +Also its presented how to convert an existing NGUI localization into the I2 Localization system. + + +----------------------- +PLAYMAKER +----------------------- + +If you use PlayMaker, please, install: + - https://www.inter-illusion.com/Downloads/I2Localization_PlayMaker.unitypackage + - PlayMaker Unity UI Addon (from the Playmaker website - only needed for the example scenes that use Unity UI) + +That will install custom actions to access and modify the localization. +More details can be found in the example scene + Assets\I2\Localization PlayMaker\Playmaker Localization.unity + + +----------------------- + Ratings +----------------------- + +If you find this plugin to be useful and want to recommend others to use it. +Please leave a review or rate it on the Asset Store. +That will help with the sales and allow me to invest more time improving the plugin!! + +----------------------- + Extras +----------------------- + +These are some of my plugins that may help you develop a better game: + +I2 Parallax - Uses the mobile gyroscope to add depth to your UI (http://bit.ly/I2_Parallax) +I2 Text Animation - Take your texts to the next level (http://bit.ly/I2_TextAnimation) +I2 MiniGames - A better way to do Rewards and Energy Systems (http://bit.ly/I2_MiniGames) +AssetStore Deals - A bot that constantly checks the Store to find you the latest Sales (http://deals.inter-illusion.com) + +----------------------- + Version History +----------------------- +2.8.17 +NEW: When generating ScriptLocalization.cs, if a term name is a C# keyword the variable now is set to start with @ +NEW: There is now LocalizationManager.CustomApplyLocalizationParams to process ALL translations before ApplyLocalizationParams runs +FIX: Translations with RTL tags were failing (thanks @d xy for looking into this) + +2.8.16 +FIX: TextMesh Pro was not correctly displaying multi-line arabic texts + +2.8.15 +NEW: Performance improvement when switching levels by not calling Resources.UnloadUnusedAssets() unless the user requests it. + For most common scenarios, there is no need to unloadUnusedAssets +NEW: Lots of stability fixes by cleaning up all warnings detected by the Roslyn Analyzers +NEW: Fixed several issues/obsolete calls when on the latest versions of Unity + +2.8.14 +NEW: Added support for localizing Video Player +NEW: Allow skipping Google Synchronization from script by creating a RegisterCallback_AllowSyncFromGoogle class + (http://www.inter-illusion.com/forum/i2-localization/1679-turning-off-auto-update-via-script#4166) +FIX: UI changes to remove dark colors in the background +FIX: Disabling Localized Parameters now work as expected (i.e. Parameters still work, but they are not localized even if a term is found with that value) +FIX: Target TextMesh now correctly changes font and materials + + +2.8.13 +NEW: Added UpdateFrequency EveryOtherDay to allow checking the spreadsheet every 48h +NEW: Added a function to retrieve an asset by using the term name (e.g. font, sprite) LocalizationManager.GetTranslatedObjectByTermName(TermName) +FIX: Replaced all events using Action<..> by delegate function that clearly show what the parameters are for +FIX: Inspector was not showing correctly when in the latest alpha/beta of Unity 2019.2+ +FIX: Bug where Languages coudn't be enabled at runtime (thanks to bschug for submitting a fix) +FIX: To reduce memory usage, Term descriptions are now only used in the editor (not in the final build) If needed, use a disabled language to store it +FIX: Inspector Width should now be detected more accurately + + +2.8.12 +NEW: Now is possible to dynamically create a LanguageSourceData without a LanguageSource and use it at runtime. +NEW: LocalizationParamsManager now have a Manager Type (Local/Global) to define if it applies to ALL Localize or just the one in the same object. +FIX: Term's list is not longer fully expanded all the time. +FIX: Specialization bar in the Term's translations now shows the selected specialization as a tab-button +FIX: Adding new specializations now copies the translation from the current specialization, so the user can create several in sequence. +FIX: Terms can now have any letter, digit or any of the following symbols .-_$#@*()[]{}+:?!&'`,^=<>~ +FIX: Removed invalid character from the StringObfucator that were causing build issues in XBox +FIX: RTL Fixer (Arabic, Persian, etc) was detecting tags like , only [xx] + + +2.8.11 +NEW: Term's name can now have any of the following symbols ".-_$#@*)(][}{+:?!&'" +NEW: Now the plugin localizes MeshRenderer (Mesh + Material) +NEW: New parameter in the Google Spreadsheet tab to control when to apply the downloaded data (OnSceneLoaded, Manual, AsSoonAsDownloaded) +FIX: Inferring terms with '/' no longer generates a Category +FIX: Updated NGUI target to be compatible with the latest version +FIX: Localize inspector, the options in the dropdown for "ForceLocalize" and "Allow Localized Parameters" were in the wrong order +FIX: Inspector for the Google Spreadsheet tab in the LanguageSource was cutting when the Inspector was too narrow +FIX: Button "Open Source" in the Localize Inspector now works for both LanguageSources and LanguageSourceAssets +FIX: Terms name can now have Non latin letters (e.g. Chinese, Korean, etc), but no symbols, extra spaces, etc + +2.8.10 +NEW: LocalizationManager.GetCurrentDevice(true) will now force get the Device Language without using the startup language from the cache +FIX: Updated Playmaker actions to new Prefab system +FIX: Menu option: Tools/I2 Localization/Open I2Languages +FIX: When inferring terms, any tag (e.g. ) or invalid characters (e.g. ^/\`) are removed to form the term name + +2.8.9 +NEW: I2Languages.prefab is now an ScriptableObject instead of a prefab to avoid the locking issues of Unity 2018.3 +FIX: Compatibility with Unity 2018.3 +FIX: Plural rules for some Slavic languages were using the wrong settings. +FIX: Improved performance when using assets from Resources and in general only calling Resource.UnloadAll when loading scenes + +2.8.8 +NEW: Added a flag to disable Localized Parameters + (http://inter-illusion.com/forum/i2-localization/1163-localization-params-auto-translating-design-flaw#3195) +NEW: Merged all checkboxes in the Localize component into an "Options" popup to make the Localize's inspector use less space +NEW: Find all terms in the Scene/Scripts now also detects those in your code using [TermsPopup] and LocalizedString +FIX: Changing the Font or Material in a TextMeshPro now updates the linkedTextComponent +FIX: Startup language now ignores the disabled Languages if the "Default Language" is set to "Device Language" +FIX: Updated Playmaker example scene to show that it needs the Unity UI Addon. +FIX: Prevented a null reference on the GetSourcePlayerPrefName function when using Google Live Synchronization in Scene's sources +FIX: Google Live Synchronization was failing to load the downloaded data from the cache. + +2.8.7 +NEW: WebService now has a password to restrict other players from modifying the localization data +NEW: Importing a CSV file from script will now update the temporal files while playing +NEW: A warning is now displayed in top of the LanguageSource when Google Live Sync is enabled but the spreadsheet is not up-to-date +NEW: New option in the Languages tab to define if Runtime Unloading of Languages happens for the source, or if only in the device +NEW: By default, the Runtime Unloading of language will not happen in the Editor (to allow for editing while playing) +NEW: Missing terms are going to show hidden by default, given that they are only suggestions and are making the list to crowded +NEW: Added function LocalizationManager.GetTranslatedObject(termName) to return the translated Sprite/Material/Font/etc from a Term +FIX: Translating and editing terms now keep the [i2nt]...[/i2nt] sections correctly +FIX: Translating texts with rich text tags was removing the tags +FIX: Modified temporal language file format to recover from errors and avoid shifting the term's translations +FIX: When source is set to show a warning when the term is not found, the Localized Parameters was showing the warning +FIX: Corrected wrong layout in Terms list when in Retina displays (contributed by @TailoraSAS) +FIX: Languages will fallback were filling their translations when doing a build + +2.8.6 +NEW: Menu "Tools/I2 Localization/Toggle Highlight Localized" changes all localized text into "LOC:" to easily spot errors +NEW: "Bake Terms" tool now generate another class (ScriptTerms) in ScriptLocalization.cs that class have variables for the Term Names +NEW: Parameters can now be localized if the parameter value is the name of an existing Term +NEW: Terms filtering in the LanguageSource list, now allow prefix 'f xxx' or 'c xx' to search in translations or category +FIX: Downloaded Spreadsheets will also save their key to avoid corrupting the cache when running different versions of the same app +FIX: Google Live Synchronization was not updating the temporal languages files used to save memory at runtime +FIX: GetCommonWordInLanguageNames now does a Case Insensitive comparison ("English (Canada)" can now match "english") +FIX: Latest unity beta was failing to detect TextMeshPro when installed using the PackageManager +FIX: Removed warning regarding Tizen +FIX: Clicking the Language names in the Term's description was not previewing the translations +FIX: Changing Fonts/Objects and Localize Targets when selecting multiple Localize components was only updating one of them +FIX: Charset tool was not removing the last ] from tags +FIX: ParameterManager activation was crashing IOS build in some Unity versions + +2.8.5 +NEW: Once a day (can be configured), the editor will check if the Spreadsheet is up-to-date to avoid issues when playing in device +NEW: Added Language code 'es-US' to support "Spanish (Latin Americas)" +NEW: Added Toggle "Separate Specializations into Rows" to Spreadsheet export inspector, to either merge or split the specializations +NEW: Startup language will now try to match an official language before trying a fallback to any custom language name or variant +FIX: Fallback languages now try finding a language of the same country, and then fallback to the first from the list +FIX: Removed harmless logs marked as error related to File not found or accessible +FIX: Disable language Loading/Unloading on the Switch console +FIX: Some character combinations where producing an error when using the CharSet tool and clicking "Copy to clipboard" +FIX: When the starting language had Fallbacks, those where not loaded correctly +FIX: If the Localize or LanguageSource inspector was open, changing the languages was not updating the inspector preview +FIX: Removed example script using OnMouseUp to avoid showing a warning when building the game (replaced with Unity UI) + +2.8.4 +NEW: Component CustomLocalizeCallback with a UnityEvent to set functions that should be called whenever the Language changes +NEW: Localize component now has the Callback as a UnityEvent which allows calling several function and even passing parameters +NEW: Customizable PlayerPrefs and FileAccess, allowing setting your own functions to handle settings and file IO +NEW: Term's list can now show and filter more than 31 categories (contributed by @71M THANKS!) +NEW: LocalizationManager.CurrentCulture to allow formating (e.g. string.Format(LocalizationManager.CurrentCulture, "{0:c}", 12)) +FIX: Tool CharSet will no longer add Plural tag characters (e.g. [i2p_Zero]) +FIX: Refactored BundlesManager to allow implementing a CustomBundlesManager +FIX: Translating a text with a plural parameter (e.g. {[#POINTS]} ) now generate all plural forms in the target language +FIX: Android devices were not auto-detecting some languages on startup +FIX: Translations that starts with characters (') or (=) can now be correctly exported and imported into Google Spreadsheets +FIX: Localize Target was not detected in Unity 2018+ +FIX: Building XCode with Append failed unless set to Replace or manually deleting the Localization files + +2.8.3 +NEW: Runtime Memory optimization by loading/unloading languages depending on which ones is in use +NEW: Added Support for the following languages: (Although Google Translate doesn't support all of them) + Abkhazian, Afar, Akan, Amharic, Aragonese, Assamese, Avaric, Avestan, Aymara, Bambara, Bashkir, Bengali, Bihari, + Bislama, Breton, Burmese, Chamorro, Chechen, Chichewa, Chuvash, Cornish, Corsican, Cree, Divehi, Dzongkha, Ewe, + Fijian, Fulah, Guaraní, Haitian, Hausa, Herero, Hiri Motu, Interlingua, Interlingue, Igbo, Inupiaq, Ido, Inuktitut, + Javanese, Kalaallisut, Kanuri, Kashmiri, Central Khmer, Kikuyu, Kinyarwanda, Kirghiz, Komi, Kongo, Kuanyama, + Luxembourgish, Ganda, Limburgan, Lingala, Lao, Luba-Katanga, Manx, Malagasy, Marshallese, Nauru, Navajo, North Ndebele, + Nepali, Ndonga, Sichuan Yi, South Ndebele, Occitan, Ojibwa, Church Slavic, Oromo, Oriya, Ossetian, Panjabi, Pali, Rundi, + Sanskrit, Sardinian, Sindhi, Northern Sami, Samoan, Sango, Scottish Gaelic, Shona, Sinhala, Somali, Southern Sotho, + Sundanese, Swati, Tajik, Tigrinya, Tibetan, Turkmen, Tagalog, Tswana, Tonga, Tsonga, Twi, Tahitian, Uighur, Venda, + Volapük, Walloon, Wolof, Frisian, Yoruba, Zhuang +NEW: Exposed a variant of the LocalizationManager.ApplyLocalizationParams that can get the parameters from a function +NEW: Localization Target now use ScriptableObject to allow keeping extra parameters to setup the targets +NEW: Android devices now properly detect the Device Language Region (no longer using Unity's Application.SystemLanguage) +FIX: Two parameters in a single translation was failing if the length of the text was not the same +FIX: 'Missing' icon was not showing in the Term's list when in Unity 2017+ +FIX: Compatibility with Window Store Apps and UWP +FIX: Support for multiple Localize component in the same GameObject +FIX: Increased the PostProcessBuild priority to avoid conflicting with other plugins +FIX: Assigning None to a Term translation's Object Field was ignored +FIX: LocalizationManager.OnLocalizeEvent now correctly releases all callbacks after finishing Play Mode in the Editor +FIX: Term list in language source was showing empty space for some seconds after unselecting a term + +2.8.2 +NEW: Improved the example scene: 'I2Localization features LocalizedString.unity' +NEW: Added a version of ForceTranslate to translate several texts at the same time +NEW: The translate/Translate All button will now skip terms that don't have type "Text" (avoid Materials, Fonts, etc) +NEW: Restored the translate button for each translation field, but this time it shows only "T" to still allow more space +NEW: Google Translate will now skip tags (e.g. [tag]..[/tag], ..) +NEW: Google Translate skips any text inside [i2nt].ignored.text.[i2nt]. Those tags are also not used when rendering translations +NEW: Basic Hindi / Devanagari support +NEW: Optimized GC Allocations, removed runtime usage of Regex +NEW: By default, all scenes will be selected in the LanguageSource tools (Parsing, Renaming, Changing Category, etc) +FIX: Issue with some unity versions failing when Translate All/Export with an error related to 'Rewinding' the POST result +FIX: Issue where clicking the translate button was failing when terms source translation had & or similar symbols +FIX: Issue with some unity versions failing when Translate All/Export with an error related to 'Rewinding' the POST result +FIX: Issue where clicking the translate button was failing when terms source translation had & or similar symbols +FIX: Button "Translate All" will not longer override non-empty translations when input type is Touch instead of Normal +FIX: Play in Editor sometimes failed to localize when changing languages +FIX: Translating all terms to a language with a variant (e.g. en-CA) was failing +FIX: Example scenes had warning loading when the project was set to serialization: Force Text +FIX: Long Key names are now clamped to 100 characters in the terms list so that it doesn't get too wide +FIX: GoogleTranslate.ForceTranslate was not handling tags and parameters +FIX: LanguageSources in the scenes were not loaded inside the editor until they were clicked +FIX: Localize target AudioSource was not playing all the time +FIX: Selecting a different Target type in the Localize component was not updating correctly +FIX: Localization failed when there where empty slots in the Assets list (LangaugeSource) or References (localizeComponent) + +2.8.1 +NEW: Plural support with multiple Plural forms based on the target language +NEW: LocalizeDropdown now supports TMPro Dropdown +NEW: Adding a Term will automatically detect the Term type (e.g. Sprite, Font,...) (instead of always defaulting to "Text") +NEW: Google Translation will now generate translation for each plural form of the target language +NEW: New Term Type: Child (it enables the child GameObject with the name matching the translation to that language) +NEW: CharSet tool now has buttons to select all languages, clear or invert the selection +NEW: Right-To-Left and Modifiers sections in the Localize inspector will now only show if the term's type is 'Text' +NEW: Confirmation dialog before deleting a Language +NEW: Modified the WebService to support translation requests using POST. This increases the reliability of translating large data sets. +NEW: Added a close button to the Error message in the inspector. +NEW: When the Verify WebService fails, it will now display the error in the inspector +NEW: LocalizationManager.ApplyLocalizationParameters can now use Global, Local parameters or a dictionary of parameters +NEW: LocalizedString inspector now has a button that opens the LanguageSource to allow editing the term +NEW: The LanguageSource now has an option to decide if default Language will be Device Language or the first in the Languages list +NEW: LanguageSource's terms list now shows 3 dots (...) after the last term if some terms were hidden by the category filter +NEW: Sub Sprite Terms will now show the full path of the sprite (e.g. "Atlas.SpriteName") +DEL: Removed the "Translate" button next to each translation to allow for more space. Instead, use the "Translate All" in term/language +FIX: Term Type 'GameObject' now works as expected +FIX: IOS AppName Localization was not exporting languages with regions +FIX: Clicking the delete button ("x") of a disable button will now correctly delete it (no need to manually enable and then delete) +FIX: Google Translation will not longer fail silently when the target language is not supported by Google translate +FIX: Building Android Apps with a name including (') was failing +FIX: Sometimes when playing in editor, changing the language didn't localize all texts +FIX: Restored the GoogleTranslation.ForceTranslate (although its noted that it may fail in some unity versions having the www blocking bug) + +2.8.0 +NEW: Downloaded Spreadsheets at runtime are now saved into a file in the persitentData folder to avoid overflowing the PlayerPrefs +NEW: Example scene showing how to use LocalizedString +NEW: Localize component now has a checkbox (Separate Spaces) to add extra spaces to the languages that don't add them between words. +NEW: All saved translations are now encrypted by default, feel free to change the password in StringObfucator.cs for added security +NEW: ScriptLocalization is no longer built by default (to speed out compilation by avoiding checking all the time) +NEW: Instead of ScriptLocalization.Get(xx), it will be better to use LocalizationManager.GetTranslation(xx) +NEW: TermsPopup attribute now has an optional filter (e.g. [TermsPopup("Tutorials")] ). This change was contributed by @michael THANKS! +NEW: LocalizationManager.GetTranslation(Term, overrideLanguage="English") allows retrieving translations outside the current Language. +NEW: Tool PARSE now also detect script reference to LocalizationManager.TryGetTranslation("term") +NEW: Importing terms from Google will now remove invalid (Non-ASCII) characters from the Terms Name +NEW: Selecting the Language Code in the Languages Tab, now shows a more compact list with languages and variants as childs +NEW: When the localize component has a LanguageSource set as Source, it will only show the terms inside that source +NEW: Added a "Detect" button after the Source selection in the Localize component to find the LanguageSource containing the selected term +NEW: Added a confirmation dialog to the delete terms button +DEL: Deprecated old TextMeshPro_Pre53 +DEL: Removed support for DFGUI (was removed from the AssetStore a while ago, if you still need support, please use I2Loc v2.7.0) +FIX: Localization targets are now AutoRegistering before the Awake function of the scene. This fixes issues with the LocalizeOnAwake flag +FIX: Export to Android was failing to create the correct Locale folders (i.e. values-en-rUS instead of values-en-US) +FIX: TextField used to filter the Terms List in the LanguageSource was not allowing Copy/Paste +FIX: Term's name can now include non-ASCII character as long as they are not controls (e.g. newline, tab, etc) +FIX: Android XML with the AppName will now properly escape the name if it contains XML-ilegal characters +FIX: Compatibility update for Unity 2017 when editor is set to .Net 4.6 (thanks to @nox_bello) +FIX: Tool PARSE was not detecting the correct term when ScriptLocalization.Get("xx", param1, param2) had 1 or more params +FIX: In some unity versions, compiling for UWP was throwing an exception when Google Live Sync was used. +FIX: Exporting Chinese Variants in ANDROID was failing because Android uses (zh-rXX instead of zh-XX) [thx to @fur contribution] +FIX: Disabling the last language in the LanguageSource list, was disabling some other UI controls outside that language +FIX: Realtime Translation example was failing when the I2Languages.prefab was not selected +FIX: TextField used to filter the Terms List in the LanguageSource will now not lose the focus when typing +FIX: When clicking Translate or Translate All int the editor, it was not showing the "Translating...." message +FIX: Translating texts with & was return wrong translations +FIX: Sometimes the inspector width was bigger than it had to be + + +2.7.0 +NEW: To separate purposely empty translations from missing ones, the empty translations should be set to --- +NEW: Google Update Frequency can now be set to "OnlyOnce" to only download data from the Spreadsheet the first time the app is executed +FIX: OnMissingTranslation in the LanguageSource now is working as expected +FIX: Compatibility with Unity2017 was causing the editor to not find some EditorStyles and the Translate function was looping forever +FIX: Changing text alignment will not be reverted when switching languages +DEL: ForceTranslate is now removed, use the GoogleTranslation.Translate instead (because Unity 2017 doesn't run www in a separate thread) + +2.6.12 +NEW: When a term is not found, its translation will be null instead of "" to diferenciate that case from terms with empty translations +FIX: Terms with empty translations will change the label's text to empty. +FIX: Internal term "-" will not longer be shown in the LanguagesSources +FIX: Several errors when LanguageCode was invalid or only had 1 letter +FIX: Renaming terms in multiple scenes will now correctly save the scenes +FIX: Clicking the inspector to preview a language and then exiting the Localize inspector was only reverting the selected object +FIX: Corrected "RightToLeft Text Rendering" example scene (added names to the labels and made the buttons select the correct language) +FIX: RTL Line Wrap (when maxCharacters>0) will not longer add extra lines at the bottom +FIX: Language Source was downloading data from google when any delay was specified (even when the frequency was set to NEVER) +FIX: Building android on some MAC was failing to resolve the staging path +FIX: RTL languages will now be fixed correctly when surrounded by [] and other simbols +FIX: Compile error (about SceneManager) when running the game in 5.2 or older +FIX: Google Live Sync now will download the data, even if the scene is changed while the spreadsheet is been downloaded +FIX: New TextMeshPro not been detected because the DLL changed its signature + + +2.6.11 +NEW: App Name can now be localized in both IOS and Android +NEW: Localize term now has two string fields to add a Prefix & Suffix to the translations (e.g. allows adding : at the end of the text) +NEW: Example of how to change the language using a Unity UI Dropdown (component SetLanguageDropdown) see the "uGUI Localization" Scene +FIX: IOS Store Integration now works automatically +FIX: Parsing terms was not updating the Term's Usage +FIX: Better support for arabic texts with tags +FIX: Previewing a language in the editor by clicking the Language name, will now respect the RTL or LTR direction depending on the language +FIX: Removed warnings in Unity 5.6 +FIX: TextMeshPro not updating the font when using a material name in a subfolder of the Resources +FIX: TextMeshPro now wraps correctly texts from Right-To-Left Languages (e.g. Arabic) +FIX: CharSet tool will now correctly find what Arabic and other RTL characters are used (will apply RTLfix when adding the characters) +FIX: TextMeshPro (paid version, the one with the source code) was not been detected correctly +FIX: Translating a term inferring from Label's text, will no longer remove the non ASCII characters +FIX: Google Live Sync will now auto-update the scene texts without needing to change the current language +FIX: LocalizationManager.GetTermData will now call InitializeIfNeeded, which also now validates that there are sources available +FIX: Added validation for undefined BuildTargetGroup.Switch in 5.6 + +2.6.10 +NEW: PlayMaker support (Actions: Get/SetCurrentLangauge, SetNextLanguage, Get/SetTerm, GetTranslation) +NEW: Button next to the plurals tab to show if the DisabledLanguages should show the translation or should be hidden +NEW: Massive inspector speed improvement when Parsing terms, selecting a LanguageSource, etc +NEW: LocalizationManager.ApplyLocalizationParams now accepts a general GameObject instead of forcing a LocalizeCmp. This allows using LOCAL parameters without localize component +NEW: added options for parameters when calling ScriptLocalization.Get(term, true, 0, false, applyParameters:true, localParamsRoot:gameObject) +NEW: Clicking a Translation in the Localize component will now Preview that language in the entire UI +NEW: Added a button at the top of the Term's List in the LanguageSource to refresh the translation shown in the Scene (calls LocalizeAll(true)) +NEW: Menu option to also call the LocalizeAll (Menu/I2/Localization/Refresh Translations). This is useful if the translation is changed and should be updated in several UI elements +NEW: LocalizationManager.GetTermsList() now can have a parameter to only show the terms of that category (e.g. .GetTermsList("Tutorial")) +NEW: LocalizationManager.HasLanguage(..) and .GetAllLanguages(..) now has optional parameter SkipDisabled to skip disabled languages. Default=true +NEW: Build ScriptLocalization.cs tool now has a button to select the terms previously built +FIX: Disabling a language will skip it when selecting the startup language +FIX: Selecting a different LanguageSource will not longer set the categories to None, instead it will revert to Everything +FIX: Now the Scene can preview the translation of disabled languages. Just click in the language name next to the Terms's description (localize component OR language Source) +FIX: Compile errors when building for Windows Phone or WSA +FIX: Generating the files for the Store Integration (Android, IOS) was also exporting the disabled languages +FIX: Alignment option for TextMeshPro now works with the latest TextMeshPro version (v1.0.55.52 Beta 3) +FIX: LocalizationManager.LocalizeAll is now internally handled at the end of the frame (using a coroutine) to handle multiple localization in the same frame and timing issues when start Playing +FIX: A term will no longer show as missing translation (yellow + italics) if the missing translation belongs to a disabled language +FIX: ResourceManager.CleanResourceCache will now only be called when a level is loaded to avoid frame rate spikes in the middle of the game +FIX: Added support for the new TextMeshPro (free version) + + +2.6.9 +NEW: AboutWindow will never open automatically, instead there will be an small warning next to the version number +NEW: LocalizedString (link to documentation) +NEW: Changing .NET CurrentCulture when the language changes is now optional. Its disabled by default and can be enabled by adding an AutoChangeCultureInfo component to your first scene +NEW: Terms can now be set to to avoid localizing it (e.g. Don't localize Label's text, but do localize Label's font) +NEW: Languages can now be disabled (useful for having data columns in the spreadsheet) Just add a $ in front of the language name in the Spreadsheet or uncheck the toggle in the LanguageSource +NEW: Clicking the Language name next to the translations will preview the text in that language +FIX: Event_OnSourceUpdateFromGoogle is now called with ReceivedNewData==false whenever the languagesource is up-to-date +FIX: Auto-detection of plugins was not working correctly for IOS +FIX: Removed warning "Unsupported encoding: 'UTF-8,text/plain'" that was happening when translating a text +FIX: RTL fix was not been applied to Right-To-Left languages when EnableChangingCultureInfo was not called or false +FIX: Changing Category was not marking the scene Dirty + +2.6.8 +DEL: [i2auto] will not longer be used (if your spreadsheets have that, you should remove all [i2auto] texts and reimport to the LanguageSource) +DEL: Translations will not longer be marked as translated by google (this speed the import/export process) +NEW: When a term is not defined for some language, it can be set to display (Empty, Fallback or a Warning) The setting is in I2Languages.prefab Language Tab +NEW: Localize components will execute the Localization Callback even without a valid Translated Term. +NEW: When creating a term in the Localize component, the first language (e.g. English) will be auto-filled with the label's text +NEW: Added two more parameters to the callback when Import_Google finishes (Event_OnSourceUpdateFromGoogle(LanguageSource, bool ReceivedNewData, string errorMsg)) +NEW: Selecting the checkbox next to the Term's list in the LanguageSource and then clicking the Term Usage button selects ALL objects using all the selected terms +NEW: Surrounding a text with the tag , ignores converting it to RTL (e.g. "2. بدفع مبلغ") +NEW: New toggle (Ignore Numbers), next to the Max Line Length in the localize component, to automatically avoid converting numbers when parsing RTL texts +NEW: .NET CurrentCulture is changed based on the current language to make all culture-dependant operations to use the properties of the selected language +NEW: Detecting if the language is Right-To-Left will now be using the CurrentCulture settings as that maybe more precise +FIX: Right-To-Left languages will not adjust the alignment if the original alignment was CENTER +FIX: 2DToolkit now allows adjusting the alignment if the language is RTL +FIX: Add/Remove language was not marking the LanguageSource as dirty and the changes could have been getting lost +FIX: Copy/Paste a Localize component into a new GameObject will properly update the Target reference +FIX: If the WebService was set in a LanguageSource inside the scene and not in the I2Languages.prefab, Google Translate/Export/Import wasn't working. +FIX: Compile erors when using an old version of TextMeshPro (requiring TextMeshPro_Pre53) +FIX: Texts for Right-To-Left languages containing multiple lines was showing extra lines when using \r\n for new lines +FIX: LanguageSourceData.Import_Google was not executing when Auto-Update was set to NEVER (even if ForceUpdate was true) +FIX: Accessing www.text was returning an Encoding error in the latest patch releases (5.4.1p3 and 5.3.5p7) + +2.6.7 +NEW: SpriteRenderer can now be localized +NEW: Translations can have Parameters (e.g. "The winner is {[WINNER}]") and at runtime the tag is replaced by its value by using a local or global parameter +NEW: Local parameters can be set by adding a LocalizationParamsManager component to the gameObject, and it has a list of parameters (i.e. pairs) +NEW: Global parameters can be set by adding a ILocalizationParamsManager class to the LocalizationManager.ParamsManager list +NEW: Example Scene named "Callbacks and Parameters" showing how to modify the translations using Callbacks, Local Parameters and Global Parameters +NEW: Unity UI Dropdowns can be localized by adding the LocalizeDropdown component +NEW: Localized objects (Textures, sprites) can now be loaded from a bundled by registering a ResourceManager_Bundles (see RegisterBundlesManager.cs example) +NEW: ScriptLocalization.Get(term) will now automatically fix it for RTL if the current language is Right-To-Left (use .Get(term, false) to avoid that) +NEW: Parse Terms in Scripts will now match terms in the form "LocalizationManager.GetTranslation" as well as "ScriptLocalization.Get" +NEW: ScriptLocalization.cs is now autogenerated to avoid overriding existing localizations. That file is also now moved into the Assets\I2 folder +NEW: Localize component now has a toogle "Force Localize" that should be true when the translation has parameters to force the localization when the object is enabled +NEW: Tool CharSet now has a button "Copy To Clipboard" +NEW: Local parameters SetParameterValue function now has an optional parameter to skip the localization (useful when setting several parameters in a frame) +NEW: LocalizationParamsManager.OnLocalize() executes the localization with the parameters previusly set. +FIX: Auto-Sync from Google Spreadsheet was not detecting the new versions correctly and wasn't loading from the cache. +FIX: Right-To-Left texts will now correctly handle ritch-text tags (e.g. .. and [FF0000]..[-], etc) +FIX: Expanding/Collapsing the Terms, References or OnLocalize Callback in the Localize component is now remembered +FIX: Changing in the terms selection list by as thats more understandable +FIX: Selecting from the list of term will use the Inferred one. +FIX: Selected Term is now drawn in a light Yellow when it is inferred (previously was dark yellow and wasn't as visible in the Editor Light Theme) +FIX: Renamed button at the bottom of the terms description to make it more understandable. From "Merge" to "Rename". +FIX: When clicking that Merge button, the current term is automatically selected as the term to rename +FIX: Exporting a csv file with auto-translated terms containing (,) was generating extra columns with "[i2auto]". +FIX: ParseTerms in scripts was not detecting the term when the function had spaces (e.g. ScriptLocalization.Get ( "term" )) + +2.6.6 +NEW: Allow multiple Localize component in the same object +NEW: TextMesh Pro localization when changing material (e.g. "ARIAL SDF - Outline") will now also find and use the corresponding font (e.g. "ARIAL SDF") +NEW: Added a Delay to the Auto-update from Google to wait some time before updating. To prevent a lag on startup +NEW: Exporting to a spreadsheet will sort the terms +NEW: Charset Tool allows adding upper and lower versions of characters even when one character variant is not found +FIX: Empty languages can not longer be added by clicking the "Add" button +FIX: Columns with empty language name in Google Spreadsheet or CSV files are now skipped +FIX: Sometimes when playing in the Devices, I2 Localization was using old localization data from PlayerPrefs +FIX: Google Live Synchronization was not detecting correctly the Spreadsheet changes +FIX: Removed a debug log that was printing the entire content of the downloaded spreadsheet, making the log file hard to read +FIX: Removing a Term from the LanguageSource was still displaying it in the Terms List even though they werent there anymore +FIX: Compile warning related missing BuildTargetGroups when detecting installed Plugins +FIX: Translation of UPPERCASE texts are now handled correctly +FIX: Categories/terms matching part of another category will export correctly (e.g. TUTORIAL and TUTORIAL1\Welcome) +FIX: I2 About Window will not longer shown when doing a build or when in batch-mode +FIX: Texts starting with a tag (e.g. [xxx]) are now accepted (useful for NGUI color tags) + +2.6.5 + (requires a new WebService: v4) +NEW: Localize.Term = xxx works now the same that executing Localize.SetTerm(xxx) +NEW: Importing a big Spreadsheet is 20-70 times faster than before +NEW: Added a Translate button next to each language to bulk Translate all missing terms for that language +NEW: Tool to find which characters are used in the languages (useful to create bitmap fonts) +NEW: Adding a term to a Language source without languages, will automatically create "English" +NEW: NGUI and TextMeshPro example scenes now also show changing Fonts based on the language +NEW: Viewing a big LanguageSource is now smoother even when seeing several thousands terms. +NEW: Added a dropdown menu to select the File Encoding (UTF8, ANSI, etc) of the local CSV file +NEW: Use of the WebService to get the Google Translations (previously it was a hack that parsed the google web but failed whenever google changed their look) +FIX: Translating Terms was skipping the first 2 letters +FIX: Translating text with Title Case (This Is An Example) was failing with google +FIX: Translation using Term Category (Tutorial/New Example) +FIX: Removed delay when selecting languageSources caused by the parsing of terms in scripts, now scripts are only parsed when using the Parse Scripts Tool +FIX: TextMeshPro labels will auto-size correctly when switching languages +FIX: 2D Toolkit example scene was corruptedLoca +FIX: localizeComponent: Button "Add term to Source" for a secondary Term will add the term to the source containing the primary term. +FIX: Selecting "None" as a referenced object will no longer produce a null reference exception +FIX: Errors reporting that DontDestroyOnLoad can only be called in Play mode +FIX: Errors when some referenced asset was destroyed and the plugin tried to release it + +2.6.4 +NEW: SVG Importer has been integrated (support for SVGImage and SVGRenderer: localizes VectorGraphic and Material) +NEW: Updated to support TextMeshPro 5.2 beta 3.1 (previous versions need to change TextMeshPro by TextMeshPro_Pre53 in the scripting define symbols) +NEW: I2Languages.prefab has been moved to I2/Resources to make update easier (just delete I2/Common and I2/Localization and import the new package) +NEW: The spreadsheet will not be auto-downloaded when running in the editor as the local language source its supposed to be the most up-to-date +NEW: Better compatibility with UnityScript (added method versions to avoid default parameters, still needs to move I2L to the Plugins folder) +NEW: Inferred terms will be changed to normal terms as soon as a matching term its found +NEW: Added variables LocalizeManager.CurrentRegion and .CurrentRegionCode to get the region part of the language (e.g. "en-US" -> "US") +FIX: When re-starting the game after downloading a modified spreadsheet, it was loading the old translations +FIX: Error shown in the console when playing the game in the editor while a Localize component its shown in the Inspector +FIX: Parsing scenes failed on Unity 5.3+ when scenes where not in Assets folder +FIX: Adding a localize term before adding a target (TMPro label, UI Text, etc) failed to get the inferred Term +FIX: Selecting a Term in the localize Secondary Terms Tab, was changing the label's text to the name of the font/atlas +FIX: TextMeshPro was producing warnings regarding materials when previewing different fonts in Editor and not in Playing mode +FIX: Marking scene dirty when Localize callback and other variables are changed +FIX: Button "Add Term To Source" in the localize inspector was sometime adding the term to the wrong LanguageSource +FIX: Selecting from the term's list made that option disapear the next time the popup was openned +FIX: IOS integragion will now correctly generate Info.plist instead of info.plist +FIX: When copying a Localize component and pasting it in other object will no longer keep a reference to the previous object + +2.6.3 +NEW: IOS Store Integration (adds the languages to the Info.plist file) +NEW: If the localize component, can find its inferred term in a source, it will use that term and stop inferring it +NEW: When adding a term to a source, the scene is parsed and every object inferring that term will start using it +NEW: In LanguageSource inspector, button "Add Terms" and "Remove Term" will use the selected term even if it doesn't have the checkbox ticked +NEW: When auto-generating ScriptLocalization.cs, if the file was moved, the plugin finds it and regenerate it in the new location +NEW: Non printable/special characters in the Terms name are removed from inferred terms to increase legibility +NEW: On the Terms list, the buttons at the bottom (All, None, Used, Not Used, Missing) now select from the visible terms not the full list. +NEW: Button "Show" next to each Language in the LanguageSource to preview all LocalizeComponents in that language +NEW: Clicking on a translation previews how it looks, but selecting another object will now stop the preview and revert to the previus language +FIX: Compile error in TitleCase(s) when building for Windows Store +FIX: Android Store Integration was using a wrong path and now all generated files are in Plugins\Android\I2Localization +FIX: Textfield used to type the new category now allows typing \ and / to create subcategories +FIX: On the Terms list, the filters (Used, NotUsed, Missing) will now work correctly with categorized terms +FIX: Improved performance on the LanguageSource and Localize inspector. Now selecting a big languageSource its around 4 times faster + +2.6.2 +NEW: Plugin now supports Unity 5.3 +NEW: Android Store Integration (adds strings.xml for each language so that the store detects the application is localized) +NEW: When editing a term, Translate and Translate All buttons will translate the Label's text instead of the Term name +NEW: Tool to find No Localized objects now saves the Include and Exclude filters +NEW: Added a Refresh button on top of the Terms list to quickly parse all localized objects in the scene +FIX: Alignment will not revert to "Left" when switching languages. RTL languages will still be adjusted correctly. +FIX: Parse terms was not detecting inferred terms used in Localize components that were not previously opened in the inspector +FIX: Importing spreadsheets with auto-translated terms having multiple lines was adding extra quotes. +FIX: Google translate Language code of all chinese variants was updated to the right code +FIX: Changing Term Categories or Renaming it will now update the language Source +FIX: Add button (+) after the Terms list is now always at the end of the terms, even when a term is expanded +FIX: When changing category in a term that its not in the source, it will display an error box showing why it fails +FIX: Sometimes the Resources folder failed to be created if it was previously created (when generating I2Languages.prefab) +FIX: TextField to edit the Term's description and translation has word wrap enabled to avoid expanding the inspector on long lines +FIX: Vertical scrollbar in the Terms list will now hide when all terms fit in the screen +DEL: Removed checking for installed plugins when scripts are compiled (will only happen at startup or if force from the menu) + +2.6.1 +NEW: Multiline texts can be fixed correctly for RTL languages by specifiying the maximum line length (Localize Inspector) +NEW: Added a checkbox to the Localize Inspector to allow changing alignment for RTL Languages (Right when RTL, Left otherwise) +NEW: Adding API for accessing translated objects: (LanguageSource and Localize).AddAsset, .HasAsset, .FindAsset +NEW: Localize.FinalTerm and .FinalSecondaryTerm are now public variables that can be used in the OnLocalizationCallback +FIX: Switched loc order of Main and SecondaryTerms to localice the text/sprite after the font/atlas was changed +FIX: Editor UI for the Terms translation was overflowing. +FIX: Automatically Importing from Google will not longer clear the localization data +FIX: Faster startup by avoding calling LanguageSourceData.UpdateDictionary multiple times +DEL: Projects using Unity new UI no longer have to add UGUI to their Scripting Define Symbols +DEL: Projects using TextMeshPro no longer have to add TMProBeta to their Scripting Define Symbols +DEL: Cleaned some variables in the Inspectors that were not longer needed + + +Thanks to 00christian00 and vicenterusso for their contributions!! + +2.6.0 +NEW: Localize component now has a "Translate ALL" button +NEW: Term can be flagged as "translated by human" or "translated by Google Translator" +NEW: The Callback in the Localize component now show all public methods of ALL monobehaviors in the Target object +NEW: Tool 'Parse Localized Terms" now allows searching for term usage in the SCENES and in the SCRIPTS +NEW: Localize was optimized to avoid localizing every time the component is enabled +NEW: Localize has now a setting for Pre-Localize on Awake or for waiting until the object is enabled. +NEW: Downloading from google uses now a custom format instead of JSON to avoid parsing errors +NEW: Method LocalizationManager.FixRTL_IfNeeded(string) does RTL fixing if the current language is RTL +NEW: TermsPopup attribute was added to display a string as a popup with the list of terms +FIX: The Plugin Manager window now allows op-out of automatic notification whenever there is a new version. +FIX: Tools tab now shows error messages and warnings +FIX: Corrected compile errors regarding ambiguous calls that happened on some projects/platforms +FIX: Fixed compile error when building for METRO about missing ToTitleCase method in the CultureInfo +FIX: NGUI LanguagePopup component now starts with the saved language instead of the first one in the list +FIX: Chinese Simplified/Traditional are now correctly detected when running on the device +FIX: SetTerm was failing when called on a disabled Object + +Thanks to tacticsofttech for its contribution to the Parse terms in Scripts!! + +2.5.0 +- NEW: Terms can now have separated translations for Touch devices. This allows specifying "tap" instead of "click" +- NEW: Increased performance when browsing the terms list in the Language Source +- NEW: Add a new version to the required Google Service +- NEW: Localize can modify case not only to UPPER and lower but to UpperFirst("This is an example") and to Title ("This Is An Example") +- NEW: Scenes List in the Tools tab can now be collapsed +- FIX: Google Translation was failing for some strings with mixed or title casing e.g. ("Not Enough Rope" was not translating) +- FIX: SetLanguage component Inspector was not showing. Now it displays a dropdown to select the language + +2.4.5 +- NEW: Import/Export CSV files now supports changing the separator character (Comma, Semicolon, Tab) +- NEW: The Localization is now initialized when calling HasLanguage to allow changing the language before requesting any Translation +- NEW: The tool to bake the terms into ScriptLocalization.cs now replaces invalid characters by '_' +- NEW: Terms in ScriptLocalization.cs can now be clamped to a maximum length, Terms that clash are enumatated (Examp_1, Examp_2) +- NEW: When creating languages, those with a variant didn't list the base language, now the list includes the base (e.g English) +- NEW: All languages in the Add Language popup show the Language Code for easier identification +- NEW: Not all international language codes are supported by Google Translator. A fallback language is now provided for those. +- FIX: Translating to some languages by using the "Translate" button on the Localize component was failing for some languages +- FIX: When the Language Source had lot of languages, the Terms list was sometimes displayed empty when scrolling + +2.4.4 +- NEW: Menu: Tools\I2 Localization\About opens a window showing if there is a new version and has shortcuts to useful information +- NEW: Whenever there is a new version the editor automatically alert you. There are options to opt-out or skip a version +- NEW: Clicking the Translate button next to the Term translations will now use the Term name if no other translation is found +- NEW: Language Source Inspector has now better performance showing the list of terms, languages and scenes +- NEW: The list of languages in the Language Source inspector is now expanded to cover the available space +- NEW: LocalizationCallback can now access the static variables CallBackTerm, CallBackSecondaryTerm, MainTranslation, SecondaryTranslation +- FIX: No longer need to call LocalizationManager.UpdateSource and UpdateDictionary before using LocalizationManager.GetTermsList() +- FIX: NGUI example scene had missing references as the example NGUI atlas changed +- FIX: The UpgradeManager was failing on Unity 5 when accessing the BuildTargetGroup.Unknown +- FIX: Importing from CSV and Google Spreadsheets was ignoring the Language Codes and merging those with identical name + +2.4.3 +- NEW: Localizing UGUI sprites now supports sprites of type "Multiple" +- NEW: Menu Options to disable/enable auto plugins detection (menu: Tools/I2 Localization/Enable Plugins/...) +- FIX: Using Localize.SetTerm(term) on the Start or Awake functions will not get reverted to the default value +- FIX: Checks for when Localizing prefabs but the referenced objects are not found. +- FIX: Added support for Unity 5.0.0f3 + +2.4.2 +- NEW: Added an optional bool to allow fixing for RTL when using translation = ScriptLocalization.Get(xxx, true) +- FIX: Realtime translation was failing on some mobile devices +- FIX: Fix error when localizing not empty or non existing terms(this caused Sprites and other Secondary Translations to fail) +- FIX: Terms are now saved after importing them from google + +2.4.1 f2 +- NEW: ScriptLocalization.cs and I2Language.prefab are now autogenerated so they will not override existing localizations +- NEW: The plugin now detects when using TextMeshPro or TextMeshPro beta, and adds a conditional TMProBeta if the beta is used +- NEW: Local Spreadsheets can now be saved as CSV or CSV renamed as TXT (this last avoids the Unity crash when on Mac) +- FIX: OnLocalize Callbacks were not called inside the IDE. +- FIX: Errors when compiling to WebPlayer + +2.4.0 +- NEW: Added support for multiple Global Sources. By default is only "I2Languages" but you can add any other in LocalizationManager.GlobalSources +- NEW: Dynamic Translation work now in the game by using Google Translator to translate chat messages and other dynamic texts. +- NEW: Localize component will detect automatically which sources contain the translation for its term +- NEW: Tool "Find No Localized Labels" can now filter which labels to include/exclude +- NEW: There is now a button to unlink the Google Spreadsheet Key +- NEW: Added quick links in the Source and Localize inspector to access the Forum, Tutorials and Documentation +- NEW: Google WebService now has a version number and the plugin will detect if that version is supported and ask you to upgrade +- FIX: Compile errors that prevented compiling for W8P and METRO +- FIX: Adding a Localize component at run time will now initialize its variables correctly +- FIX: Renamed some Example scripts to avoid conflicts. Also added them to the I2.Loc namespace +- FIX: When secondary translation is not set, it will take the value from the object (e.g. Font Name, Atlas, etc) +- FIX: Tool "Find No Localized Labels" now work with TextMesh, TextMeshPro, UI.Text, etc. +- FIX: Avoided creating multiple PlayerPrefs entries for the same language Source (LastGoogleUpdateXXXX) +- FIX: No longer is possible to rename/create a term if the new term already exists. +- DEL: The console message saying that no terms were found in the scene is now removed and only shown as part of the inspector + +2.3.2 +- NEW: import CSV fill autodetect if the Type or Desc columns are missing +- NEW: SpriteCollection shows now in the Type List in the editor for TK2D +- NEW: Added callback for when a language source is autodated from Google (Event_OnSourceUpdateFromGoogle) +- NEW: Increased translation lookup speed by using a fast string comparer in the dictionary +- NEW: Added a toggle in the Language Source to allow lookup the term with Case Insensitive comparison +- FIX: Terms list on the source will not longer cut off visible elements +- FIX: LoalizationManager.GetLanguageFromCode was returing the code instead of the language name +- FIX: Localization is now skipped if the Main and Secondary translations aren't changed + +2.3.1 +- NEW: Support for TextMeshPro UGUI objects +- NEW: Auto Update from google spreadsheets can now be set to ALWAYS, NEVER, DAILY, WEEKLY, MONTHLY +- NEW: Added functions to get/change the language based on the language code +- NEW: Added functions TryGetTranslation to both LocalizationManager and LanguageSource +- NEW: Language is now only remembered if the user changes it manually and ruled by the device language otherwise. +- FIX: The plugin is now Initialized automatically when requesting a translation or language code +- FIX: Changing the term category was not displaying correctly until the project was reopened +- FIX: Exporting to google as "Add New" was changing the order of languages +- FIX: Compile errors that prevented deploying to Windows Store +- FIX: The editor was not allowing to add language regions (e.g. English (US), English (CA)) +- FIX: Auto Update Google dropdown box was not rendering correctly on all screen sizes + +2.3.0 +- NEW: Google Synchronization now uses a Web Service to avoid using the username/password +- NEW: When playing (even on a device) the game will download the latest changes to the spreadsheet +- NEW: Added support for both the "Classic" and new Google Spreadsheets +- NEW: Button to create a new spreadsheet +- NEW: Importing/Exporting to Google is now an Async operation that doesn't lock the editor and can be canceled +- NEW: Next to the Google Spreadsheet Key there is now a button to open it in the browser +- NEW: Google Import/Export tab will be the default (instead of local file) whenever a spreadsheet Key is set +- NEW: Import/Export can now be set to Replace all Terms, Merge or only add the New Terms +- NEW: A warning is now shown when using a LanguageSource other than the recommended I2Languages.prefab +- NEW: Menu option to open the Global Source I2Languages.prefab (Menu : Tools/I2/Localization/Open GLobal Source) +- NEW: Google Spreadsheet now has a new format, where the description and term type are defined as notes +- FIX: When switching terms or tabs the textfields will not longer keep the previous text +- DEL: Removed support for the old NGUI TextAssets as NGUI has moved into CSV files +- DEL: Removed Google API libraries dependencies +- DEL: The spreadsheet Key is no longer needed. The web service will get all the keys and allow you to select + +2.2.1 b1 +- NEW: Improved Language Recognition. It will now fallback to any region of the same Language +- NEW: Right To Left text rendering example scene +- NEW: DFGUI labels and buttons will be able to localize dynamic and bitmap fonts +- NEW: UI.RawImage Localization +- FIX: UI.Sprite Localization was not loading the Sprite from the Resource folder +- FIX: Up and Down arrows on the Languages list was not ordering the languages +- FIX: Detection of Unity UI (updated to 4.6) +- FIX: Unity UI example scene now uses the 4.6 UI classes +- FIX: Right To Left languages was not detected because the language code wasn't being applied + +2.2.0 +- NEW: Added support for TextMeshPro +- NEW: Terms can now have category and subcategories (e.g. Tutorials/Tutorial1/Startup/Title) +- FIX: NGUI is now detected by looking for the NGUIDebug class instead of UIPanel + +2.1.0 f1 +- NEW: After importing CSV or Google Spreadsheets, the category filter is set to show every term +- NEW: Terms list is now fully expanded on the Language Source +- NEW: Localize Component now has an Option to convert to (Upper, Lower, DontModify) the translations +- FIX: Validations for when importing Spreadsheets with empty columns/languages + +2.1.0 b3 +- NEW: The plugin is now compatible with Unity 5 (up to alpha 11) +- NEW: Register a function in the event LocalizationManager.OnLocalizeEvent to get called when the language changes +- FIX: Updated the example scenes to use the new Language Sources +- FIX: Terms are now saved correctly after importing a CSV or a Google Spreadsheet +- FIX: Allowed methods with one argument to be used as Localization CallBacks +- FIX: SelectNoLocalizedLabels was running every frame after executed +- DEL: Removed button to select CSV file. Now the Import and Export buttons display the open/save dialog + +2.1.0 b2 +- FIX: W8P and Metro compatibility +- FIX: Compiler warnings + +2.1.0 b1 +- NEW: Terms database is now saved within the LanguageSource and not a separated Language Files +- NEW: The selected language is now saved to the PlayerPrefs into "I2 Language" +- NEW: On the Localize Component, creating a key shows a list of terms as you type and their usage +- NEW: On the Localize Component, when changing the translation of a term shows a preview in the target (label/etc) +- NEW: When selecting a Term in the Localize Component, the list can be filtered with the Create Term string +- NEW: On the Localize Component, the Terms List is now sorted Case Insensitive +- NEW: The auto-enable Plugins will set the Script Define Symbols for ALL platforms (IOS,Android,Web,etc) +- NEW: In the Localize Component, the textField thats used for create a key now has a clear button to easy editing +- NEW: If a term is not found when localizing an object the object is left untouched (Previously labels got empty) +- NEW: There is now a button in the Localize Component to quickly rename a Term in the current scene +- DEL: Removing the Editor Databased used to cache the Language Files because all the info is now in the LanguageSource +- FIX: Selecting the CSV file to export will now allow you to create a new file +- FIX: Added a message to explain when exporting fails because the file is Read-Only or its open in other program +- FIX: When exporting to a file inside the project, the "Assets/" section was been skipped +- FIX: Import and Export CSV files now also works on when the editor is set to Web Player +- FIX: Exporting CSV now uses UTF8 encoding to keep special characters +- FIX: The "Open Source" button on the Localize Component now selects the Primary or Secondary term based on the selected tab +- FIX: Terms are now trimmed because spaces at the end/beggining can lead to confusions +- FIX: The list of terms was not showing correctly when selecting MISSING but unselecting USED + +2.0.3 f1 +- NEW: Support for localizing 2D-ToolKit (TextMeshes and Sprites) + +2.0.3 b2 +- NEW: When more than one localization type is available, the plugin allows you to select which component to localize +- FIX: When localizing secondary elements (Atlas, Fonts) the system checks that they still exist to avoid null exceptions +- FIX: Localization of Prefab now have the lowest priority to easy localizing labels/sprites with childs + +2.0.3 b1 +- NEW: The plugin will now check and enable by default all Plugins included in the project (NGUI,DFGUI,UGUI) +- NEW: Global Localization Source (I2Languages) its now empty by default to make it easy to start a new project +- FIX: Moved the Terms used in each example scene to a new Language Source inside each scene +- DEL: Removed Resources.UnloadAsset when changing the localization to avoid unloading referenced assets + +2.0.2 f1 +- NEW: UIFonts fonts can now be localized on NGUI +- FIX: Some example scenes were corrupted +- FIX: Modified the plugin to be compatible with Unity5 + +2.0.1 f1 +- NEW: When an object is set as a translation, the object is also added automatically to the Reference array +- FIX: Importing from Google Spreadsheets will not longer generate 'Description' as a language +- FIX: The editor will show a message if exporting to Google fails +- FIX: The variable is IsLeft2Right was renamed as IsRight2Left to match its behavior +- FIX: Importing Google Spreadsheets no longer duplicate the languages +- FIX: Importing CSV was skipping some languages and not parsing terms after import +- FIX: Converted encoded translations into its ASCII characters ("Il s\x26#39;agit" -> "Il s'agit") +- FIX: Terms Section in the Localize custom editor can be collapsed +- FIX: Localize custom editor becomes more compact and easy to read when several sections are collapsed +- FIX: Expanded Terms in the Terms Tab of the LanguageSource will display an Arrow to make evident that they can be collapsed +- FIX: Terms description is now collapsed automatically when another term is selected +- FIX: The spreadsheet was been opened in the browser even if the Open Spreadsheet after Export flag was disabled + +2.0.0 a2 +- NEW: Support for languagges using Right To Left (RTL) with correct rendering for Arabic languages. +- NEW: Added a toggle on the Localize component to allow discarding RTL processing for selected objects. +- NEW: Languages can now have a Language code to allow for Language Regions (e.g. English Canada vs English United States) +- NEW: Automatic Translation using Google Services will use the language code instead of the Language Name +- NEW: CSV and Google Spreadsheets will save the language code if needed +- FIX: When adding a language to a source the editor will not switch to the Terms tab. That to allows adding several languages at once. +- FIX: Menu options was moved from "Menu > Assets > I2 Localization" to "Tools > I2 Localization" +- FIX: Localization Manager will not allow changing to a language that doesn't exist + +2.0.0 a1 +- NEW: Support for Daikon Forge GUI components +- NEW: Support for uGUI as of the Unity 4.6 beta 2 (this is only available for users in the beta test group) +- NEW: Terms can now have a type (Text, Object, Audio, Font, Sprite) +- NEW: Terms can be set to generate the ScriptLocalization.cs for Compile-Time-Checking of used Terms. +- FIX: Changed the Terms preview based on the Term Type +- FIX: Language Sources can now be in the Resources folder, the scene or bundled +- FIX: Component Localize allows to change the target for localizing more than one component in one GameObject + +1.8.0 +- NEW: Callbacks can be setup on the editor for correct concatenation according to the language +- NEW: Event system for callbacks with reflection +- NEW: Moved all localization calls into events for localizing more types of components without much code change +- FIX: Moved NGUI and UnityStandard localization code into separated files to minimize dependencies + +1.7.0 +- NEW: Localize component has now Primary and Secondary Terms +- NEW: Secondary term allows localizing Fonts on Labels +- NEW: Secondary term allows localizing Atlas on Sprites +- NEW: Support for localizing Prefabs +- NEW: Support for localizing GUITexture + +1.6.0 +- NEW: Added separated components to localize labels and sprites to remove the dependency with the NGUI localization +- NEW: Support for localizing Audio Clips +- NEW: Support for localizing GUIText +- NEW: Support for localizing TextMesh + +1.4.0 +- NEW: The filter on the Terms list can now have multiple values (e.g. "Tuto;Beg" will show only the terms containing "Tuto" or "Beg" +- NEW: Added References to the UILocalize component to be able of store not only text but also objects +- FIX: UILocalize will now show the Localization source it references + +1.3.0 +- NEW: Languages can now be moved up and down to organize them +- NEW: Allowed to filter by category on the Terms list +- FIX: First language in the list becomes now the starting/default language + +1.2.0 +- NEW: Merged Import and Export tabs to allow for external data sources that could be synchronized +- NEW: Ability to categorize Terms to improve organization (e.g. Tutorial, Main, Game Screen, etc) +- NEW: Each term category exports into a separated sheet when linking to Google Spreadsheets +- NEW: Parsing scenes for changing the category on selected terms + +1.0.2 +- FIX: Improved performance on the inspector by removing unneeded Layout functions +- FIX: General Code Cleanup + +1.0.1 +- NEW: Custom Editors now allow Undo the changes on the keys and startingLanguage +- FIX: Removed testing Log calls + +1.0.0 f2 +- FIX: Parsing scenes was executed several times in a row or not at all. +- FIX: Importing CSV will now parse the current scene to show Key Usages +- FIX: A message is shown when Selecting All No Localized labels in scene, if there are none +- FIX: Clicking on the usage number of unused keys will not try to select them +- FIX: Merging Keys will save scenes to avoid loosing changes +- FIX: Sometimes exporting without saving made changes to be lost. Now it automatically saves data if needed. + + +1.0.0 f1 +- NEW: The language TextAsset will be shown in the Language list instead of just the name. That allows finding the asset, moving it to another folder, etc +- NEW: Languages can now be also added by dragging a TextAsset into the Add Language bars. +- NEW: Keys that are are missing the translation in any of the languages are highlighted in the Keys List by making them Italic and Darker +- DEL: Removed button Update NGUI in the Key list. All data will be saved automatically when the inspector view changes to another object or the editor is closed +- FIX: Filter for list of keys now is case insensitive. +- FIX: Auto opening google Spreadsheet after export was opening two web pages. +- FIX: Deleting a language will not only unlink the TextAsset from NGUI but will also delete the text file. +- FIX: If a TextAsset is manually deleted, but NGUI still keeps a reference in the language list, that language is now skipped +- FIX: Removed compile warnings when in WebPlayer platform +- FIX: Removed exception when adding keys before creating a language +- FIX: Adding multiple keys to NGUI was only adding the first one and returning an exception + +1.0.0 b2 +- NEW: Added a TextField to filter the list of keys. +- NEW: Option to auto open the Google Spreadsheet doc after exporting. +- NEW: Added a centralized Error reporting. +- NEW: Option to save or not the google password. +- NEW: Added a menu option to quickly access the help. (Help\I2 Localization For NGUI). +- NEW: Key list show a warning icon on the keys that are used in the scenes but are not in the NGUI files. +- FIX: An error will show when contacting Google Translation on the WebPlayer Platform as its not yet supported. +- FIX: Google public spreadsheet Key is now remembered when the editor opens. + +1.0.0 b1 +- NEW: First Version including core features. diff --git a/popcorn/Assets/I2/Localization/I2 Localization - Readme.txt.meta b/popcorn/Assets/I2/Localization/I2 Localization - Readme.txt.meta new file mode 100644 index 00000000..abf09a8f --- /dev/null +++ b/popcorn/Assets/I2/Localization/I2 Localization - Readme.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b559e47b4c944104abfbfb9c64dc13bc +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts.meta b/popcorn/Assets/I2/Localization/Scripts.meta new file mode 100644 index 00000000..6f8123d6 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 379147f1ab5034075a5b1578456aca00 +folderAsset: yes +timeCreated: 1461137613 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Configurables.meta b/popcorn/Assets/I2/Localization/Scripts/Configurables.meta new file mode 100644 index 00000000..a1cffd7c --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Configurables.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 8f9a3530624fd5c47a2dc16eb641ddb8 +folderAsset: yes +timeCreated: 1520745251 +licenseType: Store +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Configurables/PersistentStorage.cs b/popcorn/Assets/I2/Localization/Scripts/Configurables/PersistentStorage.cs new file mode 100644 index 00000000..b17c6aa6 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Configurables/PersistentStorage.cs @@ -0,0 +1,286 @@ +using System; +using System.Globalization; +using System.IO; +using System.Text; +using UnityEngine; + +namespace I2.Loc +{ + public static class PersistentStorage + { + static I2CustomPersistentStorage mStorage; + + public enum eFileType { Raw, Persistent, Temporal, Streaming } + + #region PlayerPrefs + public static void SetSetting_String(string key, string value) + { + if (mStorage == null) mStorage = new I2CustomPersistentStorage(); + mStorage.SetSetting_String(key, value); + } + + public static string GetSetting_String(string key, string defaultValue) + { + if (mStorage == null) mStorage = new I2CustomPersistentStorage(); + return mStorage.GetSetting_String(key, defaultValue); + } + + public static void DeleteSetting(string key) + { + if (mStorage == null) mStorage = new I2CustomPersistentStorage(); + mStorage.DeleteSetting(key); + } + + public static bool HasSetting( string key ) + { + if (mStorage == null) mStorage = new I2CustomPersistentStorage(); + return mStorage.HasSetting(key); + } + + public static void ForceSaveSettings() + { + if (mStorage == null) mStorage = new I2CustomPersistentStorage(); + mStorage.ForceSaveSettings(); + } + + #endregion + + #region File Management + + public static bool CanAccessFiles() + { + if (mStorage == null) mStorage = new I2CustomPersistentStorage(); + return mStorage.CanAccessFiles(); + } + + public static bool SaveFile(eFileType fileType, string fileName, string data, bool logExceptions = true) + { + if (mStorage == null) mStorage = new I2CustomPersistentStorage(); + return mStorage.SaveFile(fileType, fileName, data, logExceptions); + } + + public static string LoadFile(eFileType fileType, string fileName, bool logExceptions=true) + { + if (mStorage == null) mStorage = new I2CustomPersistentStorage(); + return mStorage.LoadFile(fileType, fileName, logExceptions); + } + + public static bool DeleteFile(eFileType fileType, string fileName, bool logExceptions = true) + { + if (mStorage == null) mStorage = new I2CustomPersistentStorage(); + return mStorage.DeleteFile(fileType, fileName, logExceptions); + } + + public static bool HasFile(eFileType fileType, string fileName, bool logExceptions = true) + { + if (mStorage == null) mStorage = new I2CustomPersistentStorage(); + return mStorage.HasFile(fileType, fileName, logExceptions); + } + + #endregion + } + + public abstract class I2BasePersistentStorage + { + #region PlayerPrefs + public virtual void SetSetting_String(string key, string value) + { + try + { + // Use PlayerPrefs, but if the data is bigger than the limit, split it into multiple entries + var len = value.Length; + int maxLength = 8000; + if (len<=maxLength) + { + PlayerPrefs.SetString(key, value); + } + else + { + int numSections = Mathf.CeilToInt(len / (float)maxLength); + for (int i=0; i mSpecializationsFallbacks; + + public virtual void InitializeSpecializations() + { + mSpecializations = new[] { "Any", "PC", "Touch", "Controller", "VR", + "XBox", "PS4", "OculusVR", "ViveVR", "GearVR", "Android", "IOS" }; + mSpecializationsFallbacks = new Dictionary(System.StringComparer.Ordinal) + { + { "XBox", "Controller" }, { "PS4", "Controller" }, + { "OculusVR", "VR" }, { "ViveVR", "VR" }, { "GearVR", "VR" }, + { "Android", "Touch" }, { "IOS", "Touch" } + }; + } + + public virtual string GetCurrentSpecialization() + { + if (mSpecializations == null) + InitializeSpecializations(); + + #if UNITY_ANDROID + return "Android"; + #elif UNITY_IOS + return "IOS"; + #elif UNITY_PS4 + return "PS4"; + #elif UNITY_XBOXONE + return "XBox"; + #elif UNITY_STANDALONE || UNITY_WEBGL + return "PC"; + #else + return (Input.touchSupported ? "Touch" : "PC"); + #endif + } + + public virtual string GetFallbackSpecialization(string specialization) + { + if (mSpecializationsFallbacks == null) + InitializeSpecializations(); + + string fallback; + if (mSpecializationsFallbacks.TryGetValue(specialization, out fallback)) + return fallback; + return "Any"; + } + } + public class SpecializationManager : BaseSpecializationManager + { + public static SpecializationManager Singleton = new SpecializationManager(); + + private SpecializationManager() + { + InitializeSpecializations(); + } + + public static string GetSpecializedText(string text, string specialization = null) + { + var idxFirst = text.IndexOf("[i2s_", StringComparison.Ordinal); + if (idxFirst < 0) + return text; + + if (string.IsNullOrEmpty(specialization)) + specialization = Singleton.GetCurrentSpecialization(); + + while (!string.IsNullOrEmpty(specialization) && specialization != "Any") + { + var tag = "[i2s_" + specialization + "]"; + int idx = text.IndexOf(tag, StringComparison.Ordinal); + if (idx < 0) + { + specialization = Singleton.GetFallbackSpecialization(specialization); + continue; + } + + idx += tag.Length; + var idxEnd = text.IndexOf("[i2s_", idx, StringComparison.Ordinal); + if (idxEnd < 0) idxEnd = text.Length; + + return text.Substring(idx, idxEnd - idx); + } + + return text.Substring(0, idxFirst); + } + + public static string SetSpecializedText(string text, string newText, string specialization) + { + if (string.IsNullOrEmpty(specialization)) + specialization = "Any"; + if ((text==null || !text.Contains("[i2s_")) && specialization=="Any") + { + return newText; + } + + var dict = GetSpecializations(text); + dict[specialization] = newText; + + return SetSpecializedText(dict); + } + + public static string SetSpecializedText( Dictionary specializations ) + { + string text; + if (!specializations.TryGetValue("Any", out text)) + text = string.Empty; + + foreach (var kvp in specializations) + { + if (kvp.Key != "Any" && !string.IsNullOrEmpty(kvp.Value)) + text += "[i2s_" + kvp.Key + "]" + kvp.Value; + } + return text; + } + + public static Dictionary GetSpecializations(string text, Dictionary buffer = null) + { + if (buffer == null) + buffer = new Dictionary(StringComparer.Ordinal); + else + buffer.Clear(); + + if (text==null) + { + buffer["Any"] = ""; + return buffer; + } + + var idxFirst = 0; + var idxEnd = text.IndexOf("[i2s_", StringComparison.Ordinal); + if (idxEnd < 0) + idxEnd=text.Length; + + buffer["Any"] = text.Substring(0, idxEnd); + idxFirst = idxEnd; + + while (idxFirst list=null) + { + if (text == null) + return; + + if (list == null) + list = new List(); + + if (!list.Contains("Any")) + list.Add("Any"); + + var idxFirst = 0; + while (idxFirst mDelayedEditorCallbacks = new List(); + + #region Delayed Editor Callback + + public static void DelayedCall( Action action ) + { + if (mDelayedEditorCallbacks.Count == 0) + EditorApplication.update += OnDelayedCall; + + mDelayedEditorCallbacks.Add(action); + } + + static void OnDelayedCall() + { + EditorApplication.update -= OnDelayedCall; + var calls = mDelayedEditorCallbacks.ToArray(); + mDelayedEditorCallbacks.Clear(); + + foreach (var call in calls) + call(); + } + + + #endregion + + #region Header + public delegate void fnOnToggled(bool enabled); + static public bool DrawHeader (string text, string key, bool ShowToggle=false, bool ToggleState=false, fnOnToggled OnToggle = null, string HelpURL=default(string), Color disabledColor = default(Color)) + { + bool state = EditorPrefs.GetBool(key, false); + + bool newState = DrawHeader (text, state, ShowToggle, ToggleState, OnToggle, HelpURL, disabledColor); + + if (state!=newState) EditorPrefs.SetBool(key, newState); + return newState; + } + + static public bool DrawHeader (string text, bool state, bool ShowToggle=false, bool ToggleState=false, fnOnToggled OnToggle = null, string HelpURL=default(string), Color disabledColor = default(Color), bool allowCollapsing = true) + { + GUIStyle Style = new GUIStyle(EditorStyles.foldout); + Style.richText = true; + EditorStyles.foldout.richText = true; + if (state) + { + //GUI.backgroundColor=DarkGray; + GUILayout.BeginVertical(LocalizeInspector.GUIStyle_OldTextArea/*, GUILayout.Height(1)*/); + GUILayout.BeginHorizontal(); + if (!string.IsNullOrEmpty(text)) + { + if (allowCollapsing) + state = GUILayout.Toggle(state, text, Style, GUILayout.ExpandWidth(true)); + else + GUILayout.Label(text, GUILayout.ExpandWidth(true)); + } + + if (!string.IsNullOrEmpty(HelpURL)) + { + if (GUILayout.Button (Icon_Help, EditorStyles.label, GUILayout.ExpandWidth(false))) + Application.OpenURL(HelpURL); + } + if (ShowToggle) + { + GUI.changed = false; + bool newBool = GUILayout.Toggle(ToggleState, "", "OL Toggle", GUILayout.ExpandWidth(false)); + if (GUI.changed && OnToggle!=null) + OnToggle(newBool); + } + GUILayout.EndHorizontal(); + GUILayout.Space(2); + + //GUI.backgroundColor = Color.white; + } + else + { + if (ShowToggle && !ToggleState) + GUI.color = disabledColor; + + GUILayout.BeginHorizontal("Box"); + //GUILayout.BeginHorizontal(EditorStyles.toolbar); + state = GUILayout.Toggle(state, text, Style, GUILayout.ExpandWidth(true)); + if (ShowToggle) + { + GUI.changed = false; + bool newBool = GUILayout.Toggle(ToggleState, "", "OL Toggle", GUILayout.ExpandWidth(false)); + if (GUI.changed && OnToggle!=null) + OnToggle(newBool); + } + GUILayout.EndHorizontal(); + GUI.color = White; + } + return state; + } + + static public void CloseHeader() + { + GUILayout.EndHorizontal(); + } + + public static void OnGUI_Footer(string pluginName, string pluginVersion, string helpURL, string documentationURL, string assetStoreURL) + { + GUILayout.BeginHorizontal(); + string versionTip = ""; + /*if (I2Analytics.HasNewVersion(pluginName)) + { + versionTip = "There is a new version of " + pluginName + ".\nClick here for more details"; + if (GUILayout.Button(new GUIContent("", versionTip), EditorStyles.label, GUILayout.Width(25))) + I2AboutWindow.DoShowScreen(); + + var rect = GUILayoutUtility.GetLastRect(); + rect.yMin = rect.yMax - 25; + rect.xMax = rect.xMin + 25; + rect.y += 3; + GUITools.DrawSkinIcon(rect, "CN EntryWarnIcon", "CN EntryWarn"); + }*/ + + if (GUILayout.Button(new GUIContent("v" + pluginVersion, versionTip), EditorStyles.miniLabel)) + { + Application.OpenURL(assetStoreURL); + //I2AboutWindow.DoShowScreen(); + } + + GUILayout.FlexibleSpace(); + + if (GUILayout.Button("Ask a Question", EditorStyles.miniLabel)) + Application.OpenURL(helpURL); + + GUILayout.Space(10); + + if (GUILayout.Button("Documentation", EditorStyles.miniLabel)) + Application.OpenURL(documentationURL); + GUILayout.EndHorizontal(); + } + + + #endregion + + #region Content + + static public void BeginContents () + { + EditorGUILayout.BeginHorizontal(LocalizeInspector.GUIStyle_OldTextArea, GUILayout.MinHeight(10f)); + GUILayout.Space(2f); + EditorGUILayout.BeginVertical(); + GUILayout.Space(2f); + } + + static public void EndContents () { EndContents(true); } + static public void EndContents ( bool closeHeader ) + { + GUILayout.Space(2f); + EditorGUILayout.EndVertical(); + GUILayout.Space(3f); + GUILayout.EndHorizontal(); + + if (closeHeader) CloseHeader(); + } + + #endregion + + #region Tabs + + static public void DrawTabs( SerializedProperty mProperty, GUIStyle Style=null, int height=25 ) + { + int curIndex = mProperty.enumValueIndex; + int newIndex = DrawTabs( curIndex, mProperty.enumNames, Style, height); + + if (curIndex!=newIndex) + mProperty.enumValueIndex = newIndex; + } + + static public int DrawTabs( int Index, string[] Tabs, GUIStyle Style=null, int height=25, bool expand = true) + { + GUIStyle MyStyle = new GUIStyle(Style!=null?Style:GUI.skin.FindStyle("dragtab")); + MyStyle.fixedHeight=0; + + GUILayout.BeginHorizontal(); + for (int i=0; i0) + { + string text = Tabs[i].Substring(0, idx); + string tooltip = Tabs[i].Substring(idx+1); + if ( GUILayout.Toggle(Index==i, new GUIContent(text, tooltip), MyStyle, GUILayout.Height(height), GUILayout.ExpandWidth(expand)) && Index!=i) + { + Index=i; + GUI.FocusControl(string.Empty); + } + } + else + { + if ( GUILayout.Toggle(Index==i, Tabs[i], MyStyle, GUILayout.Height(height), GUILayout.ExpandWidth(expand)) && Index!=i) + { + Index=i; + GUI.FocusControl(string.Empty); + } + } + } + GUILayout.EndHorizontal(); + return Index; + } + + static public void DrawShadowedTabs( SerializedProperty mProperty, GUIStyle Style=null, int height=25, bool expand=true ) + { + int curIndex = mProperty.enumValueIndex; + int newIndex = DrawShadowedTabs( curIndex, mProperty.enumNames, height, expand); + + if (curIndex!=newIndex) + mProperty.enumValueIndex = newIndex; + } + + static public int DrawShadowedTabs( int Index, string[] Tabs, int height = 25, bool expand=true ) + { + GUI.backgroundColor=Color.Lerp (Color.gray, Color.white, 0.2f); + GUILayout.BeginVertical(LocalizeInspector.GUIStyle_OldTextArea, GUILayout.Height(1)); + GUI.backgroundColor=Color.white; + GUILayout.Space(2); + Index = DrawTabs( Index, Tabs, height: height, expand:expand ); + GUILayout.EndVertical(); + return Index; + } + + static public int DrawTabs( int Index, Texture2D[] Tabs, GUIStyle Style, int height ) + { + GUIStyle MyStyle = new GUIStyle(Style!=null?Style:GUI.skin.FindStyle("dragtab")); + MyStyle.fixedHeight=0; + + //width = Mathf.Max (width, height * Tabs[0].width/(float)Tabs[0].height); + + GUILayout.BeginHorizontal(); + float width = (EditorGUIUtility.currentViewWidth-(MyStyle.border.left+MyStyle.border.right)*(Tabs.Length-1)) / Tabs.Length; + for (int i=0; i1) + GUILayout.Space (18); + } + else + { + if (GUILayout.Button( "\u25B2", EditorStyles.toolbarButton, GUILayout.Width(18))) + MoveUpElement = i; + } + + GUILayout.EndHorizontal(); + } + + GUILayout.BeginHorizontal(EditorStyles.toolbar); + Object NewObj = EditorGUILayout.ObjectField( null, typeof(Object), allowSceneObj, GUILayout.ExpandWidth(true)); + if (testAdd != null) + { + NewObj = testAdd; + } + + if (!allowResources && NewObj != null) + { + var path = AssetDatabase.GetAssetPath(NewObj); + if (path != null && path.Contains("/Resources/")) + NewObj = null; + } + if (NewObj && (allowDuplicates || !ObjectsArrayHasReference(PropArray, NewObj))) + { + int Index = PropArray.arraySize; + PropArray.InsertArrayElementAtIndex( Index ); + PropArray.GetArrayElementAtIndex(Index).objectReferenceValue = NewObj; + hasChanged = true; + } + GUILayout.EndHorizontal(); + + if (DeleteElement>=0) + { + PropArray.DeleteArrayElementAtIndex( DeleteElement ); + //PropArray.DeleteArrayElementAtIndex( DeleteElement ); + hasChanged = true; + } + + if (MoveUpElement>=0) + { + PropArray.MoveArrayElement(MoveUpElement, MoveUpElement-1); + hasChanged = true; + } + + GUILayout.EndVertical(); + return hasChanged; + } + + static public bool ObjectsArrayHasReference(SerializedProperty PropArray, Object obj) + { + for (int i = 0, imax = PropArray.arraySize; i < imax; ++i) + { + SerializedProperty Prop = PropArray.GetArrayElementAtIndex(i); + if (Prop.objectReferenceValue == obj) + return true; + } + return false; + } + + + #endregion + + #region Toggle + + static public int ToggleToolbar( int Index, string[] Options ) + { + GUILayout.BeginHorizontal(); + for (int i=0; i 0) + return false; + + // We are not interested in Prefab, unless they are Prefab Instances + PrefabType pfType = PrefabUtility.GetPrefabType(Obj); + if(pfType == PrefabType.Prefab || pfType == PrefabType.ModelPrefab) + return false; + + // If the database contains the object then its not an scene object, + // but the previous test should get rid of them, so I will just comment this + // unless an false positive object is found in the future + //if (AssetDatabase.Contains(Obj)) + // return false; + + return true;*/ + } + + public static IEnumerable SceneRoots() + { + var prop = new HierarchyProperty(HierarchyType.GameObjects); + var expanded = new int[0]; + while (prop.Next(expanded)) { + yield return prop.pptrValue as GameObject; + } + } + + public static List SceneRootsList() + { + return new List(SceneRoots()); + } + + public static IEnumerable AllSceneObjects() + { + var queue = new Queue(); + + foreach (var root in SceneRoots()) { + var tf = root.transform; + yield return tf; + queue.Enqueue(tf); + } + + while (queue.Count > 0) { + foreach (Transform child in queue.Dequeue()) { + yield return child; + queue.Enqueue(child); + } + } + } + + public static string GetScenePath(Transform tr) + { + if (tr==null) + return string.Empty; + + string path = tr.name; + while (tr.parent != null) + { + tr = tr.parent; + path = tr.name + "/" + path; + } + return path; + } + + public static Transform FindObjectInEditor( string scenePath ) + { + if (string.IsNullOrEmpty(scenePath)) + return null; + + int index = scenePath.IndexOfAny("/\\".ToCharArray()); + string first = index<0 ? scenePath : scenePath.Substring(0, index); + + foreach (var root in AllSceneObjects()) + if (root.name==first) + { + if (index<0) + return root; + + return root.Find(scenePath.Substring(index+1)); + } + return null; + } + + + public static GUIContent Icon_Help { + get{ + if (mIconHelp == null) + mIconHelp = EditorGUIUtility.IconContent("_Help"); + return mIconHelp; + } + } + static GUIContent mIconHelp; + + public static GUIStyle FindSkinStyle(string name) + { + var allStyles = GUI.skin.customStyles; + for (int i = 0, imax = allStyles.Length; i < imax; ++i) + { + if (allStyles[i].name == name) + return allStyles[i]; + } + return null; + } + public static void DrawSkinIcon(Rect rect, params string[] iconNames) + { + foreach (var icon in iconNames) + { + var style = FindSkinStyle(icon); + if (style == null || style.normal == null || style.normal.background == null) + continue; + + GUI.DrawTexture(rect, style.normal.background); + return; + } + //Debug.Log("unable to find icon"); + } + + #endregion + + #region Angle Drawer + private static Vector2 mAngle_lastMousePosition; + static Texture mAngle_TextureCircle; + static Texture pAngle_TextureCircle { + get{ + if (mAngle_TextureCircle) return mAngle_TextureCircle; + mAngle_TextureCircle = GUI.skin.GetStyle("CN CountBadge").normal.background; + return mAngle_TextureCircle; + } + } + + public static float FloatAngle(Rect rect, float value) + { + return FloatAngle(rect, value, -1, -1, -1); + } + + public static float FloatAngle(Rect rect, float value, float snap) + { + return FloatAngle(rect, value, snap, -1, -1); + } + + public static float FloatAngle(Rect rect, float value, float snap, float min, float max) + { + int id = GUIUtility.GetControlID(FocusType.Passive, rect); + + Rect knobRect = new Rect(rect.x, rect.y, rect.height, rect.height); + + float delta; + if (min != max) + delta = (max - min) / 360; + else + delta = 1; + + if (Event.current != null) + { + if (Event.current.type == EventType.MouseDown && knobRect.Contains(Event.current.mousePosition)) + { + GUIUtility.hotControl = id; + mAngle_lastMousePosition = Event.current.mousePosition; + } + else if (Event.current.type == EventType.MouseUp && GUIUtility.hotControl == id) + GUIUtility.hotControl = -1; + else if (Event.current.type == EventType.MouseDrag && GUIUtility.hotControl == id) + { + Vector2 move = mAngle_lastMousePosition - Event.current.mousePosition; + value += delta * (-move.x - move.y); + + if (snap > 0) + { + float mod = value % snap; + + if (mod < delta * 3 || Mathf.Abs(mod - snap) < delta * 3) + value = Mathf.Round(value / snap) * snap; + } + + mAngle_lastMousePosition = Event.current.mousePosition; + GUI.changed = true; + } + } + + if (pAngle_TextureCircle) GUI.DrawTexture(knobRect, pAngle_TextureCircle); + Matrix4x4 matrix = GUI.matrix; + + if (min != max) + GUIUtility.RotateAroundPivot(value * (360 / (max - min)), knobRect.center); + else + GUIUtility.RotateAroundPivot(value, knobRect.center); + + knobRect.height = 5; + knobRect.width = 5; + if (pAngle_TextureCircle) GUI.DrawTexture(knobRect, pAngle_TextureCircle); + GUI.matrix = matrix; + + Rect label = new Rect(rect.x + rect.height, rect.y + rect.height / 2 - 9, rect.height, 18); + value = EditorGUI.FloatField(label, value); + + if (min != max) + value = Mathf.Clamp(value, min, max); + + return value; + } + + public static float AngleCircle(Rect rect, float angle, float snap, float min, float max, Texture background=null, Texture knobLine=null) + { + Rect knobRect = new Rect(rect.x, rect.y, rect.height, rect.height); + + float delta; + if (min != max) + delta = (max - min) / 360; + else + delta = 1; + + if (Event.current != null && GUIUtility.hotControl<=0 && (Event.current.type==EventType.MouseDown || Event.current.type==EventType.MouseDrag) && knobRect.Contains(Event.current.mousePosition)) + { + angle = Vector2.Angle( Vector2.right, Event.current.mousePosition-knobRect.center); + if (Event.current.mousePosition.y 0) + { + float mod = Mathf.Repeat(angle, snap); + + if (mod < delta * 3 || Mathf.Abs(mod - snap) < delta * 3) + angle = Mathf.Round(angle / snap) * snap; + } + + GUI.changed = true; + } + + if (background==null) background = pAngle_TextureCircle; + if (background) GUI.DrawTexture (knobRect, background); + + Matrix4x4 matrix = GUI.matrix; + + if (min != max) + GUIUtility.RotateAroundPivot(angle * (360 / (max - min))+90, knobRect.center); + else + GUIUtility.RotateAroundPivot(angle+90, knobRect.center); + + float Radius = Mathf.Min (knobRect.width, knobRect.height) * 0.5f; + knobRect.x = knobRect.x + 0.5f * knobRect.width - 4; + knobRect.y += 2; + knobRect.width = 8; + knobRect.height = Radius+2; + if (knobLine == null) + knobLine = GUI.skin.FindStyle ("MeBlendPosition").normal.background; + if (knobLine) GUI.DrawTexture(knobRect, knobLine); + GUI.matrix = matrix; + + return Mathf.Repeat(angle, 360); + } + #endregion + + #region Unity Version branching + + public static string Editor_GetCurrentScene() + { + #if UNITY_4_6 || UNITY_4_7 || UNITY_4_8 || UNITY_4_9 || UNITY_5_0 || UNITY_5_1 || UNITY_5_2 + return EditorApplication.currentScene; + #else + return SceneManager.GetActiveScene().path; + #endif + } + + public static void Editor_MarkSceneDirty() + { + #if UNITY_5_3 || UNITY_5_3_OR_NEWER + EditorSceneManager.MarkSceneDirty(SceneManager.GetActiveScene()); + #else + EditorApplication.MarkSceneDirty(); + #endif + } + + public static void Editor_SaveScene() + { + #if UNITY_4_6 || UNITY_4_7 || UNITY_4_8 || UNITY_4_9 || UNITY_5_0 || UNITY_5_1 || UNITY_5_2 + EditorApplication.SaveScene (); + #else + EditorSceneManager.SaveOpenScenes(); + #endif + } + + public static void Editor_OpenScene( string sceneName ) + { + #if UNITY_4_6 || UNITY_4_7 || UNITY_4_8 || UNITY_4_9 || UNITY_5_0 || UNITY_5_1 || UNITY_5_2 + EditorApplication.OpenScene( sceneName ); + #else + EditorSceneManager.OpenScene(sceneName); + #endif + } + + #endregion + + #region Reflection + static public object Reflection_InvokeMethod ( object instanceObject, string methodName, params object[] p_args ) + { + BindingFlags _flags = BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static; + MethodInfo mi = instanceObject.GetType().GetMethods( _flags ).Where( x => x.Name==methodName ).FirstOrDefault(); + if (mi == null) return null; + return mi.Invoke( instanceObject, p_args ); + } + static public object Reflection_InvokeMethod ( Type targetType, string methodName, params object[] p_args ) + { + BindingFlags _flags = BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static; + MethodInfo mi = targetType.GetMethods( _flags ).Where( x => x.Name==methodName ).FirstOrDefault(); + if (mi == null) return null; + return mi.Invoke( null, p_args ); + } + + + public static object s_RecycledEditor; + public static string TextField ( Rect position, string text, int maxLength, GUIStyle style, int controlID ) + { + if (s_RecycledEditor==null) + { + FieldInfo info = typeof(EditorGUI).GetField("s_RecycledEditor", BindingFlags.NonPublic | BindingFlags.Static); + s_RecycledEditor = info.GetValue(null); + } + + if (s_RecycledEditor == null) + return ""; + + return Reflection_InvokeMethod( typeof( EditorGUI ), "DoTextField", s_RecycledEditor, controlID, position, text, style, null, false, false, false, false ) as string; + } + + static public void RepaintInspectors() + { + EditorApplication.update -= RepaintInspectors; + var assemblyEditor = Assembly.GetAssembly(typeof(Editor)); + var typeInspectorWindow = assemblyEditor.GetType("UnityEditor.InspectorWindow"); + typeInspectorWindow.GetMethod("RepaintAllInspectors", BindingFlags.NonPublic | BindingFlags.Static).Invoke(null, null); + } + + public static void ScheduleRepaintInspectors() + { + EditorApplication.update += RepaintInspectors; + } + + + #endregion + } +} diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/EditorTools.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Editor/EditorTools.cs.meta new file mode 100644 index 00000000..de59c6b6 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/EditorTools.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: df33c1000ac895241a433812e40a2096 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors.meta b/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors.meta new file mode 100644 index 00000000..4157e6fb --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a500716e59f61824ba1fa6b418ce31a7 +folderAsset: yes +timeCreated: 1461137613 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/LanguageSourceAssetInspector.cs b/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/LanguageSourceAssetInspector.cs new file mode 100644 index 00000000..474024af --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/LanguageSourceAssetInspector.cs @@ -0,0 +1,20 @@ +using UnityEditor; + +namespace I2.Loc +{ + [CustomEditor(typeof(LanguageSourceAsset))] + public class LanguageSourceAssetInspector : LocalizationEditor + { + void OnEnable() + { + var newSource = target as LanguageSourceAsset; + SerializedProperty propSource = serializedObject.FindProperty("mSource"); + + Custom_OnEnable(newSource.mSource, propSource); + } + public override LanguageSourceData GetSourceData() + { + return (target as LanguageSourceAsset).mSource; + } + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/LanguageSourceAssetInspector.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/LanguageSourceAssetInspector.cs.meta new file mode 100644 index 00000000..ef8182c4 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/LanguageSourceAssetInspector.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: f03a75bf70a306a4fb36646f24c1c1f1 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/LanguageSourceInspector.cs b/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/LanguageSourceInspector.cs new file mode 100644 index 00000000..14c1a88d --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/LanguageSourceInspector.cs @@ -0,0 +1,22 @@ +using UnityEditor; + +namespace I2.Loc +{ + [CustomEditor(typeof(LanguageSource))] + public class LanguageSourceInspector : LocalizationEditor + { + void OnEnable() + { + var newSource = target as LanguageSource; + SerializedProperty propSource = serializedObject.FindProperty("mSource"); + + Custom_OnEnable(newSource.mSource, propSource); + } + + public override LanguageSourceData GetSourceData() + { + return (target as LanguageSource).mSource; + } + + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/LanguageSourceInspector.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/LanguageSourceInspector.cs.meta new file mode 100644 index 00000000..ce993bdf --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/LanguageSourceInspector.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a441ed994a43a0a4a9d33be67a8d3f15 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/LocalizationEditor.cs b/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/LocalizationEditor.cs new file mode 100644 index 00000000..9b145ff8 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/LocalizationEditor.cs @@ -0,0 +1,199 @@ +using UnityEditor; +using UnityEngine; + +namespace I2.Loc +{ + public abstract partial class LocalizationEditor : Editor + { + #region Variables + + SerializedProperty mProp_Assets, mProp_Languages, + mProp_Google_WebServiceURL, mProp_GoogleUpdateFrequency, mProp_GoogleUpdateDelay, mProp_Google_SpreadsheetKey, mProp_Google_SpreadsheetName, mProp_Google_Password, + mProp_Spreadsheet_LocalFileName, mProp_Spreadsheet_LocalCSVSeparator, mProp_CaseInsensitiveTerms, mProp_Spreadsheet_LocalCSVEncoding, + mProp_OnMissingTranslation, mProp_AppNameTerm, mProp_IgnoreDeviceLanguage, mProp_Spreadsheet_SpecializationAsRows, mProp_GoogleInEditorCheckFrequency, + mProp_HighlightLocalizedTargets, mProp_GoogleLiveSyncIsUptoDate, mProp_AllowUnloadingLanguages, mProp_GoogleUpdateSynchronization; + + public static LanguageSourceData mLanguageSource; + public static Object mLanguageSourceObject; + public static LocalizationEditor mLanguageSourceEditor; + public static Editor mCurrentInspector; + + static bool mIsParsing; // This is true when the editor is opening several scenes to avoid reparsing objects + + #endregion + + #region Variables GUI + + GUIStyle Style_ToolBar_Big, Style_ToolBarButton_Big; + + + public GUISkin CustomSkin; + + static Vector3 mScrollPos_Languages; + public static string mLanguages_NewLanguage = ""; + + #endregion + + #region Styles + + public static GUIStyle Style_WrapTextField { + get{ + if (mStyle_WrapTextField==null) + { + mStyle_WrapTextField = new GUIStyle(EditorStyles.textArea); + mStyle_WrapTextField.wordWrap = true; + mStyle_WrapTextField.fixedHeight = 0; + } + return mStyle_WrapTextField; + } + } + static GUIStyle mStyle_WrapTextField; + + #endregion + + #region Inspector + + public void Custom_OnEnable( LanguageSourceData sourceData, SerializedProperty propSource) + { + bool ForceParse = mLanguageSource != sourceData; + + mLanguageSource = sourceData; + mLanguageSourceEditor = this; + mCurrentInspector = this; + + if (!LocalizationManager.Sources.Contains(mLanguageSource)) + LocalizationManager.UpdateSources(); + + mProp_Assets = propSource.FindPropertyRelative("Assets"); + mProp_Languages = propSource.FindPropertyRelative("mLanguages"); + mProp_Google_WebServiceURL = propSource.FindPropertyRelative("Google_WebServiceURL"); + mProp_GoogleUpdateFrequency = propSource.FindPropertyRelative("GoogleUpdateFrequency"); + mProp_GoogleUpdateSynchronization = propSource.FindPropertyRelative("GoogleUpdateSynchronization"); + mProp_GoogleInEditorCheckFrequency = propSource.FindPropertyRelative("GoogleInEditorCheckFrequency"); + mProp_GoogleUpdateDelay = propSource.FindPropertyRelative("GoogleUpdateDelay"); + mProp_Google_SpreadsheetKey = propSource.FindPropertyRelative("Google_SpreadsheetKey"); + mProp_Google_SpreadsheetName = propSource.FindPropertyRelative("Google_SpreadsheetName"); + mProp_Google_Password = propSource.FindPropertyRelative("Google_Password"); + mProp_CaseInsensitiveTerms = propSource.FindPropertyRelative("CaseInsensitiveTerms"); + mProp_Spreadsheet_LocalFileName = propSource.FindPropertyRelative("Spreadsheet_LocalFileName"); + mProp_Spreadsheet_LocalCSVSeparator = propSource.FindPropertyRelative("Spreadsheet_LocalCSVSeparator"); + mProp_Spreadsheet_LocalCSVEncoding = propSource.FindPropertyRelative("Spreadsheet_LocalCSVEncoding"); + mProp_Spreadsheet_SpecializationAsRows = propSource.FindPropertyRelative("Spreadsheet_SpecializationAsRows"); + mProp_OnMissingTranslation = propSource.FindPropertyRelative("OnMissingTranslation"); + mProp_AppNameTerm = propSource.FindPropertyRelative("mTerm_AppName"); + mProp_IgnoreDeviceLanguage = propSource.FindPropertyRelative("IgnoreDeviceLanguage"); + mProp_GoogleLiveSyncIsUptoDate = propSource.FindPropertyRelative("GoogleLiveSyncIsUptoDate"); + mProp_AllowUnloadingLanguages = propSource.FindPropertyRelative("_AllowUnloadingLanguages"); + + if (!mIsParsing) + { + if (string.IsNullOrEmpty(mLanguageSource.Google_SpreadsheetKey)) + mSpreadsheetMode = eSpreadsheetMode.Local; + else + mSpreadsheetMode = eSpreadsheetMode.Google; + + mCurrentViewMode = mLanguageSource.mLanguages.Count>0 ? eViewMode.Keys : eViewMode.Languages; + + UpdateSelectedKeys(); + + if (ForceParse || mParsedTerms.Count < mLanguageSource.mTerms.Count) + { + mSelectedCategories.Clear(); + ParseTerms(true, false, true); + } + } + ScheduleUpdateTermsToShowInList(); + LoadSelectedCategories(); + //UpgradeManager.EnablePlugins(); + } + + void OnDisable() + { + //LocalizationManager.LocalizeAll(); + SaveSelectedCategories(); + mLanguageSourceEditor = null; + if (mCurrentInspector==this) mCurrentInspector = null; + } + + + void UpdateSelectedKeys() + { + // Remove all keys that are not in this source + string trans; + for (int i=mSelectedKeys.Count-1; i>=0; --i) + if (!mLanguageSource.TryGetTranslation(mSelectedKeys[i], out trans)) + mSelectedKeys.RemoveAt(i); + + // Remove all Categories that are not in this source + /*var mCateg = mLanguageSource.GetCategories(); + for (int i=mSelectedCategories.Count-1; i>=0; --i) + if (!mCateg.Contains(mSelectedCategories[i])) + mSelectedCategories.RemoveAt(i); + if (mSelectedCategories.Count==0) + mSelectedCategories = mCateg;*/ + + if (mSelectedScenes.Count==0) + mSelectedScenes.Add (Editor_GetCurrentScene()); + } + + public override void OnInspectorGUI() + { + // Load Test: + /*if (mLanguageSource.mTerms.Count<40000) + { + mLanguageSource.mTerms.Clear(); + for (int i=0; i<40020; ++i) + mLanguageSource.AddTerm("ahh"+i.ToString("00000"), eTermType.Text, false); + mLanguageSource.UpdateDictionary(); + }*/ + //Profiler.maxNumberOfSamplesPerFrame = -1; // REMOVE --------------------------------------------------- + + mIsParsing = false; + + //#if UNITY_5_6_OR_NEWER + // serializedObject.UpdateIfRequiredOrScript(); + //#else + // serializedObject.UpdateIfDirtyOrScript(); + //#endif + + if (mLanguageSource.mTerms.Count<1000) + Undo.RecordObject(target, "LanguageSource"); + + //GUI.backgroundColor = Color.Lerp (Color.black, Color.gray, 1); + //GUILayout.BeginVertical(LocalizeInspector.GUIStyle_Background); + //GUI.backgroundColor = Color.white; + + if (GUILayout.Button("Language Source", LocalizeInspector.GUIStyle_Header)) + { + Application.OpenURL(LocalizeInspector.HelpURL_Documentation); + } + + InitializeStyles(); + + GUILayout.Space(10); + + //GUI.backgroundColor = Color.Lerp(GUITools.LightGray, Color.white, 0.5f); + //GUILayout.BeginVertical(LocalizeInspector.GUIStyle_Background); + //GUI.backgroundColor = Color.white; + OnGUI_Main(); + //GUILayout.EndVertical(); + + GUILayout.Space (10); + GUILayout.FlexibleSpace(); + + GUITools.OnGUI_Footer("I2 Localization", LocalizationManager.GetVersion(), LocalizeInspector.HelpURL_forum, LocalizeInspector.HelpURL_Documentation, LocalizeInspector.HelpURL_AssetStore); + + //GUILayout.EndVertical(); + + serializedObject.ApplyModifiedProperties(); + if (Event.current.type == EventType.Repaint) + { + mTestAction = eTest_ActionType.None; + mTestActionArg = null; + mTestActionArg2 = null; + } + } + + #endregion + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/LocalizationEditor.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/LocalizationEditor.cs.meta new file mode 100644 index 00000000..34e4a0e9 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/LocalizationEditor.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 90c932abd0dc445448366dfe101408ba +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/LocalizationParamsManagerInspector.cs b/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/LocalizationParamsManagerInspector.cs new file mode 100644 index 00000000..c1856603 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/LocalizationParamsManagerInspector.cs @@ -0,0 +1,107 @@ +using UnityEditor; +using UnityEditorInternal; +using UnityEngine; + +namespace I2.Loc +{ + [CustomEditor(typeof(LocalizationParamsManager))] + public class LocalizationParamsManagerInspector : Editor + { + private ReorderableList mList; + private SerializedProperty mProp_IsGlobalManager; + + + private ReorderableList getList(SerializedObject serObject) + { + if (mList == null) { + mList = new ReorderableList (serObject, serObject.FindProperty ("_Params"), true, true, true, true); + mList.drawElementCallback = drawElementCallback; + mList.drawHeaderCallback = drawHeaderCallback; + mList.onAddCallback = addElementCallback; + mList.onRemoveCallback = removeElementCallback; + } + else + { + mList.serializedProperty = serObject.FindProperty ("_Params"); + } + return mList; + } + + private void addElementCallback( ReorderableList list ) + { + serializedObject.ApplyModifiedProperties(); + var objParams = target as LocalizationParamsManager; + objParams._Params.Add(new LocalizationParamsManager.ParamValue()); + list.index = objParams._Params.Count - 1; + serializedObject.Update(); + } + + private void removeElementCallback( ReorderableList list ) + { + if (list.index < 0) + return; + serializedObject.ApplyModifiedProperties(); + var objParams = target as LocalizationParamsManager; + objParams._Params.RemoveAt(list.index); + serializedObject.Update(); + } + + private void drawHeaderCallback(Rect rect) + { + GUI.Label(rect, "Parameters:"); + } + + private void drawElementCallback(Rect rect, int index, bool isActive, bool isFocused) + { + var serializedElement = mList.serializedProperty.GetArrayElementAtIndex (index); + var content = new GUIContent (); + + Rect r = rect; r.xMax = r.xMin+40; + GUI.Label(r, "Name"); + + r = rect; r.xMax = (r.xMax + r.xMin)/2 - 2; r.xMin = r.xMin+40; + EditorGUI.PropertyField (r, serializedElement.FindPropertyRelative ("Name"),content); + + r = rect; r.xMin = (r.xMax + r.xMin) / 2 + 2; r.xMax = r.xMin+40; + GUI.Label(r, "Value"); + + r = rect; r.xMin = (r.xMax + r.xMin)/2 + 2 + 40; + EditorGUI.PropertyField (r, serializedElement.FindPropertyRelative ("Value"), content); + } + + void OnEnable() + { + mList = getList(serializedObject); + mProp_IsGlobalManager = serializedObject.FindProperty("_IsGlobalManager"); + } + public override void OnInspectorGUI() + { + #if UNITY_5_6_OR_NEWER + serializedObject.UpdateIfRequiredOrScript(); + #else + serializedObject.UpdateIfDirtyOrScript(); + #endif + + GUI.backgroundColor = Color.Lerp (Color.black, Color.gray, 1); + GUILayout.BeginVertical(LocalizeInspector.GUIStyle_Background); + GUI.backgroundColor = Color.white; + + if (GUILayout.Button("Dynamic Parameters", LocalizeInspector.GUIStyle_Header)) + { + Application.OpenURL(LocalizeInspector.HelpURL_Documentation); + } + + GUILayout.Space(5); + mProp_IsGlobalManager.boolValue = EditorGUILayout.Popup(new GUIContent("Manager Type", "Local Manager only apply parameters to the Localize component in the same GameObject\n\nGlobal Manager apply parameters to all Localize components"), mProp_IsGlobalManager.boolValue ? 1 : 0, new[] { new GUIContent("Local"), new GUIContent("Global") }) == 1; + + + GUILayout.Space(5); + mList.DoLayoutList(); + + //EditorGUILayout.PropertyField(serializedObject.FindProperty("_AutoRegister"), new GUIContent("Auto Register")); + + GUILayout.EndVertical(); + serializedObject.ApplyModifiedProperties(); + } + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/LocalizationParamsManagerInspector.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/LocalizationParamsManagerInspector.cs.meta new file mode 100644 index 00000000..4849a7ea --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/LocalizationParamsManagerInspector.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 93f1f9aecf6f7ed40ad1a082c22c47e5 +timeCreated: 1468111539 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/LocalizeDropdownInspector.cs b/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/LocalizeDropdownInspector.cs new file mode 100644 index 00000000..24adcd2a --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/LocalizeDropdownInspector.cs @@ -0,0 +1,131 @@ +using System; +using System.Collections.Generic; +using UnityEditor; +using UnityEditorInternal; +using UnityEngine; + +namespace I2.Loc +{ + #if !UNITY_5_0 && !UNITY_5_1 + + [CustomEditor(typeof(LocalizeDropdown))] + public class LocalizeDropdownInspector : Editor + { + private ReorderableList mList; + + private List terms; + + private ReorderableList getList(SerializedObject serObject) + { + if (mList == null) { + mList = new ReorderableList (serObject, serObject.FindProperty ("_Terms"), true, true, true, true); + mList.drawElementCallback = drawElementCallback; + mList.drawHeaderCallback = drawHeaderCallback; + mList.onAddCallback = addElementCallback; + mList.onRemoveCallback = removeElementCallback; + } + else + { + mList.serializedProperty = serObject.FindProperty ("_Terms"); + } + return mList; + } + + private void addElementCallback( ReorderableList list ) + { + serializedObject.ApplyModifiedProperties(); + + var objParams = target as LocalizeDropdown; + objParams._Terms.Add(string.Empty); + + list.index = objParams._Terms.Count - 1; + + serializedObject.Update(); + } + + private void removeElementCallback( ReorderableList list ) + { + if (list.index < 0) + return; + serializedObject.ApplyModifiedProperties(); + + var objParams = target as LocalizeDropdown; + objParams._Terms.RemoveAt(list.index); + + serializedObject.Update(); + } + + private void drawHeaderCallback(Rect rect) + { + GUI.Label(rect, "Terms:"); + } + + private void drawElementCallback(Rect rect, int index, bool isActive, bool isFocused) + { + var serializedElement = mList.serializedProperty.GetArrayElementAtIndex (index); + + EditorGUI.BeginChangeCheck (); + + var prvIndex = serializedElement.stringValue == "-" || serializedElement.stringValue == "" ? terms.Count - 1 : + serializedElement.stringValue == " " ? terms.Count - 2 : + terms.IndexOf(serializedElement.stringValue); + + var newIndex = EditorGUI.Popup(rect, prvIndex, terms.ToArray()); + + if (EditorGUI.EndChangeCheck ()) + { + if (newIndex == terms.Count - 1) + serializedElement.stringValue = "-"; + else + if (newIndex < 0 || newIndex == terms.Count - 2) + serializedElement.stringValue = string.Empty; + else + serializedElement.stringValue = terms[newIndex]; + } + } + + void OnEnable() + { + mList = getList(serializedObject); + } + + public override void OnInspectorGUI() + { + #if UNITY_5_6_OR_NEWER + serializedObject.UpdateIfRequiredOrScript(); + #else + serializedObject.UpdateIfDirtyOrScript(); + #endif + terms = LocalizationManager.GetTermsList (); + terms.Sort(StringComparer.OrdinalIgnoreCase); + terms.Add(""); + terms.Add(""); + terms.Add(""); + + GUI.backgroundColor = Color.Lerp (Color.black, Color.gray, 1); + GUILayout.BeginVertical(LocalizeInspector.GUIStyle_Background); + GUI.backgroundColor = Color.white; + + if (GUILayout.Button("Localize DropDown", LocalizeInspector.GUIStyle_Header)) + { + Application.OpenURL(LocalizeInspector.HelpURL_Documentation); + } + + + GUILayout.Space(5); + mList.DoLayoutList(); + + GUILayout.Space (10); + + GUITools.OnGUI_Footer("I2 Localization", LocalizationManager.GetVersion(), LocalizeInspector.HelpURL_forum, LocalizeInspector.HelpURL_Documentation, LocalizeInspector.HelpURL_AssetStore); + + EditorGUIUtility.labelWidth = 0; + + + GUILayout.EndVertical(); + serializedObject.ApplyModifiedProperties(); + terms = null; + } + } + #endif +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/LocalizeDropdownInspector.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/LocalizeDropdownInspector.cs.meta new file mode 100644 index 00000000..3177a7ec --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/LocalizeDropdownInspector.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 65bbef08e6e42d24d9834945c3769202 +timeCreated: 1468111539 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/LocalizeInspector.cs b/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/LocalizeInspector.cs new file mode 100644 index 00000000..28824bf1 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/LocalizeInspector.cs @@ -0,0 +1,896 @@ +//#define UGUI +//#define NGUI +//#define DFGUI + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using UnityEditor; +using UnityEngine; +using Object = UnityEngine.Object; + +namespace I2.Loc +{ + [CustomEditor(typeof(Localize))] + [CanEditMultipleObjects] + public class LocalizeInspector : Editor + { + #region Variables + + Localize mLocalize; + SerializedProperty mProp_mTerm, mProp_mTermSecondary, + mProp_TranslatedObjects, mProp_LocalizeOnAwake, mProp_AlwaysForceLocalize, mProp_AllowLocalizedParameters, mProp_AllowParameters, + mProp_IgnoreRTL, mProp_MaxCharactersInRTL, mProp_CorrectAlignmentForRTL, mProp_IgnoreNumbersInRTL, mProp_TermSuffix, mProp_TermPrefix, mProp_SeparateWords, + mProp_CallbackEvent; + + + bool mAllowEditKeyName; + string mNewKeyName = ""; + + string[] mTermsArray; + + + public static string HelpURL_forum = "http://goo.gl/Uiyu8C";//http://www.inter-illusion.com/forum/i2-localization"; + public static string HelpURL_Documentation = "http://www.inter-illusion.com/assets/I2LocalizationManual/I2LocalizationManual.html"; + public static string HelpURL_Tutorials = "http://inter-illusion.com/tools/i2-localization"; + public static string HelpURL_ReleaseNotes = "http://inter-illusion.com/forum/i2-localization/26-release-notes"; + public static string HelpURL_AssetStore = "https://www.assetstore.unity3d.com/#!/content/14884"; + + public static LocalizeInspector mLocalizeInspector; + #endregion + + #region Inspector + + void OnEnable() + { + mLocalize = (Localize)target; + mLocalizeInspector = this; + LocalizationEditor.mCurrentInspector = this; + mProp_mTerm = serializedObject.FindProperty("mTerm"); + mProp_mTermSecondary = serializedObject.FindProperty("mTermSecondary"); + mProp_TranslatedObjects = serializedObject.FindProperty("TranslatedObjects"); + mProp_IgnoreRTL = serializedObject.FindProperty("IgnoreRTL"); + mProp_SeparateWords = serializedObject.FindProperty("AddSpacesToJoinedLanguages"); + mProp_MaxCharactersInRTL = serializedObject.FindProperty ("MaxCharactersInRTL"); + mProp_IgnoreNumbersInRTL = serializedObject.FindProperty("IgnoreNumbersInRTL"); + mProp_CorrectAlignmentForRTL = serializedObject.FindProperty ("CorrectAlignmentForRTL"); + mProp_LocalizeOnAwake = serializedObject.FindProperty("LocalizeOnAwake"); + mProp_AlwaysForceLocalize = serializedObject.FindProperty("AlwaysForceLocalize"); + mProp_TermSuffix = serializedObject.FindProperty("TermSuffix"); + mProp_TermPrefix = serializedObject.FindProperty("TermPrefix"); + mProp_CallbackEvent = serializedObject.FindProperty("LocalizeEvent"); + mProp_AllowLocalizedParameters = serializedObject.FindProperty("AllowLocalizedParameters"); + mProp_AllowParameters = serializedObject.FindProperty("AllowParameters"); + + + if (LocalizationManager.Sources.Count==0) + LocalizationManager.UpdateSources(); + //LocalizationEditor.ParseTerms (true); + + //mGUI_ShowReferences = (mLocalize.TranslatedObjects!=null && mLocalize.TranslatedObjects.Length>0); + //mGUI_ShowCallback = (mLocalize.LocalizeCallBack.Target!=null); + //mGUI_ShowTems = true; + LocalizationEditor.mKeysDesc_AllowEdit = false; + GUI_SelectedTerm = 0; + mNewKeyName = mLocalize.Term; + + if (mLocalize.Source != null) + LocalizationEditor.mLanguageSource = mLocalize.Source.SourceData; + else + { + if (LocalizationManager.Sources.Count==0) + LocalizationManager.UpdateSources(); + LocalizationEditor.mLanguageSource = LocalizationManager.GetSourceContaining( mLocalize.Term ); + } + + //UpgradeManager.EnablePlugins(); + LocalizationEditor.ApplyInferredTerm (mLocalize); + RemoveUnusedReferences(mLocalize); + } + + void OnDisable() + { + mLocalizeInspector = null; + if (LocalizationEditor.mCurrentInspector == this) LocalizationEditor.mCurrentInspector = null; + + + if (mLocalize == null) + return; + + //#if TextMeshPro + //string previous = null; + + //if (!Application.isPlaying && !string.IsNullOrEmpty(mLocalize.TMP_previewLanguage)) + //{ + // previous = LocalizationManager.CurrentLanguage; + // LocalizationManager.PreviewLanguage( mLocalize.TMP_previewLanguage ); + //} + //#endif + + //mLocalize.OnLocalize(); + + // Revert the preview language + // except when in TMPro and not changing to another GameObject (TMPro has a bug where any change causes the inspector to Disable and Enable) + if (!mLocalize.mLocalizeTargetName.Contains("LocalizeTarget_TextMeshPro") || Selection.activeGameObject==null || !Selection.gameObjects.Contains(mLocalize.gameObject)) + { + LocalizationManager.LocalizeAll(); + } + + //#if TextMeshPro + //if (!string.IsNullOrEmpty(previous)) + //{ + // LocalizationManager.PreviewLanguage(previous); + // mLocalize.TMP_previewLanguage = null; + //} + //#endif + + RemoveUnusedReferences(mLocalize); + } + + #endregion + + #region GUI + + public override void OnInspectorGUI() + { + Undo.RecordObject(target, "Localize"); + + //GUI.backgroundColor = Color.Lerp (Color.black, Color.gray, 1); + //GUILayout.BeginVertical(GUIStyle_Background, GUILayout.Height(1)); + //GUI.backgroundColor = Color.white; + + if (GUILayout.Button("Localize", GUIStyle_Header)) + { + //Application.OpenURL(HelpURL_Documentation); + } + GUILayout.Space(-10); + + LocalizationManager.UpdateSources(); + + if (LocalizationManager.Sources.Count==0) + { + EditorGUILayout.HelpBox("Unable to find a Language Source.", MessageType.Warning); + } + else + { + GUILayout.Space(10); + OnGUI_Target (); + GUILayout.Space(10); + OnGUI_Terms(); + + //if (mGUI_ShowTems || mGUI_ShowReferences) GUILayout.Space(5); + + OnGUI_References(); + + if (mLocalize.mGUI_ShowReferences || mLocalize.mGUI_ShowCallback) GUILayout.Space(10); + + //Localize loc = target as Localize; + + //--[ Localize Callback ]---------------------- + EditorGUILayout.PropertyField(mProp_CallbackEvent, new GUIContent("On Localize Callback")); + + //string HeaderTitle = "On Localize Call:"; + //if (!mLocalize.mGUI_ShowCallback && loc.LocalizeCallBack.Target!=null && !string.IsNullOrEmpty(loc.LocalizeCallBack.MethodName)) + // HeaderTitle = string.Concat(HeaderTitle, " ",loc.LocalizeCallBack.Target.name, ".", loc.LocalizeCallBack.MethodName, ""); + //mLocalize.mGUI_ShowCallback = GUITools.DrawHeader(HeaderTitle, mLocalize.mGUI_ShowCallback); + //if (mLocalize.mGUI_ShowCallback) + //{ + // GUITools.BeginContents(); + // DrawEventCallBack( loc.LocalizeCallBack, loc ); + // GUITools.EndContents(); + //} + } + OnGUI_Source (); + + GUILayout.Space (10); + + GUITools.OnGUI_Footer("I2 Localization", LocalizationManager.GetVersion(), HelpURL_forum, HelpURL_Documentation, HelpURL_AssetStore); + + //GUILayout.EndVertical(); + + serializedObject.ApplyModifiedProperties(); + if (Event.current.type == EventType.Repaint) + { + LocalizationEditor.mTestAction = LocalizationEditor.eTest_ActionType.None; + LocalizationEditor.mTestActionArg = null; + LocalizationEditor.mTestActionArg2 = null; + } + } + + #endregion + + #region References + + void OnGUI_References() + { + if (mLocalize.mGUI_ShowReferences = GUITools.DrawHeader ("References", mLocalize.mGUI_ShowReferences)) + { + GUITools.BeginContents(); + + bool canTest = Event.current.type == EventType.Repaint; + + var testAddObj = canTest && LocalizationEditor.mTestAction == LocalizationEditor.eTest_ActionType.Button_Assets_Add ? (Object)LocalizationEditor.mTestActionArg : null; + var testReplaceIndx = canTest && LocalizationEditor.mTestAction == LocalizationEditor.eTest_ActionType.Button_Assets_Replace ? (int)LocalizationEditor.mTestActionArg : -1; + var testReplaceObj = canTest && LocalizationEditor.mTestAction == LocalizationEditor.eTest_ActionType.Button_Assets_Replace ? (Object)LocalizationEditor.mTestActionArg2 : null; + var testDeleteIndx = canTest && LocalizationEditor.mTestAction == LocalizationEditor.eTest_ActionType.Button_Assets_Delete ? (int)LocalizationEditor.mTestActionArg : -1; + + bool changed = GUITools.DrawObjectsArray( mProp_TranslatedObjects, false, false, true, testAddObj, testReplaceObj, testReplaceIndx, testDeleteIndx); + if (changed) + { + serializedObject.ApplyModifiedProperties(); + foreach (var obj in serializedObject.targetObjects) + (obj as Localize).UpdateAssetDictionary(); + } + + GUITools.EndContents(); + } + } + + void RemoveUnusedReferences(Localize cmp) + { + cmp.TranslatedObjects.RemoveAll(x => !IsUsingReference(LocalizationManager.GetTermData(cmp.Term), x) && !IsUsingReference(LocalizationManager.GetTermData(cmp.SecondaryTerm), x)); + if (cmp.TranslatedObjects.Count != cmp.mAssetDictionary.Count) + cmp.UpdateAssetDictionary(); + } + + bool IsUsingReference(TermData termData, Object obj ) + { + if (obj == null || termData==null) return false; + + string objName = obj.name; + foreach (string translation in termData.Languages) + { + if (translation != null && translation.Contains(objName)) + return true; + } + return false; + } + + + #endregion + + + #region Terms + + int GUI_SelectedTerm; + void OnGUI_Terms() + { + if ((mLocalize.mGUI_ShowTems=GUITools.DrawHeader ("Terms", mLocalize.mGUI_ShowTems))) + { + //--[ tabs: Main and Secondary Terms ]---------------- + int oldTab = GUI_SelectedTerm; + if (mLocalize.mLocalizeTarget!=null && mLocalize.mLocalizeTarget.CanUseSecondaryTerm()) + { + GUI_SelectedTerm = GUITools.DrawTabs (GUI_SelectedTerm, new[]{"Main", "Secondary"}); + } + else + { + GUI_SelectedTerm = 0; + GUITools.DrawTabs (GUI_SelectedTerm, new[]{"Main", ""}); + } + + GUITools.BeginContents(); + + TermData termData = null; + + if (GUI_SelectedTerm==0) termData = OnGUI_PrimaryTerm( oldTab!=GUI_SelectedTerm ); + else termData = OnGUI_SecondaryTerm(oldTab!=GUI_SelectedTerm); + + GUITools.EndContents(); + + //--[ Modifier ]------------- + if (mLocalize.Term != "-" && termData!=null && termData.TermType==eTermType.Text) + { + EditorGUI.BeginChangeCheck(); + GUILayout.BeginHorizontal(); + GUILayout.Label("Prefix:"); + EditorGUILayout.PropertyField(mProp_TermPrefix, GUITools.EmptyContent); + GUILayout.Label("Suffix:"); + EditorGUILayout.PropertyField(mProp_TermSuffix, GUITools.EmptyContent); + GUILayout.EndHorizontal(); + if (EditorGUI.EndChangeCheck()) + { + EditorApplication.delayCall += () => + { + if (targets != null) + { + foreach (var t in targets) + if (t as Localize != null) + (t as Localize).OnLocalize(true); + } + }; + } + EditorGUI.BeginChangeCheck(); + int val = EditorGUILayout.Popup("Modifier", GUI_SelectedTerm == 0 ? (int)mLocalize.PrimaryTermModifier : (int)mLocalize.SecondaryTermModifier, Enum.GetNames(typeof(Localize.TermModification))); + if (EditorGUI.EndChangeCheck()) + { + serializedObject.FindProperty(GUI_SelectedTerm == 0 ? "PrimaryTermModifier" : "SecondaryTermModifier").enumValueIndex = val; + GUI.changed = false; + } + } + + OnGUI_Options(); + //--[ OnAwake vs OnEnable ]------------- + //GUILayout.BeginHorizontal(); + //mProp_LocalizeOnAwake.boolValue = GUILayout.Toggle(mProp_LocalizeOnAwake.boolValue, new GUIContent(" Pre-Localize on Awake", "Localizing on Awake could result in a lag when the level is loaded but faster later when objects are enabled. If false, it will Localize OnEnable, so will yield faster level load but could have a lag when screens are enabled")); + //GUILayout.FlexibleSpace(); + //if (mLocalize.HasCallback()) + //{ + // GUI.enabled = false; + // GUILayout.Toggle(true, new GUIContent(" Force Localize", "Enable this when the translations have parameters (e.g. Thew winner is {[WINNER}]) to prevent any optimization that could prevent updating the translation when the object is enabled")); + // GUI.enabled = true; + //} + //else + //{ + // mProp_AlwaysForceLocalize.boolValue = GUILayout.Toggle(mProp_AlwaysForceLocalize.boolValue, new GUIContent(" Force Localize", "Enable this when the translations have parameters (e.g. Thew winner is {[WINNER}]) to prevent any optimization that could prevent updating the translation when the object is enabled")); + //} + //GUILayout.EndHorizontal(); + + //--[ Right To Left ]------------- + if (!mLocalize.IgnoreRTL && mLocalize.Term!="-" && termData != null && termData.TermType == eTermType.Text) + { + GUILayout.BeginVertical("Box"); + //GUILayout.BeginHorizontal(); + // mProp_IgnoreRTL.boolValue = GUILayout.Toggle(mProp_IgnoreRTL.boolValue, new GUIContent(" Ignore Right To Left", "Arabic and other RTL languages require processing them so they render correctly, this toogle allows ignoring that processing (in case you are doing it manually during a callback)")); + // GUILayout.FlexibleSpace(); + // mProp_SeparateWords.boolValue = GUILayout.Toggle(mProp_SeparateWords.boolValue, new GUIContent(" Separate Words", " Some languages (e.g. Chinese, Japanese and Thai) don't add spaces to their words (all characters are placed toguether), enabling this checkbox, will add spaces to all characters to allow wrapping long texts into multiple lines.")); + //GUILayout.EndHorizontal(); + { + mProp_MaxCharactersInRTL.intValue = EditorGUILayout.IntField( new GUIContent("Max line length", "If the language is Right To Left, long lines will be split at this length and the RTL fix will be applied to each line, this should be set to the maximum number of characters that fit in this text width. 0 disables the per line fix"), mProp_MaxCharactersInRTL.intValue ); + GUILayout.BeginHorizontal(); + mProp_CorrectAlignmentForRTL.boolValue = GUILayout.Toggle(mProp_CorrectAlignmentForRTL.boolValue, new GUIContent(" Adjust Alignment", "Right-align when Right-To-Left Language, and Left-Align otherwise") ); + GUILayout.FlexibleSpace(); + mProp_IgnoreNumbersInRTL.boolValue = GUILayout.Toggle(mProp_IgnoreNumbersInRTL.boolValue, new GUIContent(" Ignore Numbers", "Preserve numbers as latin characters instead of converting them")); + GUILayout.EndHorizontal(); + } + + GUILayout.EndVertical(); + } + + + ////GUILayout.EndHorizontal(); + } + } + + void OnGUI_Options() + { + int mask = 0; + if (mProp_LocalizeOnAwake.boolValue) mask |= 1 << 0; + if (mProp_AlwaysForceLocalize.boolValue) mask |= 1 << 1; + if (mProp_AllowParameters.boolValue) mask |= 1 << 2; + if (mProp_AllowLocalizedParameters.boolValue) mask |= 1 << 3; + if (mProp_SeparateWords.boolValue) mask |= 1 << 4; + if (mProp_IgnoreRTL.boolValue) mask |= 1 << 5; + + EditorGUI.BeginChangeCheck(); + mask = EditorGUILayout.MaskField(new GUIContent("Options"), mask, new []{ + "Localize On Awake", + "Force Localize", + "Allow Parameters", + "Allow Localized Parameters", + "Separate Words", + "Ignore RTL" + }); + if (EditorGUI.EndChangeCheck()) + { + mProp_LocalizeOnAwake.boolValue = (mask & (1 << 0))> 0; + mProp_AlwaysForceLocalize.boolValue = (mask & (1 << 1))> 0; + mProp_AllowParameters.boolValue = (mask & (1 << 2))> 0; + mProp_AllowLocalizedParameters.boolValue = (mask & (1 << 3))> 0; + mProp_SeparateWords.boolValue = (mask & (1 << 4))> 0; + mProp_IgnoreRTL.boolValue = (mask & (1 << 5))> 0; + } + } + + TermData OnGUI_PrimaryTerm( bool OnOpen ) + { + string Key = mLocalize.mTerm; + if (string.IsNullOrEmpty(Key)) + { + string SecondaryTerm; + mLocalize.GetFinalTerms( out Key, out SecondaryTerm ); + } + + if (OnOpen) mNewKeyName = Key; + if ( OnGUI_SelectKey( ref Key, string.IsNullOrEmpty(mLocalize.mTerm))) + mProp_mTerm.stringValue = Key; + return LocalizationEditor.OnGUI_Keys_Languages( Key, mLocalize ); + } + + TermData OnGUI_SecondaryTerm( bool OnOpen ) + { + string Key = mLocalize.mTermSecondary; + + if (string.IsNullOrEmpty(Key)) + { + string ss; + mLocalize.GetFinalTerms( out ss, out Key ); + } + + if (OnOpen) mNewKeyName = Key; + if ( OnGUI_SelectKey( ref Key, string.IsNullOrEmpty(mLocalize.mTermSecondary))) + mProp_mTermSecondary.stringValue = Key; + return LocalizationEditor.OnGUI_Keys_Languages( Key, mLocalize, false ); + } + + bool OnGUI_SelectKey( ref string Term, bool Inherited ) // Inherited==true means that the mTerm is empty and we are using the Label.text instead + { + GUILayout.Space (5); + GUILayout.BeginHorizontal(); + + GUI.changed = false; + mAllowEditKeyName = GUILayout.Toggle(mAllowEditKeyName, "Term:", EditorStyles.foldout, GUILayout.ExpandWidth(false)); + if (GUI.changed && mAllowEditKeyName) { + mNewKeyName = Term; + mTermsArray = null; + } + + bool bChanged = false; + + if (mTermsArray==null || Term!="-" && Array.IndexOf(mTermsArray, Term)<0) + UpdateTermsList(Term); + + if (Inherited) + GUI.contentColor = Color.Lerp (Color.gray, Color.yellow, 0.1f); + + int Index = Term=="-" || Term=="" ? mTermsArray.Length-1 : Array.IndexOf( mTermsArray, Term ); + + GUI.changed = false; + + int newIndex = EditorGUILayout.Popup( Index, mTermsArray); + + GUI.contentColor = Color.white; + if (/*newIndex != Index && newIndex>=0*/GUI.changed) + { + GUI.changed = false; + if (mLocalize.Source != null && newIndex == mTermsArray.Length - 4) //< show terms from all sources > + { + mLocalize.Source = null; + mTermsArray = null; + } + else + if (newIndex == mTermsArray.Length - 2) // + mNewKeyName = Term = string.Empty; + else + if (newIndex == mTermsArray.Length - 1) // + mNewKeyName = Term = "-"; + else + mNewKeyName = Term = mTermsArray[newIndex]; + + + if (GUI_SelectedTerm==0) + mLocalize.SetTerm (mNewKeyName); + else + mLocalize.SetTerm (null, mNewKeyName); + mAllowEditKeyName = false; + bChanged = true; + } + + LanguageSourceData source = LocalizationManager.GetSourceContaining(Term); + TermData termData = source.GetTermData(Term); + if (termData!=null) + { + if (Inherited) + bChanged = true; // if the term its inferred and a matching term its found, then use that + eTermType NewType = (eTermType)EditorGUILayout.EnumPopup(termData.TermType, GUILayout.Width(90)); + if (termData.TermType != NewType) + termData.TermType = NewType; + } + + GUILayout.EndHorizontal(); + + if (mAllowEditKeyName) + { + GUILayout.BeginHorizontal(GUILayout.Height (1)); + GUILayout.BeginHorizontal(EditorStyles.toolbar); + if(mNewKeyName==null) mNewKeyName = string.Empty; + + GUI.changed = false; + mNewKeyName = EditorGUILayout.TextField(mNewKeyName, new GUIStyle("ToolbarSeachTextField"), GUILayout.ExpandWidth(true)); + if (GUI.changed) + { + mTermsArray = null; // regenerate this array to apply filtering + GUI.changed = false; + } + + if (GUILayout.Button (string.Empty, string.IsNullOrEmpty(mNewKeyName) ? "ToolbarSeachCancelButtonEmpty" : "ToolbarSeachCancelButton", GUILayout.ExpandWidth(false))) + { + mTermsArray = null; // regenerate this array to apply filtering + mNewKeyName = string.Empty; + } + + GUILayout.EndHorizontal(); + + string ValidatedName = mNewKeyName; + LanguageSourceData.ValidateFullTerm( ref ValidatedName ); + + bool CanUseNewName = source.GetTermData(ValidatedName)==null; + GUI.enabled = !string.IsNullOrEmpty(mNewKeyName) && CanUseNewName; + if (GUILayout.Button ("Create", EditorStyles.toolbarButton, GUILayout.ExpandWidth(false))) + { + mNewKeyName = ValidatedName; + mTermsArray=null; // this recreates that terms array + + LanguageSourceData Source = null; + #if UNITY_EDITOR + if (mLocalize.Source!=null) + Source = mLocalize.Source.SourceData; + #endif + + if (Source==null) + Source = LocalizationManager.Sources[0]; + Term = mNewKeyName; + var data = Source.AddTerm( mNewKeyName, eTermType.Text, false ); + if (data.Languages.Length > 0) + data.Languages[0] = mLocalize.GetMainTargetsText(); + Source.Editor_SetDirty(); + AssetDatabase.SaveAssets(); + mAllowEditKeyName = false; + bChanged = true; + GUIUtility.keyboardControl = 0; + } + GUI.enabled = termData!=null && !string.IsNullOrEmpty(mNewKeyName) && CanUseNewName; + if (GUILayout.Button (new GUIContent("Rename","Renames the term in the source and updates every object using it in the current scene"), EditorStyles.toolbarButton, GUILayout.ExpandWidth(false))) + { + mNewKeyName = ValidatedName; + Term = mNewKeyName; + mTermsArray=null; // this recreates that terms array + mAllowEditKeyName = false; + bChanged = true; + LocalizationEditor.TermReplacements = new Dictionary(StringComparer.Ordinal); + LocalizationEditor.TermReplacements[ termData.Term ] = mNewKeyName; + termData.Term = mNewKeyName; + source.UpdateDictionary(true); + LocalizationEditor.ReplaceTermsInCurrentScene(); + GUIUtility.keyboardControl = 0; + EditorApplication.update += LocalizationEditor.DoParseTermsInCurrentScene; + } + GUI.enabled = true; + GUILayout.EndHorizontal(); + + bChanged |= OnGUI_SelectKey_PreviewTerms ( ref Term); + } + + GUILayout.Space (5); + return bChanged; + } + + void UpdateTermsList( string currentTerm ) + { + List Terms = mLocalize.Source==null ? LocalizationManager.GetTermsList() : mLocalize.Source.SourceData.GetTermsList(); + + // If there is a filter, remove all terms not matching that filter + if (mAllowEditKeyName && !string.IsNullOrEmpty(mNewKeyName)) + { + string Filter = mNewKeyName.ToUpper(); + for (int i=Terms.Count-1; i>=0; --i) + if (!Terms[i].ToUpper().Contains(Filter) && Terms[i]!=currentTerm) + Terms.RemoveAt(i); + + } + + if (!string.IsNullOrEmpty(currentTerm) && currentTerm!="-" && !Terms.Contains(currentTerm)) + Terms.Add (currentTerm); + + Terms.Sort(StringComparer.OrdinalIgnoreCase); + Terms.Add(""); + if (mLocalize.Source != null) + { + Terms.Add("< Show Terms from all sources >"); + Terms.Add(""); + } + Terms.Add(""); + Terms.Add(""); + + mTermsArray = Terms.ToArray(); + } + + bool OnGUI_SelectKey_PreviewTerms ( ref string Term) + { + if (mTermsArray==null) + UpdateTermsList(Term); + + int nTerms = mTermsArray.Length; + if (nTerms<=0) + return false; + + if (nTerms==1 && mTermsArray[0]==Term) + return false; + + bool bChanged = false; + GUI.backgroundColor = Color.gray; + GUILayout.BeginVertical (GUIStyle_OldTextArea); + for (int i = 0, imax = Mathf.Min (nTerms, 3); i < imax; ++i) + { + ParsedTerm parsedTerm; + int nUses = -1; + if (LocalizationEditor.mParsedTerms.TryGetValue (mTermsArray [i], out parsedTerm)) + nUses = parsedTerm.Usage; + + string FoundText = mTermsArray [i]; + if (nUses > 0) + FoundText = string.Concat ("(", nUses, ") ", FoundText); + + if (GUILayout.Button (FoundText, EditorStyles.miniLabel, GUILayout.MaxWidth(EditorGUIUtility.currentViewWidth - 70))) + { + if (mTermsArray[i] == "") + mNewKeyName = Term = string.Empty; + else + if (mTermsArray[i] == "") + mNewKeyName = Term = "-"; + else + if (mTermsArray[i] != "< Show Terms from all sources >") + mNewKeyName = Term = mTermsArray[i]; + + //mNewKeyName = Term = (mTermsArray [i]=="" ? string.Empty : mTermsArray [i]); + GUIUtility.keyboardControl = 0; + mAllowEditKeyName = false; + bChanged = true; + } + } + if (nTerms > 3) + GUILayout.Label ("..."); + GUILayout.EndVertical (); + GUI.backgroundColor = Color.white; + + return bChanged; + } + + #endregion + + #region Target + + void OnGUI_Target() + { + List TargetTypes = new List(); + int CurrentTarget = -1; + + mLocalize.FindTarget(); + + foreach (var desc in LocalizationManager.mLocalizeTargets) + { + if (desc.CanLocalize(mLocalize)) + { + TargetTypes.Add(desc.Name); + + if (mLocalize.mLocalizeTarget!=null && desc.GetTargetType() == mLocalize.mLocalizeTarget.GetType()) + CurrentTarget = TargetTypes.Count - 1; + } + } + + if (CurrentTarget==-1) + { + CurrentTarget = TargetTypes.Count; + TargetTypes.Add("None"); + } + + GUILayout.BeginHorizontal(); + GUILayout.Label ("Target:", GUILayout.Width (60)); + EditorGUI.BeginChangeCheck(); + int index = EditorGUILayout.Popup(CurrentTarget, TargetTypes.ToArray()); + if (EditorGUI.EndChangeCheck()) + { + serializedObject.ApplyModifiedProperties(); + foreach (var obj in serializedObject.targetObjects) + { + var cmp = obj as Localize; + if (cmp == null) + continue; + + if (cmp.mLocalizeTarget != null) + DestroyImmediate(cmp.mLocalizeTarget); + cmp.mLocalizeTarget = null; + + foreach (var desc in LocalizationManager.mLocalizeTargets) + { + if (desc.Name == TargetTypes[index]) + { + cmp.mLocalizeTarget = desc.CreateTarget(cmp); + cmp.mLocalizeTargetName = desc.GetTargetType().ToString(); + break; + } + } + } + serializedObject.Update(); + } + GUILayout.EndHorizontal(); + } + + #endregion + + #region Source + + void OnGUI_Source() + { + GUILayout.BeginHorizontal(); + + ILanguageSource currentSource = mLocalize.Source; + if (currentSource==null) + { + LanguageSourceData source = LocalizationManager.GetSourceContaining(mLocalize.Term); + currentSource = source==null ? null : source.owner; + } + + if (GUILayout.Button("Open Source", EditorStyles.toolbarButton, GUILayout.Width (100))) + { + Selection.activeObject = currentSource as Object; + + string sTerm, sSecondary; + mLocalize.GetFinalTerms( out sTerm, out sSecondary ); + if (GUI_SelectedTerm==1) sTerm = sSecondary; + LocalizationEditor.mKeyToExplore = sTerm; + } + + GUILayout.Space (2); + + GUILayout.BeginHorizontal(EditorStyles.toolbar); + EditorGUI.BeginChangeCheck (); + if (mLocalize.Source == null) + { + GUI.contentColor = Color.Lerp (Color.gray, Color.yellow, 0.1f); + } + Object obj = EditorGUILayout.ObjectField(currentSource as Object, typeof(Object), true); + GUI.contentColor = Color.white; + if (EditorGUI.EndChangeCheck()) + { + ILanguageSource NewSource = obj as ILanguageSource; + if (NewSource == null && obj as GameObject != null) + { + NewSource = (obj as GameObject).GetComponent(); + } + + mLocalize.Source = NewSource; + string sTerm, sSecondary; + mLocalize.GetFinalTerms(out sTerm, out sSecondary); + if (GUI_SelectedTerm == 1) sTerm = sSecondary; + UpdateTermsList(sTerm); + } + + if (GUILayout.Button(new GUIContent("Detect", "Finds the LanguageSource containing the selected term, the term list will now only show terms inside that source."), EditorStyles.toolbarButton, GUILayout.ExpandWidth(false))) + { + string sTerm, sSecondary; + mLocalize.GetFinalTerms(out sTerm, out sSecondary); + if (GUI_SelectedTerm == 1) sTerm = sSecondary; + + var data = LocalizationManager.GetSourceContaining(sTerm, false); + mLocalize.Source = data==null ? null : data.owner; + mTermsArray = null; + } + GUILayout.EndHorizontal(); + + GUILayout.EndHorizontal(); + } + + #endregion + + + #region Event CallBack + + //public void DrawEventCallBack( EventCallback CallBack, Localize loc ) + //{ + //if (CallBack==null) + // return; + + //GUI.changed = false; + + //GUILayout.BeginHorizontal(); + //GUILayout.Label("Target:", GUILayout.ExpandWidth(false)); + //CallBack.Target = EditorGUILayout.ObjectField( CallBack.Target, typeof(MonoBehaviour), true) as MonoBehaviour; + //GUILayout.EndHorizontal(); + + //if (CallBack.Target!=null) + //{ + // GameObject GO = CallBack.Target.gameObject; + // List Infos = new List(); + + // var targets = GO.GetComponents(typeof(MonoBehaviour)); + // foreach (var behavior in targets) + // Infos.AddRange( behavior.GetType().GetMethods() ); + + // List Methods = new List(); + + // for (int i = 0, imax=Infos.Count; i 1) return false; + + if (Params [0].ParameterType.IsSubclassOf (typeof(Object))) return true; + if (Params [0].ParameterType == typeof(Object)) return true; + return false; + } + + + #endregion + + #region Styles + + public static GUIStyle GUIStyle_Header { + get{ + if (mGUIStyle_Header==null) + { + mGUIStyle_Header = new GUIStyle("HeaderLabel"); + mGUIStyle_Header.fontSize = 25; + mGUIStyle_Header.normal.textColor = Color.Lerp(Color.white, Color.gray, 0.5f); + mGUIStyle_Header.fontStyle = FontStyle.BoldAndItalic; + mGUIStyle_Header.alignment = TextAnchor.UpperCenter; + } + return mGUIStyle_Header; + } + } + static GUIStyle mGUIStyle_Header; + + public static GUIStyle GUIStyle_SubHeader { + get{ + if (mGUIStyle_SubHeader==null) + { + mGUIStyle_SubHeader = new GUIStyle("HeaderLabel"); + mGUIStyle_SubHeader.fontSize = 13; + mGUIStyle_SubHeader.fontStyle = FontStyle.Normal; + mGUIStyle_SubHeader.margin.top = -50; + mGUIStyle_SubHeader.alignment = TextAnchor.UpperCenter; + } + return mGUIStyle_SubHeader; + } + } + static GUIStyle mGUIStyle_SubHeader; + + public static GUIStyle GUIStyle_Background { + get{ + if (mGUIStyle_Background==null) + { + mGUIStyle_Background = new GUIStyle(EditorStyles.textArea); + mGUIStyle_Background.fixedHeight = 0; + mGUIStyle_Background.overflow.left = 50; + mGUIStyle_Background.overflow.right = 50; + mGUIStyle_Background.overflow.top = -5; + mGUIStyle_Background.overflow.bottom = 0; + } + return mGUIStyle_Background; + } + } + static GUIStyle mGUIStyle_Background; + + public static GUIStyle GUIStyle_OldTextArea + { + get + { + if (mGUIStyle_OldTextArea == null) + { + mGUIStyle_OldTextArea = new GUIStyle(EditorStyles.textArea); + mGUIStyle_OldTextArea.fixedHeight = 0; + } + return mGUIStyle_OldTextArea; + } + } + static GUIStyle mGUIStyle_OldTextArea; + + #endregion + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/LocalizeInspector.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/LocalizeInspector.cs.meta new file mode 100644 index 00000000..6d7f3aad --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/LocalizeInspector.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 675119279b2a30245801272112cfbe38 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/ResourceManagerInspector.cs b/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/ResourceManagerInspector.cs new file mode 100644 index 00000000..0a9a23c0 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/ResourceManagerInspector.cs @@ -0,0 +1,29 @@ +using UnityEditor; +using UnityEngine; + +namespace I2.Loc +{ + [CustomEditor(typeof(ResourceManager))] + public class ResourceManagerInspector : Editor + { + SerializedProperty mAssets; + + void OnEnable() + { + UpgradeManager.EnablePlugins(); + mAssets = serializedObject.FindProperty("Assets"); + } + + public override void OnInspectorGUI() + { + GUILayout.Space(5); + GUITools.DrawHeader("Assets:", true); + GUITools.BeginContents(); + ///GUILayout.Label ("Assets:"); + GUITools.DrawObjectsArray( mAssets ); + GUITools.EndContents(); + + serializedObject.ApplyModifiedProperties(); + } + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/ResourceManagerInspector.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/ResourceManagerInspector.cs.meta new file mode 100644 index 00000000..96076a94 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/ResourceManagerInspector.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ba2fdf8face79dd4f9e1ed80448db843 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/SetLanguageInspector.cs b/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/SetLanguageInspector.cs new file mode 100644 index 00000000..7cf5b643 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/SetLanguageInspector.cs @@ -0,0 +1,60 @@ +using System; +using UnityEditor; +using UnityEngine; + +namespace I2.Loc +{ + [CustomEditor(typeof(SetLanguage))] + public class SetLanguageInspector : Editor + { + public SetLanguage setLan; + public SerializedProperty mProp_Language; + + public void OnEnable() + { + setLan = (SetLanguage)target; + mProp_Language = serializedObject.FindProperty("_Language"); + } + + public override void OnInspectorGUI() + { + string[] Languages; + LanguageSource sourceObj = setLan.mSource; + if (sourceObj == null) + { + LocalizationManager.UpdateSources(); + Languages = LocalizationManager.GetAllLanguages().ToArray(); + Array.Sort(Languages); + } + else + { + Languages = sourceObj.mSource.GetLanguages().ToArray(); + Array.Sort(Languages); + } + + int index = Array.IndexOf(Languages, mProp_Language.stringValue); + + GUI.changed = false; + index = EditorGUILayout.Popup("Language", index, Languages); + if (GUI.changed) + { + if (index<0 || index>=Languages.Length) + mProp_Language.stringValue = string.Empty; + else + mProp_Language.stringValue = Languages[index]; + GUI.changed = false; + serializedObject.ApplyModifiedProperties(); + } + + GUILayout.Space(5); + if (setLan.mSource==null) GUI.contentColor = Color.Lerp (Color.gray, Color.yellow, 0.1f); + sourceObj = EditorGUILayout.ObjectField("Language Source:", sourceObj, typeof(LanguageSource), true) as LanguageSource; + GUI.contentColor = Color.white; + + if (GUI.changed) + setLan.mSource = sourceObj; + + serializedObject.ApplyModifiedProperties(); + } + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/SetLanguageInspector.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/SetLanguageInspector.cs.meta new file mode 100644 index 00000000..8fb138e1 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/SetLanguageInspector.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 7af58b4da44670e47a509c59754e8c2b +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/TermsPopup_Drawer.cs b/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/TermsPopup_Drawer.cs new file mode 100644 index 00000000..4262d744 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/TermsPopup_Drawer.cs @@ -0,0 +1,164 @@ +using System; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +namespace I2.Loc +{ + [CustomPropertyDrawer (typeof (TermsPopup))] + public class TermsPopup_Drawer : PropertyDrawer + { + GUIContent[] mTerms_Context; + int nFramesLeftBeforeUpdate; + string mPrevFilter; + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + var filter = ((TermsPopup)attribute).Filter; + ShowGUICached(position, property, label, null, filter, ref mTerms_Context, ref nFramesLeftBeforeUpdate, ref mPrevFilter); + } + + public static bool ShowGUI(Rect position, SerializedProperty property, GUIContent label, LanguageSourceData source, string filter = "") + { + GUIContent[] terms=null; + int framesLeftBeforeUpdate=0; + string prevFilter = null; + + return ShowGUICached(position, property, label, source, filter, ref terms, ref framesLeftBeforeUpdate, ref prevFilter); + } + + public static bool ShowGUICached(Rect position, SerializedProperty property, GUIContent label, LanguageSourceData source, string filter, ref GUIContent[] terms_Contexts, ref int framesBeforeUpdating, ref string prevFilter) + { + UpdateTermsCache(source, filter, ref terms_Contexts, ref framesBeforeUpdating, ref prevFilter); + + label = EditorGUI.BeginProperty(position, label, property); + + EditorGUI.BeginChangeCheck (); + + var index = property.stringValue == "-" || property.stringValue == "" ? terms_Contexts.Length - 1 : + property.stringValue == " " ? terms_Contexts.Length - 2 : + GetTermIndex(terms_Contexts, property.stringValue); + var newIndex = EditorGUI.Popup(position, label, index, terms_Contexts); + + if (EditorGUI.EndChangeCheck()) + { + property.stringValue = newIndex < 0 || newIndex == terms_Contexts.Length - 1 ? string.Empty : terms_Contexts[newIndex].text; + if (newIndex == terms_Contexts.Length - 1) + property.stringValue = "-"; + else + if (newIndex < 0 || newIndex == terms_Contexts.Length - 2) + property.stringValue = string.Empty; + else + property.stringValue = terms_Contexts[newIndex].text; + + EditorGUI.EndProperty(); + return true; + } + + EditorGUI.EndProperty(); + return false; + } + + static int GetTermIndex(GUIContent[] terms_Contexts, string term ) + { + for (int i = 0; i < terms_Contexts.Length; ++i) + if (terms_Contexts[i].text == term) + return i; + return -1; + } + + + static void UpdateTermsCache(LanguageSourceData source, string filter, ref GUIContent[] terms_Contexts, ref int framesBeforeUpdating, ref string prevFilter) + { + framesBeforeUpdating--; + if (terms_Contexts!=null && framesBeforeUpdating>0 && filter==prevFilter) + { + return; + } + framesBeforeUpdating = 60; + prevFilter = filter; + + var Terms = source == null ? LocalizationManager.GetTermsList() : source.GetTermsList(); + + if (string.IsNullOrEmpty(filter) == false) + { + Terms = Filter(Terms, filter); + } + + Terms.Sort(StringComparer.OrdinalIgnoreCase); + Terms.Add(""); + Terms.Add(""); + Terms.Add(""); + + terms_Contexts = DisplayOptions(Terms); + } + + private static List Filter(List terms, string filter) + { + var filtered = new List(); + for (var i = 0; i < terms.Count; i++) + { + var term = terms[i]; + if (term.Contains(filter)) + { + filtered.Add(term); + } + } + + return filtered; + } + + private static GUIContent[] DisplayOptions(IList terms) + { + var options = new GUIContent[terms.Count]; + for (var i = 0; i < terms.Count; i++) + { + options[i] = new GUIContent(terms[i]); + } + + return options; + } + } + + [CustomPropertyDrawer(typeof(LocalizedString))] + public class LocalizedStringDrawer : PropertyDrawer + { + GUIContent[] mTerms_Context; + int nFramesLeftBeforeUpdate; + string mPrevFilter; + + public override void OnGUI(Rect rect, SerializedProperty property, GUIContent label) + { + var termRect = rect; termRect.xMax -= 50; + var termProp = property.FindPropertyRelative("mTerm"); + TermsPopup_Drawer.ShowGUICached(termRect, termProp, label, null, "", ref mTerms_Context, ref nFramesLeftBeforeUpdate, ref mPrevFilter); + + var maskRect = rect; maskRect.xMin = maskRect.xMax - 30; + var termIgnoreRTL = property.FindPropertyRelative("mRTL_IgnoreArabicFix"); + var termConvertNumbers = property.FindPropertyRelative("mRTL_ConvertNumbers"); + var termDontLocalizeParams = property.FindPropertyRelative("m_DontLocalizeParameters"); + int mask = (termIgnoreRTL.boolValue ? 0 : 1) + + (termConvertNumbers.boolValue ? 0 : 2) + + (termDontLocalizeParams.boolValue ? 0 : 4); + + int newMask = EditorGUI.MaskField(maskRect, mask, new[] { "Arabic Fix", "Ignore Numbers in RTL", "Localize Parameters" }); + if (newMask != mask) + { + termIgnoreRTL.boolValue = (newMask & 1) == 0; + termConvertNumbers.boolValue = (newMask & 2) == 0; + termDontLocalizeParams.boolValue = (newMask & 4) == 0; + } + + var showRect = rect; showRect.xMin = termRect.xMax; showRect.xMax=maskRect.xMin; + bool enabled = GUI.enabled; + GUI.enabled = enabled & (!string.IsNullOrEmpty (termProp.stringValue) && termProp.stringValue!="-"); + if (GUI.Button (showRect, "?")) + { + var source = LocalizationManager.GetSourceContaining(termProp.stringValue); + LocalizationEditor.mKeyToExplore = termProp.stringValue; + Selection.activeObject = source.ownerObject; + } + GUI.enabled = enabled; + } + } +} diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/TermsPopup_Drawer.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/TermsPopup_Drawer.cs.meta new file mode 100644 index 00000000..0290190a --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Inspectors/TermsPopup_Drawer.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 51c22a426b92fa84cb6ca7b75176da8a +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Localization.meta b/popcorn/Assets/I2/Localization/Scripts/Editor/Localization.meta new file mode 100644 index 00000000..9972eb5f --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Localization.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8ad136296e8e6e14eaa2726ac1992b6c +folderAsset: yes +timeCreated: 1461137613 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor.cs b/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor.cs new file mode 100644 index 00000000..001b4498 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor.cs @@ -0,0 +1,308 @@ +using System.Collections.Generic; +using UnityEditor; +using UnityEditor.SceneManagement; +using UnityEngine; +using UnityEngine.SceneManagement; + +namespace I2.Loc +{ + public partial class LocalizationEditor + { + + #region Variables + + public enum eViewMode { ImportExport, Keys, Languages, Tools, References } + public static eViewMode mCurrentViewMode = eViewMode.Keys; + + public enum eSpreadsheetMode { Local, Google } + public eSpreadsheetMode mSpreadsheetMode = eSpreadsheetMode.Google; + + + public static string mLocalizationMsg = ""; + public static MessageType mLocalizationMessageType = MessageType.None; + + // These variables are for executing action from Unity Tests + public enum eTest_ActionType { None, Button_AddLanguageFromPopup, Button_AddLanguageManual, + Button_AddTerm_InTermsList, Button_AddSelectedTerms, + Button_RemoveSelectedTerms, Button_DeleteTerm, + Button_SelectTerms_All, Button_SelectTerms_None, Button_SelectTerms_Used, Button_SelectTerms_Missing, + Button_Term_Translate, Button_Term_TranslateAll, Button_Languages_TranslateAll, + Button_Assets_Add, Button_Assets_Replace, Button_Assets_Delete, + Button_GoogleSpreadsheet_RefreshList, Button_GoogleSpreadsheet_Export, Button_GoogleSpreadsheet_Import + } + public static eTest_ActionType mTestAction = eTest_ActionType.None; + public static object mTestActionArg, mTestActionArg2; + + #endregion + + #region Editor + + /*[MenuItem("Window/Localization", false)] + public static void OpenLocalizationEditor() + { + EditorWindow.GetWindow(false, "Localization", true); + }*/ + + #endregion + + #region GUI + + void InitializeStyles() + { + Style_ToolBar_Big = new GUIStyle(EditorStyles.toolbar); + Style_ToolBar_Big.fixedHeight = Style_ToolBar_Big.fixedHeight*1.5f; + + Style_ToolBarButton_Big = new GUIStyle(EditorStyles.toolbarButton); + Style_ToolBarButton_Big.fixedHeight = Style_ToolBarButton_Big.fixedHeight*1.5f; + } + + + void OnGUI_Main() + { + OnGUI_Warning_SourceInScene(); + OnGUI_Warning_SourceInsidePluginsFolder(); + OnGUI_Warning_SourceNotUpToDate(); + + var prevViewMode = mCurrentViewMode; + + GUILayout.BeginHorizontal(); + //OnGUI_ToggleEnumBig( "Spreadsheets", ref mCurrentViewMode, eViewMode.ImportExport, GUI.skin.GetStyle("CN EntryWarn").normal.background, "External Spreadsheet File or Service" ); + OnGUI_ToggleEnumBig( "Spreadsheets", ref mCurrentViewMode, eViewMode.ImportExport, null, "External Spreadsheet File or Service" ); + OnGUI_ToggleEnumBig( "Terms", ref mCurrentViewMode, eViewMode.Keys, null, null ); + OnGUI_ToggleEnumBig( "Languages", ref mCurrentViewMode, eViewMode.Languages, null, null ); + OnGUI_ToggleEnumBig( "Tools", ref mCurrentViewMode, eViewMode.Tools, null, null ); + OnGUI_ToggleEnumBig( "Assets", ref mCurrentViewMode, eViewMode.References, null, null ); + GUILayout.EndHorizontal(); + //GUILayout.Space(10); + + switch (mCurrentViewMode) + { + case eViewMode.ImportExport : OnGUI_ImportExport(); break; + case eViewMode.Keys : OnGUI_KeysList(); break; + case eViewMode.Languages : OnGUI_Languages(); break; + case eViewMode.Tools : OnGUI_Tools(prevViewMode != mCurrentViewMode); break; + case eViewMode.References : OnGUI_References(); break; + } + } + + void OnGUI_ImportExport() + { + eSpreadsheetMode OldMode = mSpreadsheetMode; + mSpreadsheetMode = (eSpreadsheetMode)GUITools.DrawShadowedTabs ((int)mSpreadsheetMode, new[]{"Local", "Google"}); + if (mSpreadsheetMode != OldMode) + ClearErrors(); + + GUITools.BeginContents(); + switch (mSpreadsheetMode) + { + case eSpreadsheetMode.Local : OnGUI_Spreadsheet_Local(); break; + case eSpreadsheetMode.Google : OnGUI_Spreadsheet_Google(); break; + } + GUITools.EndContents(false); + } + + void OnGUI_References() + { + EditorGUILayout.HelpBox("These are the assets that are referenced by the Terms and not in the Resources folder", MessageType.Info); + + bool canTest = Event.current.type == EventType.Repaint; + + var testAddObj = canTest && mTestAction == eTest_ActionType.Button_Assets_Add ? (Object)mTestActionArg : null; + var testReplaceIndx = canTest && mTestAction == eTest_ActionType.Button_Assets_Replace ? (int)mTestActionArg : -1; + var testReplaceObj = canTest && mTestAction == eTest_ActionType.Button_Assets_Replace ? (Object)mTestActionArg2 : null; + var testDeleteIndx = canTest && mTestAction == eTest_ActionType.Button_Assets_Delete ? (int)mTestActionArg : -1; + + bool changed = GUITools.DrawObjectsArray( mProp_Assets, false, false, false, testAddObj, testReplaceObj, testReplaceIndx, testDeleteIndx); + if (changed) + { + serializedObject.ApplyModifiedProperties(); + foreach (var obj in serializedObject.targetObjects) + (obj as LanguageSource).mSource.UpdateAssetDictionary(); + } + } + + #endregion + + #region Misc + + void OnGUI_ToggleEnumBig( string text, ref Enum currentMode, Enum newMode, Texture texture, string tooltip) { OnGUI_ToggleEnum( text, ref currentMode, newMode, texture, tooltip, Style_ToolBarButton_Big); } + void OnGUI_ToggleEnumSmall( string text, ref Enum currentMode, Enum newMode, Texture texture, string tooltip) { OnGUI_ToggleEnum( text, ref currentMode, newMode, texture, tooltip, EditorStyles.toolbarButton); } + void OnGUI_ToggleEnum( string text, ref Enum currentMode, Enum newMode, Texture texture, string tooltip, GUIStyle style) + { + GUI.changed = false; + if (GUILayout.Toggle( currentMode.Equals(newMode), new GUIContent(text, texture, tooltip), style, GUILayout.ExpandWidth(true))) + { + currentMode = newMode; + if (GUI.changed) + ClearErrors(); + } + } + + int OnGUI_FlagToogle( string Text, string tooltip, int flags, int bit ) + { + bool State = (flags & bit)>0; + bool NewState = GUILayout.Toggle(State, new GUIContent(Text, tooltip), "toolbarbutton"); + if (State!=NewState) + { + if (!NewState && flags==bit) + return flags; + + flags = NewState ? flags | bit : flags & ~bit; + } + + return flags; + } + + void OnGUI_SelectableToogleListItem( string Element, ref List Selections, string Style ) + { + bool WasEnabled = Selections.Contains(Element); + bool IsEnabled = GUILayout.Toggle( WasEnabled, "", Style, GUILayout.ExpandWidth(false) ); + + if (IsEnabled && !WasEnabled) + Selections.Add(Element); + else + if (!IsEnabled && WasEnabled) + Selections.Remove(Element); + } + + void OnGUI_SelectableToogleListItem( Rect rect, string Element, ref List Selections, string Style ) + { + bool WasEnabled = Selections.Contains(Element); + bool IsEnabled = GUI.Toggle( rect, WasEnabled, "", Style ); + + if (IsEnabled && !WasEnabled) + Selections.Add(Element); + else + if (!IsEnabled && WasEnabled) + Selections.Remove(Element); + } + + static bool InTestAction( eTest_ActionType testType ) + { + return mTestAction == testType && Event.current.type == EventType.Repaint; + } + static bool TestButton(eTest_ActionType action, string text, GUIStyle style, params GUILayoutOption[] options) + { + return GUILayout.Button(text, style, options) || mTestAction == action && Event.current.type == EventType.Repaint; + } + + static bool TestButtonArg(eTest_ActionType action, object arg, string text, GUIStyle style, params GUILayoutOption[] options) + { + return GUILayout.Button(text, style, options) || mTestAction == action && (mTestActionArg==null || mTestActionArg.Equals(arg)) && Event.current.type == EventType.Repaint; + } + + + static bool TestButton(eTest_ActionType action, GUIContent text, GUIStyle style, params GUILayoutOption[] options) + { + return GUILayout.Button(text, style, options) || mTestAction == action && Event.current.type == EventType.Repaint; + } + + static bool TestButtonArg(eTest_ActionType action, object arg, GUIContent text, GUIStyle style, params GUILayoutOption[] options) + { + return GUILayout.Button(text, style, options) || mTestAction == action && (mTestActionArg == null || mTestActionArg.Equals(arg)) && Event.current.type == EventType.Repaint; + } + + #endregion + + #region Error Management + + static void OnGUI_ShowMsg() + { + if (!string.IsNullOrEmpty(mLocalizationMsg)) + { + GUILayout.BeginHorizontal(); + EditorGUILayout.HelpBox(mLocalizationMsg, mLocalizationMessageType); + + GUILayout.Space(-5); + GUILayout.BeginVertical(GUILayout.Width(15), GUILayout.ExpandHeight(false)); + GUILayout.Space(15); + if (GUILayout.Button("X", "ToolbarSeachCancelButton", GUILayout.ExpandWidth(false))) + ClearErrors(); + GUILayout.EndVertical(); + GUILayout.EndHorizontal(); + GUILayout.Space(8); + } + } + + static void ShowError ( string Error, bool ShowInConsole = true ) { ShowMessage ( Error, MessageType.Error, ShowInConsole ); } + static void ShowInfo ( string Msg, bool ShowInConsole = false ) { ShowMessage ( Msg, MessageType.Info, ShowInConsole ); } + static void ShowWarning( string Msg, bool ShowInConsole = true) { ShowMessage ( Msg, MessageType.Warning, ShowInConsole ); } + + static void ShowMessage( string Msg, MessageType msgType, bool ShowInConsole ) + { + if (string.IsNullOrEmpty(Msg)) + Msg = string.Empty; + + mLocalizationMsg = Msg; + mLocalizationMessageType = msgType; + if (ShowInConsole) + { + switch (msgType) + { + case MessageType.Error : Debug.LogError(Msg); break; + case MessageType.Warning : Debug.LogWarning(Msg); break; + default : Debug.Log(Msg); break; + } + } + } + + + public static void ClearErrors() + { + GUI.FocusControl(null); + + mLocalizationMsg = string.Empty; + } + + #endregion + + #region Unity Version branching + + public static string Editor_GetCurrentScene() + { + #if UNITY_4_6 || UNITY_4_7 || UNITY_4_8 || UNITY_4_9 || UNITY_5_0 || UNITY_5_1 || UNITY_5_2 + return EditorApplication.currentScene; + #else + return SceneManager.GetActiveScene().path; + #endif + } + + public static void Editor_MarkSceneDirty() + { + #if UNITY_5_3 || UNITY_5_3_OR_NEWER + EditorSceneManager.MarkSceneDirty(SceneManager.GetActiveScene()); + #else + EditorApplication.MarkSceneDirty(); + #endif + } + + public static void Editor_SaveScene(bool force=false) + { + if (force) + Editor_MarkSceneDirty(); + + #if UNITY_4_6 || UNITY_4_7 || UNITY_4_8 || UNITY_4_9 || UNITY_5_0 || UNITY_5_1 || UNITY_5_2 + EditorApplication.SaveScene (); + #else + EditorSceneManager.SaveOpenScenes(); + #endif + } + + public static void Editor_OpenScene( string sceneName ) + { +#if UNITY_4_6 || UNITY_4_7 || UNITY_4_8 || UNITY_4_9 || UNITY_5_0 || UNITY_5_1 || UNITY_5_2 + if (string.IsNullOrEmpty(sceneName)) + EditorApplication.NewEmptyScene(); + else + EditorApplication.OpenScene(sceneName); +#else + if (string.IsNullOrEmpty(sceneName)) + EditorSceneManager.NewScene(NewSceneSetup.DefaultGameObjects, NewSceneMode.Single); + else + EditorSceneManager.OpenScene(sceneName); + #endif + } + + #endregion + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor.cs.meta new file mode 100644 index 00000000..71ed09b3 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ffd53aaaf6936407d8b087583b0626e9 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Languages.cs b/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Languages.cs new file mode 100644 index 00000000..087c6423 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Languages.cs @@ -0,0 +1,477 @@ +using System.Collections.Generic; +using System.Linq; +using UnityEditor; +using UnityEngine; + +namespace I2.Loc +{ + public partial class LocalizationEditor + { + #region Variables + private List mTranslationTerms = new List(); + private Dictionary mTranslationRequests = new Dictionary (); + private bool mAppNameTerm_Expanded; + + private List mLanguageCodePopupList; + + #endregion + + void OnGUI_Languages() + { + //GUILayout.Space(5); + + OnGUI_ShowMsg(); + + OnGUI_LanguageList(); + + OnGUI_StoreIntegration(); + + GUILayout.BeginHorizontal(); + GUILayout.Label(new GUIContent("On Missing Translation:", "What should happen IN-GAME when a term is not yet translated to the current language?"), EditorStyles.boldLabel, GUILayout.Width(200)); + GUILayout.BeginVertical(); + GUILayout.Space(7); + EditorGUILayout.PropertyField(mProp_OnMissingTranslation, GUITools.EmptyContent, GUILayout.Width(165)); + GUILayout.EndVertical(); + GUILayout.EndHorizontal(); + + GUILayout.BeginHorizontal(); + GUILayout.Label(new GUIContent("Unload Languages At Runtime:", "When playing the game, the plugin will unload all unused languages and only load them when needed"), EditorStyles.boldLabel, GUILayout.Width(200)); + GUILayout.BeginVertical(); + GUILayout.Space(7); + EditorGUILayout.PropertyField(mProp_AllowUnloadingLanguages, GUITools.EmptyContent, GUILayout.Width(165)); + GUILayout.EndVertical(); + GUILayout.EndHorizontal(); + + + + + string firstLanguage = ""; + if (mLanguageSource.mLanguages.Count > 0) + firstLanguage = " (" + mLanguageSource.mLanguages [0].Name + ")"; + + GUILayout.BeginHorizontal(); + GUILayout.Label(new GUIContent("Default Language:", "When the game starts this is the language that will be used until the player manually selects a language"), EditorStyles.boldLabel, GUILayout.Width(160)); + GUILayout.BeginVertical(); + GUILayout.Space(7); + + mProp_IgnoreDeviceLanguage.boolValue = EditorGUILayout.Popup(mProp_IgnoreDeviceLanguage.boolValue?1:0, new[]{"Device Language", "First in List"+firstLanguage}, GUILayout.ExpandWidth(true))==1; + GUILayout.EndVertical(); + GUILayout.EndHorizontal(); + } + + #region GUI Languages + + void OnGUI_LanguageList() + { + GUILayout.BeginHorizontal(EditorStyles.toolbar); + GUILayout.FlexibleSpace(); + GUILayout.Label ("Languages:", EditorStyles.miniLabel, GUILayout.ExpandWidth(false)); + GUILayout.FlexibleSpace(); + GUILayout.Label ("Code:", EditorStyles.miniLabel); + GUILayout.Space(170); + GUILayout.EndHorizontal(); + + //--[ Language List ]-------------------------- + + int IndexLanguageToDelete = -1; + int LanguageToMoveUp = -1; + int LanguageToMoveDown = -1; + GUI.backgroundColor = Color.Lerp(GUITools.LightGray, Color.white, 0.5f); + mScrollPos_Languages = GUILayout.BeginScrollView( mScrollPos_Languages, LocalizeInspector.GUIStyle_OldTextArea, GUILayout.MinHeight (200), /*GUILayout.MaxHeight(Screen.height),*/ GUILayout.ExpandHeight(false)); + GUI.backgroundColor = Color.white; + + if (mLanguageCodePopupList == null || mLanguageCodePopupList.Count==0) + { + mLanguageCodePopupList = GoogleLanguages.GetLanguagesForDropdown("", ""); + mLanguageCodePopupList.Sort(); + mLanguageCodePopupList.Insert(0, string.Empty); + } + + for (int i=0, imax=mProp_Languages.arraySize; i c.Contains(currentCode))); + EditorGUI.BeginChangeCheck(); + Index = EditorGUILayout.Popup(Index, mLanguageCodePopupList.ToArray(), EditorStyles.toolbarPopup, GUILayout.Width(60)); + if (EditorGUI.EndChangeCheck() && Index >= 0) + { + currentCode = mLanguageCodePopupList[Index]; + int i0 = currentCode.IndexOf("["); + int i1 = currentCode.IndexOf("]"); + if (i0 >= 0 && i1 > i0) + Prop_LangCode.stringValue = currentCode.Substring(i0 + 1, i1 - i0 - 1); + else + Prop_LangCode.stringValue = string.Empty; + } + var rect = GUILayoutUtility.GetLastRect(); + GUI.Label(rect, Prop_LangCode.stringValue, EditorStyles.toolbarPopup); + } + else + { + GUILayout.Label(Prop_LangCode.stringValue, EditorStyles.toolbarPopup, GUILayout.Width(60)); + } + + GUILayout.EndHorizontal(); + + GUI.enabled = i0; + if (GUILayout.Button( "\u25B2", EditorStyles.toolbarButton, GUILayout.Width(18))) LanguageToMoveUp = i; + + GUI.enabled = true; + if (GUILayout.Button( new GUIContent("Show", "Preview all localizations into this language"), EditorStyles.toolbarButton, GUILayout.Width(35))) + { + LocalizationManager.SetLanguageAndCode( LanName, Prop_LangCode.stringValue, false, true); + } + + if (TestButtonArg( eTest_ActionType.Button_Languages_TranslateAll, i, new GUIContent("Translate", "Translate all empty terms"), EditorStyles.toolbarButton, GUILayout.ExpandWidth(false))) + { + GUITools.DelayedCall(() => TranslateAllToLanguage(LanName)); + } + GUI.enabled = true; + GUI.color = Color.white; + + EditorGUI.BeginChangeCheck(); + isLanguageEnabled = EditorGUILayout.Toggle(isLanguageEnabled, GUILayout.Width(15)); + + var r = GUILayoutUtility.GetLastRect(); + GUI.Label(r, new GUIContent("", "Enable/Disable the language.\nDisabled languages can be used to store data values or to avoid showing Languages that are stil under development")); + + if (EditorGUI.EndChangeCheck()) + { + Prop_Flags.intValue = (Prop_Flags.intValue & ~(int)eLanguageDataFlags.DISABLED) | (isLanguageEnabled ? 0 : (int)eLanguageDataFlags.DISABLED); + } + + GUILayout.EndHorizontal(); + } + + GUILayout.EndScrollView(); + + OnGUI_AddLanguage( mProp_Languages ); + + if (mConnection_WWW!=null || mConnection_Text.Contains("Translating")) + { + // Connection Status Bar + int time = (int)(Time.realtimeSinceStartup % 2 * 2.5); + string Loading = mConnection_Text + ".....".Substring(0, time); + GUI.color = Color.gray; + GUILayout.BeginHorizontal(LocalizeInspector.GUIStyle_OldTextArea); + GUILayout.Label (Loading, EditorStyles.miniLabel); + GUI.color = Color.white; + if (GUILayout.Button("Cancel", EditorStyles.toolbarButton, GUILayout.ExpandWidth(false))) + { + GoogleTranslation.CancelCurrentGoogleTranslations (); + StopConnectionWWW(); + } + GUILayout.EndHorizontal(); + Repaint(); + } + + if (IndexLanguageToDelete>=0) + { + if (EditorUtility.DisplayDialog ("Confirm delete", "Are you sure you want to delete the selected language", "Yes", "Cancel")) + { + mLanguageSource.RemoveLanguage (mLanguageSource.mLanguages [IndexLanguageToDelete].Name); + serializedObject.Update (); + ParseTerms (true, false, false); + } + } + + if (LanguageToMoveUp>=0) SwapLanguages( LanguageToMoveUp, LanguageToMoveUp-1 ); + if (LanguageToMoveDown>=0) SwapLanguages( LanguageToMoveDown, LanguageToMoveDown+1 ); + } + + void SwapLanguages( int iFirst, int iSecond ) + { + serializedObject.ApplyModifiedProperties(); + LanguageSourceData Source = mLanguageSource; + + SwapValues( Source.mLanguages, iFirst, iSecond ); + foreach (TermData termData in Source.mTerms) + { + SwapValues ( termData.Languages, iFirst, iSecond ); + SwapValues ( termData.Flags, iFirst, iSecond ); + } + serializedObject.Update(); + } + + void SwapValues( List mList, int Index1, int Index2 ) + { + LanguageData temp = mList[Index1]; + mList[Index1] = mList[Index2]; + mList[Index2] = temp; + } + void SwapValues( string[] mList, int Index1, int Index2 ) + { + string temp = mList[Index1]; + mList[Index1] = mList[Index2]; + mList[Index2] = temp; + } + void SwapValues( byte[] mList, int Index1, int Index2 ) + { + byte temp = mList[Index1]; + mList[Index1] = mList[Index2]; + mList[Index2] = temp; + } + + + void OnGUI_AddLanguage( SerializedProperty Prop_Languages) + { + //--[ Add Language Upper Toolbar ]----------------- + + GUILayout.BeginVertical(); + GUILayout.BeginHorizontal(); + + GUILayout.BeginHorizontal(EditorStyles.toolbar); + mLanguages_NewLanguage = EditorGUILayout.TextField("", mLanguages_NewLanguage, EditorStyles.toolbarTextField, GUILayout.ExpandWidth(true)); + GUILayout.EndHorizontal(); + + GUI.enabled = !string.IsNullOrEmpty (mLanguages_NewLanguage); + if (TestButton(eTest_ActionType.Button_AddLanguageManual,"Add", EditorStyles.toolbarButton, GUILayout.Width(50))) + { + Prop_Languages.serializedObject.ApplyModifiedProperties(); + mLanguageSource.AddLanguage( mLanguages_NewLanguage, GoogleLanguages.GetLanguageCode(mLanguages_NewLanguage) ); + Prop_Languages.serializedObject.Update(); + mLanguages_NewLanguage = ""; + GUI.FocusControl(string.Empty); + } + GUI.enabled = true; + + GUILayout.EndHorizontal(); + + + //--[ Add Language Bottom Toolbar ]----------------- + + GUILayout.BeginHorizontal(); + + //-- Language Dropdown ----------------- + string CodesToExclude = string.Empty; + foreach (var LanData in mLanguageSource.mLanguages) + CodesToExclude = string.Concat(CodesToExclude, "[", LanData.Code, "]"); + + List Languages = GoogleLanguages.GetLanguagesForDropdown(mLanguages_NewLanguage, CodesToExclude); + + GUI.changed = false; + int index = EditorGUILayout.Popup(0, Languages.ToArray(), EditorStyles.toolbarDropDown); + + if (GUI.changed && index>=0) + { + mLanguages_NewLanguage = GoogleLanguages.GetFormatedLanguageName( Languages[index] ); + } + + + if (TestButton(eTest_ActionType.Button_AddLanguageFromPopup, "Add", EditorStyles.toolbarButton, GUILayout.Width(50)) && index>=0) + { + Prop_Languages.serializedObject.ApplyModifiedProperties(); + mLanguages_NewLanguage = GoogleLanguages.GetFormatedLanguageName(Languages[index]); + + if (!string.IsNullOrEmpty(mLanguages_NewLanguage)) + mLanguageSource.AddLanguage(mLanguages_NewLanguage, GoogleLanguages.GetLanguageCode(mLanguages_NewLanguage)); + Prop_Languages.serializedObject.Update(); + + mLanguages_NewLanguage = ""; + GUI.FocusControl(string.Empty); + } + + GUILayout.EndHorizontal(); + GUILayout.EndVertical(); + GUI.color = Color.white; + } + + + void TranslateAllToLanguage (string lanName) + { + if (!GoogleTranslation.CanTranslate ()) + { + ShowError ("WebService is not set correctly or needs to be reinstalled"); + return; + } + ClearErrors(); + int LanIndex = mLanguageSource.GetLanguageIndex (lanName); + string code = mLanguageSource.mLanguages [LanIndex].Code; + string googleCode = GoogleLanguages.GetGoogleLanguageCode(code); + if (string.IsNullOrEmpty(googleCode)) + { + ShowError("Language '" + code + "' is not supported by google translate"); + return; + } + googleCode = code; + + mTranslationTerms.Clear (); + mTranslationRequests.Clear (); + foreach (var termData in mLanguageSource.mTerms) + { + if (termData.TermType != eTermType.Text) + continue; + + if (!string.IsNullOrEmpty(termData.Languages[LanIndex])) + continue; + + string sourceCode, sourceText; + FindTranslationSource( LanguageSourceData.GetKeyFromFullTerm(termData.Term), termData, code, null, out sourceText, out sourceCode ); + + mTranslationTerms.Add (termData.Term); + + GoogleTranslation.CreateQueries(sourceText, sourceCode, googleCode, mTranslationRequests); // can split plurals into several queries + } + + if (mTranslationRequests.Count == 0) + { + StopConnectionWWW (); + return; + } + + mConnection_WWW = null; + mConnection_Text = "Translating"; if (mTranslationRequests.Count > 1) mConnection_Text += " (" + mTranslationRequests.Count + ")"; + mConnection_Callback = null; + //EditorApplication.update += CheckForConnection; + + GoogleTranslation.Translate (mTranslationRequests, OnLanguageTranslated); + } + + void OnLanguageTranslated( Dictionary requests, string Error ) + { + //Debug.Log (Result); + + //if (Result.Contains("Service invoked too many times")) + //{ + // TimeStartTranslation = EditorApplication.timeSinceStartup + 1; + // EditorApplication.update += DelayedStartTranslation; + // mConnection_Text = "Translating (" + mTranslationRequests.Count + ")"; + // return; + //} + + //if (!string.IsNullOrEmpty(Error))/* || !Result.Contains("")*/ + //{ + // Debug.LogError("WEB ERROR: " + Error); + // ShowError ("Unable to access Google or not valid request"); + // return; + //} + + ClearErrors(); + StopConnectionWWW(); + + if (!string.IsNullOrEmpty(Error)) + { + ShowError (Error); + return; + } + + if (requests.Values.Count == 0) + return; + + var langCode = requests.Values.First().TargetLanguagesCode [0]; + //langCode = GoogleLanguages.GetGoogleLanguageCode(langCode); + int langIndex = mLanguageSource.GetLanguageIndexFromCode (langCode, false); + //if (langIndex >= 0) + { + foreach (var term in mTranslationTerms) + { + var termData = mLanguageSource.GetTermData(term); + if (termData == null) + continue; + if (termData.TermType != eTermType.Text) + continue; + //if (termData.Languages.Length <= langIndex) + // continue; + + string sourceCode, sourceText; + FindTranslationSource(LanguageSourceData.GetKeyFromFullTerm(termData.Term), termData, langCode, null, out sourceText, out sourceCode); + + string result = GoogleTranslation.RebuildTranslation(sourceText, mTranslationRequests, langCode); // gets the result from google and rebuilds the text from multiple queries if its is plurals + + termData.Languages[langIndex] = result; + } + } + + mTranslationTerms.Clear (); + mTranslationRequests.Clear (); + StopConnectionWWW (); + } + + #endregion + + #region Store Integration + + void OnGUI_StoreIntegration() + { + GUIStyle lstyle = new GUIStyle (EditorStyles.label); + lstyle.richText = true; + + GUILayout.BeginHorizontal (); + GUILayout.Label (new GUIContent("Store Integration:", "Setups the stores to detect that the game has localization, Android adds strings.xml for each language. IOS modifies the Info.plist"), EditorStyles.boldLabel, GUILayout.Width(160)); + GUILayout.FlexibleSpace(); + + GUILayout.Label( new GUIContent( "\u2713 IOS", "Setups the stores to show in iTunes and the Appstore all the languages that this app supports, also localizes the app name if available" ), lstyle, GUILayout.Width( 90 ) ); + GUILayout.Label( new GUIContent( "\u2713 Android", "Setups the stores to show in GooglePlay all the languages this app supports, also localizes the app name if available" ), lstyle, GUILayout.Width( 90 ) ); + GUILayout.EndHorizontal (); + + GUILayout.BeginHorizontal(); + mAppNameTerm_Expanded = GUILayout.Toggle(mAppNameTerm_Expanded, new GUIContent( "App Name translations:", "How should the game be named in the devices based on their language" ), EditorStyles.foldout, GUILayout.Width( 160 ) ); + + GUILayout.Label("", GUILayout.ExpandWidth(true)); + var rect = GUILayoutUtility.GetLastRect(); + TermsPopup_Drawer.ShowGUI( rect, mProp_AppNameTerm, GUITools.EmptyContent, mLanguageSource); + + if (GUILayout.Button("New Term", EditorStyles.miniButton, GUILayout.ExpandWidth(false))) + { + AddLocalTerm("App_Name"); + mProp_AppNameTerm.stringValue = "App_Name"; + mAppNameTerm_Expanded = true; + } + GUILayout.EndHorizontal(); + + if (mAppNameTerm_Expanded) + { + GUILayout.BeginHorizontal(); + GUILayout.Space(10); + + GUILayout.BeginVertical("Box"); + var termName = mProp_AppNameTerm.stringValue; + if (!string.IsNullOrEmpty(termName)) + { + var termData = LocalizationManager.GetTermData(termName); + if (termData != null) + OnGUI_Keys_Languages(mProp_AppNameTerm.stringValue, ref termData, null, true, mLanguageSource); + } + GUILayout.Space(10); + + GUILayout.BeginHorizontal(); + GUILayout.Label("Default App Name:", lstyle, GUITools.DontExpandWidth); + GUILayout.Label(Application.productName); + GUILayout.EndHorizontal(); + GUILayout.EndVertical(); + + GUILayout.EndHorizontal(); + } + } + + #endregion + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Languages.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Languages.cs.meta new file mode 100644 index 00000000..375ebe73 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Languages.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 304783c1e95d94a598aecd17728c8556 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Spreadsheet_Google.cs b/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Spreadsheet_Google.cs new file mode 100644 index 00000000..ee2a4d14 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Spreadsheet_Google.cs @@ -0,0 +1,717 @@ +using System; +using System.Collections.Generic; +using System.Text; +using I2.Loc.SimpleJSON; +using UnityEditor; +using UnityEngine; +using UnityEngine.Networking; + +namespace I2.Loc +{ + public partial class LocalizationEditor + { + #region Variables + + public static Dictionary mGoogleSpreadsheets = new Dictionary(StringComparer.Ordinal); + + public UnityWebRequest mConnection_WWW; + + delegate void fnConnectionCallback(string Result, string Error); + event fnConnectionCallback mConnection_Callback; + //float mConnection_TimeOut; + + string mConnection_Text = string.Empty; + + string mWebService_Status; + + #endregion + + #region GUI + + void OnGUI_Spreadsheet_Google() + { + GUILayout.Space(20); + +#if UNITY_WEBPLAYER + mConnection_Text = string.Empty; + EditorGUILayout.HelpBox("Google Synchronization is not supported when in WebPlayer mode." + mConnection_Text, MessageType.Info); + + mProp_GoogleUpdateFrequency.enumValueIndex = mProp_GoogleUpdateFrequency.enumValueIndex; // to avoid the warning "unused" + mProp_GoogleUpdateSynchronization.enumValueIndex = mProp_GoogleUpdateSynchronization.enumValueIndex; +#else + + OnGUI_GoogleCredentials(); + + OnGUI_ShowMsg(); + + if (string.IsNullOrEmpty(mProp_Google_WebServiceURL.stringValue)) + return; + + if (mWebService_Status == "Offline") + return; + + GUILayout.Space(20); + + GUI.backgroundColor = Color.Lerp(Color.gray, Color.white, 0.5f); + GUILayout.BeginVertical(LocalizeInspector.GUIStyle_OldTextArea, GUILayout.Height (1)); + GUI.backgroundColor = Color.white; + GUILayout.Space(10); + + GUILayout.BeginHorizontal(); + GUILayout.Label(new GUIContent(" Password", "This should match the value of the LocalizationPassword variable in the WebService Script in your Google Drive"), GUILayout.Width(108)); + mProp_Google_Password.stringValue = EditorGUILayout.TextField(mProp_Google_Password.stringValue, GUILayout.ExpandWidth(true)); + GUILayout.EndHorizontal(); + + OnGUI_GoogleSpreadsheetsInGDrive(); + GUILayout.EndVertical(); + + if (mConnection_WWW!=null) + { + // Connection Status Bar + int time = (int)(Time.realtimeSinceStartup % 2 * 2.5); + string Loading = mConnection_Text + ".....".Substring(0, time); + GUI.color = Color.gray; + GUILayout.BeginHorizontal(LocalizeInspector.GUIStyle_OldTextArea); + GUILayout.Label (Loading, EditorStyles.miniLabel); + GUI.color = Color.white; + if (GUILayout.Button("Cancel", EditorStyles.toolbarButton, GUILayout.ExpandWidth(false))) + StopConnectionWWW(); + GUILayout.EndHorizontal(); + Repaint(); + } + //else + // GUILayout.Space(10); + + + EditorGUI.BeginChangeCheck(); + GUILayout.Space(5); + GUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + LanguageSourceData.eGoogleUpdateFrequency GoogleUpdateFrequency = (LanguageSourceData.eGoogleUpdateFrequency)mProp_GoogleUpdateFrequency.enumValueIndex; + GoogleUpdateFrequency = (LanguageSourceData.eGoogleUpdateFrequency)EditorGUILayout.EnumPopup("Auto Update Frequency", GoogleUpdateFrequency, GUILayout.ExpandWidth(true)); + if (EditorGUI.EndChangeCheck()) + { + mProp_GoogleUpdateFrequency.enumValueIndex = (int)GoogleUpdateFrequency; + } + + GUILayout.Space(10); + GUILayout.Label("Delay:"); + mProp_GoogleUpdateDelay.floatValue = EditorGUILayout.FloatField(mProp_GoogleUpdateDelay.floatValue, GUILayout.Width(30)); + GUILayout.Label("secs"); + + GUILayout.EndHorizontal(); + + GUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + var GoogleInEditorCheckFrequency = (LanguageSourceData.eGoogleUpdateFrequency)mProp_GoogleInEditorCheckFrequency.enumValueIndex; + EditorGUI.BeginChangeCheck(); + GoogleInEditorCheckFrequency = (LanguageSourceData.eGoogleUpdateFrequency)EditorGUILayout.EnumPopup(new GUIContent("In-Editor Check Frequency", "How often the editor will verify that the Spreadsheet is up-to-date with the LanguageSource. Having un-synchronized Spreadsheets can lead to issues when playing in the device as the download data will override the one in the build"), GoogleInEditorCheckFrequency, GUILayout.ExpandWidth(false)); + if (EditorGUI.EndChangeCheck()) + { + mProp_GoogleInEditorCheckFrequency.enumValueIndex = (int)GoogleInEditorCheckFrequency; + } + GUILayout.Space(122); + GUILayout.EndHorizontal(); + + GUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + GUILayout.Label("Update Synchronization", GUILayout.Width(180)); + EditorGUI.BeginChangeCheck(); + LanguageSourceData.eGoogleUpdateSynchronization GoogleUpdateSynchronization = (LanguageSourceData.eGoogleUpdateSynchronization)mProp_GoogleUpdateSynchronization.enumValueIndex; + GoogleUpdateSynchronization = (LanguageSourceData.eGoogleUpdateSynchronization)EditorGUILayout.EnumPopup(GoogleUpdateSynchronization, GUILayout.Width(178)); + if (EditorGUI.EndChangeCheck()) + { + mProp_GoogleUpdateSynchronization.enumValueIndex = (int)GoogleUpdateSynchronization; + } + GUILayout.EndHorizontal(); + + GUILayout.Space(5); + + GUI.changed = false; + bool OpenDataSourceAfterExport = EditorPrefs.GetBool("I2Loc OpenDataSourceAfterExport", true); + + GUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + OpenDataSourceAfterExport = GUILayout.Toggle(OpenDataSourceAfterExport, "Open Spreadsheet after Export"); + GUILayout.FlexibleSpace(); + GUILayout.EndHorizontal(); + + if (GUI.changed) + { + GUI.changed = false; + EditorPrefs.SetBool("I2Loc OpenDataSourceAfterExport", OpenDataSourceAfterExport); + } + +#endif + + GUILayout.Space(5); + } + + void OnGUI_GoogleCredentials() + { + GUI.enabled = mConnection_WWW==null; + + GUI.changed = false; + + string WebServiceHelp = "The web service is a script running on the google drive where the spreadsheet you want to use is located.\nThat script allows the game to synchronize the localization even after the game is published."; + + GUILayout.BeginHorizontal(); + GUILayout.Label (new GUIContent("Web Service URL:", WebServiceHelp), GUILayout.Width(110)); + + GUI.SetNextControlName ("WebServiceURL"); + mProp_Google_WebServiceURL.stringValue = EditorGUILayout.TextField(mProp_Google_WebServiceURL.stringValue); + + if (!string.IsNullOrEmpty(mWebService_Status)) + { + if (mWebService_Status=="Online") + { + GUI.color = Color.green; + GUILayout.Label( "", GUILayout.Width(17)); + Rect r = GUILayoutUtility.GetLastRect(); r.xMin += 3; r.yMin-= 3; r.xMax+= 2; r.yMax+=2; + GUI.Label( r, new GUIContent("\u2713", "Online"), EditorStyles.whiteLargeLabel); + GUI.color = Color.white; + } + else + if (mWebService_Status=="Offline") + { + GUI.color = Color.red; + GUILayout.Label( "", GUILayout.Width(17)); + Rect r = GUILayoutUtility.GetLastRect(); r.xMin += 3; r.yMin-= 3; r.xMax+= 2; r.yMax+=2; + GUI.Label( r, new GUIContent("\u2717", mWebService_Status), EditorStyles.whiteLargeLabel); + GUI.color = Color.white; + } + else + if (mWebService_Status=="UnsupportedVersion") + { + Rect rect = GUILayoutUtility.GetLastRect(); + float Width = 15; + rect.xMin = rect.xMax+1; + rect.xMax = rect.xMin + rect.height; + GUITools.DrawSkinIcon(rect, "CN EntryWarnIcon", "CN EntryWarn"); + GUI.Label(rect, new GUIContent("\u2717", "The current Google WebService is not supported.\nPlease, delete the WebService from the Google Drive and Install the latest version.")); + GUILayout.Space (Width); + } + } + GUILayout.EndHorizontal(); + + GUILayout.BeginHorizontal(); + GUILayout.Space (118); + if (GUILayout.Button(new GUIContent("Install", "This opens the Web Service Script and shows you steps to install and authorize it on your Google Drive"), EditorStyles.toolbarButton)) + { + ClearErrors(); + Application.OpenURL("https://script.google.com/d/1zcsLSmq3Oddd8AsLuoKNDG1Y0eYBOHzyvGT7v94u1oN6igmsZb_PJzEm/newcopy"); // V5 + //Application.OpenURL("https://goo.gl/RBCO0o"); // V4:https://script.google.com/d/1T7e5_40NcgRyind-yeg4PAkHz9TNZJ22F4RcbOvCpAs03JNf1vKNNTZB/newcopy + //Application.OpenURL("https://goo.gl/wFSbv2");// V3:https://script.google.com/d/1CxQDSXflsXRaH3M7xGfrIDrFwOIHWPsYTWi4mRZ_k77nyIInTgIk63Kd/newcopy"); + } + if (GUILayout.Button("Verify", EditorStyles.toolbarButton)) + { + ClearErrors(); + VerifyGoogleService(mProp_Google_WebServiceURL.stringValue); + GUI.changed = false; + } + GUILayout.EndHorizontal(); + + + if (string.IsNullOrEmpty(mProp_Google_WebServiceURL.stringValue)) + { + EditorGUILayout.HelpBox(WebServiceHelp, MessageType.Info); + } + + if (GUI.changed) + { + if (string.IsNullOrEmpty(mProp_Google_WebServiceURL.stringValue)) + { + mProp_Google_SpreadsheetKey.stringValue = string.Empty; + mProp_Google_SpreadsheetName.stringValue = string.Empty; + } + + + // If the web service changed then clear the cached spreadsheet keys + mGoogleSpreadsheets.Clear(); + + GUI.changed = false; + ClearErrors(); + } + GUI.enabled = true; + } + + void OnGUI_GoogleSpreadsheetsInGDrive() + { + GUI.enabled = mConnection_WWW==null; + + string[] Spreadsheets; + string[] SpreadsheetsKey; + if (mGoogleSpreadsheets.Count>0 || string.IsNullOrEmpty(mProp_Google_SpreadsheetKey.stringValue)) + { + Spreadsheets = new List(mGoogleSpreadsheets.Keys).ToArray(); + SpreadsheetsKey = new List(mGoogleSpreadsheets.Values).ToArray(); + } + else + { + Spreadsheets = new[]{mProp_Google_SpreadsheetName.stringValue ?? string.Empty}; + SpreadsheetsKey = new[]{mProp_Google_SpreadsheetKey.stringValue ?? string.Empty}; + } + int mSpreadsheetIndex = Array.IndexOf(SpreadsheetsKey, mProp_Google_SpreadsheetKey.stringValue); + + //--[ Spreadsheets ]------------------ + GUILayout.BeginHorizontal(); + GUILayout.Space(10); + GUILayout.Label ("In Google Drive:", GUILayout.Width(100)); + + GUI.changed = false; + GUI.enabled = Spreadsheets != null && Spreadsheets.Length>0; + mSpreadsheetIndex = EditorGUILayout.Popup(mSpreadsheetIndex, Spreadsheets, EditorStyles.toolbarPopup); + if (GUI.changed && mSpreadsheetIndex >= 0) + { + mProp_Google_SpreadsheetKey.stringValue = SpreadsheetsKey[mSpreadsheetIndex]; + mProp_Google_SpreadsheetName.stringValue = Spreadsheets[mSpreadsheetIndex]; + GUI.changed = false; + } + GUI.enabled = true; + + GUI.enabled = !string.IsNullOrEmpty(mProp_Google_SpreadsheetKey.stringValue) && mConnection_WWW==null; + if (GUILayout.Button("X", EditorStyles.toolbarButton,GUILayout.ExpandWidth(false))) + mProp_Google_SpreadsheetKey.stringValue = string.Empty; + GUI.enabled = true; + GUILayout.Space(10); + GUILayout.EndHorizontal(); + + GUILayout.Space(2); + + //--[ Spreadsheets Operations ]------------------ + GUILayout.BeginHorizontal(); + GUILayout.Space(114); + if (GUILayout.Button("New", EditorStyles.toolbarButton,GUILayout.ExpandWidth(true))) + Google_NewSpreadsheet(); + + GUI.enabled = !string.IsNullOrEmpty(mProp_Google_SpreadsheetKey.stringValue) && mConnection_WWW==null; + if (GUILayout.Button("Open", EditorStyles.toolbarButton,GUILayout.ExpandWidth(true))) + OpenGoogleSpreadsheet(mProp_Google_SpreadsheetKey.stringValue); + GUI.enabled = mConnection_WWW==null; + + GUILayout.Space(5); + + if (TestButton(eTest_ActionType.Button_GoogleSpreadsheet_RefreshList, "Refresh", EditorStyles.toolbarButton,GUILayout.ExpandWidth(true))) + EditorApplication.update+=Google_FindSpreadsheets; + + GUILayout.Space(10); + GUILayout.EndHorizontal(); + + GUILayout.Space(15); + + if (!string.IsNullOrEmpty(mProp_Google_SpreadsheetKey.stringValue)) + OnGUI_GoogleButtons_ImportExport( mProp_Google_SpreadsheetKey.stringValue ); + + GUI.enabled = true; + } + + + private void OnGUI_ImportButtons() + { + eSpreadsheetUpdateMode Mode = SynchronizationButtons("Import"); + if (Mode != eSpreadsheetUpdateMode.None || InTestAction(eTest_ActionType.Button_GoogleSpreadsheet_Import)) + { + if (mTestAction == eTest_ActionType.Button_GoogleSpreadsheet_Import) + Mode = (eSpreadsheetUpdateMode)mTestActionArg; + + serializedObject.ApplyModifiedProperties(); + + var modeCopy = Mode; + GUITools.DelayedCall(() => Import_Google(modeCopy)); + } + } + + private void OnGUI_ExportButtons() + { + eSpreadsheetUpdateMode Mode = SynchronizationButtons("Export"); + if (Mode != eSpreadsheetUpdateMode.None || InTestAction(eTest_ActionType.Button_GoogleSpreadsheet_Export)) + { + if (mTestAction == eTest_ActionType.Button_GoogleSpreadsheet_Export) + Mode = (eSpreadsheetUpdateMode)mTestActionArg; + + serializedObject.ApplyModifiedProperties(); + + var modeCopy = Mode; + GUITools.DelayedCall(() => Export_Google(modeCopy)); + } + } + + void OnGUI_GoogleButtons_ImportExport( string SpreadsheetKey ) + { + GUI.enabled = !string.IsNullOrEmpty(SpreadsheetKey) && mConnection_WWW==null; + + bool vertical = EditorGUIUtility.currentViewWidth < 450; + + if (vertical) + { + GUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + OnGUI_ImportButtons(); + GUILayout.FlexibleSpace(); + GUILayout.EndHorizontal(); + + GUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + OnGUI_ExportButtons(); + GUILayout.FlexibleSpace(); + GUILayout.EndHorizontal(); + } + else + { + GUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + OnGUI_ImportButtons(); + GUILayout.FlexibleSpace(); + OnGUI_ExportButtons(); + GUILayout.FlexibleSpace(); + GUILayout.EndHorizontal(); + } + + + GUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + EditorGUIUtility.labelWidth += 10; + EditorGUILayout.PropertyField(mProp_Spreadsheet_SpecializationAsRows, new GUIContent("Show Specializations as Rows", "true: Make each specialization a separate row (e.g. Term[VR]..., Term[Touch]....\nfalse: Merge specializations into same cell separated by [i2s_XXX]")); + EditorGUIUtility.labelWidth -= 10; + GUILayout.EndHorizontal(); + GUILayout.Space(10); + + + GUI.enabled = true; + } + + eSpreadsheetUpdateMode SynchronizationButtons( string Operation, bool ForceReplace = false ) + { + eSpreadsheetUpdateMode Result = eSpreadsheetUpdateMode.None; + GUILayout.BeginVertical(LocalizeInspector.GUIStyle_OldTextArea, GUILayout.Width (1)); + GUI.backgroundColor = Color.white; + + GUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + GUILayout.Label(Operation, EditorStyles.miniLabel); + GUILayout.FlexibleSpace(); + GUILayout.EndHorizontal(); + + GUILayout.BeginHorizontal(); + if (GUILayout.Button( "Replace", EditorStyles.toolbarButton, GUILayout.Width(60))) + Result = eSpreadsheetUpdateMode.Replace; + + if (ForceReplace) GUI.enabled = false; + if (GUILayout.Button( "Merge", EditorStyles.toolbarButton, GUILayout.Width(60))) + Result = eSpreadsheetUpdateMode.Merge; + + if (GUILayout.Button( "Add New", EditorStyles.toolbarButton, GUILayout.Width(60))) + Result = eSpreadsheetUpdateMode.AddNewTerms; + GUI.enabled = mConnection_WWW==null; + GUILayout.Space(1); + GUILayout.EndHorizontal(); + + GUILayout.Space(2); + GUILayout.EndVertical(); + + if (Result != eSpreadsheetUpdateMode.None) + ClearErrors(); + + return Result; + } + #endregion + + void VerifyGoogleService( string WebServiceURL ) + { + #if UNITY_WEBPLAYER + ShowError ("Contacting google translation is not yet supported on WebPlayer" ); + #else + StopConnectionWWW(); + mWebService_Status = null; + mConnection_WWW = UnityWebRequest.Get(WebServiceURL + "?action=Ping"); + I2Utils.SendWebRequest(mConnection_WWW); + mConnection_Callback = OnVerifyGoogleService; + EditorApplication.update += CheckForConnection; + mConnection_Text = "Verifying Web Service"; + //mConnection_TimeOut = Time.realtimeSinceStartup + 10; + #endif + } + + void OnVerifyGoogleService( string Result, string Error ) + { + if (Result.Contains("Authorization is required to perform that action")) + { + ShowWarning("You need to authorize the webservice before using it. Check the steps 4 and 5 in the WebService Script"); + mWebService_Status = "Offline"; + return; + } + + try + { + var data = JSON.Parse(Result).AsObject; + int version = 0; + if (!int.TryParse(data["script_version"], out version)) + version = 0; + int requiredVersion = LocalizationManager.GetRequiredWebServiceVersion(); + + if (requiredVersion == version) + { + mWebService_Status = "Online"; + ClearErrors(); + } + else + { + mWebService_Status = "UnsupportedVersion"; + ShowError("The current Google WebService is not supported.\nPlease, delete the WebService from the Google Drive and Install the latest version."); + } + } + catch (Exception) + { + ShowError("Unable to access the WebService"); + mWebService_Status = "Offline"; + } + } + + + void Export_Google( eSpreadsheetUpdateMode UpdateMode ) + { + StopConnectionWWW(); + LanguageSourceData source = GetSourceData(); + mConnection_WWW = source.Export_Google_CreateWWWcall( UpdateMode ); + if (mConnection_WWW==null) + { + OnExported_Google(string.Empty, "WebPlayer can't contact Google"); + } + else + { + mConnection_Callback = OnExported_Google; + EditorApplication.update += CheckForConnection; + mConnection_Text = "Uploading spreadsheet"; + //mConnection_TimeOut = Time.realtimeSinceStartup + 10; + } + } + + void OnExported_Google( string Result, string Error ) + { + // Checkf or error, but discard the "necessary data rewind wasn't possible" as thats not a real error, just a bug in Unity with POST redirects + if (!string.IsNullOrEmpty(Error) && !Error.Contains("rewind")) + { + Debug.Log (Error); + ShowError("Unable to access google"); + return; + } + + if (EditorPrefs.GetBool("I2Loc OpenDataSourceAfterExport", true) && !string.IsNullOrEmpty(GetSourceData().Google_SpreadsheetName)) + OpenGoogleSpreadsheet(GetSourceData().Google_SpreadsheetKey ); + mProp_GoogleLiveSyncIsUptoDate.boolValue = true; + } + + static void OpenGoogleSpreadsheet( string SpreadsheetKey ) + { + ClearErrors(); + string SpreadsheetUrl = "https://docs.google.com/spreadsheet/ccc?key=" + SpreadsheetKey; + Application.OpenURL(SpreadsheetUrl); + } + + public abstract LanguageSourceData GetSourceData(); + + + void Import_Google( eSpreadsheetUpdateMode UpdateMode ) + { + StopConnectionWWW(); + LanguageSourceData source = GetSourceData(); + mConnection_WWW = source.Import_Google_CreateWWWcall(true, false); + if (mConnection_WWW==null) + { + OnImported_Google(string.Empty, "Unable to import from google", eSpreadsheetUpdateMode.Replace); + } + else + { + mConnection_Callback=null; + switch (UpdateMode) + { + case eSpreadsheetUpdateMode.Replace : mConnection_Callback += OnImported_Google_Replace; break; + case eSpreadsheetUpdateMode.Merge : mConnection_Callback += OnImported_Google_Merge; break; + case eSpreadsheetUpdateMode.AddNewTerms : mConnection_Callback += OnImported_Google_AddNewTerms; break; + } + EditorApplication.update += CheckForConnection; + mConnection_Text = "Downloading spreadsheet"; + //mConnection_TimeOut = Time.realtimeSinceStartup + 10; + } + } + + void OnImported_Google_Replace( string Result, string Error ) { OnImported_Google(Result, Error, eSpreadsheetUpdateMode.Replace); } + void OnImported_Google_Merge( string Result, string Error ) { OnImported_Google(Result, Error, eSpreadsheetUpdateMode.Merge); } + void OnImported_Google_AddNewTerms( string Result, string Error ) { OnImported_Google(Result, Error, eSpreadsheetUpdateMode.AddNewTerms); } + + void OnImported_Google( string Result, string Error, eSpreadsheetUpdateMode UpdateMode ) + { + if (!string.IsNullOrEmpty(Error)) + { + Debug.Log(Error); + ShowError("Unable to access google"); + return; + } + LanguageSourceData source = GetSourceData(); + string ErrorMsg = source.Import_Google_Result(Result, UpdateMode); + bool HasErrors = !string.IsNullOrEmpty(ErrorMsg); + if (HasErrors) + ShowError(ErrorMsg); + + serializedObject.Update(); + ParseTerms(true, false, !HasErrors); + mSelectedKeys.Clear (); + mSelectedCategories.Clear(); + ScheduleUpdateTermsToShowInList(); + mLanguageSource.GetCategories(false, mSelectedCategories); + + EditorUtility.SetDirty (target); + AssetDatabase.SaveAssets(); + } + + void CheckForConnection() + { + if (mConnection_WWW!=null && mConnection_WWW.isDone) + { + fnConnectionCallback callback = mConnection_Callback; + string Result = string.Empty; + string Error = mConnection_WWW.error; + + if (string.IsNullOrEmpty(Error)) + { + Result = Encoding.UTF8.GetString(mConnection_WWW.downloadHandler.data); //mConnection_WWW.text; + } + + StopConnectionWWW(); + if (callback!=null) + callback(Result, Error); + } + /*else + if (Time.realtimeSinceStartup > mConnection_TimeOut+30) + { + fnConnectionCallback callback = mConnection_Callback; + StopConnectionWWW(); + if (callback!=null) + callback(string.Empty, "Time Out"); + }*/ + } + + void StopConnectionWWW() + { + EditorApplication.update -= CheckForConnection; + mConnection_WWW = null; + mConnection_Callback = null; + mConnection_Text = string.Empty; + } + + #region New Spreadsheet + + void Google_NewSpreadsheet() + { + #if UNITY_WEBPLAYER + ShowError ("Contacting google translation is not yet supported on WebPlayer" ); + #else + + ClearErrors(); + string SpreadsheetName; + + LanguageSourceData source = GetSourceData(); + if (source.IsGlobalSource()) + SpreadsheetName = string.Format("{0} Localization", PlayerSettings.productName); + else + SpreadsheetName = string.Format("{0} {1} {2}", PlayerSettings.productName, Editor_GetCurrentScene(), source.ownerObject.name); + + string query = mProp_Google_WebServiceURL.stringValue + "?action=NewSpreadsheet&name=" + Uri.EscapeDataString(SpreadsheetName) + "&password="+ Uri.EscapeDataString(mProp_Google_Password.stringValue); + + mConnection_WWW = UnityWebRequest.Get(query); + I2Utils.SendWebRequest(mConnection_WWW); + mConnection_Callback = Google_OnNewSpreadsheet; + EditorApplication.update += CheckForConnection; + mConnection_Text = "Creating Spreadsheet"; + //mConnection_TimeOut = Time.realtimeSinceStartup + 10; + #endif + } + + void Google_OnNewSpreadsheet( string Result, string Error ) + { + if (!string.IsNullOrEmpty(Error)) + { + ShowError("Unable to access google"); + return; + } + if (Result=="Wrong Password") + { + ShowError(Result); + return; + } + + try + { + var data = JSON.Parse(Result).AsObject; + + string name = data["name"]; + string key = data["id"]; + + serializedObject.Update(); + mProp_Google_SpreadsheetKey.stringValue = key; + mProp_Google_SpreadsheetName.stringValue = name; + serializedObject.ApplyModifiedProperties(); + mGoogleSpreadsheets[name] = key; + + LanguageSourceData source = GetSourceData(); + if (source.mTerms.Count>0 || source.mLanguages.Count>0) + Export_Google( eSpreadsheetUpdateMode.Replace ); + else + if (EditorPrefs.GetBool("I2Loc OpenDataSourceAfterExport", true)) + OpenGoogleSpreadsheet( key ); + + } + catch(Exception e) + { + ShowError (e.Message); + } + } + + #endregion + + #region FindSpreadsheets + + void Google_FindSpreadsheets() + { + ClearErrors(); + EditorApplication.update -= Google_FindSpreadsheets; + string query = mProp_Google_WebServiceURL.stringValue + "?action=GetSpreadsheetList&password="+ Uri.EscapeDataString(mProp_Google_Password.stringValue); + mConnection_WWW = UnityWebRequest.Get(query); + I2Utils.SendWebRequest(mConnection_WWW); + mConnection_Callback = Google_OnFindSpreadsheets; + EditorApplication.update += CheckForConnection; + mConnection_Text = "Accessing google"; + //mConnection_TimeOut = Time.realtimeSinceStartup + 10; + } + + void Google_OnFindSpreadsheets( string Result, string Error) + { + if (!string.IsNullOrEmpty(Error)) + { + ShowError("Unable to access google"); + return; + } + + if (Result=="Wrong Password") + { + ShowError(Result); + return; + } + + try + { + mGoogleSpreadsheets.Clear(); + var data = JSON.Parse(Result).AsObject; + foreach (KeyValuePair element in data) + mGoogleSpreadsheets[element.Key] = element.Value; + } + catch(Exception e) + { + ShowError (e.Message); + } + + } + + #endregion + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Spreadsheet_Google.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Spreadsheet_Google.cs.meta new file mode 100644 index 00000000..77261f67 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Spreadsheet_Google.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 800caf7e364ec2947be099b4f9ed976d +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Spreadsheet_Local.cs b/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Spreadsheet_Local.cs new file mode 100644 index 00000000..bdf98312 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Spreadsheet_Local.cs @@ -0,0 +1,335 @@ +using System; +using System.IO; +using System.Linq; +using System.Text; +using UnityEditor; +using UnityEngine; + +namespace I2.Loc +{ + public partial class LocalizationEditor + { + enum eLocalSpreadsheeet { CSV, XLS, XLSX, NONE } + + void OnGUI_Spreadsheet_Local() + { + GUILayout.Space(10); + GUILayout.BeginVertical(); + + GUILayout.BeginHorizontal(); + GUILayout.Label ("File:", GUILayout.ExpandWidth(false)); + + mProp_Spreadsheet_LocalFileName.stringValue = EditorGUILayout.TextField(mProp_Spreadsheet_LocalFileName.stringValue); + /*if (GUILayout.Button("...", "toolbarbutton", GUILayout.ExpandWidth(false))) + { + string sFileName = mProp_Spreadsheet_LocalFileName.stringValue; + + string sPath = string.Empty; + try { + sPath = System.IO.Path.GetDirectoryName(sFileName); + } + catch( System.Exception e){} + + if (string.IsNullOrEmpty(sPath)) + sPath = Application.dataPath + "/"; + + sFileName = System.IO.Path.GetFileName(sFileName); + if (string.IsNullOrEmpty(sFileName)) + sFileName = "Localization.csv"; + + string FullFileName = EditorUtility.SaveFilePanel("Select CSV File", sPath, sFileName, "csv"); + //string FullFileName = EditorUtility.OpenFilePanel("Select CSV, XLS or XLSX File", sFileName, "csv;*.xls;*.xlsx"); + + if (!string.IsNullOrEmpty(FullFileName)) + { + Prop_LocalFileName.stringValue = TryMakingPathRelativeToProject(FullFileName); + } + }*/ + GUILayout.EndHorizontal(); + + //--[ Find current extension ]--------------- + eLocalSpreadsheeet CurrentExtension = eLocalSpreadsheeet.NONE; + //string FileNameLower = Prop_LocalFileName.stringValue.ToLower(); + /*if (FileNameLower.EndsWith(".csv")) */CurrentExtension = eLocalSpreadsheeet.CSV; + /*if (FileNameLower.EndsWith(".xls")) CurrentExtension = eLocalSpreadsheeet.XLS; + if (FileNameLower.EndsWith(".xlsx")) CurrentExtension = eLocalSpreadsheeet.XLSX;*/ + + GUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + switch (CurrentExtension) + { + case eLocalSpreadsheeet.NONE : + case eLocalSpreadsheeet.CSV : + { + string FileTypesDesc = "Select or Drag any file of the following types:\n\n"; + FileTypesDesc+= "*.csv (Comma Separated Values)\n"; + FileTypesDesc+= "*.txt (CSV file renamed as txt)\n"; + //FileTypesDesc+= "\n*.xls (Excel 97-2003)"; + //FileTypesDesc+= "\n*.xlsx (Excel Open XML format)"; + EditorGUILayout.HelpBox(FileTypesDesc, MessageType.None); + } + break; + case eLocalSpreadsheeet.XLS : EditorGUILayout.HelpBox("Excel 97-2003", MessageType.None); break; + case eLocalSpreadsheeet.XLSX : EditorGUILayout.HelpBox("Excel Open XML format", MessageType.None); break; + } + GUILayout.FlexibleSpace(); + GUILayout.EndHorizontal(); + + GUILayout.EndVertical(); + + //--[ Allow Dragging files ]----------------- + if (GUILayoutUtility.GetLastRect().Contains (Event.current.mousePosition) && IsValidDraggedLoadSpreadsheet()) + { + if (Event.current.type == EventType.DragUpdated) + DragAndDrop.visualMode = DragAndDropVisualMode.Link; + + if (Event.current.type == EventType.DragPerform) + { + mProp_Spreadsheet_LocalFileName.stringValue = TryMakingPathRelativeToProject( DragAndDrop.paths[0] ); + DragAndDrop.AcceptDrag(); + Event.current.Use(); + } + } + + GUILayout.Space(10); + + OnGUI_Spreadsheet_Local_ImportExport( CurrentExtension, mProp_Spreadsheet_LocalFileName.stringValue ); + + //if (Application.platform == RuntimePlatform.OSXEditor) + + //-- CSV Separator ---------------- + GUI.changed = false; + var CSV_Separator = mProp_Spreadsheet_LocalCSVSeparator.stringValue; + if (string.IsNullOrEmpty (CSV_Separator)) + CSV_Separator = ","; + + GUILayout.Space(10); + GUILayout.BeginVertical("Box"); + GUILayout.BeginHorizontal(); + GUILayout.Label("Separator:"); + GUILayout.FlexibleSpace(); + + if (GUILayout.Toggle(CSV_Separator==",", "Comma(,)") && CSV_Separator!=",") + CSV_Separator = ","; + + GUILayout.FlexibleSpace(); + + if (GUILayout.Toggle(CSV_Separator==";", "Semicolon(;)") && CSV_Separator!=";") + CSV_Separator = ";"; + + GUILayout.FlexibleSpace(); + + if (GUILayout.Toggle(CSV_Separator=="\t", "TAB(\\t)") && CSV_Separator!="\t") + CSV_Separator = "\t"; + + GUILayout.EndHorizontal(); + + GUILayout.BeginHorizontal(); + //--[ Encoding ]--------------- + var encodings = Encoding.GetEncodings ().OrderBy(e=>e.Name).ToArray(); + var encodingNames = encodings.Select(e=>e.Name).ToArray(); + + int idx = Array.IndexOf (encodingNames, mProp_Spreadsheet_LocalCSVEncoding.stringValue); + if (idx == -1) + idx = Array.IndexOf (encodingNames, "utf-8"); + EditorGUIUtility.labelWidth = 80; + + idx = EditorGUILayout.Popup ("Encoding:", idx, encodingNames); + if (GUILayout.Button("Default", GUILayout.ExpandWidth(false))) + idx = Array.IndexOf (encodingNames, "utf-8"); + + if (idx>=0 && mProp_Spreadsheet_LocalCSVEncoding.stringValue != encodings [idx].Name) + mProp_Spreadsheet_LocalCSVEncoding.stringValue = encodings [idx].Name; + GUILayout.EndHorizontal(); + + GUILayout.EndVertical(); + + if (GUI.changed) + { + mProp_Spreadsheet_LocalCSVSeparator.stringValue = CSV_Separator; + } + + GUILayout.Space(10); + EditorGUILayout.HelpBox("On some Mac OS, there is a Unity Bug that makes the IDE crash when selecting a CSV file in the Open/Save File Dialog.\nJust by clicking the file, unity tries to preview the content and crashes.\n\nIf any of your the team members use Mac, its adviced to import/export the CSV Files with TXT extension.", MessageType.Warning); + GUILayout.Space(10); + + OnGUI_ShowMsg(); + } + + bool IsValidDraggedLoadSpreadsheet() + { + if (DragAndDrop.paths==null || DragAndDrop.paths.Length!=1) + return false; + + string sPath = DragAndDrop.paths[0].ToLower(); + if (sPath.EndsWith(".csv")) return true; + if (sPath.EndsWith(".txt")) return true; + //if (sPath.EndsWith(".xls")) return true; + //if (sPath.EndsWith(".xlsx")) return true; + + /*int iChar = sPath.LastIndexOfAny( "/\\.".ToCharArray() ); + if (iChar<0 || sPath[iChar]!='.') + return true; + return false;*/ + return false; + } + + string TryMakingPathRelativeToProject( string FileName ) + { + string ProjectPath = Application.dataPath.ToLower(); + string FileNameLower = FileName.ToLower(); + + if (FileNameLower.StartsWith(ProjectPath)) + FileName = FileName.Substring(ProjectPath.Length+1); + else + if (FileNameLower.StartsWith("assets/")) + FileName = FileName.Substring("assets/".Length); + return FileName; + } + + void OnGUI_Spreadsheet_Local_ImportExport( eLocalSpreadsheeet CurrentExtension, string File ) + { + GUI.enabled = CurrentExtension!=eLocalSpreadsheeet.NONE; + + GUILayout.BeginHorizontal(); + GUILayout.Space(10); + + GUI.backgroundColor = Color.Lerp(Color.gray, Color.white, 0.5f); + eSpreadsheetUpdateMode Mode = SynchronizationButtons("Import"); + if ( Mode!= eSpreadsheetUpdateMode.None) + Import_Local(File, CurrentExtension, Mode); + + GUILayout.FlexibleSpace(); + + GUI.backgroundColor = Color.Lerp(Color.gray, Color.white, 0.5f); + Mode = SynchronizationButtons("Export", true); + if ( Mode != eSpreadsheetUpdateMode.None) + Export_Local(File, CurrentExtension, Mode); + + GUILayout.Space(10); + GUILayout.EndHorizontal(); + + GUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + EditorGUIUtility.labelWidth += 10; + EditorGUILayout.PropertyField(mProp_Spreadsheet_SpecializationAsRows, new GUIContent("Show Specializations as Rows", "true: Make each specialization a separate row (e.g. Term[VR]..., Term[Touch]....\nfalse: Merge specializations into same cell separated by [i2s_XXX]")); + EditorGUIUtility.labelWidth -= 10; + GUILayout.EndHorizontal(); + + + GUI.enabled = true; + } + + void Import_Local( string File, eLocalSpreadsheeet CurrentExtension, eSpreadsheetUpdateMode UpdateMode ) + { + try + { + serializedObject.ApplyModifiedProperties(); + serializedObject.Update(); + ClearErrors(); + + if (string.IsNullOrEmpty(File)) + File = Application.dataPath + "/Localization.csv"; + else + if (!Path.IsPathRooted(File)) + File = string.Concat(Application.dataPath, "/", File); + + // On Mac there is an issue with previewing CSV files, so its forced to only TXT + if (Application.platform == RuntimePlatform.OSXEditor) + File = EditorUtility.OpenFilePanel("Select a CSV file renamed as TXT", File, "txt"); + else + File = EditorUtility.OpenFilePanel("Select a CSV file or a CSV file renamed as TXT", File, "csv;*.txt"); + //File = EditorUtility.OpenFilePanel("Select CSV, XLS or XLSX File", File, "csv;*.xls;*.xlsx"); + if (!string.IsNullOrEmpty(File)) + { + mLanguageSource.Spreadsheet_LocalFileName = TryMakingPathRelativeToProject(File); + switch (CurrentExtension) + { + case eLocalSpreadsheeet.CSV : Import_CSV(File, UpdateMode); break; + } + ParseTerms(true, false, true); + EditorUtility.SetDirty (target); + AssetDatabase.SaveAssets(); + } + } + catch (Exception ex) + { + ShowError("Unable to import file"); + Debug.LogError(ex.Message); + } + } + + void Import_CSV( string FileName, eSpreadsheetUpdateMode UpdateMode ) + { + LanguageSourceData source = GetSourceData(); + var encoding = Encoding.GetEncoding (mProp_Spreadsheet_LocalCSVEncoding.stringValue); + if (encoding == null) + encoding = Encoding.UTF8; + string CSVstring = LocalizationReader.ReadCSVfile (FileName, encoding); + + char Separator = mProp_Spreadsheet_LocalCSVSeparator.stringValue.Length>0 ? mProp_Spreadsheet_LocalCSVSeparator.stringValue[0] : ','; + string sError = source.Import_CSV( string.Empty, CSVstring, UpdateMode, Separator); + if (!string.IsNullOrEmpty(sError)) + ShowError(sError); + + mSelectedCategories = source.GetCategories(); + } + + void Export_Local( string File, eLocalSpreadsheeet CurrentExtension, eSpreadsheetUpdateMode UpdateMode ) + { + try + { + serializedObject.ApplyModifiedProperties(); + serializedObject.Update(); + ClearErrors(); + + string sPath = string.Empty; + if (!Path.IsPathRooted(File)) + File = string.Concat(Application.dataPath, "/", File); + + try { + sPath = Path.GetDirectoryName(File); + } + catch( Exception){} + + if (string.IsNullOrEmpty(sPath)) + sPath = Application.dataPath + "/"; + + File = Path.GetFileName(File); + if (string.IsNullOrEmpty(File)) + File = "Localization.csv"; + + if (Application.platform == RuntimePlatform.OSXEditor) + File = EditorUtility.SaveFilePanel("Select a CSV file renamed as TXT", sPath, File, "txt"); + else + File = EditorUtility.SaveFilePanel("Select a CSV or TXT file", sPath, File, "csv;*.txt"); + if (!string.IsNullOrEmpty(File)) + { + mLanguageSource.Spreadsheet_LocalFileName = TryMakingPathRelativeToProject(File); + + char Separator = mProp_Spreadsheet_LocalCSVSeparator.stringValue.Length>0 ? mProp_Spreadsheet_LocalCSVSeparator.stringValue[0] : ','; + var encoding = Encoding.GetEncoding (mProp_Spreadsheet_LocalCSVEncoding.stringValue); + if (encoding == null) + encoding = Encoding.UTF8; + + switch (CurrentExtension) + { + case eLocalSpreadsheeet.CSV : Export_CSV(File, UpdateMode, Separator, encoding); break; + } + } + } + catch (Exception) + { + ShowError("Unable to export file\nCheck it is not READ-ONLY and that\nits not opened in an external viewer"); + } + } + + public void Export_CSV( string FileName, eSpreadsheetUpdateMode UpdateMode, char Separator, Encoding encoding ) + { + LanguageSourceData source = GetSourceData(); + + string CSVstring = source.Export_CSV(null, Separator, mProp_Spreadsheet_SpecializationAsRows.boolValue); + File.WriteAllText (FileName, CSVstring, encoding); + } + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Spreadsheet_Local.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Spreadsheet_Local.cs.meta new file mode 100644 index 00000000..dd66d4c6 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Spreadsheet_Local.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: fdca66efafe784661b464934cacff065 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Terms.cs b/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Terms.cs new file mode 100644 index 00000000..783a0cf0 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Terms.cs @@ -0,0 +1,820 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEditor; +using UnityEngine; + +namespace I2.Loc +{ + public partial class LocalizationEditor + { + #region Variables + + Vector2 mScrollPos_Keys = Vector2.zero; + + public static string mKeyToExplore; // Key that should show all the language details + static string KeyList_Filter = ""; + float mRowSize=-1; + float ScrollHeight; + float mTermList_MaxWidth = -1; + + public static List mSelectedKeys = new List(); // Selected Keys in the list of mParsedKeys + public static List mSelectedCategories = new List(); + + + public enum eFlagsViewKeys + { + Used = 1<<1, + Missing = 1<<2, + NotUsed = 1<<3 + } + public static int mFlagsViewKeys = (int)eFlagsViewKeys.Used | (int)eFlagsViewKeys.NotUsed; + + public static string mTermsList_NewTerm; + Rect mKeyListFilterRect; + + #endregion + + #region GUI Key List + + float ExpandedViewHeight; + float TermsListHeight; + + void OnGUI_KeysList(bool AllowExpandKey = true, float Height = 300.0f, bool ShowTools=true) + { + ///if (mTermList_MaxWidth<=0) + CalculateTermsListMaxWidth(); + + //--[ List Filters ]-------------------------------------- + + // The ID of this control is registered here to avoid losing focus when the terms list grows in the scrollbox + // This control is drawn later on + int KeyListFilterID = GUIUtility.GetControlID( FocusType.Keyboard ); + + OnGUI_ShowMsg(); + + GUILayout.BeginHorizontal(); + GUIStyle bstyle = new GUIStyle ("toolbarbutton"); + bstyle.fontSize = 15; + if (GUILayout.Button (new GUIContent("\u21bb", "Parse Scene and update terms list with missing and unused terms"), bstyle, GUILayout.Width(25))) + EditorApplication.update += DoParseTermsInCurrentSceneAndScripts; + if (GUILayout.Button(new GUIContent("\u21ea", "Refresh the translation of all Localize objects"), bstyle, GUILayout.Width(25))) + CallLocalizeAll(); + + GUILayout.Space (1); + + var oldFlags = mFlagsViewKeys; + mFlagsViewKeys = OnGUI_FlagToogle("Used","Shows All Terms referenced in the parsed scenes", mFlagsViewKeys, (int)eFlagsViewKeys.Used); + mFlagsViewKeys = OnGUI_FlagToogle("Not Used", "Shows all Terms from the Source that are not been used", mFlagsViewKeys, (int)eFlagsViewKeys.NotUsed); + mFlagsViewKeys = OnGUI_FlagToogle("Missing","Shows all Terms Used but not defined in the Source", mFlagsViewKeys, (int)eFlagsViewKeys.Missing); + if (oldFlags!=mFlagsViewKeys) + ScheduleUpdateTermsToShowInList(); + + OnGUI_SelectedCategories(); + + GUILayout.EndHorizontal(); + + /*//if (Event.current.type == EventType.Repaint) + TermsListHeight = Screen.height - 400; + Debug.Log(Event.current.type + " " + TermsListHeight + " " + Screen.height + " " + GUILayoutUtility.GetLastRect().yMax); + + //TermsListHeight = Mathf.Min(Screen.height*0.5f, TermsListHeight); + mScrollPos_Keys = GUILayout.BeginScrollView(mScrollPos_Keys, false, false, "horizontalScrollbar", "verticalScrollbar", LocalizeInspector.GUIStyle_OldTextArea, GUILayout.Height(TermsListHeight)); + for (int i = 0; i < 1000; ++i) + GUILayout.Label("ahhh" + i); + GUILayout.EndScrollView(); + + return;*/ + TermsListHeight = Mathf.Min(Screen.height*0.5f, TermsListHeight); + + //--[ Keys List ]----------------------------------------- + GUI.backgroundColor = Color.Lerp(GUITools.LightGray, Color.white, 0.5f); + mScrollPos_Keys = GUILayout.BeginScrollView( mScrollPos_Keys, false, false, "horizontalScrollbar", "verticalScrollbar", LocalizeInspector.GUIStyle_OldTextArea ,GUILayout.Height(TermsListHeight)/*GUILayout.MinHeight(Height), GUILayout.MaxHeight(Screen.height), GUILayout.ExpandHeight(true)*/); + GUI.backgroundColor = Color.white; + + bool bAnyValidUsage = false; + + mRowSize = EditorStyles.toolbar.fixedHeight; + if (Event.current!=null && Event.current.type == EventType.Layout) + ScrollHeight = mScrollPos_Keys.y; + + float YPosMin = -ScrollHeight; + int nSkip = 0; + int nDraw = 0; + + if (mShowableTerms.Count == 0 && Event.current.type == EventType.Layout) + UpdateTermsToShownInList (); + + float SkipSize = 0; + foreach (var parsedTerm in mShowableTerms) + { + string sKey = parsedTerm.Term; + string sCategory = parsedTerm.Category; + string FullKey = parsedTerm.FullTerm; + + int nUses = parsedTerm.Usage; + bAnyValidUsage = bAnyValidUsage | (nUses>=0); + + ShowTerm_termData = parsedTerm.termData; + + // Skip lines outside the view ----------------------- + YPosMin += mRowSize; + SkipSize += mRowSize; + float YPosMax = YPosMin + mRowSize; + bool isExpanded = AllowExpandKey && mKeyToExplore==FullKey; + if (!isExpanded && (YPosMax<-2*mRowSize || YPosMin>/*Screen.height*/TermsListHeight+mRowSize)) + { + if (YPosMin>TermsListHeight+mRowSize) + break; + + nSkip++; + continue; + } + nDraw++; + + //------------------------------------------------------ + + OnGUI_KeyHeader (sKey, sCategory, FullKey, nUses, YPosMin-mRowSize+mScrollPos_Keys.y); + + //--[ Key Details ]------------------------------- + + if (isExpanded) + { + GUILayout.Space(SkipSize); + SkipSize = 0; + OnGUI_KeyList_ShowKeyDetails(); + Rect rect = GUILayoutUtility.GetLastRect(); + if (rect.height>5) + ExpandedViewHeight = rect.height; + YPosMin += ExpandedViewHeight; + } + } + SkipSize += (mShowableTerms.Count - nDraw-nSkip) * mRowSize; + GUILayout.Space(SkipSize+2); + if (mSelectedCategories.Count < mParsedCategories.Count) + { + SkipSize += 25; + if (GUILayout.Button ("...", EditorStyles.label)) + { + mSelectedCategories.Clear (); + mSelectedCategories.AddRange (mParsedCategories); + } + } + OnGUI_KeysList_AddKey(); + + GUILayout.Label("", GUILayout.Width(mTermList_MaxWidth+10+30), GUILayout.Height(1)); + + GUILayout.EndScrollView(); + + TermsListHeight = YPosMin + mRowSize + 25;//SkipSize+25; + + //Rect ListRect = GUILayoutUtility.GetLastRect(); + //if (ListRect.height>5) + // TermsListHeight = ListRect.height; + //Debug.Log(nDraw + " " + nSkip + " " + Screen.height + " " + TermsListHeight); + + OnGUI_Keys_ListSelection( KeyListFilterID ); // Selection Buttons + +// if (!bAnyValidUsage) +// EditorGUILayout.HelpBox("Use (Tools\\Parse Terms) to find how many times each of the Terms are used", UnityEditor.MessageType.Info); + + if (ShowTools) + { + GUILayout.BeginHorizontal(); + GUI.enabled = mSelectedKeys.Count>0 || !string.IsNullOrEmpty(mKeyToExplore); + if (TestButton (eTest_ActionType.Button_AddSelectedTerms, new GUIContent("Add Terms", "Add terms to Source"), "Button", GUITools.DontExpandWidth)) AddTermsToSource(); + if (TestButton (eTest_ActionType.Button_RemoveSelectedTerms, new GUIContent("Remove Terms", "Remove Terms from Source"), "Button", GUITools.DontExpandWidth)) RemoveTermsFromSource(); + + GUILayout.FlexibleSpace (); + + if (GUILayout.Button ("Change Category")) OpenTool_ChangeCategoryOfSelectedTerms(); + GUI.enabled = true; + GUILayout.EndHorizontal(); + + GUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace (); + bool newBool = GUILayout.Toggle(mLanguageSource.CaseInsensitiveTerms, "Case Insensitive Terms"); + if (newBool != mLanguageSource.CaseInsensitiveTerms) + { + mProp_CaseInsensitiveTerms.boolValue = newBool; + } + GUILayout.FlexibleSpace (); + GUILayout.EndHorizontal(); + } + //Debug.Log ("Draw: " + nDraw + " Skip: " + nSkip); + } + + static void ScheduleUpdateTermsToShowInList() + { + if (!mUpdateShowTermIsScheduled) + { + EditorApplication.update += UpdateTermsToShownInList; + mUpdateShowTermIsScheduled = true; + } + } + static bool mUpdateShowTermIsScheduled; + static void UpdateTermsToShownInList() + { + EditorApplication.update -= UpdateTermsToShownInList; + mUpdateShowTermIsScheduled = false; + + mShowableTerms.Clear (); + mSelectedCategories.Sort(); + foreach (KeyValuePair kvp in mParsedTerms) + { + ParsedTerm parsedTerm = kvp.Value; + if (ShouldShowTerm (parsedTerm.Term, parsedTerm.Category, parsedTerm.Usage, parsedTerm)) + mShowableTerms.Add(parsedTerm); + } + GUITools.RepaintInspectors(); + GUITools.ScheduleRepaintInspectors(); + } + + void OnGUI_KeyHeader (string sKey, string sCategory, string FullKey, int nUses, float YPosMin) + { + //--[ Toggle ]--------------------- + GUI.Box(new Rect(2, YPosMin+2, 18, mRowSize), "", "Toolbar"); + OnGUI_SelectableToogleListItem (new Rect(2, YPosMin+3, 15, mRowSize), FullKey, ref mSelectedKeys, "OL Toggle"); + + bool bEnabled = mSelectedKeys.Contains (FullKey); + //--[ Number of Objects using this key ]--------------------- + if (nUses >= 0) + { + if (nUses == 0) + { + GUI.color = Color.Lerp (Color.gray, Color.white, 0.5f); + GUI.Label (new Rect(20, YPosMin+2, 30, mRowSize), nUses.ToString (), "toolbarbutton"); + } + else + { + if (GUI.Button(new Rect(20, YPosMin + 2, 30, mRowSize), nUses.ToString(), "toolbarbutton")) + { + List selection = new List(mSelectedKeys); + if (!selection.Contains(FullKey)) + selection.Add(FullKey); + + List selGOs = new List(); + for (int i=0; i 0) + Selection.objects = selGOs.ToArray(); + else + ShowWarning("The selected Terms are not used in this Scene. Try opening other scenes"); + } + } + } + else + { + GUI.color = Color.Lerp (Color.red, Color.white, 0.6f); + if (GUI.Button (new Rect(20, YPosMin+2, 30, mRowSize), "", "toolbarbutton")) + { + mCurrentToolsMode = eToolsMode.Parse; + mCurrentViewMode = eViewMode.Tools; + } + } + GUI.color = Color.white; + + TermData termData = ShowTerm_termData!=null ? ShowTerm_termData : mLanguageSource.GetTermData (FullKey); + bool bKeyIsMissing = termData == null; + float MinX = 50; + if (bKeyIsMissing) + { + Rect rect = new Rect(50, YPosMin+2, mRowSize, mRowSize+2); + GUITools.DrawSkinIcon(rect, "CN EntryWarnIcon", "CN EntryWarn"); + GUI.Label (rect, new GUIContent ("", "This term is used in the scene, but its not localized in the Language Source")); + MinX += rect.width; + } + else MinX += 3; + + float listWidth = Mathf.Max(EditorGUIUtility.currentViewWidth / EditorGUIUtility.pixelsPerPoint, mTermList_MaxWidth); + Rect rectKey = new Rect(MinX, YPosMin+2, listWidth-MinX, mRowSize); + if (sCategory != LanguageSourceData.EmptyCategory) + rectKey.width -= 130; + if (mKeyToExplore == FullKey) + { + GUI.backgroundColor = Color.Lerp (Color.blue, Color.white, 0.8f); + if (GUI.Button (rectKey, new GUIContent (sKey, EditorStyles.foldout.onNormal.background), LocalizeInspector.GUIStyle_OldTextArea)) + { + mKeyToExplore = string.Empty; + ScheduleUpdateTermsToShowInList(); + ClearErrors (); + } + GUI.backgroundColor = Color.white; + } + else + { + GUIStyle LabelStyle = EditorStyles.label; + if (!bKeyIsMissing && !TermHasAllTranslations (mLanguageSource, termData)) + { + LabelStyle = new GUIStyle (EditorStyles.label); + LabelStyle.fontStyle = FontStyle.Italic; + GUI.color = Color.Lerp (Color.white, Color.yellow, 0.5f); + } + if (!bEnabled) + GUI.contentColor = Color.Lerp (Color.gray, Color.white, 0.3f); + if (GUI.Button (rectKey, sKey, LabelStyle)) + { + SelectTerm (FullKey); + ClearErrors (); + } + if (!bEnabled) + GUI.contentColor = Color.white; + GUI.color = Color.white; + } + //--[ Category ]-------------------------- + if (sCategory != LanguageSourceData.EmptyCategory) + { + if (mKeyToExplore == FullKey) + { + rectKey.x = listWidth - 100-38-20; + rectKey.width = 130; + if (GUI.Button (rectKey, sCategory, EditorStyles.toolbarButton)) + OpenTool_ChangeCategoryOfSelectedTerms (); + } + else + { + GUIStyle stl = new GUIStyle(EditorStyles.miniLabel); + stl.alignment = TextAnchor.MiddleRight; + rectKey.width = 130;//EditorStyles.miniLabel.CalcSize(new GUIContent(sCategory)).x; + rectKey.x = listWidth - rectKey.width - 38-20; + + if (GUI.Button (rectKey, sCategory, stl)) + { + SelectTerm (FullKey); + ClearErrors (); + } + } + } + } + + + void CalculateTermsListMaxWidth() + { + mTermList_MaxWidth = EditorGUIUtility.currentViewWidth / EditorGUIUtility.pixelsPerPoint - 120; + /*float maxWidth = Screen.width / 18; + foreach (KeyValuePair kvp in mParsedTerms) + { + var txt = kvp.Key; + if (txt.Length > 100) + txt = txt.Substring(0, 100); + var size = EditorStyles.label.CalcSize(new GUIContent(txt)); + mTermList_MaxWidth = Mathf.Max (mTermList_MaxWidth, size.x); + }*/ + } + + bool TermHasAllTranslations( LanguageSourceData source, TermData data ) + { + if (source==null) source = LocalizationManager.Sources[0]; + for (int i=0, imax=data.Languages.Length; ii ? source.mLanguages[i].IsEnabled() : true; + if (string.IsNullOrEmpty(data.Languages[i]) && isLangEnabled) + return false; + } + return true; + } + + void OnGUI_KeysList_AddKey() + { + GUILayout.BeginHorizontal(); + GUI.color = Color.Lerp(Color.gray, Color.white, 0.5f); + bool bWasEnabled = mTermsList_NewTerm!=null; + bool bEnabled = !GUILayout.Toggle (!bWasEnabled, "+", EditorStyles.toolbarButton, GUILayout.Width(30)); + GUI.color = Color.white; + + if (bWasEnabled && !bEnabled) mTermsList_NewTerm = null; + if (!bWasEnabled && bEnabled) mTermsList_NewTerm = string.Empty; + + if (bEnabled) + { + GUILayout.BeginHorizontal(EditorStyles.toolbar); + mTermsList_NewTerm = EditorGUILayout.TextField(mTermsList_NewTerm, EditorStyles.toolbarTextField, GUILayout.ExpandWidth(true)); + GUILayout.EndHorizontal(); + + LanguageSourceData.ValidateFullTerm( ref mTermsList_NewTerm ); + if (string.IsNullOrEmpty(mTermsList_NewTerm) || mLanguageSource.ContainsTerm(mTermsList_NewTerm) || mTermsList_NewTerm=="-") + GUI.enabled = false; + + if (TestButton (eTest_ActionType.Button_AddTerm_InTermsList, "Create Key", "toolbarbutton", GUILayout.ExpandWidth(false))) + { + AddLocalTerm(mTermsList_NewTerm); + SelectTerm( mTermsList_NewTerm ); + ClearErrors(); + mTermsList_NewTerm = null; + SetAllTerms_When_InferredTerms_IsInSource (); + } + GUI.enabled = true; + } + GUILayout.EndHorizontal(); + } + + void OpenTool_ChangeCategoryOfSelectedTerms() + { + mCurrentViewMode = eViewMode.Tools; + mCurrentToolsMode = eToolsMode.Categorize; + if (!string.IsNullOrEmpty(mKeyToExplore) && !mSelectedKeys.Contains(mKeyToExplore)) + mSelectedKeys.Add(mKeyToExplore); + mSelectedKeys.Sort(); + } + + void OnGUI_SelectedCategories() + { + if (mParsedCategories.Count == 0) + return; + + string text = "Categories"; + if (mSelectedCategories.Count() == 0) + text = "Nothing"; + else + if (mSelectedCategories.Count() == mParsedCategories.Count) + text = "Everything"; + else + text = mSelectedCategories.Count + " categories"; + + if (GUILayout.Button(new GUIContent(text), "toolbarbutton", GUILayout.Width(100))) + { + var menu = new GenericMenu(); + + menu.AddItem(new GUIContent("Everything"), false, () => + { + mSelectedCategories.Clear(); + mSelectedCategories.AddRange(mParsedCategories); + ScheduleUpdateTermsToShowInList(); + }); + menu.AddItem(new GUIContent("Nothing"), false, () => + { + mSelectedCategories.Clear(); + ScheduleUpdateTermsToShowInList(); + }); + menu.AddSeparator(""); + + var parsedList = mParsedCategories.OrderBy(x=>x).ToList(); + for (int i=0, imax=parsedList.Count; ix.StartsWith(categoryRoot))), () => + { + var CatHeader = category + "/"; + if (mSelectedCategories.Contains(category)) + { + mSelectedCategories.Remove(category); + + if (isHeader) + { + mSelectedCategories.RemoveAll(x => x.StartsWith(CatHeader)); + } + } + else + { + mSelectedCategories.Add(category); + if (isHeader) + { + mSelectedCategories.AddRange( parsedList.Where(x=>x.StartsWith(CatHeader))); + } + } + ScheduleUpdateTermsToShowInList(); + }); + if (isHeader) + { + menu.AddSeparator(category+"/"); + } + } + + menu.ShowAsContext(); + } + } + + void SaveSelectedCategories() + { + if (mSelectedCategories.Count == 0) { + EditorPrefs.DeleteKey ("I2 CategoryFilter"); + } else { + var data = string.Join(",", mSelectedCategories.ToArray()); + EditorPrefs.SetString ("I2 CategoryFilter", data); + } + } + + void LoadSelectedCategories() + { + var data = EditorPrefs.GetString ("I2 CategoryFilter", null); + if (!string.IsNullOrEmpty(data)) + { + mSelectedCategories.Clear (); + mSelectedCategories.AddRange( data.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)); + } + } + + + // Bottom part of the Key list (buttons: All, None, Used,... to select the keys) + void OnGUI_Keys_ListSelection ( int KeyListFilterID ) + { + GUILayout.BeginHorizontal( "toolbarbutton" ); + + if (TestButton( eTest_ActionType.Button_SelectTerms_All, new GUIContent( "All", "Selects All Terms in the list" ), "toolbarbutton", GUILayout.ExpandWidth( false ) )) + { + mSelectedKeys.Clear(); + foreach (var kvp in mParsedTerms) + if (ShouldShowTerm( kvp.Value.Term, kvp.Value.Category, kvp.Value.Usage )) + mSelectedKeys.Add( kvp.Key ); + } + if (GUILayout.Button( new GUIContent( "None", "Clears the selection" ), "toolbarbutton", GUILayout.ExpandWidth( false ) )) { mSelectedKeys.Clear(); } + GUILayout.Space( 5 ); + + GUI.enabled = (mFlagsViewKeys & (int)eFlagsViewKeys.Used)>1; + if (TestButton(eTest_ActionType.Button_SelectTerms_Used, new GUIContent( "Used", "Selects All Terms referenced in the parsed scenes" ), "toolbarbutton", GUILayout.ExpandWidth( false ) )) + { + mSelectedKeys.Clear(); + foreach (var kvp in mParsedTerms) + if (kvp.Value.Usage > 0 && ShouldShowTerm( kvp.Value.Term, kvp.Value.Category, kvp.Value.Usage )) + mSelectedKeys.Add( kvp.Key ); + } + GUI.enabled = (mFlagsViewKeys & (int)eFlagsViewKeys.NotUsed)>1; + if (GUILayout.Button( new GUIContent( "Not Used", "Selects all Terms from the Source that are not been used" ), "toolbarbutton", GUILayout.ExpandWidth( false ) )) + { + mSelectedKeys.Clear(); + foreach (var kvp in mParsedTerms) + if (kvp.Value.Usage == 0 && ShouldShowTerm( kvp.Value.Term, kvp.Value.Category, kvp.Value.Usage )) + mSelectedKeys.Add( kvp.Key ); + } + + GUI.enabled = (mFlagsViewKeys & (int)eFlagsViewKeys.Missing)>1; + if (TestButton(eTest_ActionType.Button_SelectTerms_Missing, new GUIContent( "Missing", "Selects all Terms Used but not defined in the Source" ), "toolbarbutton", GUILayout.ExpandWidth( false ) )) + { + mSelectedKeys.Clear(); + foreach (var kvp in mParsedTerms) + if (!mLanguageSource.ContainsTerm( kvp.Key ) && ShouldShowTerm( kvp.Value.Term, kvp.Value.Category, kvp.Value.Usage )) + mSelectedKeys.Add( kvp.Key ); + } + GUI.enabled = true; + EditorGUI.BeginChangeCheck(); + + // Terms Filter + { + //KeyList_Filter = EditorGUILayout.TextField(KeyList_Filter, GUI.skin.GetStyle("ToolbarSeachTextField"), GUILayout.ExpandWidth(true)); + GUILayout.Label( "", GUILayout.ExpandWidth( true ) ); + mKeyListFilterRect = GUILayoutUtility.GetLastRect(); + mKeyListFilterRect.xMax += 4; + + KeyList_Filter = GUITools.TextField( mKeyListFilterRect, KeyList_Filter, 255, GUI.skin.GetStyle( "ToolbarSeachTextField" ), KeyListFilterID ); + } + + + + if (GUILayout.Button( string.Empty, string.IsNullOrEmpty( KeyList_Filter ) ? "ToolbarSeachCancelButtonEmpty" : "ToolbarSeachCancelButton", GUILayout.ExpandWidth( false ) )) + { + KeyList_Filter = string.Empty; + EditorApplication.update += RepaintScene; + GUI.FocusControl( "" ); + } + + string filterHelp = "Fiter Options:\ntext - shows all key/categories matching text\nc text - shows all terms of the text category\nf text - show terms having 'text' in their translations"; + GUILayout.Space(-5); + GUI.contentColor = new Color(1, 1, 1, 0.5f); + GUILayout.Label(new GUIContent(GUITools.Icon_Help.image, filterHelp), GUITools.DontExpandWidth); + GUI.contentColor = GUITools.White; + GUILayout.Space(-5); + + + + + if (EditorGUI.EndChangeCheck()) + { + mShowableTerms.Clear(); + GUI.changed = false; + } + + GUILayout.EndHorizontal(); + } + + + #endregion + + #region Filtering + + public bool ShouldShowTerm (string FullTerm) + { + ParsedTerm termData; + if (!mParsedTerms.TryGetValue(FullTerm, out termData)) + return false; + + return ShouldShowTerm (termData.Term, termData.Category, termData.Usage, termData); + } + + private static TermData ShowTerm_termData; + public static bool ShouldShowTerm (string Term, string Category, int nUses, ParsedTerm parsedTerm=null ) + { + if (!string.IsNullOrEmpty(Category) && !mSelectedCategories.Contains(Category)) + return false; + if (Term == "-") + return false; + + + var fullTerm = Term; + if (!string.IsNullOrEmpty(Category) && Category != LanguageSourceData.EmptyCategory) + fullTerm = Category + "/" + Term; + + if (parsedTerm != null && parsedTerm.termData != null) + ShowTerm_termData = parsedTerm.termData; + else + { + ShowTerm_termData = mLanguageSource.GetTermData (fullTerm); + if (parsedTerm!=null) + parsedTerm.termData = ShowTerm_termData; + } + + + var filter = KeyList_Filter.Trim(); + bool useTranslation = filter.StartsWith("f ", StringComparison.OrdinalIgnoreCase); + if (useTranslation) + { + if (ShowTerm_termData == null) + return false; + + filter = filter.Substring(2).Trim(); + if (!string.IsNullOrEmpty(filter)) + { + bool hasFilter = false; + for (int i = 0; i < ShowTerm_termData.Languages.Length; ++i) + { + if (!string.IsNullOrEmpty(ShowTerm_termData.Languages[i]) && StringContainsFilter(ShowTerm_termData.Languages[i], filter)) + { + hasFilter = true; + break; + } + } + if (!hasFilter) + return false; + } + } + else + { + bool onlyCategory = filter.StartsWith("c ", StringComparison.OrdinalIgnoreCase); + if (onlyCategory) + filter = filter.Substring(2).Trim(); + + if (!string.IsNullOrEmpty(filter)) + { + bool matchesCategory = StringContainsFilter(Category, filter); + bool matchesName = !onlyCategory && StringContainsFilter(Term, filter); + + if (!matchesCategory && !matchesName) + return false; + } + } + + + bool bIsMissing = ShowTerm_termData == null; + if (nUses<0) return true; + + if ((mFlagsViewKeys & (int)eFlagsViewKeys.Missing)>0 && bIsMissing) return true; + if ((mFlagsViewKeys & (int)eFlagsViewKeys.Missing)==0 && bIsMissing) return false; + + if ((mFlagsViewKeys & (int)eFlagsViewKeys.Used)>0 && nUses>0) return true; + if ((mFlagsViewKeys & (int)eFlagsViewKeys.NotUsed)>0 && nUses==0) return true; + + return false; + } + + static bool StringContainsFilter( string Term, string Filter ) + { + if (string.IsNullOrEmpty(Filter) || string.IsNullOrEmpty(Term)) + return true; + if (Term == "-") + return false; + Term = Term.ToLower(); + string[] Filters = Filter.ToLower().Split(";, ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); + for (int i = 0, imax = Filters.Length; i < imax; ++i) + if (Term.Contains(Filters[i])) + return true; + + return false; + } + + #endregion + + #region Add/Remove Keys to DB + + void AddTermsToSource() + { + if (!string.IsNullOrEmpty (mKeyToExplore) && !mSelectedKeys.Contains(mKeyToExplore)) + mSelectedKeys.Add (mKeyToExplore); + + for (int i=mSelectedKeys.Count-1; i>=0; --i) + { + string key = mSelectedKeys[i]; + + if (!ShouldShowTerm(key)) + continue; + + AddLocalTerm(key); + mSelectedKeys.RemoveAt(i); + } + SetAllTerms_When_InferredTerms_IsInSource (); + } + + void RemoveTermsFromSource() + { + if (mTestAction==eTest_ActionType.None && !EditorUtility.DisplayDialog("Confirm delete", "Are you sure you want to delete the selected terms", "Yes", "Cancel")) + return; + + if (!string.IsNullOrEmpty (mKeyToExplore) && !mSelectedKeys.Contains(mKeyToExplore)) + mSelectedKeys.Add (mKeyToExplore); + + for (int i=mSelectedKeys.Count-1; i>=0; --i) + { + string key = mSelectedKeys[i]; + + if (!ShouldShowTerm(key)) + continue; + + mLanguageSource.RemoveTerm(key); + RemoveParsedTerm(key); + mSelectedKeys.Remove(key); + } + + mKeyToExplore = string.Empty; + mTermList_MaxWidth = -1; + serializedObject.ApplyModifiedProperties(); + mLanguageSource.Editor_SetDirty(); + + EditorApplication.update += DoParseTermsInCurrentScene; + EditorApplication.update += RepaintScene; + } + + #endregion + + #region Select Objects in Current Scene + + + public static void SelectTerm( string Key, bool SwitchToKeysTab=false ) + { + GUI.FocusControl(null); + mKeyToExplore = Key; + mKeysDesc_AllowEdit = false; + if (SwitchToKeysTab) + mCurrentViewMode = eViewMode.Keys; + } + + + void SelectObjectsUsingKey( string Key ) + { + List SelectedObjs = FindObjectsUsingKey(Key); + + if (SelectedObjs.Count>0) + Selection.objects = SelectedObjs.ToArray(); + else + ShowWarning("The selected Terms are not used in this Scene. Try opening other scenes"); + } + + List FindObjectsUsingKey(string Key) + { + List SelectedObjs = new List(); + + Localize[] Locals = (Localize[])Resources.FindObjectsOfTypeAll(typeof(Localize)); + + if (Locals == null) + return SelectedObjs; + + for (int i = 0, imax = Locals.Length; i < imax; ++i) + { + Localize localize = Locals[i]; + if (localize == null || localize.gameObject == null || !GUITools.ObjectExistInScene(localize.gameObject)) + continue; + + string Term, SecondaryTerm; + localize.GetFinalTerms(out Term, out SecondaryTerm); + + if (Key == Term || Key == SecondaryTerm) + SelectedObjs.Add(localize.gameObject); + } + + return SelectedObjs; + } + + + #endregion + + + [MenuItem("Tools/I2 Localization/Refresh Localizations", false, 16)] + public static void CallLocalizeAll() + { + LocalizationManager.LocalizeAll(true); + HandleUtility.Repaint(); + } + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Terms.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Terms.cs.meta new file mode 100644 index 00000000..9384003c --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Terms.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 9f0230a94fc864d5bb1f2261de16edce +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Terms_Description.cs b/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Terms_Description.cs new file mode 100644 index 00000000..79f31ab4 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Terms_Description.cs @@ -0,0 +1,785 @@ +//#define UGUI +//#define NGUI + +using System; +using TMPro; +using UnityEditor; +using UnityEngine; +using Object = UnityEngine.Object; + +namespace I2.Loc +{ + public partial class LocalizationEditor + { + #region Variables + internal static bool mKeysDesc_AllowEdit; + internal static string GUI_SelectedSpecialization + { + get{ + if (string.IsNullOrEmpty(mGUI_SelectedSpecialization)) + mGUI_SelectedSpecialization = EditorPrefs.GetString ("I2Loc Specialization", "Any"); + return mGUI_SelectedSpecialization; + } + set{ + if (value!=mGUI_SelectedSpecialization) + EditorPrefs.SetString ("I2Loc Specialization", value); + mGUI_SelectedSpecialization = value; + } + } + internal static string mGUI_SelectedSpecialization; + + internal static bool GUI_ShowDisabledLanguagesTranslation = true; + + internal static int mShowPlural = -1; + #endregion + + #region Key Description + + void OnGUI_KeyList_ShowKeyDetails() + { + GUI.backgroundColor = Color.Lerp(Color.blue, Color.white, 0.9f); + GUILayout.BeginVertical(LocalizeInspector.GUIStyle_OldTextArea, GUILayout.Height(1)); + OnGUI_Keys_Languages(mKeyToExplore, null); + + GUILayout.BeginHorizontal(); + if (TestButton(eTest_ActionType.Button_DeleteTerm, "Delete", "Button", GUILayout.ExpandWidth(true))) + { + if (mTestAction != eTest_ActionType.None || EditorUtility.DisplayDialog("Confirm delete", "Are you sure you want to delete term '" + mKeyToExplore + "'", "Yes", "Cancel")) + EditorApplication.update += DeleteCurrentKey; + } + + if (GUILayout.Button("Rename")) + { + mCurrentViewMode = eViewMode.Tools; + mCurrentToolsMode = eToolsMode.Merge; + if (!mSelectedKeys.Contains(mKeyToExplore)) + mSelectedKeys.Add(mKeyToExplore); + } + GUILayout.EndHorizontal(); + GUILayout.EndVertical(); + GUI.backgroundColor = Color.white; + } + + void DeleteTerm( string Term, bool updateStructures = true ) + { + mLanguageSource.RemoveTerm (Term); + RemoveParsedTerm(Term); + mSelectedKeys.Remove(Term); + + if (Term==mKeyToExplore) + mKeyToExplore = string.Empty; + + if (updateStructures) + { + UpdateParsedCategories(); + mTermList_MaxWidth = -1; + serializedObject.ApplyModifiedProperties(); + mLanguageSource.Editor_SetDirty(); + ScheduleUpdateTermsToShowInList(); + } + EditorApplication.update += RepaintScene; + } + + void RepaintScene() + { + EditorApplication.update -= RepaintScene; + Repaint(); + } + + void DeleteCurrentKey() + { + EditorApplication.update -= DeleteCurrentKey; + DeleteTerm (mKeyToExplore); + + mKeyToExplore = ""; + EditorApplication.update += DoParseTermsInCurrentScene; + } + + TermData AddLocalTerm( string Term, bool AutoSelect = true ) + { + var data = AddTerm(Term, AutoSelect); + if (data==null) + return null; + + mTermList_MaxWidth = -1; + serializedObject.ApplyModifiedProperties(); + mLanguageSource.Editor_SetDirty(); + return data; + } + + static TermData AddTerm(string Term, bool AutoSelect = true, eTermType termType = eTermType.Text) + { + if (Term == "-" || string.IsNullOrEmpty(Term)) + return null; + + Term = I2Utils.GetValidTermName(Term, true); + + TermData data = mLanguageSource.AddTerm(Term, termType); + GetParsedTerm(Term); + string sCategory = LanguageSourceData.GetCategoryFromFullTerm(Term); + mParsedCategories.Add(sCategory); + + if (AutoSelect) + { + if (!mSelectedKeys.Contains(Term)) + mSelectedKeys.Add(Term); + + if (!mSelectedCategories.Contains(sCategory)) + mSelectedCategories.Add(sCategory); + } + ScheduleUpdateTermsToShowInList(); + mLanguageSource.Editor_SetDirty(); + return data; + } + + // this method shows the key description and the localization to each language + public static TermData OnGUI_Keys_Languages( string Key, Localize localizeCmp, bool IsPrimaryKey=true ) + { + if (Key==null) + Key = string.Empty; + + TermData termdata = null; + + LanguageSourceData source = mLanguageSource; + if (localizeCmp != null && localizeCmp.Source != null) + source = localizeCmp.Source.SourceData; + + if (source==null) + source = LocalizationManager.GetSourceContaining(Key, false); + + if (source==null) + { + if (localizeCmp == null) + source = LocalizationManager.Sources[0]; + else + source = LocalizationManager.GetSourceContaining(IsPrimaryKey ? localizeCmp.SecondaryTerm : localizeCmp.Term); + } + + + if (string.IsNullOrEmpty(Key)) + { + EditorGUILayout.HelpBox( "Select a Term to Localize", MessageType.Info ); + return null; + } + + termdata = source.GetTermData(Key); + if (termdata==null && localizeCmp!=null) + { + var realSource = LocalizationManager.GetSourceContaining(Key, false); + if (realSource != null) + { + termdata = realSource.GetTermData(Key); + source = realSource; + } + } + if (termdata==null) + { + if (Key == "-") + return null; + EditorGUILayout.HelpBox( string.Format("Key '{0}' is not Localized or it is in a different Language Source", Key), MessageType.Error ); + GUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + if (GUILayout.Button("Add Term to Source")) + { + var termType = eTermType.Text; + if (localizeCmp!=null && localizeCmp.mLocalizeTarget != null) + { + termType = IsPrimaryKey ? localizeCmp.mLocalizeTarget.GetPrimaryTermType(localizeCmp) + : localizeCmp.mLocalizeTarget.GetSecondaryTermType(localizeCmp); + } + + AddTerm(Key, true, termType); + } + GUILayout.FlexibleSpace(); + GUILayout.EndHorizontal(); + + return null; + } + + //--[ Type ]---------------------------------- + if (localizeCmp==null) + { + GUILayout.BeginHorizontal(); + GUILayout.Label ("Type:", GUILayout.ExpandWidth(false)); + eTermType NewType = (eTermType)EditorGUILayout.EnumPopup(termdata.TermType, GUILayout.ExpandWidth(true)); + if (termdata.TermType != NewType) + termdata.TermType = NewType; + GUILayout.EndHorizontal(); + } + + + //--[ Description ]--------------------------- + + mKeysDesc_AllowEdit = GUILayout.Toggle(mKeysDesc_AllowEdit, "Description", EditorStyles.foldout, GUILayout.ExpandWidth(true)); + + if (mKeysDesc_AllowEdit) + { + string NewDesc = EditorGUILayout.TextArea( termdata.Description, Style_WrapTextField ); + if (NewDesc != termdata.Description) + { + termdata.Description = NewDesc; + source.Editor_SetDirty(); + } + } + else + EditorGUILayout.HelpBox( string.IsNullOrEmpty(termdata.Description) ? "No description" : termdata.Description, MessageType.Info ); + + OnGUI_Keys_Language_SpecializationsBar (termdata, source); + + OnGUI_Keys_Languages(Key, ref termdata, localizeCmp, IsPrimaryKey, source); + return termdata; + } + + static void OnGUI_Keys_Languages( string Key, ref TermData termdata, Localize localizeCmp, bool IsPrimaryKey, LanguageSourceData source ) + { + //--[ Languages ]--------------------------- + GUILayout.BeginVertical(LocalizeInspector.GUIStyle_OldTextArea, GUILayout.Height(1)); + + OnGUI_Keys_LanguageTranslations(Key, localizeCmp, IsPrimaryKey, ref termdata, source); + + if (termdata.TermType == eTermType.Text) + { + GUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + if (TestButton(eTest_ActionType.Button_Term_TranslateAll, "Translate All", "Button", GUILayout.Width(85))) + { + var termData = termdata; + GUITools.DelayedCall(() => TranslateLanguage( Key, termData, localizeCmp, source)); + GUI.FocusControl(string.Empty); + } + GUILayout.EndHorizontal(); + OnGUI_TranslatingMessage(); + } + GUILayout.EndVertical(); + } + + static void TranslateLanguage( string Key, TermData termdata, Localize localizeCmp, LanguageSourceData source) + { + ClearErrors(); + string mainText = localizeCmp == null ? LanguageSourceData.GetKeyFromFullTerm(Key) : localizeCmp.GetMainTargetsText(); + + for (int i = 0; i < source.mLanguages.Count; ++i) + if (source.mLanguages[i].IsEnabled() && string.IsNullOrEmpty(termdata.Languages[i])) + { + var langIdx = i; + var term = termdata; + var i2source = source; + Translate(mainText, ref termdata, source.mLanguages[i].Code, + (translation, error) => + { + if (error != null) + ShowError(error); + else + if (translation != null) + { + term.Languages[langIdx] = translation; //SetTranslation(langIdx, translation); + i2source.Editor_SetDirty(); + } + }, null); + } + } + + static void OnGUI_TranslatingMessage() + { + if (GoogleTranslation.IsTranslating()) + { + // Connection Status Bar + int time = (int)(Time.realtimeSinceStartup % 2 * 2.5); + string Loading = "Translating" + ".....".Substring(0, time); + GUI.color = Color.gray; + GUILayout.BeginHorizontal(LocalizeInspector.GUIStyle_OldTextArea); + GUILayout.Label(Loading, EditorStyles.miniLabel); + GUI.color = Color.white; + if (GUILayout.Button("Cancel", EditorStyles.toolbarButton, GUILayout.ExpandWidth(false))) + { + GoogleTranslation.CancelCurrentGoogleTranslations(); + } + GUILayout.EndHorizontal(); + HandleUtility.Repaint (); + } + } + + static void OnGUI_Keys_Language_SpecializationsBar(TermData termData, LanguageSourceData source) + { + var activeSpecializations = termData.GetAllSpecializations(); + + GUILayout.BeginHorizontal(); + + var TabStyle = new GUIStyle(GUI.skin.FindStyle("dragtab")); + TabStyle.fixedHeight = 0; + + //var ss = GUI.skin.FindStyle("TL tab left"); + var TabOpenStyle = new GUIStyle(GUI.skin.FindStyle("minibuttonmid")); + TabOpenStyle.margin.right = -1; + var TabCloseStyle = new GUIStyle(EditorStyles.label); + //var TabCloseStyle = new GUIStyle(GUI.skin.FindStyle("TL tab right")); + TabCloseStyle.margin.left = -1; + TabCloseStyle.padding.left=4; + + //-- Specialization Tabs ----- + + var prevSpecialization = "Any"; + foreach (var specialization in SpecializationManager.Singleton.mSpecializations) + { + if (!activeSpecializations.Contains(specialization) && specialization != GUI_SelectedSpecialization) + continue; + + bool isActive = specialization == GUI_SelectedSpecialization; + var labelContent = new GUIContent(specialization, "Specialization of the main translation (i.e. variants that show only on specific platforms or devices)\nThis allows using 'tap' instead of 'click' for touch devices."); + + if (isActive && activeSpecializations.Count>1) + { + GUILayout.BeginHorizontal(TabOpenStyle); + GUILayout.Toggle(isActive, labelContent, TabStyle, GUILayout.Height(20), GUILayout.ExpandWidth(false)); + //GUILayout.Label(labelContent, TabOpenStyle); + if (specialization != "Any" && GUILayout.Button("x", TabCloseStyle, GUILayout.Width(15))) + { + termData.RemoveSpecialization(specialization); + GUI_SelectedSpecialization = prevSpecialization; + GUI.FocusControl(null); + } + GUILayout.EndHorizontal(); + } + else + if (GUILayout.Toggle(isActive, labelContent, TabStyle, GUILayout.Height(25), GUILayout.ExpandWidth(false)) && !isActive) + { + GUI_SelectedSpecialization = specialization; + GUI.FocusControl(null); + } + } + + + //-- Add new Specialization ----- + int newIndex = EditorGUILayout.Popup(-1, SpecializationManager.Singleton.mSpecializations, "DropDown", GUILayout.Width(20)); + if (newIndex>=0) + { + string newSpecialization = SpecializationManager.Singleton.mSpecializations[newIndex]; + if (!activeSpecializations.Contains(newSpecialization)) + { + for (int iLang = 0; iLang < source.mLanguages.Count; ++iLang) + { + string Translation = termData.GetTranslation(iLang, GUI_SelectedSpecialization, editMode: true); + termData.SetTranslation(iLang, Translation, GUI_SelectedSpecialization); + } + GUI_SelectedSpecialization = newSpecialization; + } + } + + GUILayout.FlexibleSpace(); + + + GUI_ShowDisabledLanguagesTranslation = GUILayout.Toggle(GUI_ShowDisabledLanguagesTranslation, new GUIContent("L", "Show Disabled Languages"), "Button", GUILayout.ExpandWidth(false)); + GUILayout.EndHorizontal(); + GUILayout.Space(-3); + } + + static void OnGUI_Keys_LanguageTranslations (string Key, Localize localizeCmp, bool IsPrimaryKey, ref TermData termdata, LanguageSourceData source) + { + bool IsSelect = Event.current.type==EventType.MouseUp; + for (int i=0; i< source.mLanguages.Count; ++ i) + { + bool forcePreview = false; + bool isEnabledLanguage = source.mLanguages[i].IsEnabled(); + + if (!isEnabledLanguage) + { + if (!GUI_ShowDisabledLanguagesTranslation) + continue; + GUI.color = new Color(GUI.color.r, GUI.color.g, GUI.color.b, 0.35f); + } + GUILayout.BeginHorizontal(); + + if (GUILayout.Button(source.mLanguages[i].Name, EditorStyles.label, GUILayout.Width(100))) + forcePreview = true; + + + string Translation = termdata.GetTranslation(i, GUI_SelectedSpecialization, editMode:true); + if (Translation == null) Translation = string.Empty; + +// if (termdata.Languages[i] != termdata.Languages_Touch[i] && !string.IsNullOrEmpty(termdata.Languages[i]) && !string.IsNullOrEmpty(termdata.Languages_Touch[i])) +// GUI.contentColor = GUITools.LightYellow; + + if (termdata.TermType == eTermType.Text || termdata.TermType==eTermType.Child) + { + EditorGUI.BeginChangeCheck (); + string CtrName = "TranslatedText"+i; + GUI.SetNextControlName(CtrName); + + EditPluralTranslations (ref Translation, i, source.mLanguages[i].Code); + //Translation = EditorGUILayout.TextArea(Translation, Style_WrapTextField, GUILayout.Width(Screen.width - 260 - (autoTranslated ? 20 : 0))); + if (EditorGUI.EndChangeCheck ()) + { + termdata.SetTranslation(i, Translation, GUI_SelectedSpecialization); + source.Editor_SetDirty(); + forcePreview = true; + } + + if (localizeCmp!=null && + (forcePreview || /*GUI.changed || */GUI.GetNameOfFocusedControl()==CtrName && IsSelect)) + { + if (IsPrimaryKey && string.IsNullOrEmpty(localizeCmp.Term)) + { + localizeCmp.mTerm = Key; + } + + if (!IsPrimaryKey && string.IsNullOrEmpty(localizeCmp.SecondaryTerm)) + { + localizeCmp.mTermSecondary = Key; + } + + string PreviousLanguage = LocalizationManager.CurrentLanguage; + LocalizationManager.PreviewLanguage(source.mLanguages[i].Name); + if (forcePreview || IsSelect) + LocalizationManager.LocalizeAll(); + else + localizeCmp.OnLocalize(true); + LocalizationManager.PreviewLanguage(PreviousLanguage); + EditorUtility.SetDirty(localizeCmp); + } + GUI.contentColor = Color.white; + + //if (autoTranslated) + //{ + // if (GUILayout.Button(new GUIContent("\u2713"/*"A"*/,"Translated by Google Translator\nClick the button to approve the translation"), EditorStyles.toolbarButton, GUILayout.Width(autoTranslated ? 20 : 0))) + // { + // termdata.Flags[i] &= (byte)(byte.MaxValue ^ (byte)(GUI_SelectedSpecialization==0 ? TranslationFlag.AutoTranslated_Normal : TranslationFlag.AutoTranslated_Touch)); + // } + //} + + if (termdata.TermType == eTermType.Text) + { + if (TestButtonArg(eTest_ActionType.Button_Term_Translate, i, new GUIContent("T", "Translate"), EditorStyles.toolbarButton, GUILayout.Width(20))) + { + var termData = termdata; + var indx = i; + var key = Key; + GUITools.DelayedCall(()=>TranslateTerm(key, termData, source, indx)); + GUI.FocusControl(string.Empty); + } + } + } + else + { + string MultiSpriteName = string.Empty; + + if (termdata.TermType==eTermType.Sprite && Translation.EndsWith("]", StringComparison.Ordinal)) // Handle sprites of type (Multiple): "SpritePath[SpriteName]" + { + int idx = Translation.LastIndexOf("[", StringComparison.Ordinal); + int len = Translation.Length-idx-2; + MultiSpriteName = Translation.Substring(idx+1, len); + Translation = Translation.Substring(0, idx); + } + + Object Obj = null; + + // Try getting the asset from the References section + if (localizeCmp!=null) + Obj = localizeCmp.FindTranslatedObject(Translation); + if (Obj==null && source != null) + Obj = source.FindAsset(Translation); + + // If it wasn't in the references, Load it from Resources + if (Obj==null && localizeCmp==null) + Obj = ResourceManager.pInstance.LoadFromResources(Translation); + + Type ObjType = typeof(Object); + switch (termdata.TermType) + { + case eTermType.Font : ObjType = typeof(Font); break; + case eTermType.Texture : ObjType = typeof(Texture); break; + case eTermType.AudioClip : ObjType = typeof(AudioClip); break; + case eTermType.GameObject : ObjType = typeof(GameObject); break; + case eTermType.Sprite : ObjType = typeof(Sprite); break; + case eTermType.Material : ObjType = typeof(Material); break; + case eTermType.Mesh : ObjType = typeof(Mesh); break; +#if NGUI + case eTermType.UIAtlas : ObjType = typeof(UIAtlas); break; + case eTermType.UIFont : ObjType = typeof(UIFont); break; +#endif +#if TK2D + case eTermType.TK2dFont : ObjType = typeof(tk2dFont); break; + case eTermType.TK2dCollection : ObjType = typeof(tk2dSpriteCollection); break; +#endif + +#if TextMeshPro + case eTermType.TextMeshPFont : ObjType = typeof(TMP_FontAsset); break; +#endif + +#if SVG + case eTermType.SVGAsset : ObjType = typeof(SVGImporter.SVGAsset); break; +#endif + + case eTermType.Object : ObjType = typeof(Object); break; + } + + if (Obj!=null && !string.IsNullOrEmpty(MultiSpriteName)) + { + string sPath = AssetDatabase.GetAssetPath(Obj); + Object[] objs = AssetDatabase.LoadAllAssetRepresentationsAtPath(sPath); + Obj = null; + for (int j=0, jmax=objs.Length; j + { + term.SetTranslation(langIdx, translation, specialization); + i2source.Editor_SetDirty(); + }, specialization); + } + + static void EditPluralTranslations( ref string translation, int langIdx, string langCode ) + { + bool hasParameters = false; + int paramStart = translation.IndexOf("{["); + hasParameters = paramStart >= 0 && translation.IndexOf ("]}", paramStart) > 0; + + if (mShowPlural == langIdx && string.IsNullOrEmpty (translation)) + mShowPlural = -1; + + bool allowPlural = hasParameters || translation.Contains("[i2p_"); + + if (allowPlural) + { + if (GUILayout.Toggle (mShowPlural == langIdx, "", EditorStyles.foldout, GUILayout.Width (13))) + mShowPlural = langIdx; + else if (mShowPlural == langIdx) + mShowPlural = -1; + + GUILayout.Space (-5); + } + + string finalTranslation = ""; + bool unfolded = mShowPlural == langIdx; + bool isPlural = allowPlural && translation.Contains("[i2p_"); + if (unfolded) + GUILayout.BeginVertical ("Box"); + + ShowPluralTranslation("Plural", langCode, translation, ref finalTranslation, true, unfolded, unfolded|isPlural ); + ShowPluralTranslation("Zero", langCode, translation, ref finalTranslation, unfolded, true, true ); + ShowPluralTranslation("One", langCode, translation, ref finalTranslation, unfolded, true, true ); + ShowPluralTranslation("Two", langCode, translation, ref finalTranslation, unfolded, true, true ); + ShowPluralTranslation("Few", langCode, translation, ref finalTranslation, unfolded, true, true ); + ShowPluralTranslation("Many", langCode, translation, ref finalTranslation, unfolded, true, true ); + + if (unfolded) + GUILayout.EndVertical (); + + translation = finalTranslation; + } + + static void ShowPluralTranslation(string pluralType, string langCode, string translation, ref string finalTranslation, bool show, bool allowDelete, bool showTag ) + { + string tag = "[i2p_" + pluralType + "]"; + int idx0 = translation.IndexOf (tag, StringComparison.OrdinalIgnoreCase); + bool hasTranslation = idx0 >= 0 || pluralType=="Plural"; + if (idx0 < 0) idx0 = 0; + else idx0 += tag.Length; + + int idx1 = translation.IndexOf ("[i2p_", idx0, StringComparison.OrdinalIgnoreCase); + if (idx1 < 0) idx1 = translation.Length; + + var pluralTranslation = translation.Substring(idx0, idx1-idx0); + var newTrans = pluralTranslation; + + bool allowPluralForm = GoogleLanguages.LanguageHasPluralType (langCode, pluralType); + + if (hasTranslation && !allowPluralForm) { + newTrans = ""; + GUI.changed = true; + } + + if (show && allowPluralForm) + { + if (!hasTranslation) + GUI.color = new Color(GUI.color.r, GUI.color.g, GUI.color.b, 0.35f); + + GUILayout.BeginHorizontal (); + if (showTag) + GUILayout.Label (pluralType, EditorStyles.miniLabel, GUILayout.Width(35)); + newTrans = EditorGUILayout.TextArea (pluralTranslation, Style_WrapTextField); + + if (allowDelete && GUILayout.Button("X", EditorStyles.toolbarButton, GUILayout.Width(15))) + { + newTrans = string.Empty; + GUI.changed = true; + GUIUtility.keyboardControl = 0; + } + + GUILayout.EndHorizontal (); + if (!hasTranslation) + GUI.color = new Color(GUI.color.r, GUI.color.g, GUI.color.b, 1); + } + + if (!string.IsNullOrEmpty (newTrans)) + { + if (hasTranslation || newTrans != pluralTranslation) + { + if (pluralType != "Plural") + finalTranslation += tag; + finalTranslation += newTrans; + } + } + } + + /*static public int DrawTranslationTabs( int Index ) + { + GUIStyle MyStyle = new GUIStyle(GUI.skin.FindStyle("dragtab")); + MyStyle.fixedHeight=0; + + GUILayout.BeginHorizontal(); + for (int i=0; i mSelectedScenes = new List(); + + public enum eToolsMode { Parse, Categorize, Merge, NoLocalized, Script, CharSet } + public eToolsMode mCurrentToolsMode = eToolsMode.Parse; + + #endregion + + #region GUI + + void OnGUI_Tools( bool reset ) + { + GUILayout.Space(10); + eToolsMode OldMode = mCurrentToolsMode; + mCurrentToolsMode = (eToolsMode)GUITools.DrawShadowedTabs ((int)mCurrentToolsMode, new[]{"Parse", "Categorize", "Merge", "No Localized", "Script", "CharSet"}, 30); + if (mCurrentToolsMode != OldMode || reset) + { + ClearErrors(); + if (mCurrentToolsMode == eToolsMode.Script) + SelectTermsFromScriptLocalization(); + OnGUI_ScenesList_SelectAllScenes(true); + } + + switch (mCurrentToolsMode) + { + case eToolsMode.Parse : OnGUI_Tools_ParseTerms(); break; + case eToolsMode.Categorize : OnGUI_Tools_Categorize(); break; + case eToolsMode.Merge : OnGUI_Tools_MergeTerms(); break; + case eToolsMode.NoLocalized : OnGUI_Tools_NoLocalized(); break; + case eToolsMode.Script : OnGUI_Tools_Script(); break; + case eToolsMode.CharSet : OnGUI_Tools_CharSet(); break; + } + OnGUI_ShowMsg(); + } + + #endregion + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Tools.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Tools.cs.meta new file mode 100644 index 00000000..f712a581 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Tools.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 3fa4621ebd4134e1989b73eb3f7b864f +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Tools_Categorize.cs b/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Tools_Categorize.cs new file mode 100644 index 00000000..11a6c386 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Tools_Categorize.cs @@ -0,0 +1,226 @@ +using System; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +namespace I2.Loc +{ + public partial class LocalizationEditor + { + #region Variables + + Vector2 mScrollPos_CategorizedKeys = Vector2.zero; + string mNewCategory = string.Empty; + + #endregion + + #region GUI + + void OnGUI_Tools_Categorize() + { + OnGUI_ScenesList(true); + + GUI.backgroundColor = Color.Lerp (Color.gray, Color.white, 0.2f); + GUILayout.BeginVertical(LocalizeInspector.GUIStyle_OldTextArea, GUILayout.Height(1)); + GUI.backgroundColor = Color.white; + GUILayout.Space (5); + + EditorGUILayout.HelpBox("This tool changes the category of the selected Terms and updates the highlighted scenes", MessageType.Info); + + GUILayout.Space (5); + GUITools.CloseHeader(); + + OnGUI_Tools_Categorize_Terms(); + OnGUI_NewOrExistingCategory(); + } + + void OnGUI_Tools_Categorize_Terms() + { + GUILayout.Label("Change Category of the following Terms:", EditorStyles.toolbarButton, GUILayout.ExpandWidth(true)); + + GUI.backgroundColor = Color.Lerp(GUITools.LightGray, Color.white, 0.5f); + mScrollPos_CategorizedKeys = GUILayout.BeginScrollView( mScrollPos_CategorizedKeys, LocalizeInspector.GUIStyle_OldTextArea, GUILayout.Height ( 100)); + GUI.backgroundColor = Color.white; + + if (mSelectedKeys.Count==0) + { + GUILayout.FlexibleSpace(); + + GUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + //GUILayout.BeginVertical(); + EditorGUILayout.HelpBox("No Terms has been selected", MessageType.Warning); + /*if (GUILayout.Button("Select Terms", EditorStyles.toolbarButton, GUILayout.ExpandWidth(true))) + mCurrentViewMode = eViewMode.Keys;*/ + //GUILayout.EndVertical(); + GUILayout.FlexibleSpace(); + GUILayout.EndHorizontal(); + + GUILayout.FlexibleSpace(); + } + else + { + bool DoubleColumn = mSelectedKeys.Count>5; + int HalfCount = Mathf.CeilToInt(mSelectedKeys.Count/2.0f); + + for (int i=0, imax=mSelectedKeys.Count; i=HalfCount) break; + + GUILayout.BeginHorizontal(); + OnGUI_CategorizedTerm(mSelectedKeys[i]); + + if (DoubleColumn && i+HalfCount Categories = LocalizationManager.GetCategories(); + + for (int i=0, imax=Categories.Count; i TermReplacements; + + void AssignCategoryToSelectedTerms() + { + mIsParsing = true; + + EditorApplication.update -= AssignCategoryToSelectedTerms; + + mNewCategory = mNewCategory.Trim (LanguageSourceData.CategorySeparators); + + if (mNewCategory==LanguageSourceData.EmptyCategory) + mNewCategory = string.Empty; + + TermReplacements = new Dictionary(StringComparer.Ordinal); + for (int i=mSelectedKeys.Count-1; i>=0; --i) + { + string sKey, sCategory; + string OldTerm = mSelectedKeys[i]; + + LanguageSourceData.DeserializeFullTerm( OldTerm, out sKey, out sCategory ); + if (!string.IsNullOrEmpty(mNewCategory)) + sKey = string.Concat(mNewCategory, "/", sKey); + + if (OldTerm == sKey) + continue; + + TermReplacements[ OldTerm ] = sKey; + if (!mLanguageSource.ContainsTerm(sKey)) + { + TermData termData = mLanguageSource.GetTermData( OldTerm ); + if (termData != null) + termData.Term = sKey; + else + TermReplacements.Remove (OldTerm); + mLanguageSource.Editor_SetDirty(); + } + } + if (TermReplacements.Count<=0) + { + ShowError ("Unable to assign category: Terms were not found in the selected LanguageSource"); + } + else + { + mLanguageSource.UpdateDictionary(true); + ExecuteActionOnSelectedScenes( ReplaceTermsInCurrentScene ); + ParseTerms(true, false, true); + + if (string.IsNullOrEmpty(mNewCategory)) + mNewCategory = LanguageSourceData.EmptyCategory; + if (!mSelectedCategories.Contains(mNewCategory)) + mSelectedCategories.Add (mNewCategory); + //RemoveUnusedCategoriesFromSelected(); + ScheduleUpdateTermsToShowInList(); + } + TermReplacements = null; + mIsParsing = false; + } + + public static void ReplaceTermsInCurrentScene() + { + Localize[] Locals = (Localize[])Resources.FindObjectsOfTypeAll(typeof(Localize)); + + if (Locals==null) + return; + + bool changed = false; + for (int i=0, imax=Locals.Length; i mCharSetTool_Languages = new List(); + string mCharSet = string.Empty; + bool mCharSetTool_CaseSensitive; + + #endregion + + #region GUI Generate Script + + void OnGUI_Tools_CharSet() + { + bool computeSet = false; + + // remove missing languages + for (int i=mCharSetTool_Languages.Count-1; i>=0; --i) + { + if (mLanguageSource.GetLanguageIndex(mCharSetTool_Languages[i])<0) + mCharSetTool_Languages.RemoveAt(i); + } + + GUILayout.BeginHorizontal (EditorStyles.toolbar); + GUILayout.Label ("Languages:", EditorStyles.miniLabel, GUILayout.ExpandWidth(true)); + if (GUILayout.Button ("All", EditorStyles.toolbarButton, GUILayout.ExpandWidth(false))) + { + mCharSetTool_Languages.Clear (); + mCharSetTool_Languages.AddRange (mLanguageSource.mLanguages.Select(x=>x.Name)); + computeSet = true; + } + if (GUILayout.Button ("None", EditorStyles.toolbarButton, GUILayout.ExpandWidth(false))) + { + mCharSetTool_Languages.Clear (); + computeSet = true; + } + if (GUILayout.Button ("Invert", EditorStyles.toolbarButton, GUILayout.ExpandWidth(false))) + { + var current = mCharSetTool_Languages.ToList (); + mCharSetTool_Languages.Clear (); + mCharSetTool_Languages.AddRange (mLanguageSource.mLanguages.Select(x=>x.Name).Where(j=>!current.Contains(j))); + computeSet = true; + } + + + GUILayout.EndHorizontal (); + + //--[ Language List ]-------------------------- + + GUI.backgroundColor = Color.Lerp(GUITools.LightGray, Color.white, 0.5f); + mScrollPos_Languages = GUILayout.BeginScrollView( mScrollPos_Languages, LocalizeInspector.GUIStyle_OldTextArea, GUILayout.MinHeight (100), GUILayout.MaxHeight(Screen.height), GUILayout.ExpandHeight(false)); + GUI.backgroundColor = Color.white; + + for (int i=0, imax=mLanguageSource.mLanguages.Count; i (); + var LanIndexes = new List (); + for (int i=0; i c).ToArray() ); + mCharSet = Encoding.UTF8.GetString(bytes); + } + + void AppendToCharSet( HashSet sb, string text, bool isRTL ) + { + if (string.IsNullOrEmpty (text)) + return; + + text = RemoveTagsPrefix(text, "[i2p_"); + text = RemoveTagsPrefix(text, "[i2s_"); + + if (isRTL) + text = RTLFixer.Fix( text ); + + foreach (char c in text) + { + if (!mCharSetTool_CaseSensitive) + { + sb.Add(char.ToLowerInvariant(c)); + sb.Add(char.ToUpperInvariant(c)); + } + else + sb.Add(c); + } + } + + // Given "[i2p_" it removes all tags that start with that (e.g. [i2p_Zero] [i2p_One], etc) + string RemoveTagsPrefix(string text, string tagPrefix) + { + int idx = 0; + while (idx < text.Length) + { + idx = text.IndexOf(tagPrefix); + if (idx < 0) + break; + + int idx2 = text.IndexOf(']', idx); + if (idx2 < 0) + break; + + text = text.Remove(idx, idx2 - idx+1); + } + return text; + + } + + + + #endregion + } +} diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Tools_CharSet.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Tools_CharSet.cs.meta new file mode 100644 index 00000000..e54fcfa8 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Tools_CharSet.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 104713279df05ac4b96f5a76ab621c8a +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Tools_MergeTerms.cs b/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Tools_MergeTerms.cs new file mode 100644 index 00000000..1821c26e --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Tools_MergeTerms.cs @@ -0,0 +1,157 @@ +using System; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +namespace I2.Loc +{ + public partial class LocalizationEditor + { + #region Variables + + #endregion + + #region GUI + + void OnGUI_Tools_MergeTerms() + { + OnGUI_ScenesList(true); + + GUI.backgroundColor = Color.Lerp (Color.gray, Color.white, 0.2f); + GUILayout.BeginVertical(LocalizeInspector.GUIStyle_OldTextArea, GUILayout.Height(1)); + GUI.backgroundColor = Color.white; + GUILayout.Space (5); + + EditorGUILayout.HelpBox("This option replace all occurrences of this key in the selected scenes", MessageType.Info); + + GUILayout.Space (5); + GUITools.CloseHeader(); + + OnGUI_Tools_Categorize_Terms(); + OnGUI_NewOrExistingTerm(); + } + + void OnGUI_NewOrExistingTerm() + { + if (mKeyToExplore==null) + mKeyToExplore = string.Empty; + + GUI.backgroundColor = Color.Lerp (Color.gray, Color.white, 0.2f); + GUILayout.BeginVertical(LocalizeInspector.GUIStyle_OldTextArea, GUILayout.Height(1)); + GUI.backgroundColor = Color.white; + GUILayout.Space(5); + GUILayout.Label("Replace By:"); + GUILayout.EndVertical(); + + //--[ Create Term ]------------------------ + GUILayout.BeginHorizontal(); + mKeyToExplore = GUILayout.TextField(mKeyToExplore, EditorStyles.toolbarTextField, GUILayout.ExpandWidth(true)); + if (GUILayout.Button("Create", "toolbarbutton", GUILayout.Width(60))) + { + LanguageSourceData.ValidateFullTerm( ref mKeyToExplore ); + EditorApplication.update += ReplaceSelectedTerms; + } + GUILayout.EndHorizontal(); + + //--[ Existing Term ]------------------------ + int Index = 0; + List Terms = mLanguageSource.GetTermsList(); + + for (int i=0, imax=Terms.Count; i(StringComparer.Ordinal); + for (int i=mSelectedKeys.Count-1; i>=0; --i) + { + string OldTerm = mSelectedKeys[i]; + if (OldTerm == sNewKey) + continue; + + TermReplacements[ OldTerm ] = mKeyToExplore; + DeleteTerm(OldTerm); + } + ExecuteActionOnSelectedScenes( ReplaceTermsInCurrentScene ); + DoParseTermsInCurrentScene(); + + //--[ Update Selected Categories ]------------- + string mNewCategory = LanguageSourceData.GetCategoryFromFullTerm(sNewKey); + if (mNewCategory == string.Empty) + mNewCategory = LanguageSourceData.EmptyCategory; + if (!mSelectedCategories.Contains(mNewCategory)) + mSelectedCategories.Add (mNewCategory); + //RemoveUnusedCategoriesFromSelected(); + ScheduleUpdateTermsToShowInList(); + TermReplacements = null; + mIsParsing = false; + } + + void RemoveUnusedCategoriesFromSelected() + { + List Categories = LocalizationManager.GetCategories(); + for (int i=mSelectedCategories.Count-1; i>=0; --i) + if (!Categories.Contains( mSelectedCategories[i] )) + mSelectedCategories.RemoveAt(i); + + if (mSelectedCategories.Count == 0) + mSelectedCategories.AddRange(Categories); + + ScheduleUpdateTermsToShowInList(); + } + + #endregion + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Tools_MergeTerms.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Tools_MergeTerms.cs.meta new file mode 100644 index 00000000..52785835 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Tools_MergeTerms.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: d59fa53e0df75a34693c4673bba5ed94 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Tools_NoLocalized.cs b/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Tools_NoLocalized.cs new file mode 100644 index 00000000..04b97248 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Tools_NoLocalized.cs @@ -0,0 +1,163 @@ +using System.Collections.Generic; +using TMPro; +using UnityEditor; +using UnityEngine; +using UnityEngine.UI; + +namespace I2.Loc +{ + public partial class LocalizationEditor + { + #region Variables + static string _Tools_NoLocalized_Include, + _Tools_NoLocalized_Exclude; + const string _Help_Tool_NoLocalized = "This selects all labels in the current scene that don't have a Localized component.\n\nWhen Include or Exclude are set, labels will be filtered based on those settings.Separate by (,) if multiple strings are used.\n(e.g. Include:\"example,tutorial\")"; + #endregion + + #region GUI Find NoLocalized Terms + + void OnGUI_Tools_NoLocalized() + { + //OnGUI_ScenesList(); + + if (_Tools_NoLocalized_Include==null) + { + _Tools_NoLocalized_Include = EditorPrefs.GetString ("_Tools_NoLocalized_Include", string.Empty); + _Tools_NoLocalized_Exclude = EditorPrefs.GetString ("_Tools_NoLocalized_Exclude", string.Empty); + } + + GUILayout.Space (5); + + GUI.backgroundColor = Color.Lerp (Color.gray, Color.white, 0.2f); + GUILayout.BeginVertical(LocalizeInspector.GUIStyle_OldTextArea, GUILayout.Height(1)); + GUI.backgroundColor = Color.white; + + EditorGUILayout.HelpBox(_Help_Tool_NoLocalized, MessageType.Info); + + GUILayout.Space(5); + GUILayout.BeginHorizontal(); + GUILayout.Label ("Include:", GUILayout.Width(60)); + _Tools_NoLocalized_Include = EditorGUILayout.TextArea(_Tools_NoLocalized_Include, GUILayout.ExpandWidth(true)); + GUILayout.EndHorizontal(); + + GUILayout.BeginHorizontal(); + GUILayout.Label ("Exclude:", GUILayout.Width(60)); + _Tools_NoLocalized_Exclude = EditorGUILayout.TextArea(_Tools_NoLocalized_Exclude, GUILayout.ExpandWidth(true)); + GUILayout.EndHorizontal(); + + GUILayout.Space (5); + + GUILayout.BeginHorizontal (); + GUILayout.FlexibleSpace(); + if (GUILayout.Button("Select No Localized Labels")) + EditorApplication.update += SelectNoLocalizedLabels; + GUILayout.FlexibleSpace(); + GUILayout.EndHorizontal(); + + GUILayout.EndVertical(); + } + + #endregion + + + #region Find No Localized + + void SelectNoLocalizedLabels() + { + EditorPrefs.SetString ("_Tools_NoLocalized_Include", _Tools_NoLocalized_Include); + EditorPrefs.SetString ("_Tools_NoLocalized_Exclude", _Tools_NoLocalized_Exclude); + + EditorApplication.update -= SelectNoLocalizedLabels; + + List labels = new List(); + + TextMesh[] textMeshes = (TextMesh[])Resources.FindObjectsOfTypeAll(typeof(TextMesh)); + if (textMeshes!=null && textMeshes.Length>0) + labels.AddRange(textMeshes); + +#if NGUI + UILabel[] uiLabels = (UILabel[])Resources.FindObjectsOfTypeAll(typeof(UILabel)); + if (uiLabels!=null && uiLabels.Length>0) + labels.AddRange(uiLabels); +#endif + Text[] uiTexts = (Text[])Resources.FindObjectsOfTypeAll(typeof(Text)); + if (uiTexts!=null && uiTexts.Length>0) + labels.AddRange(uiTexts); +#if TextMeshPro + TextMeshPro[] tmpText = (TextMeshPro[])Resources.FindObjectsOfTypeAll(typeof(TextMeshPro)); + if (tmpText!=null && tmpText.Length>0) + labels.AddRange(tmpText); + + TextMeshProUGUI[] uiTextsUGUI = (TextMeshProUGUI[])Resources.FindObjectsOfTypeAll(typeof(TextMeshProUGUI)); + if (uiTextsUGUI!=null && uiTextsUGUI.Length>0) + labels.AddRange(uiTextsUGUI); +#endif +#if TK2D + tk2dTextMesh[] tk2dTM = (tk2dTextMesh[])Resources.FindObjectsOfTypeAll(typeof(tk2dTextMesh)); + if (tk2dTM!=null && tk2dTM.Length>0) + labels.AddRange(tk2dTM); +#endif + + if (labels.Count==0) + return; + + string[] Includes = null; + string[] Excludes = null; + + if (!string.IsNullOrEmpty (_Tools_NoLocalized_Include)) + Includes = _Tools_NoLocalized_Include.ToLower().Split(',', ';'); + + if (!string.IsNullOrEmpty (_Tools_NoLocalized_Exclude)) + Excludes = _Tools_NoLocalized_Exclude.ToLower().Split(',', ';'); + + List Objs = new List(); + + for (int i=0, imax=labels.Count; i()!=null) + continue; + + if (ShouldFilter(label.name.ToLower(), Includes, Excludes)) + continue; + + Objs.Add( labels[i].gameObject ); + } + + if (Objs.Count>0) + Selection.objects = Objs.ToArray(); + else + ShowWarning("All labels in this scene have a Localize component assigned"); + } + + bool ShouldFilter( string Text, string[] Includes, string[] Excludes ) + { + if (Includes!=null && Includes.Length>0) + { + bool hasAny = false; + for (int j=0; j0) + { + for (int j=0; j mParsedTerms = new SortedDictionary(StringComparer.Ordinal); // All Terms resulted from parsing the scenes and collecting the Localize.Term and how many times the terms are used + public static HashSet mParsedCategories = new HashSet(StringComparer.Ordinal); + + public static List mShowableTerms = new List (); // this contains the terms from mParsedTerms that should be shown in the list (filtered by search string, usage, etc) + public static bool mParseTermsIn_Scenes = true; + public static bool mParseTermsIn_Scripts = true; + + #endregion + + #region GUI Parse Keys + + void OnGUI_Tools_ParseTerms() + { + OnGUI_ScenesList(); + + GUI.backgroundColor = Color.Lerp (Color.gray, Color.white, 0.2f); + GUILayout.BeginVertical(LocalizeInspector.GUIStyle_OldTextArea, GUILayout.Height(1)); + GUI.backgroundColor = Color.white; + + GUILayout.Space (5); + + EditorGUILayout.HelpBox("This tool searches all Terms used in the selected scenes and updates the usage counter in the Terms Tab", MessageType.Info); + + GUILayout.Space (5); + + GUILayout.BeginHorizontal (); + GUILayout.FlexibleSpace(); + GUILayout.BeginHorizontal ("Box"); + mParseTermsIn_Scenes = GUILayout.Toggle(mParseTermsIn_Scenes, new GUIContent("Parse SCENES", "Opens the selected scenes and finds all the used terms")); + GUILayout.FlexibleSpace(); + mParseTermsIn_Scripts = GUILayout.Toggle(mParseTermsIn_Scripts, new GUIContent("Parse SCRIPTS", "Searches all .cs files and counts all terms like: ScriptLocalization.Get(\"xxx\")")); + GUILayout.EndHorizontal(); + GUILayout.FlexibleSpace(); + GUILayout.EndHorizontal(); + + GUILayout.BeginHorizontal (); + GUILayout.FlexibleSpace(); + if (GUILayout.Button("Parse Localized Terms")) + { + EditorApplication.update += ParseTermsInSelectedScenes; + if (mParseTermsIn_Scripts) + EditorApplication.update += ParseTermsInScripts; + } + GUILayout.FlexibleSpace(); + GUILayout.EndHorizontal(); + + GUILayout.EndVertical(); + } + + #endregion + + #region Parsed Terms Handlers + + public static ParsedTerm GetParsedTerm( string Term ) + { + ParsedTerm data; + if (!mParsedTerms.TryGetValue(Term, out data)) + data = AddParsedTerm(Term, null, null, 0); + return data; + } + + static ParsedTerm AddParsedTerm( string FullTerm, string TermKey, string Category, int Usage ) + { + if (TermKey==null) + LanguageSourceData.DeserializeFullTerm(FullTerm, out TermKey, out Category); + + var data = new ParsedTerm(); + data.Usage = Usage; + data.FullTerm = FullTerm; + data.Term = TermKey; + data.Category = Category; + + mParsedTerms[FullTerm] = data; + return data; + } + + public static void RemoveParsedTerm( string Term ) + { + mParsedTerms.Remove(Term); + } + + public static void DecreaseParsedTerm( string Term ) + { + ParsedTerm data = GetParsedTerm(Term); + data.Usage = Mathf.Max (0, data.Usage-1); + } + + static void UpdateParsedCategories() + { + mParsedCategories.Clear(); + mParsedCategories.UnionWith( mParsedTerms.Select(x=>x.Value.Category) ); + + mSelectedCategories.RemoveAll(x=>!mParsedCategories.Contains(x)); + } + + + #endregion + + #region ParseKeys + + public static void ParseTermsInSelectedScenes() + { + EditorApplication.update -= ParseTermsInSelectedScenes; + ParseTerms(false, false, true); + } + + public static void DoParseTermsInCurrentScene() + { + EditorApplication.update -= DoParseTermsInCurrentScene; + ParseTerms(true, false, true); + } + + public static void DoParseTermsInCurrentSceneAndScripts() + { + EditorApplication.update -= DoParseTermsInCurrentSceneAndScripts; + ParseTerms(true, true, true); + } + + static void ParseTerms(bool OnlyCurrentScene, bool ParseScripts, bool OpenTermsTab) + { + mIsParsing = true; + + mParsedTerms.Clear(); + mSelectedKeys.Clear(); + mParsedCategories.Clear(); + + if (ParseScripts) + { + ParseTermsInScripts(); + FindTermsInLocalizedStrings(); + } + + if (mParseTermsIn_Scenes) + { + if (!OnlyCurrentScene) + ExecuteActionOnSelectedScenes(FindTermsInCurrentScene); + else + FindTermsInCurrentScene(); + } + + FindTermsNotUsed(); + ScheduleUpdateTermsToShowInList(); + + + if (mParsedTerms.Count <= 0) + { + ShowInfo("No terms where found during parsing"); + return; + } + + UpdateParsedCategories(); + { + mSelectedCategories.Clear(); + mSelectedCategories.AddRange(mParsedCategories); + } + + + if (mLanguageSource!=null) + { + var sourceCategories = mLanguageSource.GetCategories(); + mSelectedCategories.RemoveAll(x => !sourceCategories.Contains(x)); + } + + if (OpenTermsTab) + { + if ((mFlagsViewKeys & (int)eFlagsViewKeys.Missing) > 0) + { + mFlagsViewKeys = (int)eFlagsViewKeys.Used | (int)eFlagsViewKeys.NotUsed | (int)eFlagsViewKeys.Missing; + } + else + { + mFlagsViewKeys = (int)eFlagsViewKeys.Used | (int)eFlagsViewKeys.NotUsed; + } + mCurrentViewMode = eViewMode.Keys; + } + mIsParsing = false; + } + + static void FindTermsInCurrentScene() + { + Localize[] Locals = (Localize[])Resources.FindObjectsOfTypeAll(typeof(Localize)); + + if (Locals==null) + return; + + for (int i=0, imax=Locals.Length; i Type_localizedString.IsAssignableFrom(x.PropertyType) || + Attribute.IsDefined(x, typeof(TermsPopup))); + foreach (var p in props) + { + string value = null; + if (Type_localizedString.IsAssignableFrom(p.PropertyType)) + { + var varObj = p.GetValue(cmp,null); + value = Convert.ToString(varObj.GetType().GetField("mTerm").GetValue(varObj)); + } + else + { + value = Convert.ToString(p.GetValue(cmp,null)); + } + if (!string.IsNullOrEmpty(value)) + { + GetParsedTerm(value).Usage++; + } + + //Debug.LogFormat("{0} ({1})", p.Name, p.PropertyType); + //Debug.Log(value); + } + + + var variables = cmp.GetType() + .GetFields() + .Where(x => Type_localizedString.IsAssignableFrom(x.FieldType) || + Attribute.IsDefined(x, typeof(TermsPopup))); + foreach (var v in variables) + { + string value = null; + if (Type_localizedString.IsAssignableFrom(v.FieldType)) + { + var varObj = v.GetValue(cmp); + value = Convert.ToString(varObj.GetType().GetField("mTerm").GetValue(varObj)); + } + else + { + value = Convert.ToString(v.GetValue(cmp)); + } + if (!string.IsNullOrEmpty(value)) + { + GetParsedTerm(value).Usage++; + } + //Debug.LogFormat("{0} ({1})", v.Name, v.FieldType); + //Debug.Log(value); + } + } + } + + static void FindTermsNotUsed() + { + // every Term that is in the DB but not in mParsedTerms + if (mLanguageSource == null) + return; + + //string lastCategory = null; + foreach (TermData termData in mLanguageSource.mTerms) + GetParsedTerm(termData.Term); + } + + static void ParseTermsInScripts() + { + EditorApplication.update -= ParseTermsInScripts; + + string[] scriptFiles = AssetDatabase.GetAllAssetPaths().Where(path => path.ToLower().EndsWith(".cs")).ToArray(); + + string mLocalizationManager = @"GetTranslation\s?\(\s?\""(.*?)\"""; + string mLocalizationManagerOld = @"GetTermTranslation\s?\(\s?\""(.*?)\"""; + string mLocalizationManagerTry = @"TryGetTranslation\s?\(\s?\""(.*?)\"""; + string mSetTerm = @"SetTerm\s?\(\s?\""(.*?)\"""; + + Regex regex = new Regex(mLocalizationManager + "|" + mLocalizationManagerTry + "|" + mLocalizationManagerOld + "|" + mSetTerm, RegexOptions.Multiline); + + foreach (string scriptFile in scriptFiles) + { + string scriptContents = File.ReadAllText(scriptFile); + MatchCollection matches = regex.Matches(scriptContents); + for (int matchNum = 0; matchNum < matches.Count; matchNum++) + { + Match match = matches[matchNum]; + string term = I2Utils.GetCaptureMatch(match); + GetParsedTerm(term).Usage++; + } + } + ScheduleUpdateTermsToShowInList(); + } + #endregion + + #region Misc + + public static void SetAllTerms_When_InferredTerms_IsInSource() + { + var Locals = Resources.FindObjectsOfTypeAll(typeof(Localize)) as Localize[]; + + if (Locals==null) + return; + + foreach (var localize in Locals) + { + if (localize == null || localize.Source != null && localize.Source.SourceData != mLanguageSource || localize.gameObject == null || !GUITools.ObjectExistInScene (localize.gameObject)) + continue; + + if (!string.IsNullOrEmpty (localize.mTerm) && !string.IsNullOrEmpty (localize.SecondaryTerm)) + continue; + + ApplyInferredTerm( localize ); + } + + ParseTerms (true, false, true); + } + + public static void ApplyInferredTerm( Localize localize) + { + if (mLanguageSource==null) + return; + if (!string.IsNullOrEmpty (localize.mTerm) && !string.IsNullOrEmpty (localize.mTermSecondary)) + return; + + string sTerm, sSecTerm; + localize.GetFinalTerms (out sTerm, out sSecTerm); + + if (string.IsNullOrEmpty (localize.mTerm)) + { + var termData = mLanguageSource.GetTermData (sTerm, true); + if (termData!=null) + localize.mTerm = termData.Term; + } + + if (string.IsNullOrEmpty (localize.mTermSecondary)) + { + var termData = mLanguageSource.GetTermData (sSecTerm, true); + if (termData!=null) + localize.mTermSecondary = termData.Term; + } + + //localize.Source = mLanguageSource; + } + + #endregion + } +} diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Tools_ParseTerms.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Tools_ParseTerms.cs.meta new file mode 100644 index 00000000..093359fe --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Tools_ParseTerms.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 697e1bc5d373845df927c0da625b7cad +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Tools_Scenes.cs b/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Tools_Scenes.cs new file mode 100644 index 00000000..a5c1e84c --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Tools_Scenes.cs @@ -0,0 +1,179 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEditor; +using UnityEngine; + +namespace I2.Loc +{ + public partial class LocalizationEditor + { + #region Variables + EditorBuildSettingsScene[] mScenesInBuildSettings; + bool Tools_ShowScenesList; + #endregion + + #region GUI + + void OnGUI_ScenesList( bool SmallSize = false ) + { + mScenesInBuildSettings = EditorBuildSettings.scenes; + string currentScene = Editor_GetCurrentScene (); + + List sceneList = mScenesInBuildSettings.Select(x=>x.path).ToList(); + if (!sceneList.Contains (currentScene)) + sceneList.Insert (0, currentScene); + + mSelectedScenes.RemoveAll (x => !sceneList.Contains(x)); + if (mSelectedScenes.Count==0) + mSelectedScenes.Add (currentScene); + + if (!Tools_ShowScenesList) + { + GUILayout.Space(5); + GUILayout.BeginHorizontal(); + Tools_ShowScenesList = GUILayout.Toggle(Tools_ShowScenesList, "", EditorStyles.foldout, GUILayout.ExpandWidth(false)); + + string sceneText = string.Empty; + if (mSelectedScenes.Count==1 && mSelectedScenes[0]== currentScene) + sceneText = "Current Scene"; + else + sceneText = string.Format("{0} of {1} Scenes", mSelectedScenes.Count, Mathf.Max(mScenesInBuildSettings.Length, mSelectedScenes.Count)); + var stl = new GUIStyle("toolbarbutton"); + stl.richText = true; + if (GUILayout.Button("Scenes to Parse: "+sceneText+"", stl)) + Tools_ShowScenesList = true; + GUILayout.EndHorizontal(); + GUILayout.Space(10); + return; + } + OnGUI_ScenesList_TitleBar(); + + GUI.backgroundColor = Color.Lerp(GUITools.LightGray, Color.white, 0.5f); + mScrollPos_BuildScenes = GUILayout.BeginScrollView( mScrollPos_BuildScenes, LocalizeInspector.GUIStyle_OldTextArea, GUILayout.Height ( SmallSize ? 100 : 200)); + GUI.backgroundColor = Color.white; + + for (int i=0, imax=sceneList.Count; i0) + { + try + { + string FilePath = AssetDatabase.GUIDToAssetPath(assets[0]); + return FilePath; + } + catch(Exception) + { } + } + + return "Assets/ScriptLocalization.cs"; + } + + void BuildScriptWithSelectedTerms( StringBuilder sbTrans, StringBuilder sbTerms ) + { + List Categories = LocalizationManager.GetCategories(); + foreach (string Category in Categories) + { + List CategoryTerms = ScriptTool_GetSelectedTermsInCategory(Category); + if (CategoryTerms.Count<=0) + continue; + + List AdjustedCategoryTerms = new List(CategoryTerms); + for (int i=0, imax=AdjustedCategoryTerms.Count; i ScriptTool_GetSelectedTermsInCategory( string Category ) + { + List list = new List(); + foreach (string FullKey in mSelectedKeys) + { + string categ = LanguageSourceData.GetCategoryFromFullTerm(FullKey); + if (categ == Category && ShouldShowTerm(FullKey)) + { + list.Add( LanguageSourceData.GetKeyFromFullTerm(FullKey) ); + } + } + + return list; + } + + void BuildScriptCategory( StringBuilder sbTrans, StringBuilder sbTerms, string Category, List AdjustedTerms, List Terms ) + { + if (Category==LanguageSourceData.EmptyCategory) + { + for (int i = 0; i < Terms.Count; ++i) + { + sbTrans.AppendLine( " public static string " + AdjustedTerms[i] + " \t\t{ get{ return LocalizationManager.GetTranslation (\"" + Terms[i] + "\"); } }"); + sbTerms.AppendLine(" public const string " + AdjustedTerms[i] + " = \"" + Terms[i] + "\";"); + } + } + else + for (int i=0; i=0) + Term = "_"+Term; + + if (!allowFullLength && Term.Length>Script_Tool_MaxVariableLength) + Term = Term.Substring(0, Script_Tool_MaxVariableLength); + + // Remove invalid characters + char[] chars = Term.ToCharArray(); + for (int i=0, imax=chars.Length; i AdjustedTerms) + { + string lastTerm = "$"; + int Counter = 1; + for (int i=0, imax=AdjustedTerms.Count; i +// { +// EditorApplication.update -= Callback; + +// if (source.GetComponents().Length<=2) +// { +// Debug.Log ("Deleting GameObject '" + source.name + "' and Openning the "+LocalizationManager.GlobalSources[0]+".prefab"); +// DestroyImmediate (source.gameObject); +// } +// else +// { +// Debug.Log ("Deleting the LanguageSource inside GameObject " + source.name + " and Openning the "+LocalizationManager.GlobalSources[0] +".prefab"); +// DestroyImmediate (source); +// } + +// GameObject Prefab = (Resources.Load(LocalizationManager.GlobalSources[0]) as GameObject); +// Selection.activeGameObject = Prefab; +// }; +// } +// GUILayout.FlexibleSpace(); +// GUILayout.EndHorizontal(); + +// GUILayout.Space(10); + } + + private bool bSourceInsidePluginsFolder = true; + public void OnGUI_Warning_SourceInsidePluginsFolder() + { + if (!bSourceInsidePluginsFolder || mLanguageSource.UserAgreesToHaveItInsideThePluginsFolder) + return; + + if (!mLanguageSource.IsGlobalSource()) + { + bSourceInsidePluginsFolder = false; + return; + } + + string pluginPath = UpgradeManager.GetI2LocalizationPath(); + string assetPath = AssetDatabase.GetAssetPath(target); + + if (!assetPath.StartsWith(pluginPath, StringComparison.OrdinalIgnoreCase)) + { + bSourceInsidePluginsFolder = false; + return; + } + + string Text = @"Its advised to move this Global Source to a folder outside the I2 Localization. +For example (Assets/I2/Resources) instead of (Assets/I2/Localization/Resources) + +That way upgrading the plugin its as easy as deleting the I2/Localization and I2/Common folders and reinstalling. + +Do you want the plugin to automatically move the LanguageSource to a folder outside the plugin?"; + EditorGUILayout.HelpBox(Text, MessageType.Warning); + + GUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + if (GUILayout.Button("Keep as is")) + { + SerializedProperty Agree = serializedObject.FindProperty("UserAgreesToHaveItInsideThePluginsFolder"); + Agree.boolValue = true; + bSourceInsidePluginsFolder = true; + } + + GUILayout.FlexibleSpace(); + + if (GUILayout.Button("Ask me later")) + { + bSourceInsidePluginsFolder = false; + } + + GUILayout.FlexibleSpace(); + if (GUILayout.Button("Move to the Recommended Folder")) + EditorApplication.delayCall += MoveGlobalSource; + + GUILayout.FlexibleSpace(); + GUILayout.EndHorizontal(); + + GUILayout.Space(10); + } + + public bool OnGUI_Warning_SourceNotUpToDate() + { + if (mProp_GoogleLiveSyncIsUptoDate.boolValue) + { + return false; + } + + string Text = "Spreadsheet is not up-to-date and Google Live Synchronization is enabled\n\nWhen playing in the device the Spreadsheet will be downloaded and override the translations built from the editor.\n\nTo fix this, Import or Export REPLACE to Google"; + EditorGUILayout.HelpBox(Text, MessageType.Warning); + return true; + } + + private static void MoveGlobalSource() + { + EditorApplication.delayCall -= MoveGlobalSource; + + string pluginPath = UpgradeManager.GetI2LocalizationPath(); + string assetPath = AssetDatabase.GetAssetPath(mLanguageSource.ownerObject); + + string I2Path = pluginPath.Substring(0, pluginPath.Length-"/Localization".Length); + string newPath = I2Path + "/Resources/" + mLanguageSource.ownerObject.name + ".prefab"; + + string fullresFolder = Application.dataPath + I2Path.Replace("Assets","") + "/Resources"; + bool folderExists = Directory.Exists (fullresFolder); + + if (!folderExists) + AssetDatabase.CreateFolder(I2Path, "Resources"); + AssetDatabase.MoveAsset(assetPath, newPath); + AssetDatabase.SaveAssets(); + AssetDatabase.Refresh(); + + var prefab = AssetDatabase.LoadAssetAtPath(newPath, typeof(GameObject)) as GameObject; + Selection.activeGameObject = prefab; + + Debug.Log("LanguageSource moved to:" + newPath); + ShowInfo("Please, ignore some console warnings/errors produced by this operation, everything worked fine. In a new release those warnings will be cleared"); + } + + public static void DelayedDestroySource() + { + + } + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Warnings.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Warnings.cs.meta new file mode 100644 index 00000000..bb324deb --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Localization/LocalizationEditor_Warnings.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 20e86d3a806624846bccd81bac9f935f +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/PostProcessBuild_ANDROID.cs b/popcorn/Assets/I2/Localization/Scripts/Editor/PostProcessBuild_ANDROID.cs new file mode 100644 index 00000000..1ef9d556 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/PostProcessBuild_ANDROID.cs @@ -0,0 +1,133 @@ +#if UNITY_ANDROID +using UnityEditor.Callbacks; +using System.Collections.Generic; +using System.Linq; +using UnityEditor; +using UnityEngine; + +namespace I2.Loc +{ + public class PostProcessBuild_Android + { + // Post Process Scene is a hack, because using PostProcessBuild will be called after the APK is generated, and so, I didn't find a way to copy the new files + [PostProcessScene] + public static void OnPostProcessScene() + { + #if UNITY_4_6 || UNITY_4_7 || UNITY_4_8 || UNITY_4_9 || UNITY_5_0 || UNITY_5_1 || UNITY_5_2 + bool isFirstScene = (EditorBuildSettings.scenes.Length>0 && EditorBuildSettings.scenes[0].path == EditorApplication.currentScene); + #else + bool isFirstScene = UnityEngine.SceneManagement.SceneManager.GetActiveScene().buildIndex <= 0; + #endif + + if (!EditorApplication.isPlayingOrWillChangePlaymode && + (EditorUserBuildSettings.activeBuildTarget == BuildTarget.Android) && + isFirstScene) + { + string projPath = System.IO.Path.GetFullPath(Application.streamingAssetsPath + "/../../Temp/StagingArea"); + //string projPath = System.IO.Path.GetFullPath(Application.dataPath+ "/Plugins/Android"); + PostProcessAndroid(BuildTarget.Android, projPath); + } + } + + //[PostProcessBuild(10000)] + public static void PostProcessAndroid(BuildTarget buildTarget, string pathToBuiltProject) + { + if (buildTarget!=BuildTarget.Android) + return; + + if (LocalizationManager.Sources.Count <= 0) + LocalizationManager.UpdateSources(); + + // Get language with variants, but also add it without the variant to allow fallbacks (e.g. en-CA also adds en) + var langCodes = LocalizationManager.GetAllLanguagesCode(false).Concat( LocalizationManager.GetAllLanguagesCode(true) ).Distinct().ToList(); + + if (langCodes.Count <= 0) + return; + string stringXML = "\n"+ + "\n"+ + " {0}\n"+ + ""; + + SetStringsFile( pathToBuiltProject+"/res/values", "strings.xml", stringXML, LocalizationManager.GetAppName(langCodes[0]) ); + + + var list = new List(); + list.Add( pathToBuiltProject + "/res/values" ); + foreach (var code in langCodes) + { + // Android doesn't use zh-CN or zh-TW, instead it uses: zh-rCN, zh-rTW, zh + string fixedCode = code; + if (fixedCode.StartsWith("zh", System.StringComparison.OrdinalIgnoreCase)) + { + string googleCode = GoogleLanguages.GetGoogleLanguageCode(fixedCode); + if (googleCode==null) googleCode = fixedCode; + fixedCode = (googleCode == "zh-CN") ? "zh-CN" : googleCode; + } + fixedCode = fixedCode.Replace("-", "-r"); + + string dir = pathToBuiltProject + "/res/values-" + fixedCode; + + SetStringsFile( dir, "strings.xml", stringXML, LocalizationManager.GetAppName(code) ); + } + } + + static void CreateFileIfNeeded ( string folder, string fileName, string text ) + { + try + { + if (!System.IO.Directory.Exists( folder )) + System.IO.Directory.CreateDirectory( folder ); + + if (!System.IO.File.Exists( folder + "/"+fileName )) + System.IO.File.WriteAllText( folder + "/"+fileName, text ); + } + catch (System.Exception e) + { + Debug.Log( e ); + } + } + + static void SetStringsFile(string folder, string fileName, string stringXML, string appName) + { + try + { + appName = appName.Replace("&", "&").Replace("<", "<").Replace(">", ">").Replace("\"", "\\\"").Replace("'", "\\'"); + appName = appName.Replace("\r\n", string.Empty).Replace("\n", string.Empty).Replace("\r", string.Empty); + + if (!System.IO.Directory.Exists(folder)) + System.IO.Directory.CreateDirectory(folder); + + if (!System.IO.File.Exists(folder + "/" + fileName)) + { + // create the string file if it doesn't exist + stringXML = string.Format(stringXML, appName); + } + else + { + stringXML = System.IO.File.ReadAllText(folder + "/" + fileName); + // find app_name + var pattern = "\"app_name\">(.*)<\\/string>"; + var regexPattern = new System.Text.RegularExpressions.Regex(pattern); + if (regexPattern.IsMatch(stringXML)) + { + // Override the AppName if it was found + stringXML = regexPattern.Replace(stringXML, string.Format("\"app_name\">{0}", appName)); + } + else + { + // insert the appName if it wasn't there + int idx = stringXML.IndexOf(""); + if (idx > 0) + stringXML = stringXML.Insert(idx + "".Length, string.Format("\n {0}\n", appName)); + } + } + System.IO.File.WriteAllText(folder + "/" + fileName, stringXML); + } + catch (System.Exception e) + { + Debug.Log(e); + } + } + } +} +#endif \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/PostProcessBuild_ANDROID.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Editor/PostProcessBuild_ANDROID.cs.meta new file mode 100644 index 00000000..6b4251ad --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/PostProcessBuild_ANDROID.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4c8d936531867014da228239d095833c +timeCreated: 1489354551 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/PostProcessBuild_IOS.cs b/popcorn/Assets/I2/Localization/Scripts/Editor/PostProcessBuild_IOS.cs new file mode 100644 index 00000000..8b9f1890 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/PostProcessBuild_IOS.cs @@ -0,0 +1,102 @@ +#if UNITY_IOS || UNITY_IPHONE +using UnityEditor.Callbacks; +using System.Collections; +using UnityEditor.iOS_I2Loc.Xcode; +using System.IO; +using UnityEditor; +using UnityEngine; +using System.Linq; + + +namespace I2.Loc +{ + public class PostProcessBuild_IOS + { + [PostProcessBuild(10000)] + public static void ChangeXcodePlist(BuildTarget buildTarget, string pathToBuiltProject) + { + if (buildTarget != BuildTarget.iOS) + return; + + if (LocalizationManager.Sources.Count <= 0) + LocalizationManager.UpdateSources(); + var langCodes = LocalizationManager.GetAllLanguagesCode(false).Concat(LocalizationManager.GetAllLanguagesCode(true)).Distinct().ToList(); + if (langCodes.Count <= 0) + return; + + try + { + //----[ Export localized languages to the info.plist ]--------- + + string plistPath = pathToBuiltProject + "/Info.plist"; + PlistDocument plist = new PlistDocument(); + plist.ReadFromString(File.ReadAllText(plistPath)); + + PlistElementDict rootDict = plist.root; + + // Get Language root + var langArray = rootDict.CreateArray("CFBundleLocalizations"); + + // Set the Language Codes + foreach (var code in langCodes) + { + if (code == null || code.Length < 2) + continue; + langArray.AddString(code); + } + + rootDict.SetString("CFBundleDevelopmentRegion", langCodes[0]); + + // Write to file + File.WriteAllText(plistPath, plist.WriteToString()); + + //--[ Localize App Name ]---------- + + string LocalizationRoot = pathToBuiltProject + "/I2Localization"; + if (!Directory.Exists(LocalizationRoot)) + Directory.CreateDirectory(LocalizationRoot); + + var project = new PBXProject(); + string projPath = PBXProject.GetPBXProjectPath(pathToBuiltProject); + //if (!projPath.EndsWith("xcodeproj")) + //projPath = projPath.Substring(0, projPath.LastIndexOfAny("/\\".ToCharArray())); + + project.ReadFromFile(projPath); + //var targetName = PBXProject.GetUnityTargetName(); + //string projBuild = project.TargetGuidByName( targetName ); + + project.RemoveLocalizationVariantGroup("I2 Localization"); + // Set the Language Overrides + foreach (var code in langCodes) + { + if (code == null || code.Length < 2) + continue; + + var LanguageDirRoot = LocalizationRoot + "/" + code + ".lproj"; + if (!Directory.Exists(LanguageDirRoot)) + Directory.CreateDirectory(LanguageDirRoot); + + var infoPlistPath = LanguageDirRoot + "/InfoPlist.strings"; + var InfoPlist = string.Format("CFBundleDisplayName = \"{0}\";", LocalizationManager.GetAppName(code)); + File.WriteAllText(infoPlistPath, InfoPlist); + + var langProjectRoot = "I2Localization/"+code+".lproj"; + + var stringPaths = LanguageDirRoot + "/Localizable.strings"; + File.WriteAllText(stringPaths, string.Empty); + + project.AddLocalization(langProjectRoot + "/Localizable.strings", langProjectRoot + "/Localizable.strings", "I2 Localization"); + project.AddLocalization(langProjectRoot + "/InfoPlist.strings", langProjectRoot + "/InfoPlist.strings", "I2 Localization"); + } + + project.WriteToFile(projPath); + + } + catch (System.Exception e) + { + Debug.Log (e); + } + } + } +} +#endif \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/PostProcessBuild_IOS.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Editor/PostProcessBuild_IOS.cs.meta new file mode 100644 index 00000000..53764a72 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/PostProcessBuild_IOS.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2bf71e767aaa5a245b9d74f326a39549 +timeCreated: 1489354551 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/PostProcessBuild_UnloadLanguages.cs b/popcorn/Assets/I2/Localization/Scripts/Editor/PostProcessBuild_UnloadLanguages.cs new file mode 100644 index 00000000..abfd800c --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/PostProcessBuild_UnloadLanguages.cs @@ -0,0 +1,30 @@ +namespace I2.Loc +{ + public class PostProcessBuild_UnloadLanguages + { + // [PostProcessBuild] + // public static void SaveGlobalSources(BuildTarget buildTarget, string pathToBuiltProject) + // { + //if (LocalizationManager.Sources.Count <= 0) + // LocalizationManager.UpdateSources(); + + // foreach (var source in LocalizationManager.Sources.Where(x=>x.IsGlobalSource())) + // { + // source.SaveLanguages(true, PersistentStorage.eFileType.Streaming); + // } + // } + + // [PostProcessScene] + // public static void SaveLocalSources() + // { + // if (EditorApplication.isPlayingOrWillChangePlaymode) + // return; + + // LanguageSource[] sceneSources = (LanguageSource[])Resources.FindObjectsOfTypeAll(typeof(LanguageSource)); + // foreach (var source in sceneSources.Where(x=>!x.IsGlobalSource())) + // { + // source.SaveLanguages(true, PersistentStorage.eFileType.Streaming); + // } + // } + } +} diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/PostProcessBuild_UnloadLanguages.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Editor/PostProcessBuild_UnloadLanguages.cs.meta new file mode 100644 index 00000000..8151b158 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/PostProcessBuild_UnloadLanguages.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 68151af3db9fb734fb3823c020c9b8c0 +timeCreated: 1489354551 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Unity XCode.meta b/popcorn/Assets/I2/Localization/Scripts/Editor/Unity XCode.meta new file mode 100644 index 00000000..e2e7904d --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Unity XCode.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d9276efd8270b104ea614946e5787aa1 +folderAsset: yes +timeCreated: 1489466610 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Unity XCode/UnityEditor.iOS_I2Loc.Xcode.dll b/popcorn/Assets/I2/Localization/Scripts/Editor/Unity XCode/UnityEditor.iOS_I2Loc.Xcode.dll new file mode 100644 index 00000000..939cde4b Binary files /dev/null and b/popcorn/Assets/I2/Localization/Scripts/Editor/Unity XCode/UnityEditor.iOS_I2Loc.Xcode.dll differ diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Unity XCode/UnityEditor.iOS_I2Loc.Xcode.dll.meta b/popcorn/Assets/I2/Localization/Scripts/Editor/Unity XCode/UnityEditor.iOS_I2Loc.Xcode.dll.meta new file mode 100644 index 00000000..099a9b18 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Unity XCode/UnityEditor.iOS_I2Loc.Xcode.dll.meta @@ -0,0 +1,24 @@ +fileFormatVersion: 2 +guid: 6bcca352fcef3034fb01650308bf47c2 +timeCreated: 1496388333 +licenseType: Store +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/popcorn/Assets/I2/Localization/Scripts/Editor/Unity XCode/Xcode.txt b/popcorn/Assets/I2/Localization/Scripts/Editor/Unity XCode/Xcode.txt new file mode 100644 index 00000000..ffd5209a --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Unity XCode/Xcode.txt @@ -0,0 +1,9 @@ +This is a copy of the Xcode Manipulation API +https://bitbucket.org/Unity-Technologies/xcodeapi/overview + +This is already packed inside Unity under the UnityEditor.IOS.XCode namespace, +but I'm including here as well because the version that comes with unity doesn't handle +localized files. +This copy includes the pullrequest #13 (https://bitbucket.org/Unity-Technologies/xcodeapi/pull-requests/13/creation-of-variantgroup-and/diff) + +Hopefully that will be integrated in Unity soon, but until then, I will be including this files here! \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/Unity XCode/Xcode.txt.meta b/popcorn/Assets/I2/Localization/Scripts/Editor/Unity XCode/Xcode.txt.meta new file mode 100644 index 00000000..15cc2ee3 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/Unity XCode/Xcode.txt.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8f2eff1a75746804db6c0240420ebed9 +timeCreated: 1489466907 +licenseType: Store +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/UpgradeManager.cs b/popcorn/Assets/I2/Localization/Scripts/Editor/UpgradeManager.cs new file mode 100644 index 00000000..5a1657a3 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/UpgradeManager.cs @@ -0,0 +1,303 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using UnityEditor; +using UnityEngine; +using Object = UnityEngine.Object; + +namespace I2.Loc +{ + [InitializeOnLoad] + public class UpgradeManager + { + static bool mAlreadyCheckedPlugins; + + static UpgradeManager() + { + EditorApplication.update += AutoCheckPlugins; + } + + public static void AutoCheckPlugins() + { + CheckPlugins (); + } + + public static void CheckPlugins( bool bForce = false ) + { + EditorApplication.update -= AutoCheckPlugins; + + if (mAlreadyCheckedPlugins && !bForce) + return; + mAlreadyCheckedPlugins = true; + + EnablePlugins(bForce); + CreateLanguageSources(); + //CreateScriptLocalization(); + } + + const string EditorPrefs_AutoEnablePlugins = "I2Loc AutoEnablePlugins"; + + [MenuItem( "Tools/I2 Localization/Enable Plugins/Force Detection", false, 0 )] + public static void ForceCheckPlugins() + { + CheckPlugins( true ); + } + + [MenuItem( "Tools/I2 Localization/Enable Plugins/Enable Auto Detection", false, 1 )] + public static void EnableAutoCheckPlugins() + { + EditorPrefs.SetBool(EditorPrefs_AutoEnablePlugins, true); + } + [MenuItem( "Tools/I2 Localization/Enable Plugins/Enable Auto Detection", true)] + public static bool ValidEnableAutoCheckPlugins() + { + return !EditorPrefs.GetBool(EditorPrefs_AutoEnablePlugins, true); + } + + + [MenuItem( "Tools/I2 Localization/Enable Plugins/Disable Auto Detection", false, 2 )] + public static void DisableAutoCheckPlugins() + { + EditorPrefs.SetBool(EditorPrefs_AutoEnablePlugins, false); + } + [MenuItem( "Tools/I2 Localization/Enable Plugins/Disable Auto Detection", true)] + public static bool ValidDisableAutoCheckPlugins() + { + return EditorPrefs.GetBool(EditorPrefs_AutoEnablePlugins, true); + } + + + [MenuItem("Tools/I2 Localization/Toggle Highlight Localized", false, 17)] + public static void ToogleH() + { + LocalizationManager.HighlightLocalizedTargets = !LocalizationManager.HighlightLocalizedTargets; + LocalizationManager.LocalizeAll(true); + } + + + [MenuItem("Tools/I2 Localization/Create Temp")] + public static void CreateTemp() + { + LanguageSourceData source = LocalizationManager.Sources[0]; + for (int i = 0; i < 1000; ++i) + source.AddTerm("Term " + i, eTermType.Text, false); + source.UpdateDictionary(true); + } + + + + + public static void EnablePlugins( bool bForce = false ) + { + if (!bForce) + { + bool AutoEnablePlugins = EditorPrefs.GetBool(EditorPrefs_AutoEnablePlugins, true); + if (!AutoEnablePlugins) + return; + } + //var tar = System.Enum.GetValues(typeof(BuildTargetGroup)); + foreach (BuildTargetGroup target in Enum.GetValues(typeof(BuildTargetGroup))) + if (target!=BuildTargetGroup.Unknown && !target.HasAttributeOfType()) + { + #if UNITY_5_6 + if (target == BuildTargetGroup.Switch) continue; // some releases of 5.6 defined BuildTargetGroup.Switch but didn't handled it correctly + #endif + EnablePluginsOnPlatform( target ); + } + + // Force these one (iPhone has the same # than iOS and iPhone is deprecated, so iOS was been skipped) + EnablePluginsOnPlatform(BuildTargetGroup.iOS); + } + + static void EnablePluginsOnPlatform( BuildTargetGroup Platform ) + { + string Settings = PlayerSettings.GetScriptingDefineSymbolsForGroup(Platform ); + + bool HasChanged = false; + List symbols = new List( Settings.Split(';')); + + HasChanged |= UpdateSettings("NGUI", "NGUIDebug", "", ref symbols); + HasChanged |= UpdateSettings("DFGUI", "dfPanel", "", ref symbols); + HasChanged |= UpdateSettings("TK2D", "tk2dTextMesh", "", ref symbols); + HasChanged |= UpdateSettings( "TextMeshPro", "TMPro.TMP_FontAsset", "TextMeshPro", ref symbols ); + HasChanged |= UpdateSettings( "SVG", "SVGImporter.SVGAsset", "", ref symbols ); + + if (HasChanged) + { + try + { + Settings = string.Empty; + for (int i=0,imax=symbols.Count; i0) Settings += ";"; + Settings += symbols[i]; + } + PlayerSettings.SetScriptingDefineSymbolsForGroup(Platform, Settings ); + } + catch (Exception) + { + } + } + } + + static bool UpdateSettings( string mPlugin, string mType, string AssemblyType, ref List symbols) + { + try + { + bool hasPluginClass = false; + + if (!string.IsNullOrEmpty( AssemblyType )) + { + var rtype = AppDomain.CurrentDomain.GetAssemblies() + .Where( assembly => assembly.FullName.Contains(AssemblyType) ) + .Select( assembly => assembly.GetType( mType, false ) ) + .Where( t => t!=null ) + .FirstOrDefault(); + if (rtype != null) + hasPluginClass = true; + } + + if (!hasPluginClass) + hasPluginClass = typeof( Localize ).Assembly.GetType( mType, false )!=null; + + + bool hasPluginDef = symbols.IndexOf(mPlugin)>=0; + + if (hasPluginClass != hasPluginDef) + { + if (hasPluginClass) symbols.Add(mPlugin); + else symbols.Remove(mPlugin); + return true; + } + } + catch(Exception) + { + } + return false; + + } + + //[MenuItem( "Tools/I2 Localization/Create I2Languages", false, 1)] + public static void CreateLanguageSources() + { + if (LocalizationManager.GlobalSources==null || LocalizationManager.GlobalSources.Length==0) + return; + + Object GlobalSource = Resources.Load(LocalizationManager.GlobalSources[0]); + LanguageSourceData sourceData = null; + string sourcePath = null; + + if (GlobalSource != null) + { + if (GlobalSource is GameObject) + { + // I2Languages was a prefab before 2018.3, it should be converted to an ScriptableObject + sourcePath = AssetDatabase.GetAssetPath(GlobalSource); + LanguageSource langSourceObj = (GlobalSource as GameObject).GetComponent(); + sourceData = langSourceObj.mSource; + } + else + { + return; + } + } + + LanguageSourceAsset asset = ScriptableObject.CreateInstance(); + if (sourceData != null) + { + asset.mSource = sourceData; + AssetDatabase.DeleteAsset(sourcePath); + } + + if (string.IsNullOrEmpty(sourcePath)) + { + //string PluginPath = GetI2LocalizationPath(); + string ResourcesFolder = "Assets/Resources";//PluginPath.Substring(0, PluginPath.Length-"/Localization".Length) + "/Resources"; + + string fullresFolder = Application.dataPath + ResourcesFolder.Replace("Assets", ""); + if (!Directory.Exists(fullresFolder)) + Directory.CreateDirectory(fullresFolder); + + sourcePath = ResourcesFolder + "/" + LocalizationManager.GlobalSources[0] + ".asset"; + } + else + { + sourcePath = sourcePath.Replace(".prefab", ".asset"); + } + + AssetDatabase.CreateAsset(asset, sourcePath); + AssetDatabase.SaveAssets(); + AssetDatabase.Refresh(); + } + + [MenuItem("Tools/I2 Localization/Help", false, 30)] + [MenuItem("Help/I2 Localization")] + public static void MainHelp() + { + Application.OpenURL(LocalizeInspector.HelpURL_Documentation); + } + + [MenuItem("Tools/I2 Localization/Open I2Languages.asset", false, 0)] + public static void OpenGlobalSource() + { + CreateLanguageSources(); + LanguageSourceAsset GO = Resources.Load(LocalizationManager.GlobalSources[0]); + if (GO == null) + Debug.Log("Unable to find Global Language at Assets/Resources/" + LocalizationManager.GlobalSources[0] + ".asset"); + + Selection.activeObject = GO; + } + + + /*static void CreateScriptLocalization() + { + string[] assets = AssetDatabase.FindAssets("ScriptLocalization"); + if (assets.Length>0) + return; + + string ScriptsFolder = "Assets"; + string ScriptText = LocalizationEditor.mScriptLocalizationHeader + " }\n}"; + + System.IO.File.WriteAllText(ScriptsFolder + "/ScriptLocalization.cs", ScriptText); + + AssetDatabase.SaveAssets(); + AssetDatabase.Refresh(); + }*/ + + public static string GetI2LocalizationPath() + { + string[] assets = AssetDatabase.FindAssets("LocalizationManager"); + if (assets.Length==0) + return string.Empty; + + string PluginPath = AssetDatabase.GUIDToAssetPath(assets[0]); + PluginPath = PluginPath.Substring(0, PluginPath.Length - "/Scripts/LocalizationManager.cs".Length); + + return PluginPath; + } + + public static string GetI2Path() + { + string pluginPath = GetI2LocalizationPath(); + return pluginPath.Substring(0, pluginPath.Length-"/Localization".Length); + } + + public static string GetI2CommonResourcesPath() + { + string I2Path = GetI2Path(); + return I2Path + "/Resources"; + } + } + + public static class UpgradeManagerHelper + { + public static bool HasAttributeOfType(this Enum enumVal) where T:Attribute + { + var type = enumVal.GetType(); + var memInfo = type.GetMember(enumVal.ToString()); + var attributes = memInfo[0].GetCustomAttributes(typeof(T), false); + return attributes.Length > 0; + } + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Editor/UpgradeManager.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Editor/UpgradeManager.cs.meta new file mode 100644 index 00000000..d3ab67c2 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Editor/UpgradeManager.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 6e61480936111c54883dc051751e0a5f +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/EventCallback.cs b/popcorn/Assets/I2/Localization/Scripts/EventCallback.cs new file mode 100644 index 00000000..43909b02 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/EventCallback.cs @@ -0,0 +1,24 @@ +using System; +using UnityEngine; +using Object = UnityEngine.Object; + +namespace I2.Loc +{ + [Serializable] + public class EventCallback + { + public MonoBehaviour Target; + public string MethodName = string.Empty; + + public void Execute( Object Sender = null ) + { + if (HasCallback() && Application.isPlaying) + Target.gameObject.SendMessage(MethodName, Sender, SendMessageOptions.DontRequireReceiver); + } + + public bool HasCallback() + { + return Target != null && !string.IsNullOrEmpty (MethodName); + } + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/EventCallback.cs.meta b/popcorn/Assets/I2/Localization/Scripts/EventCallback.cs.meta new file mode 100644 index 00000000..ce0e9672 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/EventCallback.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 79fbe85a671c1254880b1fc083a723e5 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Google.meta b/popcorn/Assets/I2/Localization/Scripts/Google.meta new file mode 100644 index 00000000..bf49de87 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Google.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: dda5008126b59ad4bad4c9d2626a2345 +folderAsset: yes +timeCreated: 1461137613 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Google/GoogleLanguages.cs b/popcorn/Assets/I2/Localization/Scripts/Google/GoogleLanguages.cs new file mode 100644 index 00000000..5e51df22 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Google/GoogleLanguages.cs @@ -0,0 +1,648 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace I2.Loc +{ + public enum ePluralType { Zero, One, Two, Few, Many, Plural } + + public static class GoogleLanguages + { + public static string GetLanguageCode(string Filter, bool ShowWarnings = false) + { + if (string.IsNullOrEmpty(Filter)) + return string.Empty; + + string[] Filters = Filter.ToLowerInvariant().Split(" /(),".ToCharArray()); + + foreach (var kvp in mLanguageDef) + if (LanguageMatchesFilter(kvp.Key, Filters)) + return kvp.Value.Code; + + if (ShowWarnings) + Debug.Log($"Language '{Filter}' not recognized. Please, add the language code to GoogleTranslation.cs"); + return string.Empty; + } + + + public static List GetLanguagesForDropdown(string Filter, string CodesToExclude) + { + string[] Filters = Filter.ToLowerInvariant().Split(" /(),".ToCharArray()); + + List Languages = new List(); + + foreach (var kvp in mLanguageDef) + if (string.IsNullOrEmpty(Filter) || LanguageMatchesFilter(kvp.Key, Filters)) + { + string code = string.Concat("[" + kvp.Value.Code + "]"); + if (!CodesToExclude.Contains(code)) + Languages.Add(kvp.Key + " " + code); + } + + // Add headers to variants (e.g. "English/English" before all English variants + for (int i = Languages.Count - 2; i >= 0; --i) + { + string Prefix = Languages[i].Substring(0, Languages[i].IndexOf(" [")); + if (Languages[i + 1].StartsWith(Prefix, StringComparison.Ordinal)) + { + Languages[i] = Prefix + "/" + Languages[i]; + Languages.Insert(i + 1, Prefix + "/"); + } + } + return Languages; + } + + // "Engl Unit" matches "English/United States" + static bool LanguageMatchesFilter(string Language, string[] Filters) + { + Language = Language.ToLowerInvariant(); + for (int i = 0, imax = Filters.Length; i < imax; ++i) + if (Filters[i] != "") + { + if (!Language.Contains(Filters[i].ToLower())) + return false; + Language = Language.Remove(Language.IndexOf(Filters[i], StringComparison.Ordinal), Filters[i].Length); + } + return true; + } + + + // "Arabic/Algeria [ar-XX]" returns "Arabic (Algeria)" + // "English/English [en]" returns "English" + public static string GetFormatedLanguageName(string Language) + { + string BaseLanguage = string.Empty; + + //-- Remove code -------- + int Index = Language.IndexOf(" [", StringComparison.Ordinal); + if (Index > 0) + Language = Language.Substring(0, Index); + + //-- Check for main language: "English/English [en]" returns "English" ----------- + Index = Language.IndexOf('/'); + if (Index > 0) + { + BaseLanguage = Language.Substring(0, Index); + if (Language == BaseLanguage + "/" + BaseLanguage) + return BaseLanguage; + + //-- Convert variants into right format + Language = Language.Replace("/", " (") + ")"; + } + + return Language; + } + + // English British -> "English Canada [en-CA]" + public static string GetCodedLanguage(string Language, string code) + { + string DefaultCode = GetLanguageCode(Language); + if (string.Compare(code, DefaultCode, StringComparison.OrdinalIgnoreCase) == 0) + return Language; + return string.Concat(Language, " [", code, "]"); + } + + // "English Canada [en-CA]" -> "English Canada", "en-CA" + public static void UnPackCodeFromLanguageName(string CodedLanguage, out string Language, out string code) + { + if (string.IsNullOrEmpty(CodedLanguage)) + { + Language = string.Empty; + code = string.Empty; + return; + } + int Index = CodedLanguage.IndexOf("[", StringComparison.Ordinal); + if (Index < 0) + { + Language = CodedLanguage; + code = GetLanguageCode(Language); + } + else + { + Language = CodedLanguage.Substring(0, Index).Trim(); + code = CodedLanguage.Substring(Index + 1, CodedLanguage.IndexOf("]", Index, StringComparison.Ordinal) - Index - 1); + } + } + + public static string GetGoogleLanguageCode(string InternationalCode) + { + foreach (var kvp in mLanguageDef) + if (InternationalCode == kvp.Value.Code) + { + if (kvp.Value.GoogleCode == "-") + return null; + return !string.IsNullOrEmpty(kvp.Value.GoogleCode) ? kvp.Value.GoogleCode : InternationalCode; + } + + return InternationalCode; + } + + public static string GetLanguageName(string code, bool useParenthesesForRegion=false, bool allowDiscardRegion=true) + { + foreach (var kvp in mLanguageDef) + if (code == kvp.Value.Code) + { + var langName = kvp.Key; + if (useParenthesesForRegion) + { + int idx = langName.IndexOf('/'); + if (idx > 0) + langName = langName.Substring(0, idx) + " (" + langName.Substring(idx + 1) + ")"; + } + return langName; + } + + if (allowDiscardRegion) + { + int iCode = code.IndexOf("-", StringComparison.Ordinal); + if (iCode > 0) + return GetLanguageName(code.Substring(0,iCode), useParenthesesForRegion, false); + } + return null; + } + + public static List GetAllInternationalCodes() + { + var set = new HashSet(StringComparer.Ordinal); + + foreach (var kvp in mLanguageDef) + set.Add(kvp.Value.Code); + + return new List(set); + } + + public static bool LanguageCode_HasJoinedWord(string languageCode) + { + foreach (var kvp in mLanguageDef) + if (languageCode == kvp.Value.GoogleCode || languageCode==kvp.Value.Code ) + return kvp.Value.HasJoinedWords; + + return false; + } + + public struct LanguageCodeDef + { + public string Code; // Language International Code + public string GoogleCode; // Google Translator doesn't support all languages, this is the code of closest supported language + public bool HasJoinedWords; // Some languages (e.g. Chinese, Japanese and Thai) don't add spaces to their words (all characters are placed toguether) + public int PluralRule; + } + + public static Dictionary mLanguageDef = new Dictionary(StringComparer.Ordinal) + { + /**/{"Abkhazian", new LanguageCodeDef {PluralRule=1, Code="ab", GoogleCode="-"}}, + /**/{"Afar", new LanguageCodeDef {PluralRule=1, Code="aa", GoogleCode="-"}}, + {"Afrikaans", new LanguageCodeDef {PluralRule=1, Code="af"}}, + /**/{"Akan", new LanguageCodeDef {PluralRule=1, Code="ak", GoogleCode="-"}}, + {"Albanian", new LanguageCodeDef {PluralRule=1, Code="sq"}}, + /**/{"Amharic", new LanguageCodeDef {PluralRule=1, Code="am"}}, + {"Arabic", new LanguageCodeDef {PluralRule=11, Code="ar"}}, + {"Arabic/Algeria", new LanguageCodeDef {PluralRule=11, Code="ar-DZ", GoogleCode="ar"}}, + {"Arabic/Bahrain", new LanguageCodeDef {PluralRule=11, Code="ar-BH", GoogleCode="ar"}}, + {"Arabic/Egypt", new LanguageCodeDef {PluralRule=11, Code="ar-EG", GoogleCode="ar"}}, + {"Arabic/Iraq", new LanguageCodeDef {PluralRule=11, Code="ar-IQ", GoogleCode="ar"}}, + {"Arabic/Jordan", new LanguageCodeDef {PluralRule=11, Code="ar-JO", GoogleCode="ar"}}, + {"Arabic/Kuwait", new LanguageCodeDef {PluralRule=11, Code="ar-KW", GoogleCode="ar"}}, + {"Arabic/Lebanon", new LanguageCodeDef {PluralRule=11, Code="ar-LB", GoogleCode="ar"}}, + {"Arabic/Libya", new LanguageCodeDef {PluralRule=11, Code="ar-LY", GoogleCode="ar"}}, + {"Arabic/Morocco", new LanguageCodeDef {PluralRule=11, Code="ar-MA", GoogleCode="ar"}}, + {"Arabic/Oman", new LanguageCodeDef {PluralRule=11, Code="ar-OM", GoogleCode="ar"}}, + {"Arabic/Qatar", new LanguageCodeDef {PluralRule=11, Code="ar-QA", GoogleCode="ar"}}, + {"Arabic/Saudi Arabia", new LanguageCodeDef {PluralRule=11, Code="ar-SA", GoogleCode="ar"}}, + {"Arabic/Syria", new LanguageCodeDef {PluralRule=11, Code="ar-SY", GoogleCode="ar"}}, + {"Arabic/Tunisia", new LanguageCodeDef {PluralRule=11, Code="ar-TN", GoogleCode="ar"}}, + {"Arabic/U.A.E.", new LanguageCodeDef {PluralRule=11, Code="ar-AE", GoogleCode="ar"}}, + {"Arabic/Yemen", new LanguageCodeDef {PluralRule=11, Code="ar-YE", GoogleCode="ar"}}, + /**/{"Aragonese", new LanguageCodeDef {PluralRule=1, Code="an", GoogleCode="-"}}, + {"Armenian", new LanguageCodeDef {PluralRule=1, Code="hy"}}, + /**/{"Assamese", new LanguageCodeDef {PluralRule=1, Code="as", GoogleCode="-"}}, + /**/{"Avaric", new LanguageCodeDef {PluralRule=1, Code="av", GoogleCode="-"}}, + /**/{"Avestan", new LanguageCodeDef {PluralRule=1, Code="ae", GoogleCode="-"}}, + /**/{"Aymara", new LanguageCodeDef {PluralRule=1, Code="ay", GoogleCode="-"}}, + {"Azerbaijani", new LanguageCodeDef {PluralRule=1, Code="az"}}, + /**/{"Bambara", new LanguageCodeDef {PluralRule=1, Code="bm", GoogleCode="-"}}, + /**/{"Bashkir", new LanguageCodeDef {PluralRule=1, Code="ba", GoogleCode="-"}}, + {"Basque", new LanguageCodeDef {PluralRule=1, Code="eu"}}, + {"Basque/Spain", new LanguageCodeDef {PluralRule=1, Code="eu-ES", GoogleCode="eu"}}, + {"Belarusian", new LanguageCodeDef {PluralRule=6, Code="be"}}, + /**/{"Bengali", new LanguageCodeDef {PluralRule=1, Code="bn"}}, + /**/{"Bihari", new LanguageCodeDef {PluralRule=1, Code="bh", GoogleCode="-"}}, + /**/{"Bislama", new LanguageCodeDef {PluralRule=1, Code="bi", GoogleCode="-"}}, + {"Bosnian", new LanguageCodeDef {PluralRule=6, Code="bs"}}, + /**/{"Breton", new LanguageCodeDef {PluralRule=1, Code="br", GoogleCode="-"}}, + {"Bulgariaa", new LanguageCodeDef {PluralRule=1, Code="bg"}}, + /**/{"Burmese", new LanguageCodeDef {PluralRule=1, Code="my"}}, + {"Catalan", new LanguageCodeDef {PluralRule=1, Code="ca"}}, + /**/{"Chamorro", new LanguageCodeDef {PluralRule=1, Code="ch", GoogleCode="-"}}, + /**/{"Chechen", new LanguageCodeDef {PluralRule=1, Code="ce", GoogleCode="-"}}, + /**/{"Chichewa", new LanguageCodeDef {PluralRule=1, Code="ny"}}, + {"Chinese", new LanguageCodeDef {PluralRule=0, Code="zh", GoogleCode="zh-CN", HasJoinedWords=true}}, + {"Chinese/Hong Kong", new LanguageCodeDef {PluralRule=0, Code="zh-HK", GoogleCode="zh-TW", HasJoinedWords=true}}, + {"Chinese/Macau", new LanguageCodeDef {PluralRule=0, Code="zh-MO", GoogleCode="zh-CN", HasJoinedWords=true}}, + {"Chinese/PRC", new LanguageCodeDef {PluralRule=0, Code="zh-CN", GoogleCode="zh-CN", HasJoinedWords=true}}, + {"Chinese/Simplified", new LanguageCodeDef {PluralRule=0, Code="zh-CN", GoogleCode="zh-CN", HasJoinedWords=true}}, + {"Chinese/Singapore", new LanguageCodeDef {PluralRule=0, Code="zh-SG", GoogleCode="zh-CN", HasJoinedWords=true}}, + {"Chinese/Taiwan", new LanguageCodeDef {PluralRule=0, Code="zh-TW", GoogleCode="zh-TW", HasJoinedWords=true}}, + {"Chinese/Traditional", new LanguageCodeDef {PluralRule=0, Code="zh-TW", GoogleCode="zh-TW", HasJoinedWords=true}}, + /**/{"Chuvash", new LanguageCodeDef {PluralRule=1, Code="cv", GoogleCode="-"}}, + /**/{"Cornish", new LanguageCodeDef {PluralRule=1, Code="kw", GoogleCode="-"}}, // Check plural + /**/{"Corsican", new LanguageCodeDef {PluralRule=1, Code="co"}}, + /**/{"Cree", new LanguageCodeDef {PluralRule=1, Code="cr", GoogleCode="-"}}, + {"Croatian", new LanguageCodeDef {PluralRule=6, Code="hr"}}, + {"Croatian/Bosnia and Herzegovina", new LanguageCodeDef {PluralRule=5, Code="hr-BA", GoogleCode="hr"}}, + {"Czech", new LanguageCodeDef {PluralRule=7, Code="cs"}}, + {"Danish", new LanguageCodeDef {PluralRule=1, Code="da"}}, + /**/{"Divehi", new LanguageCodeDef {PluralRule=1, Code="dv", GoogleCode="-"}}, + {"Dutch", new LanguageCodeDef {PluralRule=1, Code="nl"}}, + {"Dutch/Belgium", new LanguageCodeDef {PluralRule=1, Code="nl-BE", GoogleCode="nl"}}, + {"Dutch/Netherlands", new LanguageCodeDef {PluralRule=1, Code="nl-NL", GoogleCode="nl"}}, + /**/{"Dzongkha", new LanguageCodeDef {PluralRule=1, Code="dz", GoogleCode="-"}}, + {"English", new LanguageCodeDef {PluralRule=1, Code="en"}}, + {"English/Australia", new LanguageCodeDef {PluralRule=1, Code="en-AU", GoogleCode="en"}}, + {"English/Belize", new LanguageCodeDef {PluralRule=1, Code="en-BZ", GoogleCode="en"}}, + {"English/Canada", new LanguageCodeDef {PluralRule=1, Code="en-CA", GoogleCode="en"}}, + {"English/Caribbean", new LanguageCodeDef {PluralRule=1, Code="en-CB", GoogleCode="en"}}, + {"English/Ireland", new LanguageCodeDef {PluralRule=1, Code="en-IE", GoogleCode="en"}}, + {"English/Jamaica", new LanguageCodeDef {PluralRule=1, Code="en-JM", GoogleCode="en"}}, + {"English/New Zealand", new LanguageCodeDef {PluralRule=1, Code="en-NZ", GoogleCode="en"}}, + {"English/Republic of the Philippines", new LanguageCodeDef {PluralRule=1, Code="en-PH", GoogleCode="en"}}, + {"English/South Africa",new LanguageCodeDef {PluralRule=1, Code="en-ZA", GoogleCode="en"}}, + {"English/Trinidad", new LanguageCodeDef {PluralRule=1, Code="en-TT", GoogleCode="en"}}, + {"English/United Kingdom",new LanguageCodeDef {PluralRule=1, Code="en-GB", GoogleCode="en"}}, + {"English/United States",new LanguageCodeDef {PluralRule=1, Code="en-US", GoogleCode="en"}}, + {"English/Zimbabwe", new LanguageCodeDef {PluralRule=1, Code="en-ZW", GoogleCode="en"}}, + {"Esperanto", new LanguageCodeDef {PluralRule=1, Code="eo"}}, + {"Estonian", new LanguageCodeDef {PluralRule=1, Code="et"}}, + /**/{"Ewe", new LanguageCodeDef {PluralRule=1, Code="ee", GoogleCode="-"}}, + {"Faeroese", new LanguageCodeDef {PluralRule=1, Code="fo", GoogleCode="-"}}, + /**/{"Fijian", new LanguageCodeDef {PluralRule=1, Code="fj", GoogleCode="-"}}, + //{"Filipino", new LanguageCodeDef(){PluralRule=2, Code="tl"}}, + {"Finnish", new LanguageCodeDef {PluralRule=1, Code="fi"}}, + {"French", new LanguageCodeDef {PluralRule=2, Code="fr"}}, + {"French/Belgium", new LanguageCodeDef {PluralRule=2, Code="fr-BE", GoogleCode="fr"}}, + {"French/Canada", new LanguageCodeDef {PluralRule=2, Code="fr-CA", GoogleCode="fr"}}, + {"French/France", new LanguageCodeDef {PluralRule=2, Code="fr-FR", GoogleCode="fr"}}, + {"French/Luxembourg", new LanguageCodeDef {PluralRule=2, Code="fr-LU", GoogleCode="fr"}}, + {"French/Principality of Monaco", new LanguageCodeDef {PluralRule=2, Code="fr-MC", GoogleCode="fr"}}, + {"French/Switzerland", new LanguageCodeDef {PluralRule=2, Code="fr-CH", GoogleCode="fr"}}, + /**/{"Fulah", new LanguageCodeDef {PluralRule=1, Code="ff", GoogleCode="-"}}, + {"Galician", new LanguageCodeDef {PluralRule=1, Code="gl"}}, + {"Galician/Spain", new LanguageCodeDef {PluralRule=1, Code="gl-ES", GoogleCode="gl"}}, + {"Georgian", new LanguageCodeDef {PluralRule=0, Code="ka"}}, + {"German", new LanguageCodeDef {PluralRule=1, Code="de"}}, + {"German/Austria", new LanguageCodeDef {PluralRule=1, Code="de-AT", GoogleCode="de"}}, + {"German/Germany", new LanguageCodeDef {PluralRule=1, Code="de-DE", GoogleCode="de"}}, + {"German/Liechtenstein",new LanguageCodeDef {PluralRule=1, Code="de-LI", GoogleCode="de"}}, + {"German/Luxembourg", new LanguageCodeDef {PluralRule=1, Code="de-LU", GoogleCode="de"}}, + {"German/Switzerland", new LanguageCodeDef {PluralRule=1, Code="de-CH", GoogleCode="de"}}, + {"Greek", new LanguageCodeDef {PluralRule=1, Code="el"}}, + /**/{"Guaraní", new LanguageCodeDef {PluralRule=1, Code="gn", GoogleCode="-"}}, + {"Gujarati", new LanguageCodeDef {PluralRule=1, Code="gu"}}, + /**/{"Haitian", new LanguageCodeDef {PluralRule=1, Code="ht"}}, + /**/{"Hausa", new LanguageCodeDef {PluralRule=1, Code="ha"}}, + {"Hebrew", new LanguageCodeDef {PluralRule=1, Code="he", GoogleCode="iw"}}, + /**/{"Herero", new LanguageCodeDef {PluralRule=1, Code="hz", GoogleCode="-"}}, + {"Hindi", new LanguageCodeDef {PluralRule=1, Code="hi"}}, + /**/{"Hiri Motu", new LanguageCodeDef {PluralRule=1, Code="ho", GoogleCode="-"}}, + {"Hungarian", new LanguageCodeDef {PluralRule=1, Code="hu"}}, + /**/{"Interlingua", new LanguageCodeDef {PluralRule=1, Code="ia", GoogleCode="-"}}, + {"Indonesian", new LanguageCodeDef {PluralRule=0, Code="id"}}, + /**/{"Interlingue", new LanguageCodeDef {PluralRule=1, Code="ie", GoogleCode="-"}}, + {"Irish", new LanguageCodeDef {PluralRule=10, Code="ga"}}, + /**/{"Igbo", new LanguageCodeDef {PluralRule=1, Code="ig"}}, + /**/{"Inupiaq", new LanguageCodeDef {PluralRule=1, Code="ik", GoogleCode="-"}}, + /**/{"Ido", new LanguageCodeDef {PluralRule=1, Code="io", GoogleCode="-"}}, + {"Icelandic", new LanguageCodeDef {PluralRule=14, Code="is"}}, + {"Italian", new LanguageCodeDef {PluralRule=1, Code="it"}}, + {"Italian/Italy", new LanguageCodeDef {PluralRule=1, Code="it-IT", GoogleCode="it"}}, + {"Italian/Switzerland", new LanguageCodeDef {PluralRule=1, Code="it-CH", GoogleCode="it"}}, + /**/{"Inuktitut", new LanguageCodeDef {PluralRule=1, Code="iu", GoogleCode="-"}}, + {"Japanese", new LanguageCodeDef {PluralRule=0, Code="ja", HasJoinedWords=true}}, + /**/{"Javanese", new LanguageCodeDef {PluralRule=1, Code="jv"}}, + /**/{"Kalaallisut", new LanguageCodeDef {PluralRule=1, Code="kl", GoogleCode="-"}}, + {"Kannada", new LanguageCodeDef {PluralRule=1, Code="kn"}}, + /**/{"Kanuri", new LanguageCodeDef {PluralRule=1, Code="kr", GoogleCode="-"}}, + /**/{"Kashmiri", new LanguageCodeDef {PluralRule=1, Code="ks", GoogleCode="-"}}, + {"Kazakh", new LanguageCodeDef {PluralRule=1, Code="kk"}}, + /**/{"Central Khmer", new LanguageCodeDef {PluralRule=1, Code="km"}}, + /**/{"Kikuyu", new LanguageCodeDef {PluralRule=1, Code="ki", GoogleCode="-"}}, + /**/{"Kinyarwanda", new LanguageCodeDef {PluralRule=1, Code="rw", GoogleCode="-"}}, + /**/{"Kirghiz", new LanguageCodeDef {PluralRule=1, Code="ky"}}, + /**/{"Komi", new LanguageCodeDef {PluralRule=1, Code="kv", GoogleCode="-"}}, + /**/{"Kongo", new LanguageCodeDef {PluralRule=1, Code="kg", GoogleCode="-"}}, + {"Korean", new LanguageCodeDef {PluralRule=0, Code="ko"}}, + {"Kurdish", new LanguageCodeDef {PluralRule=1, Code="ku"}}, + /**/{"Kuanyama", new LanguageCodeDef {PluralRule=1, Code="kj", GoogleCode="-"}}, + {"Latin", new LanguageCodeDef {PluralRule=1, Code="la"}}, + /**/{"Luxembourgish", new LanguageCodeDef {PluralRule=1, Code="lb"}}, + /**/{"Ganda", new LanguageCodeDef {PluralRule=1, Code="lg", GoogleCode="-"}}, + /**/{"Limburgan", new LanguageCodeDef {PluralRule=1, Code="li", GoogleCode="-"}}, + /**/{"Lingala", new LanguageCodeDef {PluralRule=1, Code="ln", GoogleCode="-"}}, + /**/{"Lao", new LanguageCodeDef {PluralRule=1, Code="lo"}}, + {"Latvian", new LanguageCodeDef {PluralRule=5, Code="lv"}}, + /**/{"Luba-Katanga", new LanguageCodeDef {PluralRule=1, Code="lu", GoogleCode="-"}}, + {"Lithuanian", new LanguageCodeDef {PluralRule=5, Code="lt"}}, + /**/{"Manx", new LanguageCodeDef {PluralRule=1, Code="gv", GoogleCode="-"}}, + {"Macedonian", new LanguageCodeDef {PluralRule=13, Code="mk"}}, + /**/{"Malagasy", new LanguageCodeDef {PluralRule=1, Code="mg"}}, + {"Malay", new LanguageCodeDef {PluralRule=0, Code="ms"}}, + {"Malay/Brunei Darussalam", new LanguageCodeDef {PluralRule=0, Code="ms-BN", GoogleCode="ms"}}, + {"Malay/Malaysia", new LanguageCodeDef {PluralRule=0, Code="ms-MY", GoogleCode="ms"}}, + {"Malayalam", new LanguageCodeDef {PluralRule=1, Code="ml"}}, + {"Maltese", new LanguageCodeDef {PluralRule=12, Code="mt"}}, + {"Maori", new LanguageCodeDef {PluralRule=2, Code="mi"}}, + {"Marathi", new LanguageCodeDef {PluralRule=1, Code="mr"}}, + /**/{"Marshallese", new LanguageCodeDef {PluralRule=1, Code="mh", GoogleCode="-"}}, + {"Mongolian", new LanguageCodeDef {PluralRule=1, Code="mn"}}, + /**/{"Nauru", new LanguageCodeDef {PluralRule=1, Code="na", GoogleCode="-"}}, + /**/{"Navajo", new LanguageCodeDef {PluralRule=1, Code="nv", GoogleCode="-"}}, + /**/{"North Ndebele", new LanguageCodeDef {PluralRule=1, Code="nd", GoogleCode="-"}}, + /**/{"Nepali", new LanguageCodeDef {PluralRule=1, Code="ne"}}, + /**/{"Ndonga", new LanguageCodeDef {PluralRule=1, Code="ng", GoogleCode="-"}}, + {"Northern Sotho", new LanguageCodeDef {PluralRule=1, Code="ns", GoogleCode="st"}}, + {"Norwegian", new LanguageCodeDef {PluralRule=1, Code="nb", GoogleCode="no"}}, + {"Norwegian/Nynorsk", new LanguageCodeDef {PluralRule=1, Code="nn", GoogleCode="no"}}, + /**/{"Sichuan Yi", new LanguageCodeDef {PluralRule=1, Code="ii", GoogleCode="-"}}, + /**/{"South Ndebele", new LanguageCodeDef {PluralRule=1, Code="nr", GoogleCode="-"}}, + /**/{"Occitan", new LanguageCodeDef {PluralRule=1, Code="oc", GoogleCode="-"}}, + /**/{"Ojibwa", new LanguageCodeDef {PluralRule=1, Code="oj", GoogleCode="-"}}, + /**/{"Church Slavic", new LanguageCodeDef {PluralRule=1, Code="cu", GoogleCode="-"}}, + /**/{"Oromo", new LanguageCodeDef {PluralRule=1, Code="om", GoogleCode="-"}}, + /**/{"Oriya", new LanguageCodeDef {PluralRule=1, Code="or", GoogleCode="-"}}, + /**/{"Ossetian", new LanguageCodeDef {PluralRule=1, Code="os", GoogleCode="-"}}, + /**/{"Pali", new LanguageCodeDef {PluralRule=1, Code="pi", GoogleCode="-"}}, + {"Pashto", new LanguageCodeDef {PluralRule=1, Code="ps"}}, + {"Persian", new LanguageCodeDef {PluralRule=0, Code="fa"}}, + {"Polish", new LanguageCodeDef {PluralRule=8, Code="pl"}}, + {"Portuguese", new LanguageCodeDef {PluralRule=1, Code="pt"}}, + {"Portuguese/Brazil", new LanguageCodeDef {PluralRule=2, Code="pt-BR", GoogleCode="pt"}}, + {"Portuguese/Portugal", new LanguageCodeDef {PluralRule=1, Code="pt-PT", GoogleCode="pt"}}, + {"Punjabi", new LanguageCodeDef {PluralRule=1, Code="pa"}}, + {"Quechua", new LanguageCodeDef {PluralRule=1, Code="qu", GoogleCode="-"}}, + {"Quechua/Bolivia", new LanguageCodeDef {PluralRule=1, Code="qu-BO", GoogleCode="-"}}, + {"Quechua/Ecuador", new LanguageCodeDef {PluralRule=1, Code="qu-EC", GoogleCode="-"}}, + {"Quechua/Peru", new LanguageCodeDef {PluralRule=1, Code="qu-PE", GoogleCode="-"}}, + {"Rhaeto-Romanic", new LanguageCodeDef {PluralRule=1, Code="rm", GoogleCode="ro"}}, + {"Romanian", new LanguageCodeDef {PluralRule=4, Code="ro"}}, + /**/{"Rundi", new LanguageCodeDef {PluralRule=1, Code="rn", GoogleCode="-"}}, + {"Russian", new LanguageCodeDef {PluralRule=6, Code="ru"}}, + {"Russian/Republic of Moldova", new LanguageCodeDef {PluralRule=6, Code="ru-MO", GoogleCode="ru"}}, + /**/{"Sanskrit", new LanguageCodeDef {PluralRule=1, Code="sa", GoogleCode="-"}}, + /**/{"Sardinian", new LanguageCodeDef {PluralRule=1, Code="sc", GoogleCode="-"}}, + /**/{"Sindhi", new LanguageCodeDef {PluralRule=1, Code="sd"}}, + /**/{"Northern Sami", new LanguageCodeDef {PluralRule=1, Code="se", GoogleCode="-"}}, + /**/{"Samoan", new LanguageCodeDef {PluralRule=1, Code="sm"}}, + /**/{"Sango", new LanguageCodeDef {PluralRule=1, Code="sg", GoogleCode="-"}}, + {"Serbian", new LanguageCodeDef {PluralRule=6, Code="sr"}}, + {"Serbian/Bosnia and Herzegovina", new LanguageCodeDef {PluralRule=5, Code="sr-BA", GoogleCode="sr"}}, + {"Serbian/Serbia and Montenegro", new LanguageCodeDef {PluralRule=5, Code="sr-SP", GoogleCode="sr"}}, + /**/{"Scottish Gaelic", new LanguageCodeDef {PluralRule=1, Code="gd"}}, + /**/{"Shona", new LanguageCodeDef {PluralRule=1, Code="sn"}}, + /**/{"Sinhala", new LanguageCodeDef {PluralRule=1, Code="si"}}, + {"Slovak", new LanguageCodeDef {PluralRule=7, Code="sk"}}, + {"Slovenian", new LanguageCodeDef {PluralRule=9, Code="sl"}}, + /**/{"Somali", new LanguageCodeDef {PluralRule=1, Code="so"}}, + /**/{"Southern Sotho", new LanguageCodeDef {PluralRule=1, Code="st"}}, + {"Spanish", new LanguageCodeDef {PluralRule=1, Code="es"}}, + {"Spanish/Argentina", new LanguageCodeDef {PluralRule=1, Code="es-AR", GoogleCode="es"}}, + {"Spanish/Bolivia", new LanguageCodeDef {PluralRule=1, Code="es-BO", GoogleCode="es"}}, + {"Spanish/Castilian", new LanguageCodeDef {PluralRule=1, Code="es-ES", GoogleCode="es"}}, + {"Spanish/Chile", new LanguageCodeDef {PluralRule=1, Code="es-CL", GoogleCode="es"}}, + {"Spanish/Colombia", new LanguageCodeDef {PluralRule=1, Code="es-CO", GoogleCode="es"}}, + {"Spanish/Costa Rica", new LanguageCodeDef {PluralRule=1, Code="es-CR", GoogleCode="es"}}, + {"Spanish/Dominican Republic", new LanguageCodeDef {PluralRule=1, Code="es-DO", GoogleCode="es"}}, + {"Spanish/Ecuador", new LanguageCodeDef {PluralRule=1, Code="es-EC", GoogleCode="es"}}, + {"Spanish/El Salvador", new LanguageCodeDef {PluralRule=1, Code="es-SV", GoogleCode="es"}}, + {"Spanish/Guatemala", new LanguageCodeDef {PluralRule=1, Code="es-GT", GoogleCode="es"}}, + {"Spanish/Honduras", new LanguageCodeDef {PluralRule=1, Code="es-HN", GoogleCode="es"}}, + {"Spanish/Mexico", new LanguageCodeDef {PluralRule=1, Code="es-MX", GoogleCode="es"}}, + {"Spanish/Nicaragua", new LanguageCodeDef {PluralRule=1, Code="es-NI", GoogleCode="es"}}, + {"Spanish/Panama", new LanguageCodeDef {PluralRule=1, Code="es-PA", GoogleCode="es"}}, + {"Spanish/Paraguay", new LanguageCodeDef {PluralRule=1, Code="es-PY", GoogleCode="es"}}, + {"Spanish/Peru", new LanguageCodeDef {PluralRule=1, Code="es-PE", GoogleCode="es"}}, + {"Spanish/Puerto Rico", new LanguageCodeDef {PluralRule=1, Code="es-PR", GoogleCode="es"}}, + {"Spanish/Spain", new LanguageCodeDef {PluralRule=1, Code="es-ES", GoogleCode="es"}}, + {"Spanish/Uruguay", new LanguageCodeDef {PluralRule=1, Code="es-UY", GoogleCode="es"}}, + {"Spanish/Venezuela", new LanguageCodeDef {PluralRule=1, Code="es-VE", GoogleCode="es"}}, + {"Spanish/Latin Americas", new LanguageCodeDef {PluralRule=1, Code="es-US", GoogleCode="es"}}, + /**/{"Sundanese", new LanguageCodeDef {PluralRule=1, Code="su"}}, + {"Swahili", new LanguageCodeDef {Code="sw"}}, + /**/{"Swati", new LanguageCodeDef {PluralRule=1, Code="ss", GoogleCode="-"}}, + {"Swedish", new LanguageCodeDef {PluralRule=1, Code="sv"}}, + {"Swedish/Finland", new LanguageCodeDef {PluralRule=1, Code="sv-FI", GoogleCode="sv"}}, + {"Swedish/Sweden", new LanguageCodeDef {PluralRule=1, Code="sv-SE", GoogleCode="sv"}}, + {"Tamil", new LanguageCodeDef {PluralRule=1, Code="ta"}}, + {"Tatar", new LanguageCodeDef {PluralRule=0, Code="tt", GoogleCode="-"}}, + {"Telugu", new LanguageCodeDef {PluralRule=1, Code="te"}}, + /**/{"Tajik", new LanguageCodeDef {PluralRule=1, Code="tg"}}, + {"Thai", new LanguageCodeDef {PluralRule=0, Code="th", HasJoinedWords=true}}, + /**/{"Tigrinya", new LanguageCodeDef {PluralRule=1, Code="ti", GoogleCode="-"}}, + /**/{"Tibetan", new LanguageCodeDef {PluralRule=1, Code="bo", GoogleCode="-"}}, + /**/{"Turkmen", new LanguageCodeDef {PluralRule=1, Code="tk", GoogleCode="-"}}, + /**/{"Tagalog", new LanguageCodeDef {PluralRule=1, Code="tl"}}, + /**/{"Tswana", new LanguageCodeDef {PluralRule=1, Code="tn", GoogleCode="-"}}, + /**/{"Tonga", new LanguageCodeDef {PluralRule=1, Code="to", GoogleCode="-"}}, + {"Turkish", new LanguageCodeDef {PluralRule=0, Code="tr"}}, + /**/{"Tsonga", new LanguageCodeDef {PluralRule=1, Code="ts", GoogleCode="-"}}, + /**/{"Twi", new LanguageCodeDef {PluralRule=1, Code="tw", GoogleCode="-"}}, + /**/{"Tahitian", new LanguageCodeDef {PluralRule=1, Code="ty", GoogleCode="-"}}, + /**/{"Uighur", new LanguageCodeDef {PluralRule=1, Code="ug", GoogleCode="-"}}, + {"Ukrainian", new LanguageCodeDef {PluralRule=6, Code="uk"}}, + {"Urdu", new LanguageCodeDef {PluralRule=1, Code="ur"}}, + {"Uzbek", new LanguageCodeDef {PluralRule=2, Code="uz"}}, + /**/{"Venda", new LanguageCodeDef {PluralRule=1, Code="ve", GoogleCode="-"}}, + {"Vietnamese", new LanguageCodeDef {PluralRule=1, Code="vi"}}, + /**/{"Volapük", new LanguageCodeDef {PluralRule=1, Code="vo", GoogleCode="-"}}, + /**/{"Walloon", new LanguageCodeDef {PluralRule=1, Code="wa", GoogleCode="-"}}, + {"Welsh", new LanguageCodeDef {PluralRule=16, Code="cy"}}, + /**/{"Wolof", new LanguageCodeDef {PluralRule=1, Code="wo", GoogleCode="-"}}, + /**/{"Frisian", new LanguageCodeDef {PluralRule=1, Code="fy"}}, + {"Xhosa", new LanguageCodeDef {PluralRule=1, Code="xh"}}, + {"Yiddish", new LanguageCodeDef {PluralRule=1, Code="yi"}}, + /**/{"Yoruba", new LanguageCodeDef {PluralRule=1, Code="yo"}}, + /**/{"Zhuang", new LanguageCodeDef {PluralRule=1, Code="za", GoogleCode="-"}}, + {"Zulu", new LanguageCodeDef {PluralRule=1, Code="zu"}} + }; + + static int GetPluralRule( string langCode ) + { + if (langCode.Length > 2) + langCode = langCode.Substring(0, 2); + langCode = langCode.ToLower(); + + foreach (var kvp in mLanguageDef) + if (kvp.Value.Code == langCode) + { + return kvp.Value.PluralRule; + } + return 0; + } + + + //http://www.unicode.org/cldr/charts/latest/supplemental/language_plural_rules.html + //http://cldr.unicode.org/cldr-features#TOC-Locale-specific-patterns-for-formatting-and-parsing: + //http://cldr.unicode.org/index/cldr-spec/plural-rules + public static bool LanguageHasPluralType( string langCode, string pluralType ) + { + if (pluralType == "Plural" || pluralType=="Zero" || pluralType=="One") + return true; + + int rule = GetPluralRule (langCode); + + switch (rule) + { + case 3: // Celtic (Scottish Gaelic) + return pluralType=="Two" || pluralType=="Few"; + + case 4: // Families: Romanic (Romanian) + case 5: // Families: Baltic (Latvian, Lithuanian) + case 6: // Families: Slavic (Belarusian, Bosnian, Croatian, Serbian, Russian, Ukrainian) + case 7: // Families: Slavic (Slovak, Czech) + case 8: // Families: Slavic (Polish) + return pluralType=="Few"; + + case 9: // Families: Slavic (Slovenian, Sorbian) + return pluralType=="Two" || pluralType=="Few"; + + case 10: // Families: Celtic (Irish Gaelic) + case 11: // Families: Semitic (Arabic) + case 15: // Families: Celtic (Breton) + case 16: // Families: (Welsh) + return pluralType=="Two" || pluralType=="Few" || pluralType=="Many"; + + case 12: // Families: Semitic (Maltese) + return pluralType=="Few" || pluralType=="Many"; + + case 13: // Families: Slavic (Macedonian) + return pluralType=="Two"; + } + + return false; + } + + // https://developer.mozilla.org/en-US/docs/Mozilla/Localization/Localization_and_Plurals + public static ePluralType GetPluralType( string langCode, int n ) + { + if (n == 0) return ePluralType.Zero; + if (n == 1) return ePluralType.One; + + int rule = GetPluralRule (langCode); + + switch (rule) + { + case 0: // Families: Asian (Chinese, Japanese, Korean), Persian, Turkic/Altaic (Turkish), Thai, Lao + return ePluralType.Plural; + + case 1: // Families: Germanic (Danish, Dutch, English, Faroese, Frisian, German, Norwegian, Swedish), Finno-Ugric (Estonian, Finnish, Hungarian), Language isolate (Basque), Latin/Greek (Greek), Semitic (Hebrew), Romanic (Italian, Portuguese, Spanish, Catalan), Vietnamese + return n==1 ? ePluralType.One : ePluralType.Plural; + + case 2: // Families: Romanic (French, Brazilian Portuguese) + return n<=1 ? ePluralType.One : ePluralType.Plural; + + case 3: // Celtic (Scottish Gaelic) + return n==1 || n==11 ? ePluralType.One : + n==2 || n==12 ? ePluralType.Two : + inRange(n,3,10) || inRange(n,13,19) ? ePluralType.Few : ePluralType.Plural; + + case 4: // Families: Romanic (Romanian) + return n==1 ? ePluralType.One : + inRange(n%100, 1, 19) ? ePluralType.Few : ePluralType.Plural; + + case 5: // Families: Baltic (Latvian, Lithuanian) + return n%10==1 && n%100!=11 ? ePluralType.One : + n%10>=2 && (n%100<10 || n%100>=20) ? ePluralType.Few : ePluralType.Plural; + + case 6: // Families: Slavic (Belarusian, Bosnian, Croatian, Serbian, Russian, Ukrainian) + return n % 10 == 1 && n % 100 != 11 ? ePluralType.One : + inRange (n%10,2,4) && !inRange (n%100,12,14) ? ePluralType.Few : ePluralType.Plural; + + case 7: // Families: Slavic (Slovak, Czech) + return n==1 ? ePluralType.One : + inRange(n,2,4) ? ePluralType.Few : ePluralType.Plural; + + case 8: // Families: Slavic (Polish) + return n==1 ? ePluralType.One : + inRange (n%10,2,4) && !inRange (n%100,12,14) ? ePluralType.Few : ePluralType.Plural; + + case 9: // Families: Slavic (Slovenian, Sorbian) + return n%100==1 ? ePluralType.One : + n%100==2 ? ePluralType.Two : + inRange(n%100,3,4) ? ePluralType.Few : ePluralType.Plural; + + case 10: // Families: Celtic (Irish Gaelic) + return n==1 ? ePluralType.One : + n==2 ? ePluralType.Two : + inRange(n, 3,6) ? ePluralType.Few : + inRange(n, 7,10)? ePluralType.Many : ePluralType.Plural; + + case 11: // Families: Semitic (Arabic) + return n==0 ? ePluralType.Zero : + n==1 ? ePluralType.One : + n==2 ? ePluralType.Two : + inRange(n%100,3,10) ? ePluralType.Few : + n%100>=11 ? ePluralType.Many : ePluralType.Plural; + + case 12: // Families: Semitic (Maltese) + return n==1 ? ePluralType.One : + inRange(n%100, 1, 10) ? ePluralType.Few : + inRange(n%100, 11,19) ? ePluralType.Many : ePluralType.Plural; + + case 13: // Families: Slavic (Macedonian) + return n % 10 == 1 ? ePluralType.One : + n % 10 == 2 ? ePluralType.Two : ePluralType.Plural; + + case 14: // Plural rule #15 (2 forms) + return n%10==1 && n%100!=11 ? ePluralType.One : ePluralType.Plural; + + case 15: // Families: Celtic (Breton) + return n % 10 == 1 && n % 100 != 11 && n % 100 != 71 && n % 100 != 91 ? ePluralType.One : + n % 10 == 2 && n % 100 != 12 && n % 100 != 72 && n % 100 != 92 ? ePluralType.Two : + (n % 10 == 3 || n % 10 == 4 || n % 10 == 9) && n % 100 != 13 && n % 100 != 14 && n % 100 != 19 && n % 100 != 73 && n % 100 != 74 && n % 100 != 79 && n % 100 != 93 && n % 100 != 94 && n % 100 != 99 ? ePluralType.Few : + n%1000000==0 ? ePluralType.Many : ePluralType.Plural; + + case 16: // Families: (Welsh) + return n==0 ? ePluralType.Zero : + n==1 ? ePluralType.One : + n==2 ? ePluralType.Two : + n==3 ? ePluralType.Few : + n==6 ? ePluralType.Many : ePluralType.Plural; + + } + + return ePluralType.Plural; + } + + // A number that belong to the pluralType form + public static int GetPluralTestNumber( string langCode, ePluralType pluralType ) + { + switch (pluralType) + { + case ePluralType.Zero: + return 0; + + case ePluralType.One: + return 1; + + case ePluralType.Few: + return 3; + + case ePluralType.Many: + { + int rule = GetPluralRule (langCode); + if (rule == 10) return 8; + if (rule == 11 || rule==12) return 13; + if (rule == 15) return 1000000; + return 6; + } + + default: + return 936; + } + } + + static bool inRange(int amount, int min, int max) + { + return amount >= min && amount <= max; + } + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Google/GoogleLanguages.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Google/GoogleLanguages.cs.meta new file mode 100644 index 00000000..d4aa9145 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Google/GoogleLanguages.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 26e29b3e77176de4cbb64a3ec85beee6 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Google/GoogleTranslation.cs b/popcorn/Assets/I2/Localization/Scripts/Google/GoogleTranslation.cs new file mode 100644 index 00000000..90a7a9ca --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Google/GoogleTranslation.cs @@ -0,0 +1,86 @@ +using System.Collections.Generic; + +namespace I2.Loc +{ + using TranslationDictionary = Dictionary; + + public static partial class GoogleTranslation + { + public delegate void fnOnTranslated(string Translation, string Error); + + public static bool CanTranslate () + { + return LocalizationManager.Sources.Count > 0 && + !string.IsNullOrEmpty (LocalizationManager.GetWebServiceURL()); + } + + + // LanguageCodeFrom can be "auto" + // After the translation is returned from Google, it will call OnTranslationReady(TranslationResult, ErrorMsg) + // TranslationResult will be null if translation failed + public static void Translate( string text, string LanguageCodeFrom, string LanguageCodeTo, fnOnTranslated OnTranslationReady ) + { + LocalizationManager.InitializeIfNeeded(); + if (!CanTranslate()) + { + OnTranslationReady(null, "WebService is not set correctly or needs to be reinstalled"); + return; + } + //LanguageCodeTo = GoogleLanguages.GetGoogleLanguageCode(LanguageCodeTo); + + if (LanguageCodeTo==LanguageCodeFrom) + { + OnTranslationReady(text, null); + return; + } + + TranslationDictionary queries = new TranslationDictionary(System.StringComparer.Ordinal); + + + // Unsupported language + if (string.IsNullOrEmpty(LanguageCodeTo)) + { + OnTranslationReady(string.Empty, null); + return; + } + CreateQueries(text, LanguageCodeFrom, LanguageCodeTo, queries); // can split plurals and specializations into several queries + + Translate(queries, (results,error)=> + { + if (!string.IsNullOrEmpty(error) || results.Count==0) + { + OnTranslationReady(null, error); + return; + } + + string result = RebuildTranslation( text, queries, LanguageCodeTo); // gets the result from google and rebuilds the text from multiple queries if its is plurals + OnTranslationReady( result, null ); + }); + } + + // Query google for the translation and waits until google returns + // On some Unity versions (e.g. 2017.1f1) unity doesn't handle well waiting for WWW in the main thread, so this call can fail + // In those cases, its advisable to use the Async version (GoogleTranslation.Translate(....)) + public static string ForceTranslate ( string text, string LanguageCodeFrom, string LanguageCodeTo ) + { + TranslationDictionary dict = new TranslationDictionary(System.StringComparer.Ordinal); + AddQuery(text, LanguageCodeFrom, LanguageCodeTo, dict); + + var job = new TranslationJob_Main(dict, null); + while (true) + { + var state = job.GetState(); + if (state == TranslationJob.eJobState.Running) + continue; + + if (state == TranslationJob.eJobState.Failed) + return null; + + //TranslationJob.eJobState.Succeeded + return GetQueryResult( text, "", dict); + } + } + + } +} + diff --git a/popcorn/Assets/I2/Localization/Scripts/Google/GoogleTranslation.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Google/GoogleTranslation.cs.meta new file mode 100644 index 00000000..4acd6858 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Google/GoogleTranslation.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: cc4d0073f9e452047bd31b01de2bbd82 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Google/GoogleTranslation_Post.cs b/popcorn/Assets/I2/Localization/Scripts/Google/GoogleTranslation_Post.cs new file mode 100644 index 00000000..4e7d5b06 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Google/GoogleTranslation_Post.cs @@ -0,0 +1,175 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UnityEngine.Networking; + +namespace I2.Loc +{ + using TranslationDictionary = Dictionary; + + + public static partial class GoogleTranslation + { + static List mCurrentTranslations = new List(); + static List mTranslationJobs = new List(); + + public delegate void fnOnTranslationReady(TranslationDictionary dict, string error); + +#region Multiple Translations + + public static void Translate( TranslationDictionary requests, fnOnTranslationReady OnTranslationReady, bool usePOST = true ) + { + //WWW www = GetTranslationWWW( requests, usePOST ); + //I2.Loc.CoroutineManager.Start(WaitForTranslation(www, OnTranslationReady, requests)); + AddTranslationJob( new TranslationJob_Main(requests, OnTranslationReady) ); + } + + public static bool ForceTranslate(TranslationDictionary requests, bool usePOST = true) + { + var job = new TranslationJob_Main(requests, null); + while (true) + { + var state = job.GetState(); + if (state == TranslationJob.eJobState.Running) + continue; + + if (state == TranslationJob.eJobState.Failed) + return false; + + //TranslationJob.eJobState.Succeeded + return true; + } + } + + public static List ConvertTranslationRequest(TranslationDictionary requests, bool encodeGET) + { + List results = new List(); + var sb = new StringBuilder(); + + foreach (var kvp in requests) + { + var request = kvp.Value; + if (sb.Length > 0) + sb.Append(""); + + sb.Append(GoogleLanguages.GetGoogleLanguageCode(request.LanguageCode)); + sb.Append(":"); + for (int i = 0; i < request.TargetLanguagesCode.Length; ++i) + { + if (i != 0) sb.Append(","); + sb.Append(GoogleLanguages.GetGoogleLanguageCode(request.TargetLanguagesCode[i])); + } + sb.Append("="); + + var text = TitleCase(request.Text) == request.Text ? request.Text.ToLowerInvariant() : request.Text; + + if (!encodeGET) + { + sb.Append(text); + } + else + { + sb.Append(Uri.EscapeDataString(text)); + if (sb.Length > 4000) + { + results.Add(sb.ToString()); + sb.Length = 0; + } + } + } + results.Add(sb.ToString()); + return results; + } + + static void AddTranslationJob( TranslationJob job ) + { + mTranslationJobs.Add(job); + if (mTranslationJobs.Count==1) + { + CoroutineManager.Start(WaitForTranslations()); + } + } + + static IEnumerator WaitForTranslations() + { + while (mTranslationJobs.Count > 0) + { + var jobs = mTranslationJobs.ToArray(); + foreach (var job in jobs) + { + if (job.GetState() != TranslationJob.eJobState.Running) + mTranslationJobs.Remove(job); + } + yield return null; + } + } + + + + public static string ParseTranslationResult( string html, TranslationDictionary requests ) + { + //Debug.Log(html); + // Handle google restricting the webservice to run + if (html.StartsWith("") || html.StartsWith("")) + { + if (html.Contains("The script completed but did not return anything")) + return "The current Google WebService is not supported.\nPlease, delete the WebService from the Google Drive and Install the latest version."; + if (html.Contains("Service invoked too many times in a short time")) + return ""; // ignore and try again + return "There was a problem contacting the WebService. Please try again later\n" + html; + } + + string[] texts = html.Split (new[]{""}, StringSplitOptions.None); + string[] splitter = {""}; + int i = 0; + + var Keys = requests.Keys.ToArray(); + foreach (var text in Keys) + { + var temp = FindQueryFromOrigText(text, requests); + var fullText = texts[i++]; + if (temp.Tags != null) + { + //for (int j = 0, jmax = temp.Tags.Length; j < jmax; ++j) + for (int j = temp.Tags.Length-1; j>=0; --j) + { + fullText = fullText.Replace(GetGoogleNoTranslateTag(j), temp.Tags[j]); + //fullText = fullText.Replace( /*"{[" + j + "]}"*/ ((char)(0x2600+j)).ToString(), temp.Tags[j]); + } + } + + temp.Results = fullText.Split (splitter, StringSplitOptions.None); + + // Google has problem translating this "This Is An Example" but not this "this is an example" + if (TitleCase(text)==text) + { + for (int j=0; j0 || mTranslationJobs.Count > 0; + } + + public static void CancelCurrentGoogleTranslations() + { + mCurrentTranslations.Clear (); + foreach (var job in mTranslationJobs) + { + job.Dispose(); + } + mTranslationJobs.Clear(); + } + +#endregion + } +} + diff --git a/popcorn/Assets/I2/Localization/Scripts/Google/GoogleTranslation_Post.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Google/GoogleTranslation_Post.cs.meta new file mode 100644 index 00000000..61a1aeb2 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Google/GoogleTranslation_Post.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 94b94d27ab6931c4abee1e4d3655b660 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Google/GoogleTranslation_Queries.cs b/popcorn/Assets/I2/Localization/Scripts/Google/GoogleTranslation_Queries.cs new file mode 100644 index 00000000..04f8ba61 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Google/GoogleTranslation_Queries.cs @@ -0,0 +1,375 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; + +namespace I2.Loc +{ + using TranslationDictionary = Dictionary; + + public struct TranslationQuery + { + public string OrigText; + public string Text; // Text without Tags + public string LanguageCode; + public string[] TargetLanguagesCode; + public string[] Results; // This is filled google returns the translations + public string[] Tags; // This are the sections of the orignal text that shoudn't be translated + } + + public static partial class GoogleTranslation + { + public static void CreateQueries(string text, string LanguageCodeFrom, string LanguageCodeTo, TranslationDictionary dict) + { + if (!text.Contains("[i2s_")) + { + CreateQueries_Plurals(text, LanguageCodeFrom, LanguageCodeTo, dict); + return; + } + + var variants = SpecializationManager.GetSpecializations(text); + foreach (var kvp in variants) + { + CreateQueries_Plurals(kvp.Value, LanguageCodeFrom, LanguageCodeTo, dict); + } + } + + static void CreateQueries_Plurals(string text, string LanguageCodeFrom, string LanguageCodeTo, TranslationDictionary dict) + { + bool hasPluralParams = text.Contains("{[#"); + bool hasPluralTypes = text.Contains("[i2p_"); + if (!HasParameters(text) || !hasPluralParams && !hasPluralTypes) + { + AddQuery(text, LanguageCodeFrom, LanguageCodeTo, dict); + return; + } + + bool forcePluralParam = hasPluralParams; + + for (var i = (ePluralType)0; i <= ePluralType.Plural; ++i) + { + var pluralType = i.ToString(); + if (!GoogleLanguages.LanguageHasPluralType(LanguageCodeTo, pluralType)) + continue; + + var newText = GetPluralText(text, pluralType); + int testNumber = GoogleLanguages.GetPluralTestNumber(LanguageCodeTo, i); + + var parameter = GetPluralParameter(newText, forcePluralParam); + if (!string.IsNullOrEmpty(parameter)) + newText = newText.Replace(parameter, testNumber.ToString()); + + //Debug.Log("Translate: " + newText); + + AddQuery(newText, LanguageCodeFrom, LanguageCodeTo, dict); + } + } + + public static void AddQuery(string text, string LanguageCodeFrom, string LanguageCodeTo, TranslationDictionary dict) + { + if (string.IsNullOrEmpty(text)) + return; + + + if (!dict.ContainsKey(text)) + { + var query = new TranslationQuery { OrigText = text, LanguageCode = LanguageCodeFrom, TargetLanguagesCode = new[] { LanguageCodeTo } }; + query.Text = text; + ParseNonTranslatableElements(ref query); + dict[text] = query; + } + else + { + var query = dict[text]; + if (Array.IndexOf(query.TargetLanguagesCode, LanguageCodeTo) < 0) + { + query.TargetLanguagesCode = query.TargetLanguagesCode.Concat(new[] { LanguageCodeTo }).Distinct().ToArray(); + } + dict[text] = query; + } + } + + static string GetTranslation(string text, string LanguageCodeTo, TranslationDictionary dict) + { + if (!dict.ContainsKey(text)) + return null; + var query = dict[text]; + + int langIdx = Array.IndexOf(query.TargetLanguagesCode, LanguageCodeTo); + if (langIdx < 0) + return ""; + + if (query.Results == null) + return ""; + return query.Results[langIdx]; + } + + static TranslationQuery FindQueryFromOrigText(string origText, TranslationDictionary dict) + { + foreach (var kvp in dict) + { + if (kvp.Value.OrigText == origText) + return kvp.Value; + } + return default(TranslationQuery); + } + + public static bool HasParameters( string text ) + { + int idx = text.IndexOf("{[", StringComparison.Ordinal); + if (idx < 0) return false; + return text.IndexOf("]}", idx, StringComparison.Ordinal) > 0; + } + + public static string GetPluralParameter(string text, bool forceTag) // force tag requires that the parameter has the form {[#param]} + { + // Try finding the "plural parameter" that has the form {[#name]} + // this allows using the second parameter as plural: "Player {[name1]} has {[#value]} points" + int idx0 = text.IndexOf("{[#", StringComparison.Ordinal); + if (idx0 < 0) + { + if (forceTag) return null; + idx0 = text.IndexOf("{[", StringComparison.Ordinal); // fallback to the first paremeter if no one has the # tag + } + if (idx0 < 0) + return null; + + int idx1 = text.IndexOf("]}", idx0+2, StringComparison.Ordinal); + if (idx1 < 0) + return null; // no closing parameter tag + + return text.Substring(idx0, idx1 - idx0 + 2); + } + + public static string GetPluralText( string text, string pluralType ) + { + pluralType = "[i2p_" + pluralType + "]"; + int idx0 = text.IndexOf(pluralType, StringComparison.Ordinal); + if (idx0>=0) + { + idx0 += pluralType.Length; + int idx1 = text.IndexOf("[i2p_",idx0, StringComparison.Ordinal); + if (idx1 < 0) idx1 = text.Length; + + return text.Substring(idx0, idx1 - idx0); + } + + // PluralType not found, fallback to the first one + idx0 = text.IndexOf("[i2p_", StringComparison.Ordinal); + if (idx0 < 0) + return text; // No plural tags: "my text" + + if (idx0>0) + return text.Substring(0, idx0); // Case: "my text[i2p_zero]hello" + + // Case: "[i2p_plural]my text[i2p_zero]hello" + idx0 = text.IndexOf("]", StringComparison.Ordinal); + if (idx0 < 0) return text; // starts like a plural, but has none + + idx0 += 1; + int idx2 = text.IndexOf("[i2p_", idx0, StringComparison.Ordinal); + if (idx2 < 0) idx2 = text.Length; + return text.Substring(idx0, idx2 - idx0); + } + + static int FindClosingTag(string tag, MatchCollection matches, int startIndex) + { + for (int i = startIndex, imax = matches.Count; i < imax; ++i) + { + var newTag = I2Utils.GetCaptureMatch(matches[i]); + if (newTag[0]=='/' && tag.StartsWith(newTag.Substring(1), StringComparison.Ordinal)) + return i; + } + return -1; + } + + static string GetGoogleNoTranslateTag(int tagNumber) + { + //return " I2NT" + tagNumber; + if (tagNumber < 70) + return "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++".Substring(0, tagNumber+1); + + string s = ""; + for (int i = -1; i < tagNumber; ++i) + s += "+"; + return s; + } + + + static void ParseNonTranslatableElements( ref TranslationQuery query ) + { + //\[i2nt].*\[\/i2nt] + var matches = Regex.Matches( query.Text, @"\{\[(.*?)]}|\[(.*?)]|\<(.*?)>"); + if (matches == null || matches.Count == 0) + return; + + string finalText = query.Text; + List finalTags = new List(); + for (int i=0, imax=matches.Count; i + + if (iClosingTag < 0) + { + // Its not a tag, its a parameter + var fulltag = matches[i].ToString(); + if (fulltag.StartsWith("{[", StringComparison.Ordinal) && fulltag.EndsWith("]}", StringComparison.Ordinal)) + { + finalText = finalText.Replace(fulltag, GetGoogleNoTranslateTag(finalTags.Count)+" "); // 0x2600 is the start of the UNICODE Miscellaneous Symbols table, so they are not going to be translated by google + //finalText = finalText.Replace(fulltag, /*"{[" + finalTags.Count + "]}"*/ ((char)(0x2600 + finalTags.Count)).ToString()); // 0x2600 is the start of the UNICODE Miscellaneous Symbols table, so they are not going to be translated by google + finalTags.Add(fulltag); + } + continue; + } + + if (tag == "i2nt") + { + var tag1 = query.Text.Substring(matches[i].Index, matches[iClosingTag].Index-matches[i].Index + matches[iClosingTag].Length); + finalText = finalText.Replace(tag1, GetGoogleNoTranslateTag(finalTags.Count)+" "); + //finalText = finalText.Replace(tag1, /*"{[" + finalTags.Count + "]}"*/ ((char)(0x2600 + finalTags.Count)).ToString()); + + finalTags.Add(tag1); + } + else + { + var tag1 = matches[i].ToString(); + finalText = finalText.Replace(tag1, GetGoogleNoTranslateTag(finalTags.Count)+" "); + //finalText = finalText.Replace(tag1, /*"{[" + finalTags.Count + "]}"*/ ((char)(0x2600 + finalTags.Count)).ToString()); + finalTags.Add(tag1); + + var tag2 = matches[iClosingTag].ToString(); + finalText = finalText.Replace(tag2, GetGoogleNoTranslateTag(finalTags.Count)+" "); + //finalText = finalText.Replace(tag2, /*"{[" + finalTags.Count + "]}"*/ ((char)(0x2600 + finalTags.Count)).ToString()); + finalTags.Add(tag2); + } + } + + query.Text = finalText; + query.Tags = finalTags.ToArray(); + } + + public static string GetQueryResult(string text, string LanguageCodeTo, TranslationDictionary dict) + { + if (!dict.ContainsKey(text)) + return null; + + var query = dict[text]; + if (query.Results == null || query.Results.Length < 0) + return null; + + if (string.IsNullOrEmpty(LanguageCodeTo)) + return query.Results[0]; + + int idx = Array.IndexOf(query.TargetLanguagesCode, LanguageCodeTo); + if (idx < 0) + return null; + + return query.Results[idx]; + } + + public static string RebuildTranslation(string text, TranslationDictionary dict, string LanguageCodeTo) + { + if (!text.Contains("[i2s_")) + { + return RebuildTranslation_Plural(text, dict, LanguageCodeTo); + } + + var variants = SpecializationManager.GetSpecializations(text); + var results = new Dictionary(StringComparer.Ordinal); + + foreach (var kvp in variants) + { + results[kvp.Key] = RebuildTranslation_Plural(kvp.Value, dict, LanguageCodeTo); + } + return SpecializationManager.SetSpecializedText(results); + } + + static string RebuildTranslation_Plural( string text, TranslationDictionary dict, string LanguageCodeTo ) + { + bool hasPluralParams = text.Contains("{[#"); + bool hasPluralTypes = text.Contains("[i2p_"); + if (!HasParameters(text) || !hasPluralParams && !hasPluralTypes) + { + return GetTranslation (text, LanguageCodeTo, dict); + } + + var sb = new StringBuilder(); + + string pluralTranslation = null; + bool forcePluralParam = hasPluralParams; + + + for (var i = ePluralType.Plural; i >= 0; --i) + { + var pluralType = i.ToString(); + if (!GoogleLanguages.LanguageHasPluralType(LanguageCodeTo, pluralType)) + continue; + + var newText = GetPluralText(text, pluralType); + int testNumber = GoogleLanguages.GetPluralTestNumber(LanguageCodeTo, i); + + var parameter = GetPluralParameter(newText, forcePluralParam); + if (!string.IsNullOrEmpty(parameter)) + newText = newText.Replace(parameter, testNumber.ToString()); + + var translation = GetTranslation(newText, LanguageCodeTo, dict); + //Debug.LogFormat("from: {0} -> {1}", newText, translation); + if (!string.IsNullOrEmpty(parameter)) + translation = translation.Replace(testNumber.ToString(), parameter); + + if (i==ePluralType.Plural) + { + pluralTranslation = translation; + } + else + { + if (translation == pluralTranslation) + continue; + sb.AppendFormat("[i2p_{0}]", pluralType); + } + sb.Append(translation); + } + + return sb.ToString (); + } + + + + public static string UppercaseFirst(string s) + { + if (string.IsNullOrEmpty(s)) + { + return string.Empty; + } + char[] a = s.ToLower().ToCharArray(); + a[0] = char.ToUpper(a[0]); + return new string(a); + } + public static string TitleCase(string s) + { + if (string.IsNullOrEmpty(s)) + { + return string.Empty; + } + +#if NETFX_CORE + var sb = new StringBuilder(s); + sb[0] = char.ToUpper(sb[0]); + for (int i = 1, imax=s.Length; i Childs { get { yield break;} } + public IEnumerable DeepChilds + { + get + { + foreach (var C in Childs) + foreach (var D in C.DeepChilds) + yield return D; + } + } + + public override string ToString() + { + return "JSONNode"; + } + public virtual string ToString(string aPrefix) + { + return "JSONNode"; + } + + #endregion common interface + + #region typecasting properties + public virtual int AsInt + { + get + { + int v = 0; + if (int.TryParse(Value,out v)) + return v; + return 0; + } + set + { + Value = value.ToString(); + } + } + public virtual float AsFloat + { + get + { + float v = 0.0f; + if (float.TryParse(Value,out v)) + return v; + return 0.0f; + } + set + { + Value = value.ToString(); + } + } + public virtual double AsDouble + { + get + { + double v = 0.0; + if (double.TryParse(Value,out v)) + return v; + return 0.0; + } + set + { + Value = value.ToString(); + } + } + public virtual bool AsBool + { + get + { + bool v = false; + if (bool.TryParse(Value,out v)) + return v; + return !string.IsNullOrEmpty(Value); + } + set + { + Value = value?"true":"false"; + } + } + public virtual JSONArray AsArray + { + get + { + return this as JSONArray; + } + } + public virtual JSONClass AsObject + { + get + { + return this as JSONClass; + } + } + + + #endregion typecasting properties + + #region operators + public static implicit operator JSONNode(string s) + { + return new JSONData(s); + } + public static implicit operator string(JSONNode d) + { + return d == null?null:d.Value; + } + public static bool operator ==(JSONNode a, object b) + { + if (b == null && a is JSONLazyCreator) + return true; + return ReferenceEquals(a,b); + } + + public static bool operator !=(JSONNode a, object b) + { + return !(a == b); + } + public override bool Equals (object obj) + { + return ReferenceEquals(this, obj); + } + public override int GetHashCode () + { + return base.GetHashCode(); + } + + + #endregion operators + + internal static string Escape(string aText) + { + string result = ""; + foreach(char c in aText) + { + switch(c) + { + case '\\' : result += "\\\\"; break; + case '\"' : result += "\\\""; break; + case '\n' : result += "\\n" ; break; + case '\r' : result += "\\r" ; break; + case '\t' : result += "\\t" ; break; + case '\b' : result += "\\b" ; break; + case '\f' : result += "\\f" ; break; + default : result += c ; break; + } + } + return result; + } + + public static JSONNode Parse(string aJSON) + { + Stack stack = new Stack(); + JSONNode ctx = null; + int i = 0; + string Token = ""; + string TokenName = ""; + bool QuoteMode = false; + while (i < aJSON.Length) + { + switch (aJSON[i]) + { + case '{': + if (QuoteMode) + { + Token += aJSON[i]; + break; + } + stack.Push(new JSONClass()); + if (ctx != null) + { + TokenName = TokenName.Trim(); + if (ctx is JSONArray) + ctx.Add(stack.Peek()); + else if (TokenName != "") + ctx.Add(TokenName,stack.Peek()); + } + TokenName = ""; + Token = ""; + ctx = stack.Peek(); + break; + + case '[': + if (QuoteMode) + { + Token += aJSON[i]; + break; + } + + stack.Push(new JSONArray()); + if (ctx != null) + { + TokenName = TokenName.Trim(); + if (ctx is JSONArray) + ctx.Add(stack.Peek()); + else if (TokenName != "") + ctx.Add(TokenName,stack.Peek()); + } + TokenName = ""; + Token = ""; + ctx = stack.Peek(); + break; + + case '}': + case ']': + if (QuoteMode) + { + Token += aJSON[i]; + break; + } + if (stack.Count == 0) + throw new Exception("JSON Parse: Too many closing brackets"); + + stack.Pop(); + if (Token != "") + { + TokenName = TokenName.Trim(); + if (ctx is JSONArray) + ctx.Add(Token); + else if (TokenName != "") + ctx.Add(TokenName,Token); + } + TokenName = ""; + Token = ""; + if (stack.Count>0) + ctx = stack.Peek(); + break; + + case ':': + if (QuoteMode) + { + Token += aJSON[i]; + break; + } + TokenName = Token; + Token = ""; + break; + + case '"': + QuoteMode ^= true; + break; + + case ',': + if (QuoteMode) + { + Token += aJSON[i]; + break; + } + if (Token != "") + { + if (ctx is JSONArray) + ctx.Add(Token); + else if (TokenName != "") + ctx.Add(TokenName, Token); + } + TokenName = ""; + Token = ""; + break; + + case '\r': + case '\n': + break; + + case ' ': + case '\t': + if (QuoteMode) + Token += aJSON[i]; + break; + + case '\\': + ++i; + if (QuoteMode) + { + char C = aJSON[i]; + switch (C) + { + case 't' : Token += '\t'; break; + case 'r' : Token += '\r'; break; + case 'n' : Token += '\n'; break; + case 'b' : Token += '\b'; break; + case 'f' : Token += '\f'; break; + case 'u': + { + string s = aJSON.Substring(i+1,4); + Token += (char)int.Parse(s, NumberStyles.AllowHexSpecifier); + i += 4; + break; + } + default : Token += C; break; + } + } + break; + + default: + Token += aJSON[i]; + break; + } + ++i; + } + if (QuoteMode) + { + throw new Exception("JSON Parse: Quotation marks seems to be messed up."); + } + return ctx; + } + + public virtual void Serialize(BinaryWriter aWriter) {} + + public void SaveToStream(Stream aData) + { + var W = new BinaryWriter(aData); + Serialize(W); + } + + #if USE_SharpZipLib + public void SaveToCompressedStream(System.IO.Stream aData) + { + using (var gzipOut = new ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream(aData)) + { + gzipOut.IsStreamOwner = false; + SaveToStream(gzipOut); + gzipOut.Close(); + } + } + + public void SaveToCompressedFile(string aFileName) + { + #if USE_FileIO + System.IO.Directory.CreateDirectory((new System.IO.FileInfo(aFileName)).Directory.FullName); + using(var F = System.IO.File.OpenWrite(aFileName)) + { + SaveToCompressedStream(F); + } + #else + throw new Exception("Can't use File IO stuff in webplayer"); + #endif + } + public string SaveToCompressedBase64() + { + using (var stream = new System.IO.MemoryStream()) + { + SaveToCompressedStream(stream); + stream.Position = 0; + return System.Convert.ToBase64String(stream.ToArray()); + } + } + + #else + public void SaveToCompressedStream(Stream aData) + { + throw new Exception("Can't use compressed functions. You need include the SharpZipLib and uncomment the define at the top of SimpleJSON"); + } + public void SaveToCompressedFile(string aFileName) + { + throw new Exception("Can't use compressed functions. You need include the SharpZipLib and uncomment the define at the top of SimpleJSON"); + } + public string SaveToCompressedBase64() + { + throw new Exception("Can't use compressed functions. You need include the SharpZipLib and uncomment the define at the top of SimpleJSON"); + } + #endif + + public void SaveToFile(string aFileName) + { + #if USE_FileIO + Directory.CreateDirectory(new FileInfo(aFileName).Directory.FullName); + using(var F = File.OpenWrite(aFileName)) + { + SaveToStream(F); + } + #else + throw new Exception("Can't use File IO stuff in webplayer"); + #endif + } + public string SaveToBase64() + { + using (var stream = new MemoryStream()) + { + SaveToStream(stream); + stream.Position = 0; + return Convert.ToBase64String(stream.ToArray()); + } + } + public static JSONNode Deserialize(BinaryReader aReader) + { + JSONBinaryTag type = (JSONBinaryTag)aReader.ReadByte(); + switch(type) + { + case JSONBinaryTag.Array: + { + int count = aReader.ReadInt32(); + JSONArray tmp = new JSONArray(); + for(int i = 0; i < count; i++) + tmp.Add(Deserialize(aReader)); + return tmp; + } + case JSONBinaryTag.Class: + { + int count = aReader.ReadInt32(); + JSONClass tmp = new JSONClass(); + for(int i = 0; i < count; i++) + { + string key = aReader.ReadString(); + var val = Deserialize(aReader); + tmp.Add(key, val); + } + return tmp; + } + case JSONBinaryTag.Value: + { + return new JSONData(aReader.ReadString()); + } + case JSONBinaryTag.IntValue: + { + return new JSONData(aReader.ReadInt32()); + } + case JSONBinaryTag.DoubleValue: + { + return new JSONData(aReader.ReadDouble()); + } + case JSONBinaryTag.BoolValue: + { + return new JSONData(aReader.ReadBoolean()); + } + case JSONBinaryTag.FloatValue: + { + return new JSONData(aReader.ReadSingle()); + } + + default: + { + throw new Exception("Error deserializing JSON. Unknown tag: " + type); + } + } + } + + #if USE_SharpZipLib + public static JSONNode LoadFromCompressedStream(System.IO.Stream aData) + { + var zin = new ICSharpCode.SharpZipLib.BZip2.BZip2InputStream(aData); + return LoadFromStream(zin); + } + public static JSONNode LoadFromCompressedFile(string aFileName) + { + #if USE_FileIO + using(var F = System.IO.File.OpenRead(aFileName)) + { + return LoadFromCompressedStream(F); + } + #else + throw new Exception("Can't use File IO stuff in webplayer"); + #endif + } + public static JSONNode LoadFromCompressedBase64(string aBase64) + { + var tmp = System.Convert.FromBase64String(aBase64); + var stream = new System.IO.MemoryStream(tmp); + stream.Position = 0; + return LoadFromCompressedStream(stream); + } + #else + public static JSONNode LoadFromCompressedFile(string aFileName) + { + throw new Exception("Can't use compressed functions. You need include the SharpZipLib and uncomment the define at the top of SimpleJSON"); + } + public static JSONNode LoadFromCompressedStream(Stream aData) + { + throw new Exception("Can't use compressed functions. You need include the SharpZipLib and uncomment the define at the top of SimpleJSON"); + } + public static JSONNode LoadFromCompressedBase64(string aBase64) + { + throw new Exception("Can't use compressed functions. You need include the SharpZipLib and uncomment the define at the top of SimpleJSON"); + } + #endif + + public static JSONNode LoadFromStream(Stream aData) + { + using(var R = new BinaryReader(aData)) + { + return Deserialize(R); + } + } + public static JSONNode LoadFromFile(string aFileName) + { + #if USE_FileIO + using(var F = File.OpenRead(aFileName)) + { + return LoadFromStream(F); + } + #else + throw new Exception("Can't use File IO stuff in webplayer"); + #endif + } + public static JSONNode LoadFromBase64(string aBase64) + { + var tmp = Convert.FromBase64String(aBase64); + var stream = new MemoryStream(tmp); + stream.Position = 0; + return LoadFromStream(stream); + } + } // End of JSONNode + + public class JSONArray : JSONNode, IEnumerable + { + private List m_List = new List(); + public override JSONNode this[int aIndex] + { + get + { + if (aIndex<0 || aIndex >= m_List.Count) + return new JSONLazyCreator(this); + return m_List[aIndex]; + } + set + { + if (aIndex<0 || aIndex >= m_List.Count) + m_List.Add(value); + else + m_List[aIndex] = value; + } + } + public override JSONNode this[string aKey] + { + get{ return new JSONLazyCreator(this);} + set{ m_List.Add(value); } + } + public override int Count + { + get { return m_List.Count; } + } + public override void Add(string aKey, JSONNode aItem) + { + m_List.Add(aItem); + } + public override JSONNode Remove(int aIndex) + { + if (aIndex < 0 || aIndex >= m_List.Count) + return null; + JSONNode tmp = m_List[aIndex]; + m_List.RemoveAt(aIndex); + return tmp; + } + public override JSONNode Remove(JSONNode aNode) + { + m_List.Remove(aNode); + return aNode; + } + public override IEnumerable Childs + { + get + { + foreach(JSONNode N in m_List) + yield return N; + } + } + public IEnumerator GetEnumerator() + { + foreach(JSONNode N in m_List) + yield return N; + } + public override string ToString() + { + string result = "[ "; + foreach (JSONNode N in m_List) + { + if (result.Length > 2) + result += ", "; + result += N.ToString(); + } + result += " ]"; + return result; + } + public override string ToString(string aPrefix) + { + string result = "[ "; + foreach (JSONNode N in m_List) + { + if (result.Length > 3) + result += ", "; + result += "\n" + aPrefix + " "; + result += N.ToString(aPrefix+" "); + } + result += "\n" + aPrefix + "]"; + return result; + } + public override void Serialize (BinaryWriter aWriter) + { + aWriter.Write((byte)JSONBinaryTag.Array); + aWriter.Write(m_List.Count); + for(int i = 0; i < m_List.Count; i++) + { + m_List[i].Serialize(aWriter); + } + } + } // End of JSONArray + + public class JSONClass : JSONNode, IEnumerable + { + private Dictionary m_Dict = new Dictionary(StringComparer.Ordinal); + public override JSONNode this[string aKey] + { + get + { + if (m_Dict.ContainsKey(aKey)) + return m_Dict[aKey]; + return new JSONLazyCreator(this, aKey); + } + set + { + if (m_Dict.ContainsKey(aKey)) + m_Dict[aKey] = value; + else + m_Dict.Add(aKey,value); + } + } + public override JSONNode this[int aIndex] + { + get + { + if (aIndex < 0 || aIndex >= m_Dict.Count) + return null; + +#if DISABLE_LINQ_EXT + foreach (var kvp in m_Dict) + { + if (aIndex==0) + return kvp.Value; + aIndex--; + } + return null; +#else + return m_Dict.ElementAt(aIndex).Value; +#endif + } + set + { + if (aIndex < 0 || aIndex >= m_Dict.Count) + return; +#if DISABLE_LINQ_EXT + string[] keys = new string[m_Dict.Keys.Count]; + m_Dict.Keys.CopyTo(keys,0); + string key = keys[aIndex]; +#else + string key = m_Dict.ElementAt(aIndex).Key; +#endif + m_Dict[key] = value; + } + } + public override int Count + { + get { return m_Dict.Count; } + } + + + public override void Add(string aKey, JSONNode aItem) + { + if (!string.IsNullOrEmpty(aKey)) + { + if (m_Dict.ContainsKey(aKey)) + m_Dict[aKey] = aItem; + else + m_Dict.Add(aKey, aItem); + } + else + m_Dict.Add(Guid.NewGuid().ToString(), aItem); + } + + public override JSONNode Remove(string aKey) + { + if (!m_Dict.ContainsKey(aKey)) + return null; + JSONNode tmp = m_Dict[aKey]; + m_Dict.Remove(aKey); + return tmp; + } + public override JSONNode Remove(int aIndex) + { + if (aIndex < 0 || aIndex >= m_Dict.Count) + return null; + +#if DISABLE_LINQ_EXT + string[] keys = new string[m_Dict.Keys.Count]; + m_Dict.Keys.CopyTo(keys,0); + string key = keys[aIndex]; + var value = m_Dict[key]; + m_Dict.Remove(key); + return value; +#else + var item = m_Dict.ElementAt(aIndex); + m_Dict.Remove(item.Key); + return item.Value; +#endif + } + public override JSONNode Remove(JSONNode aNode) + { + try + { +#if DISABLE_LINQ_EXT + foreach (var kvp in m_Dict) + if (kvp.Value == aNode) + { + m_Dict.Remove(kvp.Key); + break; + } + return aNode; +#else + var item = m_Dict.Where(k => k.Value == aNode).First(); + m_Dict.Remove(item.Key); + return aNode; +#endif + } + catch + { + return null; + } + } + + public override IEnumerable Childs + { + get + { + foreach(KeyValuePair N in m_Dict) + yield return N.Value; + } + } + + public IEnumerator GetEnumerator() + { + foreach(KeyValuePair N in m_Dict) + yield return N; + } + public override string ToString() + { + string result = "{"; + foreach (KeyValuePair N in m_Dict) + { + if (result.Length > 2) + result += ", "; + result += "\"" + Escape(N.Key) + "\":" + N.Value; + } + result += "}"; + return result; + } + public override string ToString(string aPrefix) + { + string result = "{ "; + foreach (KeyValuePair N in m_Dict) + { + if (result.Length > 3) + result += ", "; + result += "\n" + aPrefix + " "; + result += "\"" + Escape(N.Key) + "\" : " + N.Value.ToString(aPrefix+" "); + } + result += "\n" + aPrefix + "}"; + return result; + } + public override void Serialize (BinaryWriter aWriter) + { + aWriter.Write((byte)JSONBinaryTag.Class); + aWriter.Write(m_Dict.Count); + foreach(string K in m_Dict.Keys) + { + aWriter.Write(K); + m_Dict[K].Serialize(aWriter); + } + } + } // End of JSONClass + + public class JSONData : JSONNode + { + private string m_Data; + public override string Value + { + get { return m_Data; } + set { m_Data = value; } + } + public JSONData(string aData) + { + m_Data = aData; + } + public JSONData(float aData) + { + AsFloat = aData; + } + public JSONData(double aData) + { + AsDouble = aData; + } + public JSONData(bool aData) + { + AsBool = aData; + } + public JSONData(int aData) + { + AsInt = aData; + } + + public override string ToString() + { + return "\"" + Escape(m_Data) + "\""; + } + public override string ToString(string aPrefix) + { + return "\"" + Escape(m_Data) + "\""; + } + public override void Serialize (BinaryWriter aWriter) + { + var tmp = new JSONData(""); + + tmp.AsInt = AsInt; + if (tmp.m_Data == m_Data) + { + aWriter.Write((byte)JSONBinaryTag.IntValue); + aWriter.Write(AsInt); + return; + } + tmp.AsFloat = AsFloat; + if (tmp.m_Data == m_Data) + { + aWriter.Write((byte)JSONBinaryTag.FloatValue); + aWriter.Write(AsFloat); + return; + } + tmp.AsDouble = AsDouble; + if (tmp.m_Data == m_Data) + { + aWriter.Write((byte)JSONBinaryTag.DoubleValue); + aWriter.Write(AsDouble); + return; + } + + tmp.AsBool = AsBool; + if (tmp.m_Data == m_Data) + { + aWriter.Write((byte)JSONBinaryTag.BoolValue); + aWriter.Write(AsBool); + return; + } + aWriter.Write((byte)JSONBinaryTag.Value); + aWriter.Write(m_Data); + } + } // End of JSONData + + internal class JSONLazyCreator : JSONNode + { + private JSONNode m_Node; + private string m_Key; + + public JSONLazyCreator(JSONNode aNode) + { + m_Node = aNode; + m_Key = null; + } + public JSONLazyCreator(JSONNode aNode, string aKey) + { + m_Node = aNode; + m_Key = aKey; + } + + private void Set(JSONNode aVal) + { + if (m_Key == null) + { + m_Node.Add(aVal); + } + else + { + m_Node.Add(m_Key, aVal); + } + m_Node = null; // Be GC friendly. + } + + public override JSONNode this[int aIndex] + { + get + { + return new JSONLazyCreator(this); + } + set + { + var tmp = new JSONArray(); + tmp.Add(value); + Set(tmp); + } + } + + public override JSONNode this[string aKey] + { + get + { + return new JSONLazyCreator(this, aKey); + } + set + { + var tmp = new JSONClass(); + tmp.Add(aKey, value); + Set(tmp); + } + } + public override void Add (JSONNode aItem) + { + var tmp = new JSONArray(); + tmp.Add(aItem); + Set(tmp); + } + public override void Add (string aKey, JSONNode aItem) + { + var tmp = new JSONClass(); + tmp.Add(aKey, aItem); + Set(tmp); + } + public static bool operator ==(JSONLazyCreator a, object b) + { + if (b == null) + return true; + return ReferenceEquals(a,b); + } + + public static bool operator !=(JSONLazyCreator a, object b) + { + return !(a == b); + } + public override bool Equals (object obj) + { + if (obj == null) + return true; + return ReferenceEquals(this, obj); + } + public override int GetHashCode () + { + return base.GetHashCode(); + } + + public override string ToString() + { + return ""; + } + public override string ToString(string aPrefix) + { + return ""; + } + + public override int AsInt + { + get + { + JSONData tmp = new JSONData(0); + Set(tmp); + return 0; + } + set + { + JSONData tmp = new JSONData(value); + Set(tmp); + } + } + public override float AsFloat + { + get + { + JSONData tmp = new JSONData(0.0f); + Set(tmp); + return 0.0f; + } + set + { + JSONData tmp = new JSONData(value); + Set(tmp); + } + } + public override double AsDouble + { + get + { + JSONData tmp = new JSONData(0.0); + Set(tmp); + return 0.0; + } + set + { + JSONData tmp = new JSONData(value); + Set(tmp); + } + } + public override bool AsBool + { + get + { + JSONData tmp = new JSONData(false); + Set(tmp); + return false; + } + set + { + JSONData tmp = new JSONData(value); + Set(tmp); + } + } + public override JSONArray AsArray + { + get + { + JSONArray tmp = new JSONArray(); + Set(tmp); + return tmp; + } + } + public override JSONClass AsObject + { + get + { + JSONClass tmp = new JSONClass(); + Set(tmp); + return tmp; + } + } + } // End of JSONLazyCreator + + public static class JSON + { + public static JSONNode Parse(string aJSON) + { + return JSONNode.Parse(aJSON); + } + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Google/SimpleJSON.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Google/SimpleJSON.cs.meta new file mode 100644 index 00000000..a86ec175 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Google/SimpleJSON.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: c6bd173cd8524b04daa3dabce666b456 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Google/TranslationJob.cs b/popcorn/Assets/I2/Localization/Scripts/Google/TranslationJob.cs new file mode 100644 index 00000000..73259206 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Google/TranslationJob.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using UnityEngine.Networking; + +namespace I2.Loc +{ + using TranslationDictionary = Dictionary; + + + public class TranslationJob : IDisposable + { + public eJobState mJobState = eJobState.Running; + + public enum eJobState { Running, Succeeded, Failed } + + public virtual eJobState GetState() { return mJobState; } + + public virtual void Dispose() { } + + } + + public class TranslationJob_WWW : TranslationJob + { + public UnityWebRequest www; + + public override void Dispose() + { + if (www!=null) + www.Dispose(); + www = null; + } + + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Google/TranslationJob.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Google/TranslationJob.cs.meta new file mode 100644 index 00000000..3dd1594d --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Google/TranslationJob.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 7dae211a5bb44db46a568fb70fca3296 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Google/TranslationJob_GET.cs b/popcorn/Assets/I2/Localization/Scripts/Google/TranslationJob_GET.cs new file mode 100644 index 00000000..0e805b16 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Google/TranslationJob_GET.cs @@ -0,0 +1,79 @@ +using System.Collections.Generic; +using System.Text; +using UnityEngine.Networking; + +namespace I2.Loc +{ + using TranslationDictionary = Dictionary; + + public class TranslationJob_GET : TranslationJob_WWW + { + TranslationDictionary _requests; + GoogleTranslation.fnOnTranslationReady _OnTranslationReady; + List mQueries; + public string mErrorMessage; + + public TranslationJob_GET(TranslationDictionary requests, GoogleTranslation.fnOnTranslationReady OnTranslationReady) + { + _requests = requests; + _OnTranslationReady = OnTranslationReady; + + mQueries = GoogleTranslation.ConvertTranslationRequest(requests, true); + + GetState(); + } + + void ExecuteNextQuery() + { + if (mQueries.Count == 0) + { + mJobState = eJobState.Succeeded; + return; + } + + int lastQuery = mQueries.Count - 1; + var query = mQueries[lastQuery]; + mQueries.RemoveAt(lastQuery); + + string url = $"{LocalizationManager.GetWebServiceURL()}?action=Translate&list={query}"; + www = UnityWebRequest.Get(url); + I2Utils.SendWebRequest(www); + } + + public override eJobState GetState() + { + if (www != null && www.isDone) + { + ProcessResult(www.downloadHandler.data, www.error); + www.Dispose(); + www = null; + } + + if (www==null) + { + ExecuteNextQuery(); + } + + return mJobState; + } + + public void ProcessResult(byte[] bytes, string errorMsg) + { + if (string.IsNullOrEmpty(errorMsg)) + { + var wwwText = Encoding.UTF8.GetString(bytes, 0, bytes.Length); //www.text + errorMsg = GoogleTranslation.ParseTranslationResult(wwwText, _requests); + + if (string.IsNullOrEmpty(errorMsg)) + { + if (_OnTranslationReady!=null) + _OnTranslationReady(_requests, null); + return; + } + } + + mJobState = eJobState.Failed; + mErrorMessage = errorMsg; + } + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Google/TranslationJob_GET.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Google/TranslationJob_GET.cs.meta new file mode 100644 index 00000000..7835a839 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Google/TranslationJob_GET.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 13df42f7287eccc4399bc757d577030e +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Google/TranslationJob_Main.cs b/popcorn/Assets/I2/Localization/Scripts/Google/TranslationJob_Main.cs new file mode 100644 index 00000000..256d6aac --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Google/TranslationJob_Main.cs @@ -0,0 +1,102 @@ +using System.Collections.Generic; + +namespace I2.Loc +{ + using TranslationDictionary = Dictionary; + + public class TranslationJob_Main : TranslationJob + { + TranslationJob_WEB mWeb; + TranslationJob_POST mPost; + TranslationJob_GET mGet; + + TranslationDictionary _requests; + GoogleTranslation.fnOnTranslationReady _OnTranslationReady; + public string mErrorMessage; + + public TranslationJob_Main(TranslationDictionary requests, GoogleTranslation.fnOnTranslationReady OnTranslationReady) + { + _requests = requests; + _OnTranslationReady = OnTranslationReady; + + //mWeb = new TranslationJob_WEB(requests, OnTranslationReady); + mPost = new TranslationJob_POST(requests, OnTranslationReady); + } + + public override eJobState GetState() + { + if (mWeb != null) + { + var state = mWeb.GetState(); + switch (state) + { + case eJobState.Running: return eJobState.Running; + case eJobState.Succeeded: + { + mJobState = eJobState.Succeeded; + break; + } + case eJobState.Failed: + { + mWeb.Dispose(); + mWeb = null; + mPost = new TranslationJob_POST(_requests, _OnTranslationReady); + break; + } + } + } + if (mPost != null) + { + var state = mPost.GetState(); + switch (state) + { + case eJobState.Running: return eJobState.Running; + case eJobState.Succeeded: + { + mJobState = eJobState.Succeeded; + break; + } + case eJobState.Failed: + { + mPost.Dispose(); + mPost = null; + mGet = new TranslationJob_GET(_requests, _OnTranslationReady); + break; + } + } + } + if (mGet != null) + { + var state = mGet.GetState(); + switch (state) + { + case eJobState.Running: return eJobState.Running; + case eJobState.Succeeded: + { + mJobState = eJobState.Succeeded; + break; + } + case eJobState.Failed: + { + mErrorMessage = mGet.mErrorMessage; + if (_OnTranslationReady != null) + _OnTranslationReady(_requests, mErrorMessage); + mGet.Dispose(); + mGet = null; + break; + } + } + } + + return mJobState; + } + + public override void Dispose() + { + if (mPost != null) mPost.Dispose(); + if (mGet != null) mGet.Dispose(); + mPost = null; + mGet = null; + } + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Google/TranslationJob_Main.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Google/TranslationJob_Main.cs.meta new file mode 100644 index 00000000..43390b4a --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Google/TranslationJob_Main.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: b6aed7ae05f9c254596b3728c5811bdb +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Google/TranslationJob_POST.cs b/popcorn/Assets/I2/Localization/Scripts/Google/TranslationJob_POST.cs new file mode 100644 index 00000000..50a089e8 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Google/TranslationJob_POST.cs @@ -0,0 +1,60 @@ +using System.Collections.Generic; +using System.Text; +using UnityEngine; +using UnityEngine.Networking; + +namespace I2.Loc +{ + using TranslationDictionary = Dictionary; + + public class TranslationJob_POST : TranslationJob_WWW + { + TranslationDictionary _requests; + GoogleTranslation.fnOnTranslationReady _OnTranslationReady; + + public TranslationJob_POST(TranslationDictionary requests, GoogleTranslation.fnOnTranslationReady OnTranslationReady) + { + _requests = requests; + _OnTranslationReady = OnTranslationReady; + + var data = GoogleTranslation.ConvertTranslationRequest(requests, false); + + WWWForm form = new WWWForm(); + form.AddField("action", "Translate"); + form.AddField("list", data[0]); + + www = UnityWebRequest.Post(LocalizationManager.GetWebServiceURL(), form); + I2Utils.SendWebRequest(www); + } + + public override eJobState GetState() + { + if (www != null && www.isDone) + { + ProcessResult(www.downloadHandler.data, www.error); + www.Dispose(); + www = null; + } + + return mJobState; + } + + public void ProcessResult(byte[] bytes, string errorMsg) + { + if (!string.IsNullOrEmpty(errorMsg)) + { + // check for + //if (errorMsg.Contains("rewind")) // "necessary data rewind wasn't possible" + mJobState = eJobState.Failed; + } + else + { + var wwwText = Encoding.UTF8.GetString(bytes, 0, bytes.Length); //www.text + errorMsg = GoogleTranslation.ParseTranslationResult(wwwText, _requests); + if (_OnTranslationReady!=null) + _OnTranslationReady(_requests, errorMsg); + mJobState = eJobState.Succeeded; + } + } + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Google/TranslationJob_POST.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Google/TranslationJob_POST.cs.meta new file mode 100644 index 00000000..abc2d46f --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Google/TranslationJob_POST.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 3450e33294f339348ae4e52731974230 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Google/TranslationJob_WEB.cs b/popcorn/Assets/I2/Localization/Scripts/Google/TranslationJob_WEB.cs new file mode 100644 index 00000000..cf6d13b3 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Google/TranslationJob_WEB.cs @@ -0,0 +1,169 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Text; +using System.Text.RegularExpressions; +using UnityEngine; +using UnityEngine.Networking; + +namespace I2.Loc +{ + using TranslationDictionary = Dictionary; + + public class TranslationJob_WEB : TranslationJob_WWW + { + TranslationDictionary _requests; + GoogleTranslation.fnOnTranslationReady _OnTranslationReady; + public string mErrorMessage; + + string mCurrentBatch_ToLanguageCode; + string mCurrentBatch_FromLanguageCode; + List mCurrentBatch_Text; + + List> mQueries; + + public TranslationJob_WEB(TranslationDictionary requests, GoogleTranslation.fnOnTranslationReady OnTranslationReady) + { + _requests = requests; + _OnTranslationReady = OnTranslationReady; + + FindAllQueries(); + ExecuteNextBatch(); + } + + void FindAllQueries() + { + mQueries = new List>(); + foreach (var kvp in _requests) + { + foreach (var langCode in kvp.Value.TargetLanguagesCode) + { + mQueries.Add(new KeyValuePair(kvp.Value.OrigText, kvp.Value.LanguageCode+":"+langCode)); + } + } + + mQueries.Sort((a, b) => a.Value.CompareTo(b.Value)); + } + + void ExecuteNextBatch() + { + if (mQueries.Count==0) + { + mJobState = eJobState.Succeeded; + return; + } + mCurrentBatch_Text = new List(); + + string lastLangCode = null; + int maxLength = 200; + + var sb = new StringBuilder(); + int i; + for (i=0; i maxLength) + break; + } + mQueries.RemoveRange(0, i); + + var fromtoLang = lastLangCode.Split(':'); + mCurrentBatch_FromLanguageCode = fromtoLang[0]; + mCurrentBatch_ToLanguageCode = fromtoLang[1]; + + string url = string.Format ("http://www.google.com/translate_t?hl=en&vi=c&ie=UTF8&oe=UTF8&submit=Translate&langpair={0}|{1}&text={2}", mCurrentBatch_FromLanguageCode, mCurrentBatch_ToLanguageCode, Uri.EscapeUriString( sb.ToString() )); + Debug.Log(url); + + www = UnityWebRequest.Get(url); + I2Utils.SendWebRequest(www); + } + + public override eJobState GetState() + { + if (www != null && www.isDone) + { + ProcessResult(www.downloadHandler.data, www.error); + www.Dispose(); + www = null; + } + + if (www == null) + { + ExecuteNextBatch(); + } + + return mJobState; + } + + public void ProcessResult(byte[] bytes, string errorMsg) + { + if (string.IsNullOrEmpty(errorMsg)) + { + var wwwText = Encoding.UTF8.GetString(bytes, 0, bytes.Length); //www.text + var result = ParseTranslationResult(wwwText, "aab"); + //errorMsg = GoogleTranslation.ParseTranslationResult(wwwText, _requests); + Debug.Log(result); + + if (string.IsNullOrEmpty(errorMsg)) + { + if (_OnTranslationReady != null) + _OnTranslationReady(_requests, null); + return; + } + } + + mJobState = eJobState.Failed; + mErrorMessage = errorMsg; + } + + string ParseTranslationResult( string html, string OriginalText ) + { + try + { + // This is a Hack for reading Google Translation while Google doens't change their response format + int iStart = html.IndexOf("TRANSLATED_TEXT='", StringComparison.Ordinal) + "TRANSLATED_TEXT='".Length; + int iEnd = html.IndexOf("';var", iStart, StringComparison.Ordinal); + + string Translation = html.Substring( iStart, iEnd-iStart); + + // Convert to normalized HTML + Translation = Regex.Replace(Translation, @"\\x([a-fA-F0-9]{2})", + match => char.ConvertFromUtf32(int.Parse(match.Groups[1].Value, NumberStyles.HexNumber))); + + // Convert ASCII Characters + Translation = Regex.Replace(Translation, @"&#(\d+);", + match => char.ConvertFromUtf32(int.Parse(match.Groups[1].Value))); + + Translation = Translation.Replace("
", "\n"); + + if (OriginalText.ToUpper()==OriginalText) + Translation = Translation.ToUpper(); + else + if (GoogleTranslation.UppercaseFirst(OriginalText)==OriginalText) + Translation = GoogleTranslation.UppercaseFirst(Translation); + else + if (GoogleTranslation.TitleCase(OriginalText)==OriginalText) + Translation = GoogleTranslation.TitleCase(Translation); + + return Translation; + } + catch (Exception ex) + { + Debug.LogError(ex.Message); + return string.Empty; + } + } + } + + } \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Google/TranslationJob_WEB.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Google/TranslationJob_WEB.cs.meta new file mode 100644 index 00000000..408e6adb --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Google/TranslationJob_WEB.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 3b72399bd2ff39042b1320bb943e0a20 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/LanguageData.cs b/popcorn/Assets/I2/Localization/Scripts/LanguageData.cs new file mode 100644 index 00000000..85adffb3 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/LanguageData.cs @@ -0,0 +1,43 @@ +using System; + +namespace I2.Loc +{ + public enum eLanguageDataFlags + { + DISABLED = 1, + KEEP_LOADED = 2, + NOT_LOADED = 4 + } + [Serializable] + public class LanguageData + { + public string Name; + public string Code; + public byte Flags; // eLanguageDataFlags + + [NonSerialized] + public bool Compressed = false; // This will be used in the next version for only loading used Languages + + public bool IsEnabled () { return (Flags & (int)eLanguageDataFlags.DISABLED) == 0; } + + public void SetEnabled( bool bEnabled ) + { + if (bEnabled) Flags = (byte)(Flags & ~(int)eLanguageDataFlags.DISABLED); + else Flags = (byte)(Flags | (int)eLanguageDataFlags.DISABLED); + } + + public bool IsLoaded () { return (Flags & (int)eLanguageDataFlags.NOT_LOADED) == 0; } + public bool CanBeUnloaded () { return (Flags & (int)eLanguageDataFlags.KEEP_LOADED) == 0; } + + public void SetLoaded ( bool loaded ) + { + if (loaded) Flags = (byte)(Flags & ~(int)eLanguageDataFlags.NOT_LOADED); + else Flags = (byte)(Flags | (int)eLanguageDataFlags.NOT_LOADED); + } + public void SetCanBeUnLoaded(bool allowUnloading) + { + if (allowUnloading) Flags = (byte)(Flags & ~(int)eLanguageDataFlags.KEEP_LOADED); + else Flags = (byte)(Flags | (int)eLanguageDataFlags.KEEP_LOADED); + } + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/LanguageData.cs.meta b/popcorn/Assets/I2/Localization/Scripts/LanguageData.cs.meta new file mode 100644 index 00000000..6ce04567 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/LanguageData.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: cde54ba5e482bec4c88b52e618b81cc9 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/LanguageSource.meta b/popcorn/Assets/I2/Localization/Scripts/LanguageSource.meta new file mode 100644 index 00000000..fad69b2f --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/LanguageSource.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 75c7654f6d20207418b4cbce1b29906d +folderAsset: yes +timeCreated: 1518833279 +licenseType: Store +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/LanguageSource/LanguageSource.cs b/popcorn/Assets/I2/Localization/Scripts/LanguageSource/LanguageSource.cs new file mode 100644 index 00000000..c816b11f --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/LanguageSource/LanguageSource.cs @@ -0,0 +1,178 @@ +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +namespace I2.Loc +{ + [AddComponentMenu("I2/Localization/Source")] + [ExecuteInEditMode] + public class LanguageSource : MonoBehaviour, ISerializationCallbackReceiver, ILanguageSource + { + public LanguageSourceData SourceData + { + get { return mSource; } + set { mSource = value; } + } + public LanguageSourceData mSource = new LanguageSourceData(); + + // Because of Unity2018.3 change in Prefabs, now all the source variables are moved into LanguageSourceData + // But to avoid loosing previously serialized data, these vars are copied into mSource.XXXX when deserializing) + // These are going to be removed once everyone port their projects to the new I2L version. + #region Legacy Variables + + // TODO: also copy public string name; and owner + + public int version; + public bool NeverDestroy; // Keep between scenes (will call DontDestroyOnLoad ) + + public bool UserAgreesToHaveItOnTheScene; + public bool UserAgreesToHaveItInsideThePluginsFolder; + public bool GoogleLiveSyncIsUptoDate = true; + + public List Assets = new List(); // References to Fonts, Atlasses and other objects the localization may need + + public string Google_WebServiceURL; + public string Google_SpreadsheetKey; + public string Google_SpreadsheetName; + public string Google_LastUpdatedVersion; + + + public LanguageSourceData.eGoogleUpdateFrequency GoogleUpdateFrequency = LanguageSourceData.eGoogleUpdateFrequency.Weekly; + + public float GoogleUpdateDelay = 5; // How many second to delay downloading data from google (to avoid lag on the startup) + + public delegate void fnOnSourceUpdated(LanguageSourceData source, bool ReceivedNewData, string errorMsg); + public event fnOnSourceUpdated Event_OnSourceUpdateFromGoogle; + + public List mLanguages = new List(); + + public bool IgnoreDeviceLanguage; // If false, it will use the Device's language as the initial Language, otherwise it will use the first language in the source. + + public LanguageSourceData.eAllowUnloadLanguages _AllowUnloadingLanguages = LanguageSourceData.eAllowUnloadLanguages.Never; + + public List mTerms = new List(); + + public bool CaseInsensitiveTerms; + + public LanguageSourceData.MissingTranslationAction OnMissingTranslation = LanguageSourceData.MissingTranslationAction.Fallback; + + public string mTerm_AppName; + + #endregion + + #region EditorVariables + #if UNITY_EDITOR + + public string Spreadsheet_LocalFileName; + public string Spreadsheet_LocalCSVSeparator = ","; + public string Spreadsheet_LocalCSVEncoding = "utf-8"; + public bool Spreadsheet_SpecializationAsRows = true; + + public string Google_Password = "change_this"; + public LanguageSourceData.eGoogleUpdateFrequency GoogleInEditorCheckFrequency = LanguageSourceData.eGoogleUpdateFrequency.Daily; +#endif + #endregion + + void Awake() + { + #if UNITY_EDITOR + if (BuildPipeline.isBuildingPlayer) + return; + #endif + // NeverDestroy = false; + + // if (NeverDestroy) + //{ + // if (mSource.ManagerHasASimilarSource()) + // { + // Object.Destroy (this); + // return; + // } + // else + // { + // if (Application.isPlaying) + // DontDestroyOnLoad (gameObject); + // } + //} + mSource.owner = this; + mSource.Awake(); + } + + private void OnDestroy() + { + NeverDestroy = false; + + if (!NeverDestroy) + { + mSource.OnDestroy(); + } + } + + public string GetSourceName() + { + string s = gameObject.name; + Transform tr = transform.parent; + while (tr) + { + s = string.Concat(tr.name, "_", s); + tr = tr.parent; + } + return s; + } + + public void OnBeforeSerialize() + { + version = 1; + } + + public void OnAfterDeserialize() + { + if (version==0 || mSource==null) + { + mSource = new LanguageSourceData(); + mSource.owner = this; + mSource.UserAgreesToHaveItOnTheScene = UserAgreesToHaveItOnTheScene; + mSource.UserAgreesToHaveItInsideThePluginsFolder = UserAgreesToHaveItInsideThePluginsFolder; + mSource.IgnoreDeviceLanguage = IgnoreDeviceLanguage; + mSource._AllowUnloadingLanguages = _AllowUnloadingLanguages; + mSource.CaseInsensitiveTerms = CaseInsensitiveTerms; + mSource.OnMissingTranslation = OnMissingTranslation; + mSource.mTerm_AppName = mTerm_AppName; + + mSource.GoogleLiveSyncIsUptoDate = GoogleLiveSyncIsUptoDate; + mSource.Google_WebServiceURL = Google_WebServiceURL; + mSource.Google_SpreadsheetKey = Google_SpreadsheetKey; + mSource.Google_SpreadsheetName = Google_SpreadsheetName; + mSource.Google_LastUpdatedVersion = Google_LastUpdatedVersion; + mSource.GoogleUpdateFrequency = GoogleUpdateFrequency; + mSource.GoogleUpdateDelay = GoogleUpdateDelay; + + mSource.Event_OnSourceUpdateFromGoogle += Event_OnSourceUpdateFromGoogle; + + if (mLanguages != null && mLanguages.Count>0) + { + mSource.mLanguages.Clear(); + mSource.mLanguages.AddRange(mLanguages); + mLanguages.Clear(); + } + if (Assets != null && Assets.Count > 0) + { + mSource.Assets.Clear(); + mSource.Assets.AddRange(Assets); + Assets.Clear(); + } + if (mTerms != null && mTerms.Count>0) + { + mSource.mTerms.Clear(); + for (int i=0; i mTerms = new List(); + + public bool CaseInsensitiveTerms; + + //This is used to overcome the issue with Unity not serializing Dictionaries + [NonSerialized] public Dictionary mDictionary = new Dictionary(StringComparer.Ordinal); + + public enum MissingTranslationAction { Empty, Fallback, ShowWarning, ShowTerm } + public MissingTranslationAction OnMissingTranslation = MissingTranslationAction.Fallback; + + public string mTerm_AppName; + + #endregion + + #region Variables : Languages + + public List mLanguages = new List(); + + public bool IgnoreDeviceLanguage; // If false, it will use the Device's language as the initial Language, otherwise it will use the first language in the source. + + public enum eAllowUnloadLanguages { Never, OnlyInDevice, EditorAndDevice } + public eAllowUnloadLanguages _AllowUnloadingLanguages = eAllowUnloadLanguages.Never; + + #endregion + + #region Variables : Google + + public string Google_WebServiceURL; + public string Google_SpreadsheetKey; + public string Google_SpreadsheetName; + public string Google_LastUpdatedVersion; + +#if UNITY_EDITOR + public string Google_Password = "change_this"; +#endif + + public enum eGoogleUpdateFrequency { Always, Never, Daily, Weekly, Monthly, OnlyOnce, EveryOtherDay } + public eGoogleUpdateFrequency GoogleUpdateFrequency = eGoogleUpdateFrequency.Weekly; + public eGoogleUpdateFrequency GoogleInEditorCheckFrequency = eGoogleUpdateFrequency.Daily; + + // When Manual, the user has to call LocalizationManager.ApplyDownloadedDataFromGoogle() during a loading screen or similar + public enum eGoogleUpdateSynchronization { Manual, OnSceneLoaded, AsSoonAsDownloaded } + public eGoogleUpdateSynchronization GoogleUpdateSynchronization = eGoogleUpdateSynchronization.OnSceneLoaded; + + public float GoogleUpdateDelay; // How many second to delay downloading data from google (to avoid lag on the startup) + + public event LanguageSource.fnOnSourceUpdated Event_OnSourceUpdateFromGoogle; // (LanguageSource, bool ReceivedNewData, string errorMsg) + + #endregion + + #region Variables : Assets + + public List Assets = new List(); // References to Fonts, Atlasses and other objects the localization may need + + //This is used to overcome the issue with Unity not serializing Dictionaries + [NonSerialized] public Dictionary mAssetDictionary = new Dictionary(StringComparer.Ordinal); + + #endregion + + #region EditorVariables +#if UNITY_EDITOR + + public string Spreadsheet_LocalFileName; + public string Spreadsheet_LocalCSVSeparator = ","; + public string Spreadsheet_LocalCSVEncoding = "utf-8"; + public bool Spreadsheet_SpecializationAsRows = true; + +#endif + #endregion + + #region Language + + public void Awake() + { + LocalizationManager.AddSource (this); + UpdateDictionary(); + UpdateAssetDictionary(); + LocalizationManager.LocalizeAll(true); + } + + public void OnDestroy() + { + LocalizationManager.RemoveSource(this); + } + + + + public bool IsEqualTo( LanguageSourceData Source ) + { + if (Source.mLanguages.Count != mLanguages.Count) + return false; + + for (int i=0, imax=mLanguages.Count; i x == null); + mAssetDictionary = Assets.Distinct() + .GroupBy(o => o.name, System.StringComparer.Ordinal) + .ToDictionary(g => g.Key, g => g.First(), System.StringComparer.Ordinal); + } + + public Object FindAsset( string Name ) + { + if (Assets!=null) + { + if (mAssetDictionary==null || mAssetDictionary.Count!=Assets.Count) + { + UpdateAssetDictionary(); + } + Object obj; + if (mAssetDictionary.TryGetValue(Name, out obj)) + { + return obj; + } + //for (int i=0, imax=Assets.Length; i string.CompareOrdinal(a.Term, b.Term)); + + int nLanguages = mLanguages.Count; + bool firstLine = true; + foreach (TermData termData in mTerms) + { + string Term; + + if (string.IsNullOrEmpty(Category) || Category==EmptyCategory && termData.Term.IndexOfAny(CategorySeparators)<0) + Term = termData.Term; + else + if (termData.Term.StartsWith(Category + @"/", System.StringComparison.Ordinal) && Category!=termData.Term) + Term = termData.Term.Substring(Category.Length+1); + else + continue; // Term doesn't belong to this category + + + if (!firstLine) Builder.Append("[ln]"); + firstLine = false; + + if (!specializationsAsRows) + { + AppendI2Term(Builder, nLanguages, Term, termData, Separator, null); + } + else + { + var allSpecializations = termData.GetAllSpecializations(); + for (int i=0; i< allSpecializations.Count; ++i) + { + if (i!=0) + Builder.Append("[ln]"); + var specialization = allSpecializations[i]; + AppendI2Term(Builder, nLanguages, Term, termData, Separator, specialization); + } + } + + } + return Builder.ToString(); + } + + static void AppendI2Term( StringBuilder Builder, int nLanguages, string Term, TermData termData, char Separator, string forceSpecialization ) + { + //--[ Key ] -------------- + AppendI2Text(Builder, Term); + if (!string.IsNullOrEmpty(forceSpecialization) && forceSpecialization != "Any") + { + Builder.Append("["); + Builder.Append(forceSpecialization); + Builder.Append("]"); + } + Builder.Append ("[*]"); + + //--[ Type and Description ] -------------- + Builder.Append (termData.TermType.ToString()); + Builder.Append ("[*]"); + Builder.Append (termData.Description); + + //--[ Languages ] -------------- + for (int i=0; i0); + + /*if (translation == null) + translation = string.Empty; + else + if (translation == "") + translation = "-";*/ + //if (isAutoTranslated) Builder.Append("[i2auto]"); + AppendI2Text(Builder, translation); + } + } + + static void AppendI2Text(StringBuilder Builder, string text) + { + if (string.IsNullOrEmpty(text)) + return; + + if (text.StartsWith("\'", System.StringComparison.Ordinal) || text.StartsWith("=", System.StringComparison.Ordinal)) + Builder.Append('\''); + Builder.Append(text); + } + + + #endregion + + #region Language Cache format + + string Export_Language_to_Cache( int langIndex, bool fillTermWithFallback ) + { + if (!mLanguages[langIndex].IsLoaded()) + return null; + + StringBuilder sb = new StringBuilder(); + + for (int i=0; i 0) + sb.Append("[i2t]"); + var term = mTerms[i]; + sb.Append(term.Term); + sb.Append("="); + + string translation = term.Languages[langIndex]; + if (OnMissingTranslation==MissingTranslationAction.Fallback && string.IsNullOrEmpty(translation)) + { + if (TryGetFallbackTranslation(term, out translation, langIndex, skipDisabled: true)) + { + sb.Append("[i2fb]"); + if (fillTermWithFallback) term.Languages[langIndex] = translation; + } + } + if (!string.IsNullOrEmpty(translation)) + sb.Append(translation); + } + + return sb.ToString(); + } + + #endregion + + #region CSV format + + public string Export_CSV( string Category, char Separator = ',', bool specializationsAsRows = true) + { + StringBuilder Builder = new StringBuilder(); + + int nLanguages = mLanguages.Count; + Builder.AppendFormat ("Key{0}Type{0}Desc", Separator); + + foreach (LanguageData langData in mLanguages) + { + Builder.Append (Separator); + if (!langData.IsEnabled()) + Builder.Append('$'); + AppendString ( Builder, GoogleLanguages.GetCodedLanguage(langData.Name, langData.Code), Separator ); + } + Builder.Append ("\n"); + + + mTerms.Sort((a, b) => string.CompareOrdinal(a.Term, b.Term)); + + foreach (TermData termData in mTerms) + { + string Term; + + if (string.IsNullOrEmpty(Category) || Category==EmptyCategory && termData.Term.IndexOfAny(CategorySeparators)<0) + Term = termData.Term; + else + if (termData.Term.StartsWith(Category + @"/", System.StringComparison.Ordinal) && Category!=termData.Term) + Term = termData.Term.Substring(Category.Length+1); + else + continue; // Term doesn't belong to this category + + if (specializationsAsRows) + { + foreach (var specialization in termData.GetAllSpecializations()) + { + AppendTerm(Builder, nLanguages, Term, termData, specialization, Separator); + } + } + else + { + AppendTerm(Builder, nLanguages, Term, termData, null, Separator); + } + } + return Builder.ToString(); + } + + static void AppendTerm(StringBuilder Builder, int nLanguages, string Term, TermData termData, string specialization, char Separator) + { + //--[ Key ] -------------- + AppendString( Builder, Term, Separator ); + + if (!string.IsNullOrEmpty(specialization) && specialization!="Any") + Builder.AppendFormat( "[{0}]",specialization ); + + //--[ Type and Description ] -------------- + Builder.Append (Separator); + Builder.Append (termData.TermType.ToString()); + Builder.Append (Separator); + AppendString(Builder, termData.Description, Separator); + + //--[ Languages ] -------------- + for (int i=0; i0); + + //if (string.IsNullOrEmpty(s)) + // s = "-"; + + AppendTranslation(Builder, translation, Separator, /*isAutoTranslated ? "[i2auto]" : */null); + } + Builder.Append ("\n"); + } + + + static void AppendString( StringBuilder Builder, string Text, char Separator ) + { + if (string.IsNullOrEmpty(Text)) + return; + Text = Text.Replace ("\\n", "\n"); + if (Text.IndexOfAny((Separator+"\n\"").ToCharArray())>=0) + { + Text = Text.Replace("\"", "\"\""); + Builder.AppendFormat("\"{0}\"", Text); + } + else + { + Builder.Append (Text); + } + } + + static void AppendTranslation( StringBuilder Builder, string Text, char Separator, string tags ) + { + if (string.IsNullOrEmpty(Text)) + return; + Text = Text.Replace ("\\n", "\n"); + if (Text.IndexOfAny((Separator+"\n\"").ToCharArray())>=0) + { + Text = Text.Replace("\"", "\"\""); + Builder.AppendFormat("\"{0}{1}\"", tags, Text); + } + else + { + Builder.Append (tags); + Builder.Append (Text); + } + } + + + #endregion + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/LanguageSource/LanguageSourceData_Export_CSV.cs.meta b/popcorn/Assets/I2/Localization/Scripts/LanguageSource/LanguageSourceData_Export_CSV.cs.meta new file mode 100644 index 00000000..39b942db --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/LanguageSource/LanguageSourceData_Export_CSV.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 7a375153c79873c469c79a5b4f9027f3 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/LanguageSource/LanguageSourceData_Export_Google.cs b/popcorn/Assets/I2/Localization/Scripts/LanguageSource/LanguageSourceData_Export_Google.cs new file mode 100644 index 00000000..a94eb3d5 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/LanguageSource/LanguageSourceData_Export_Google.cs @@ -0,0 +1,62 @@ +using System.Collections.Generic; +using System.Text; +using UnityEngine; +using UnityEngine.Networking; + +namespace I2.Loc +{ + public enum eSpreadsheetUpdateMode { None, Replace, Merge, AddNewTerms } + + public partial class LanguageSourceData + { + public UnityWebRequest Export_Google_CreateWWWcall( eSpreadsheetUpdateMode UpdateMode = eSpreadsheetUpdateMode.Replace ) + { + #if UNITY_WEBPLAYER + Debug.Log ("Contacting google translation is not yet supported on WebPlayer" ); + return null; +#else + string Data = Export_Google_CreateData(); + + WWWForm form = new WWWForm(); + form.AddField("key", Google_SpreadsheetKey); + form.AddField("action", "SetLanguageSource"); + form.AddField("data", Data); + form.AddField("updateMode", UpdateMode.ToString()); + + #if UNITY_EDITOR + form.AddField("password", Google_Password); +#endif + + + UnityWebRequest www = UnityWebRequest.Post(LocalizationManager.GetWebServiceURL(this), form); + I2Utils.SendWebRequest(www); + return www; + #endif + } + + string Export_Google_CreateData() + { + List Categories = GetCategories(true); + StringBuilder Builder = new StringBuilder(); + + bool bFirst = true; + foreach (string category in Categories) + { + if (bFirst) + bFirst = false; + else + Builder.Append(""); + + #if !UNITY_EDITOR + bool Spreadsheet_SpecializationAsRows = true; + #endif + + string CSV = Export_I2CSV(category, specializationsAsRows:Spreadsheet_SpecializationAsRows); + Builder.Append(category); + Builder.Append(""); + Builder.Append(CSV); + } + return Builder.ToString(); + } + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/LanguageSource/LanguageSourceData_Export_Google.cs.meta b/popcorn/Assets/I2/Localization/Scripts/LanguageSource/LanguageSourceData_Export_Google.cs.meta new file mode 100644 index 00000000..65aa2700 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/LanguageSource/LanguageSourceData_Export_Google.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 86f9d1c7a0c3815419fc67a9d657ce40 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/LanguageSource/LanguageSourceData_Import_CSV.cs b/popcorn/Assets/I2/Localization/Scripts/LanguageSource/LanguageSourceData_Import_CSV.cs new file mode 100644 index 00000000..889be0bb --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/LanguageSource/LanguageSourceData_Import_CSV.cs @@ -0,0 +1,253 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace I2.Loc +{ + public partial class LanguageSourceData + { + public string Import_CSV( string Category, string CSVstring, eSpreadsheetUpdateMode UpdateMode = eSpreadsheetUpdateMode.Replace, char Separator = ',' ) + { + List CSV = LocalizationReader.ReadCSV (CSVstring, Separator); + return Import_CSV( Category, CSV, UpdateMode ); + } + + public string Import_I2CSV( string Category, string I2CSVstring, eSpreadsheetUpdateMode UpdateMode = eSpreadsheetUpdateMode.Replace ) + { + List CSV = LocalizationReader.ReadI2CSV (I2CSVstring); + return Import_CSV( Category, CSV, UpdateMode ); + } + + public string Import_CSV( string Category, List CSV, eSpreadsheetUpdateMode UpdateMode = eSpreadsheetUpdateMode.Replace ) + { + string[] Tokens = CSV[0]; + + int LanguagesStartIdx = 1; + int TypeColumnIdx = -1; + int DescColumnIdx = -1; + + var ValidColumnName_Key = new[]{ "Key" }; + var ValidColumnName_Type = new[]{ "Type" }; + var ValidColumnName_Desc = new[]{ "Desc", "Description" }; + + if (Tokens.Length>1 && ArrayContains(Tokens[0], ValidColumnName_Key)) + { + if (UpdateMode == eSpreadsheetUpdateMode.Replace) + ClearAllData(); + + if (Tokens.Length>2) + { + if (ArrayContains(Tokens[1], ValidColumnName_Type)) + { + TypeColumnIdx = 1; + LanguagesStartIdx = 2; + } + if (ArrayContains(Tokens[1], ValidColumnName_Desc)) + { + DescColumnIdx = 1; + LanguagesStartIdx = 2; + } + + } + if (Tokens.Length>3) + { + if (ArrayContains(Tokens[2], ValidColumnName_Type)) + { + TypeColumnIdx = 2; + LanguagesStartIdx = 3; + } + if (ArrayContains(Tokens[2], ValidColumnName_Desc)) + { + DescColumnIdx = 2; + LanguagesStartIdx = 3; + } + } + } + else + return "Bad Spreadsheet Format.\nFirst columns should be 'Key', 'Type' and 'Desc'"; + + int nLanguages = Mathf.Max (Tokens.Length-LanguagesStartIdx, 0); + int[] LanIndices = new int[nLanguages]; + for (int i=0; i0) + { + specialization = sKey.Substring(idx + 1, sKey.Length - idx - 2); + if (specialization == "touch") specialization = "Touch"; + sKey = sKey.Remove(idx); + } + } + ValidateFullTerm(ref sKey); + if (string.IsNullOrEmpty(sKey)) + continue; + + TermData termData = GetTermData(sKey); + + // Check to see if its a new term + if (termData==null) + { + termData = new TermData(); + termData.Term = sKey; + + termData.Languages = new string[ mLanguages.Count ]; + termData.Flags = new byte[ mLanguages.Count ]; + for (int j=0; j0) + termData.TermType = GetTermType(Tokens[TypeColumnIdx]); + + if (DescColumnIdx>0) + termData.Description = Tokens[DescColumnIdx]; + + for (int j = 0; j < LanIndices.Length && j < Tokens.Length - LanguagesStartIdx; ++j) + if (!string.IsNullOrEmpty(Tokens[j + LanguagesStartIdx])) // Only change the translation if there is a new value + { + var lanIdx = LanIndices[j]; + if (lanIdx < 0) + continue; + var value = Tokens[j + LanguagesStartIdx]; + + if (value == "-") + value = string.Empty; + else + if (value == "") + value = null; + + termData.SetTranslation(lanIdx, value, specialization); + } + } + if (Application.isPlaying) + { + SaveLanguages(HasUnloadedLanguages()); + } + return string.Empty; + } + + bool ArrayContains( string MainText, params string[] texts ) + { + for (int i=0, imax=texts.Length; i=0) + return true; + return false; + } + + public static eTermType GetTermType( string type ) + { + for (int i=0, imax=(int)eTermType.Object; i<=imax; ++i) + if (string.Equals( ((eTermType)i).ToString(), type, StringComparison.OrdinalIgnoreCase)) + return (eTermType)i; + + return eTermType.Text; + } + + #region Language Cache format + + void Import_Language_from_Cache(int langIndex, string langData, bool useFallback, bool onlyCurrentSpecialization) + { + int index = 0; + while (index < langData.Length) + { + int nextIndex = langData.IndexOf("[i2t]", index, StringComparison.Ordinal); + if (nextIndex < 0) nextIndex = langData.Length; + + // check for errors + int termNameEnd = langData.IndexOf("=", index, StringComparison.Ordinal); + if (termNameEnd >= nextIndex) + return; + + string termName = langData.Substring(index, termNameEnd - index); + index = termNameEnd+1; + + var termData = GetTermData(termName); + if (termData != null) + { + string translation = null; + + if (index != nextIndex) + { + translation = langData.Substring(index, nextIndex - index); + if (translation.StartsWith("[i2fb]", StringComparison.Ordinal)) + { + translation = useFallback ? translation.Substring(6) : null; + } + if (onlyCurrentSpecialization && translation != null) + { + translation = SpecializationManager.GetSpecializedText(translation); + } + } + termData.Languages[langIndex] = translation; + } + index = nextIndex + 5; + } + } + + #endregion + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/LanguageSource/LanguageSourceData_Import_CSV.cs.meta b/popcorn/Assets/I2/Localization/Scripts/LanguageSource/LanguageSourceData_Import_CSV.cs.meta new file mode 100644 index 00000000..7c86dd83 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/LanguageSource/LanguageSourceData_Import_CSV.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 6dfd98b5473aa1a49b82726182b50d08 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/LanguageSource/LanguageSourceData_Import_Google.cs b/popcorn/Assets/I2/Localization/Scripts/LanguageSource/LanguageSourceData_Import_Google.cs new file mode 100644 index 00000000..33e7dd18 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/LanguageSource/LanguageSourceData_Import_Google.cs @@ -0,0 +1,386 @@ +using System; +using System.Collections; +using System.Text; +using UnityEditor; +using UnityEngine; +using UnityEngine.Networking; +using UnityEngine.SceneManagement; +using Object = UnityEngine.Object; + +namespace I2.Loc +{ + public partial class LanguageSourceData + { + private string mDelayedGoogleData; // Data that was downloaded and is waiting for a levelLoaded event to apply the localization without a lag in performance + #region Connection to Web Service + + public static void FreeUnusedLanguages() + { + var source = LocalizationManager.Sources[0]; + int langIndex = source.GetLanguageIndex(LocalizationManager.CurrentLanguage); + + for (int i=0; i 19) // Check for corruption from previous versions + savedSpreadsheetVersion = string.Empty; + Google_LastUpdatedVersion = savedSpreadsheetVersion; + + //Debug.Log ("[I2Loc] Using Saved (PlayerPref) data in 'I2Source_"+PlayerPrefName+"'" ); + Import_Google_Result(I2SavedData, eSpreadsheetUpdateMode.Replace); + } + + bool IsNewerVersion( string currentVersion, string newVersion ) + { + if (string.IsNullOrEmpty (newVersion)) // if no new version + return false; + if (string.IsNullOrEmpty (currentVersion)) // there is a new version, but not a current one + return true; + + long currentV, newV; + if (!long.TryParse (newVersion, out newV) || !long.TryParse (currentVersion, out currentV)) // if can't parse either, then force get the new one + return true; + + return newV > currentV; + } + + // When JustCheck is true, importing from google will not download any data, just detect if the Spreadsheet is up-to-date + public void Import_Google( bool ForceUpdate, bool justCheck) + { + if (!ForceUpdate && GoogleUpdateFrequency==eGoogleUpdateFrequency.Never) + return; + + if (!I2Utils.IsPlaying()) + return; + + #if UNITY_EDITOR + if (justCheck && GoogleInEditorCheckFrequency==eGoogleUpdateFrequency.Never) + return; + #endif + + #if UNITY_EDITOR + var updateFrequency = GoogleInEditorCheckFrequency; + #else + var updateFrequency = GoogleUpdateFrequency; + #endif + + string PlayerPrefName = GetSourcePlayerPrefName(); + + if (!ForceUpdate && updateFrequency != eGoogleUpdateFrequency.Always) + { + #if UNITY_EDITOR + string sTimeOfLastUpdate = EditorPrefs.GetString("LastGoogleUpdate_"+PlayerPrefName, ""); + #else + string sTimeOfLastUpdate = PersistentStorage.GetSetting_String("LastGoogleUpdate_"+PlayerPrefName, ""); + #endif + DateTime TimeOfLastUpdate; + try + { + if (DateTime.TryParse( sTimeOfLastUpdate, out TimeOfLastUpdate )) + { + double TimeDifference = (DateTime.Now-TimeOfLastUpdate).TotalDays; + switch (updateFrequency) + { + case eGoogleUpdateFrequency.Daily: if (TimeDifference<1) return; + break; + case eGoogleUpdateFrequency.Weekly: if (TimeDifference<8) return; + break; + case eGoogleUpdateFrequency.Monthly: if (TimeDifference<31) return; + break; + case eGoogleUpdateFrequency.OnlyOnce: return; + case eGoogleUpdateFrequency.EveryOtherDay : if (TimeDifference < 2) return; + break; + } + } + } + catch(Exception) + { } + } + #if UNITY_EDITOR + EditorPrefs.SetString("LastGoogleUpdate_" + PlayerPrefName, DateTime.Now.ToString()); + #else + PersistentStorage.SetSetting_String("LastGoogleUpdate_"+PlayerPrefName, DateTime.Now.ToString()); + #endif + + //--[ Checking google for updated data ]----------------- + CoroutineManager.Start(Import_Google_Coroutine(justCheck)); + } + + string GetSourcePlayerPrefName() + { + if (owner == null) + return null; + string sourceName = (owner as Object).name; + if (!string.IsNullOrEmpty(Google_SpreadsheetKey)) + { + sourceName += Google_SpreadsheetKey; + } + // If its a global source, use its name, otherwise, use the name and the level it is in + if (Array.IndexOf(LocalizationManager.GlobalSources, (owner as Object).name)>=0) + return sourceName; +#if UNITY_4_6 || UNITY_4_7 || UNITY_4_8 || UNITY_4_9 || UNITY_5_0 || UNITY_5_1 || UNITY_5_2 + return Application.loadedLevelName + "_" + sourceName; +#else + return SceneManager.GetActiveScene().name+"_"+ sourceName; +#endif + } + + IEnumerator Import_Google_Coroutine(bool JustCheck) + { + UnityWebRequest www = Import_Google_CreateWWWcall(false, JustCheck); + if (www==null) + yield break; + + while (!www.isDone) + yield return null; + + //Debug.Log ("Google Result: " + www.text); + bool notError = string.IsNullOrEmpty(www.error); + string wwwText = null; + + if (notError) + { + var bytes = www.downloadHandler.data; + wwwText = Encoding.UTF8.GetString(bytes, 0, bytes.Length); //www.text + + bool isEmpty = string.IsNullOrEmpty(wwwText) || wwwText == "\"\""; + + if (JustCheck) + { + if (!isEmpty) + { + Debug.LogWarning("Spreadsheet is not up-to-date and Google Live Synchronization is enabled\nWhen playing in the device the Spreadsheet will be downloaded and translations may not behave as what you see in the editor.\nTo fix this, Import or Export replace to Google"); + GoogleLiveSyncIsUptoDate = false; + } + + yield break; + } + + if (!isEmpty) + { + mDelayedGoogleData = wwwText; + + switch (GoogleUpdateSynchronization) + { + case eGoogleUpdateSynchronization.AsSoonAsDownloaded: + { + ApplyDownloadedDataFromGoogle(); + break; + } + case eGoogleUpdateSynchronization.Manual: + break; + case eGoogleUpdateSynchronization.OnSceneLoaded: + { + SceneManager.sceneLoaded += ApplyDownloadedDataOnSceneLoaded; + break; + } + } + + yield break; + } + } + + if (Event_OnSourceUpdateFromGoogle != null) + Event_OnSourceUpdateFromGoogle(this, false, www.error); + + Debug.Log("Language Source was up-to-date with Google Spreadsheet"); + } + + void ApplyDownloadedDataOnSceneLoaded(Scene scene, LoadSceneMode mode) + { + SceneManager.sceneLoaded -= ApplyDownloadedDataOnSceneLoaded; + ApplyDownloadedDataFromGoogle(); + } + + public void ApplyDownloadedDataFromGoogle() + { + if (string.IsNullOrEmpty(mDelayedGoogleData)) + return; + + var errorMsg = Import_Google_Result(mDelayedGoogleData, eSpreadsheetUpdateMode.Replace, true); + if (string.IsNullOrEmpty(errorMsg)) + { + if (Event_OnSourceUpdateFromGoogle != null) + Event_OnSourceUpdateFromGoogle(this, true, ""); + + LocalizationManager.LocalizeAll(true); + Debug.Log("Done Google Sync"); + } + else + { + if (Event_OnSourceUpdateFromGoogle != null) + Event_OnSourceUpdateFromGoogle(this, false, ""); + + Debug.Log("Done Google Sync: source was up-to-date"); + } + } + + public UnityWebRequest Import_Google_CreateWWWcall( bool ForceUpdate, bool justCheck ) + { + if (!HasGoogleSpreadsheet()) + return null; + + string savedVersion = PersistentStorage.GetSetting_String("I2SourceVersion_"+GetSourcePlayerPrefName(), Google_LastUpdatedVersion); + if (savedVersion.Length > 19) // Check for corruption + savedVersion= string.Empty; + +#if !UNITY_EDITOR + if (IsNewerVersion(savedVersion, Google_LastUpdatedVersion)) + Google_LastUpdatedVersion = savedVersion; +#endif + + string query = string.Format("{0}?key={1}&action=GetLanguageSource&version={2}", + LocalizationManager.GetWebServiceURL(this), + Google_SpreadsheetKey, + ForceUpdate ? "0" : Google_LastUpdatedVersion); +#if UNITY_EDITOR + if (justCheck) + { + query += "&justcheck=true"; + } +#endif + UnityWebRequest www = UnityWebRequest.Get(query); + I2Utils.SendWebRequest(www); + return www; + } + + public bool HasGoogleSpreadsheet() + { + return !string.IsNullOrEmpty(Google_WebServiceURL) && !string.IsNullOrEmpty(Google_SpreadsheetKey) && + !string.IsNullOrEmpty(LocalizationManager.GetWebServiceURL(this)); + } + + public string Import_Google_Result( string JsonString, eSpreadsheetUpdateMode UpdateMode, bool saveInPlayerPrefs = false ) + { + try + { + string ErrorMsg = string.Empty; + if (string.IsNullOrEmpty(JsonString) || JsonString == "\"\"") + { + return ErrorMsg; + } + + int idxV = JsonString.IndexOf("version=", StringComparison.Ordinal); + int idxSV = JsonString.IndexOf("script_version=", StringComparison.Ordinal); + if (idxV < 0 || idxSV < 0) + { + return "Invalid Response from Google, Most likely the WebService needs to be updated"; + } + + idxV += "version=".Length; + idxSV += "script_version=".Length; + + string newSpreadsheetVersion = JsonString.Substring(idxV, JsonString.IndexOf(",", idxV, StringComparison.Ordinal) - idxV); + var scriptVersion = int.Parse(JsonString.Substring(idxSV, JsonString.IndexOf(",", idxSV, StringComparison.Ordinal) - idxSV)); + + if (newSpreadsheetVersion.Length > 19) // Check for corruption + newSpreadsheetVersion = string.Empty; + + if (scriptVersion != LocalizationManager.GetRequiredWebServiceVersion()) + { + return "The current Google WebService is not supported.\nPlease, delete the WebService from the Google Drive and Install the latest version."; + } + + //Debug.Log (Google_LastUpdatedVersion + " - " + newSpreadsheetVersion); + if (saveInPlayerPrefs && !IsNewerVersion(Google_LastUpdatedVersion, newSpreadsheetVersion)) +#if UNITY_EDITOR + return ""; +#else + return "LanguageSource is up-to-date"; +#endif + + if (saveInPlayerPrefs) + { + string PlayerPrefName = GetSourcePlayerPrefName(); + PersistentStorage.SaveFile(PersistentStorage.eFileType.Persistent, "I2Source_" + PlayerPrefName + ".loc", "[i2e]" + StringObfucator.Encode(JsonString)); + PersistentStorage.SetSetting_String("I2SourceVersion_" + PlayerPrefName, newSpreadsheetVersion); + PersistentStorage.ForceSaveSettings(); + } + Google_LastUpdatedVersion = newSpreadsheetVersion; + + if (UpdateMode == eSpreadsheetUpdateMode.Replace) + ClearAllData(); + + int CSVstartIdx = JsonString.IndexOf("[i2category]", StringComparison.Ordinal); + while (CSVstartIdx > 0) + { + CSVstartIdx += "[i2category]".Length; + int endCat = JsonString.IndexOf("[/i2category]", CSVstartIdx, StringComparison.Ordinal); + string category = JsonString.Substring(CSVstartIdx, endCat - CSVstartIdx); + endCat += "[/i2category]".Length; + + int endCSV = JsonString.IndexOf("[/i2csv]", endCat, StringComparison.Ordinal); + string csv = JsonString.Substring(endCat, endCSV - endCat); + + CSVstartIdx = JsonString.IndexOf("[i2category]", endCSV, StringComparison.Ordinal); + + Import_I2CSV(category, csv, UpdateMode); + + // Only the first CSV should clear the Data + if (UpdateMode == eSpreadsheetUpdateMode.Replace) + UpdateMode = eSpreadsheetUpdateMode.Merge; + } + + GoogleLiveSyncIsUptoDate = true; + if (I2Utils.IsPlaying()) + { + SaveLanguages(true); + } + + if (!string.IsNullOrEmpty(ErrorMsg)) + Editor_SetDirty(); + return ErrorMsg; + } + catch (Exception e) + { + Debug.LogWarning(e); + return e.ToString(); + } + } + +#endregion + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/LanguageSource/LanguageSourceData_Import_Google.cs.meta b/popcorn/Assets/I2/Localization/Scripts/LanguageSource/LanguageSourceData_Import_Google.cs.meta new file mode 100644 index 00000000..336c8739 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/LanguageSource/LanguageSourceData_Import_Google.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 637497c3e1b8b944e9a645fe50e27401 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/LanguageSource/LanguageSourceData_Languages.cs b/popcorn/Assets/I2/Localization/Scripts/LanguageSource/LanguageSourceData_Languages.cs new file mode 100644 index 00000000..437d770d --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/LanguageSource/LanguageSourceData_Languages.cs @@ -0,0 +1,329 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace I2.Loc +{ + public partial class LanguageSourceData + { + #region Language + + public int GetLanguageIndex( string language, bool AllowDiscartingRegion = true, bool SkipDisabled = true) + { + // First look for an exact match + for (int i=0, imax=mLanguages.Count; iBestSimilitud) + { + BestSimilitud = commonWords; + MostSimilar = i; + } + //if (AreTheSameLanguage(mLanguages[i].Name, language)) + // return i; + } + if (MostSimilar>=0) + return MostSimilar; + } + return -1; + } + + public LanguageData GetLanguageData(string language, bool AllowDiscartingRegion = true) + { + int idx = GetLanguageIndex(language, AllowDiscartingRegion, false); + return idx < 0 ? null : mLanguages[idx]; + } + + // TODO: Fix IsCurrentLanguage when current=English and there are two variants in the source (English Canada, English US) + public bool IsCurrentLanguage( int languageIndex ) + { + return LocalizationManager.CurrentLanguage == mLanguages[languageIndex].Name; + } + + public int GetLanguageIndexFromCode( string Code, bool exactMatch=true, bool ignoreDisabled = false) + { + for (int i = 0, imax = mLanguages.Count; i < imax; ++i) + { + if (ignoreDisabled && !mLanguages[i].IsEnabled()) + continue; + + if (string.Compare(mLanguages[i].Code, Code, StringComparison.OrdinalIgnoreCase) == 0) + return i; + } + + if (!exactMatch) + { + // Find any match without using the Regions + for (int i = 0, imax = mLanguages.Count; i < imax; ++i) + { + if (ignoreDisabled && !mLanguages[i].IsEnabled()) + continue; + + if (string.Compare(mLanguages[i].Code, 0, Code, 0, 2, StringComparison.OrdinalIgnoreCase) == 0) + return i; + } + } + + return -1; + } + + public static int GetCommonWordInLanguageNames(string Language1, string Language2) + { + if (string.IsNullOrEmpty (Language1) || string.IsNullOrEmpty (Language2)) + return 0; + var separators = "( )-/\\".ToCharArray(); + string[] Words1 = Language1.ToLower().Split(separators); + string[] Words2 = Language2.ToLower().Split(separators); + + int similitud = 0; + foreach (var word in Words1) + if (!string.IsNullOrEmpty(word) && Words2.Contains(word)) + similitud++; + + foreach (var word in Words2) + if (!string.IsNullOrEmpty(word) && Words1.Contains(word)) + similitud++; + + return similitud; + } + + public static bool AreTheSameLanguage(string Language1, string Language2) + { + Language1 = GetLanguageWithoutRegion(Language1); + Language2 = GetLanguageWithoutRegion(Language2); + return string.Compare(Language1, Language2, StringComparison.OrdinalIgnoreCase)==0; + } + + public static string GetLanguageWithoutRegion(string Language) + { + int Index = Language.IndexOfAny("(/\\[,{".ToCharArray()); + if (Index<0) + return Language; + return Language.Substring(0, Index).Trim(); + } + + public void AddLanguage(string LanguageName) + { + AddLanguage(LanguageName, GoogleLanguages.GetLanguageCode(LanguageName)); + } + + public void AddLanguage( string LanguageName, string LanguageCode ) + { + if (GetLanguageIndex(LanguageName, false)>=0) + return; + + LanguageData Lang = new LanguageData(); + Lang.Name = LanguageName; + Lang.Code = LanguageCode; + mLanguages.Add (Lang); + + int NewSize = mLanguages.Count; + for (int i=0, imax=mTerms.Count; i GetLanguages( bool skipDisabled = true) + { + List Languages = new List(); + for (int j = 0, jmax = mLanguages.Count; j < jmax; ++j) + { + if (!skipDisabled || mLanguages[j].IsEnabled()) + Languages.Add(mLanguages[j].Name); + } + return Languages; + } + + public List GetLanguagesCode(bool allowRegions = true, bool skipDisabled = true) + { + List Languages = new List(); + for (int j = 0, jmax = mLanguages.Count; j < jmax; ++j) + { + if (skipDisabled && !mLanguages[j].IsEnabled()) + continue; + + var code = mLanguages[j].Code; + + if (!allowRegions && code != null && code.Length > 2) + code = code.Substring(0, 2); + + if (!string.IsNullOrEmpty(code) && !Languages.Contains(code)) + Languages.Add(code); + } + return Languages; + } + + public bool IsLanguageEnabled(string Language) + { + int idx = GetLanguageIndex(Language, false); + return idx >= 0 && mLanguages[idx].IsEnabled(); + } + + public void EnableLanguage(string Language, bool bEnabled) + { + int idx = GetLanguageIndex(Language, false, false); + if (idx >= 0) + mLanguages[idx].SetEnabled(bEnabled); + } + + #endregion + + #region Save/Load Language + + public bool AllowUnloadingLanguages() + { + #if UNITY_EDITOR + return _AllowUnloadingLanguages==eAllowUnloadLanguages.EditorAndDevice; + #else + return _AllowUnloadingLanguages!=eAllowUnloadLanguages.Never; + #endif + } + + string GetSavedLanguageFileName(int languageIndex) + { + if (languageIndex < 0) + return null; + + return "LangSource_" + GetSourcePlayerPrefName() + "_" + mLanguages[languageIndex].Name + ".loc"; + } + public void LoadLanguage( int languageIndex, bool UnloadOtherLanguages, bool useFallback, bool onlyCurrentSpecialization, bool forceLoad ) + { + if (!AllowUnloadingLanguages()) + return; + + // Some consoles don't allow IO access + if (!PersistentStorage.CanAccessFiles()) + return; + + if (languageIndex >= 0 && (forceLoad || !mLanguages[languageIndex].IsLoaded())) + { + var tempPath = GetSavedLanguageFileName(languageIndex); + var langData = PersistentStorage.LoadFile(PersistentStorage.eFileType.Temporal, tempPath, false); + + if (!string.IsNullOrEmpty(langData)) + { + Import_Language_from_Cache(languageIndex, langData, useFallback, onlyCurrentSpecialization); + mLanguages[languageIndex].SetLoaded(true); + } + } + if (UnloadOtherLanguages && I2Utils.IsPlaying()) + { + for (int lan = 0; lan < mLanguages.Count; ++lan) + { + if (lan != languageIndex) + UnloadLanguage(lan); + } + } + } + + // if forceLoad, then the language is loaded from the cache even if its already loaded + // this is needed to cleanup fallbacks + public void LoadAllLanguages(bool forceLoad=false) + { + for (int i = 0; i < mLanguages.Count; ++i) + { + LoadLanguage(i, false, false, false, forceLoad); + } + } + + public void UnloadLanguage(int languageIndex) + { + if (!AllowUnloadingLanguages()) + return; + + // Some consoles don't allow IO access + if (!PersistentStorage.CanAccessFiles()) + return; + + if (!I2Utils.IsPlaying() || + !mLanguages[languageIndex].IsLoaded() || + !mLanguages[languageIndex].CanBeUnloaded() || + IsCurrentLanguage(languageIndex) || + !PersistentStorage.HasFile(PersistentStorage.eFileType.Temporal, GetSavedLanguageFileName(languageIndex))) + { + return; + } + + foreach (var termData in mTerms) + { + termData.Languages[languageIndex] = null; + } + mLanguages[languageIndex].SetLoaded(false); + } + + public void SaveLanguages( bool unloadAll, PersistentStorage.eFileType fileLocation = PersistentStorage.eFileType.Temporal) + { + if (!AllowUnloadingLanguages()) + return; + + // Some consoles don't allow IO access + if (!PersistentStorage.CanAccessFiles()) + return; + + for (int i = 0; i < mLanguages.Count; ++i) + { + var data = Export_Language_to_Cache(i, IsCurrentLanguage(i)); + if (string.IsNullOrEmpty(data)) + continue; + + PersistentStorage.SaveFile(PersistentStorage.eFileType.Temporal, GetSavedLanguageFileName(i), data); + } + + if (unloadAll) + { + for (int i = 0; i < mLanguages.Count; ++i) + { + if (unloadAll && !IsCurrentLanguage(i)) + UnloadLanguage(i); + } + } + } + + public bool HasUnloadedLanguages() + { + for (int i = 0; i < mLanguages.Count; ++i) + { + if (!mLanguages[i].IsLoaded()) + return true; + } + return false; + + } +#endregion + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/LanguageSource/LanguageSourceData_Languages.cs.meta b/popcorn/Assets/I2/Localization/Scripts/LanguageSource/LanguageSourceData_Languages.cs.meta new file mode 100644 index 00000000..c8f0b8c8 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/LanguageSource/LanguageSourceData_Languages.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 3c8d05bf03c50f64eb591ea1499fae82 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/LanguageSource/LanguageSourceData_Misc.cs b/popcorn/Assets/I2/Localization/Scripts/LanguageSource/LanguageSourceData_Misc.cs new file mode 100644 index 00000000..3ed49a2e --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/LanguageSource/LanguageSourceData_Misc.cs @@ -0,0 +1,67 @@ +using System.Collections.Generic; + +namespace I2.Loc +{ + public partial class LanguageSourceData + { + public static string EmptyCategory = "Default"; + public static char[] CategorySeparators = "/\\".ToCharArray(); + + #region Keys + + public List GetCategories( bool OnlyMainCategory = false, List Categories = null ) + { + if (Categories==null) + Categories = new List(); + + foreach (TermData data in mTerms) + { + string sCategory = GetCategoryFromFullTerm( data.Term, OnlyMainCategory ); + if (!Categories.Contains(sCategory)) + Categories.Add(sCategory); + } + Categories.Sort(); + return Categories; + } + + public static string GetKeyFromFullTerm( string FullTerm, bool OnlyMainCategory = false ) + { + int Index = OnlyMainCategory ? FullTerm.IndexOfAny(CategorySeparators) : + FullTerm.LastIndexOfAny(CategorySeparators); + + return Index<0 ? FullTerm :FullTerm.Substring(Index+1); + } + + public static string GetCategoryFromFullTerm( string FullTerm, bool OnlyMainCategory = false ) + { + int Index = OnlyMainCategory ? FullTerm.IndexOfAny(CategorySeparators) : + FullTerm.LastIndexOfAny(CategorySeparators); + + return Index<0 ? EmptyCategory : FullTerm.Substring(0, Index); + } + + public static void DeserializeFullTerm( string FullTerm, out string Key, out string Category, bool OnlyMainCategory = false ) + { + int Index = OnlyMainCategory ? FullTerm.IndexOfAny(CategorySeparators) : + FullTerm.LastIndexOfAny(CategorySeparators); + + if (Index<0) + { + Category = EmptyCategory; + Key = FullTerm; + } + else + { + Category = FullTerm.Substring(0, Index); + Key = FullTerm.Substring(Index+1); + } + } + + #endregion + + #region Misc + + #endregion + + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/LanguageSource/LanguageSourceData_Misc.cs.meta b/popcorn/Assets/I2/Localization/Scripts/LanguageSource/LanguageSourceData_Misc.cs.meta new file mode 100644 index 00000000..47ca03b3 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/LanguageSource/LanguageSourceData_Misc.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: eaa919dd06da3464082b8f16759a5b16 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/LanguageSource/LanguageSourceData_Terms.cs b/popcorn/Assets/I2/Localization/Scripts/LanguageSource/LanguageSourceData_Terms.cs new file mode 100644 index 00000000..7776e85a --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/LanguageSource/LanguageSourceData_Terms.cs @@ -0,0 +1,256 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEditor; + +namespace I2.Loc +{ + public partial class LanguageSourceData + { + #region Language + + public void UpdateDictionary(bool force = false) + { + if (!force && mDictionary != null && mDictionary.Count == mTerms.Count) + return; + + StringComparer comparer = CaseInsensitiveTerms ? StringComparer.OrdinalIgnoreCase : StringComparer.Ordinal; + if (mDictionary.Comparer != comparer) + mDictionary = new Dictionary(comparer); + else + mDictionary.Clear(); + + for (int i = 0, imax = mTerms.Count; i < imax; ++i) + { + var termData = mTerms[i]; + ValidateFullTerm(ref termData.Term); + + mDictionary[termData.Term]= mTerms[i]; + mTerms[i].Validate(); + } + + if (I2Utils.IsPlaying()) + { + SaveLanguages(true); + } + } + + public string GetTranslation (string term, string overrideLanguage = null, string overrideSpecialization = null, bool skipDisabled = false, bool allowCategoryMistmatch = false) + { + string Translation; + if (TryGetTranslation(term, out Translation, overrideLanguage:overrideLanguage, overrideSpecialization:overrideSpecialization, skipDisabled:skipDisabled, allowCategoryMistmatch:allowCategoryMistmatch)) + return Translation; + + return string.Empty; + } + + public bool TryGetTranslation (string term, out string Translation, string overrideLanguage=null, string overrideSpecialization=null, bool skipDisabled=false, bool allowCategoryMistmatch=false) + { + int Index = GetLanguageIndex( overrideLanguage==null ? LocalizationManager.CurrentLanguage : overrideLanguage, SkipDisabled: false ); + + if (Index>=0 && (!skipDisabled || mLanguages[Index].IsEnabled())) + { + TermData data = GetTermData(term, allowCategoryMistmatch:allowCategoryMistmatch); + if (data!=null) + { + Translation = data.GetTranslation(Index, overrideSpecialization, editMode:true); + + // "---" is a code to define that the translation is meant to be empty + if (Translation == "---") + { + Translation = string.Empty; + return true; + } + + if (!string.IsNullOrEmpty(Translation)) + { + // has a valid translation + return true; + } + + Translation = null; + } + + if (OnMissingTranslation == MissingTranslationAction.ShowWarning) + { + Translation = $""; + return true; + } + + if (OnMissingTranslation == MissingTranslationAction.Fallback && data!=null) + { + return TryGetFallbackTranslation(data, out Translation, Index, overrideSpecialization, skipDisabled); + } + + if (OnMissingTranslation == MissingTranslationAction.Empty) + { + Translation = string.Empty; + return true; + } + + if (OnMissingTranslation == MissingTranslationAction.ShowTerm) + { + Translation = term; + return true; + } + + } + + Translation = null; + return false; + } + + bool TryGetFallbackTranslation(TermData termData, out string Translation, int langIndex, string overrideSpecialization = null, bool skipDisabled = false) + { + // Find base Language Code + string baseLanguage = mLanguages[langIndex].Code; + if (!string.IsNullOrEmpty(baseLanguage)) + { + if (baseLanguage.Contains('-')) + { + baseLanguage = baseLanguage.Substring(0, baseLanguage.IndexOf('-')); + } + + // Try finding in any of the Region of the base language + for (int i = 0; i < mLanguages.Count; ++i) + { + if (i != langIndex && + mLanguages[i].Code.StartsWith(baseLanguage, StringComparison.Ordinal) && + (!skipDisabled || mLanguages[i].IsEnabled()) ) + { + Translation = termData.GetTranslation(i, overrideSpecialization, editMode: true); + if (!string.IsNullOrEmpty(Translation)) + return true; + } + } + } + + + // Otherwise, Try finding the first active language with a valid translation + for (int i = 0; i < mLanguages.Count; ++i) + { + if (i!=langIndex && + (!skipDisabled || mLanguages[i].IsEnabled()) && + (baseLanguage==null || !mLanguages[i].Code.StartsWith(baseLanguage, StringComparison.Ordinal))) + { + Translation = termData.GetTranslation(i, overrideSpecialization, editMode: true); + if (!string.IsNullOrEmpty(Translation)) + return true; + } + } + Translation = null; + return false; + } + + public TermData AddTerm( string term ) + { + return AddTerm (term, eTermType.Text); + } + + public TermData GetTermData( string term, bool allowCategoryMistmatch = false) + { + if (string.IsNullOrEmpty(term)) + return null; + + if (mDictionary.Count==0)// != mTerms.Count) + UpdateDictionary(); + + TermData data; + if (mDictionary.TryGetValue(term, out data)) + return data; + + TermData d = null; + if (allowCategoryMistmatch) + { + var keyPart = GetKeyFromFullTerm (term); + foreach (var kvp in mDictionary) + if (kvp.Value.IsTerm (keyPart, true)) + { + if (d == null) + d = kvp.Value; + else + return null; + } + } + return d; + } + + public bool ContainsTerm(string term) + { + return GetTermData(term)!=null; + } + + public List GetTermsList ( string Category = null ) + { + if (mDictionary.Count != mTerms.Count) + UpdateDictionary(); + if (string.IsNullOrEmpty( Category )) + return new List( mDictionary.Keys ); + var terms = new List(); + for (int i=0; iEmptyCategory.Length && Term[EmptyCategory.Length]=='/') + Term = Term.Substring(EmptyCategory.Length+1); + } + Term = I2Utils.GetValidTermName(Term, true); + } + + + #endregion + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/LanguageSource/LanguageSourceData_Terms.cs.meta b/popcorn/Assets/I2/Localization/Scripts/LanguageSource/LanguageSourceData_Terms.cs.meta new file mode 100644 index 00000000..640162a8 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/LanguageSource/LanguageSourceData_Terms.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: f55c00558b2b4f94086c04e47d98a645 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/LocalizationReader.cs b/popcorn/Assets/I2/Localization/Scripts/LocalizationReader.cs new file mode 100644 index 00000000..4c6ffdd0 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/LocalizationReader.cs @@ -0,0 +1,243 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using UnityEngine; + +namespace I2.Loc +{ + public class LocalizationReader + { + #region Dictionary Assets + + public static Dictionary ReadTextAsset( TextAsset asset ) + { + string Text = Encoding.UTF8.GetString (asset.bytes, 0, asset.bytes.Length); + Text = Text.Replace("\r\n", "\n"); + Text = Text.Replace("\r", "\n"); + StringReader reader = new StringReader(Text); + + string s; + Dictionary Dict = new Dictionary(StringComparer.Ordinal); + while ( (s=reader.ReadLine()) != null ) + { + string Key, Value, Category, TermType, Comment; + if (!TextAsset_ReadLine(s, out Key, out Value, out Category, out Comment, out TermType)) + continue; + + if (!string.IsNullOrEmpty(Key) && !string.IsNullOrEmpty(Value)) + Dict[Key]=Value; + } + return Dict; + } + + public static bool TextAsset_ReadLine( string line, out string key, out string value, out string category, out string comment, out string termType ) + { + key = string.Empty; + category= string.Empty; + comment = string.Empty; + termType= string.Empty; + value = string.Empty; + + //--[ Comment ]----------------------- + int iComment = line.LastIndexOf("//", StringComparison.Ordinal); + if (iComment>=0) + { + comment = line.Substring(iComment+2).Trim(); + comment = DecodeString(comment); + line = line.Substring(0, iComment); + } + + //--[ Key ]----------------------------- + int iKeyEnd = line.IndexOf("=", StringComparison.Ordinal); + if (iKeyEnd<0) + { + return false; + } + + key = line.Substring(0, iKeyEnd).Trim(); + value = line.Substring(iKeyEnd+1).Trim(); + value = value.Replace ("\r\n", "\n").Replace ("\n", "\\n"); + value = DecodeString(value); + + //--[ Type ]--------- + if (key.Length>2 && key[0]=='[') + { + int iTypeEnd = key.IndexOf(']'); + if (iTypeEnd>=0) + { + termType = key.Substring(1, iTypeEnd-1); + key = key.Substring(iTypeEnd+1); + } + } + + ValidateFullTerm( ref key ); + + return true; + } + + #endregion + + #region CSV + public static string ReadCSVfile( string Path, Encoding encoding ) + { + string Text = string.Empty; + #if (UNITY_WP8 || UNITY_METRO) && !UNITY_EDITOR + byte[] buffer = UnityEngine.Windows.File.ReadAllBytes (Path); + Text = Encoding.UTF8.GetString(buffer, 0, buffer.Length); + #else + /*using (System.IO.StreamReader reader = System.IO.File.OpenText(Path)) + { + Text = reader.ReadToEnd(); + }*/ + using (var reader = new StreamReader(Path, encoding )) + Text = reader.ReadToEnd(); + #endif + + Text = Text.Replace("\r\n", "\n"); + Text = Text.Replace("\r", "\n"); + + return Text; + } + + public static List ReadCSV( string Text, char Separator=',' ) + { + int iStart = 0; + List CSV = new List(); + + while (iStart < Text.Length) + { + string[] list = ParseCSVline (Text, ref iStart, Separator); + if (list==null) break; + CSV.Add(list); + } + return CSV; + } + + static string[] ParseCSVline( string Line, ref int iStart, char Separator ) + { + List list = new List(); + + //Line = "puig,\"placeres,\"\"cab\nr\nera\"\"algo\"\npuig";//\"Frank\npuig\nplaceres\",aaa,frank\nplaceres"; + + int TextLength = Line.Length; + int iWordStart = iStart; + bool InsideQuote = false; + + while (iStart < TextLength) + { + char c = Line[iStart]; + + if (InsideQuote) + { + if (c=='\"') //--[ Look for Quote End ]------------ + { + if (iStart+1 >= TextLength || Line[iStart+1] != '\"') //-- Single Quote: Quotation Ends + { + InsideQuote = false; + } + else + if (iStart+2 < TextLength && Line[iStart+2]=='\"') //-- Tripple Quotes: Quotation ends + { + InsideQuote = false; + iStart+=2; + } + else + iStart++; // Skip Double Quotes + } + } + + else //-----[ Separators ]---------------------- + + if (c=='\n' || c==Separator) + { + AddCSVtoken(ref list, ref Line, iStart, ref iWordStart); + if (c=='\n') // Stop the row on line breaks + { + iStart++; + break; + } + } + + else //--------[ Start Quote ]-------------------- + + if (c=='\"') + InsideQuote = true; + + iStart++; + } + if (iStart>iWordStart) + AddCSVtoken(ref list, ref Line, iStart, ref iWordStart); + + return list.ToArray(); + } + + static void AddCSVtoken( ref List list, ref string Line, int iEnd, ref int iWordStart) + { + string Text = Line.Substring(iWordStart, iEnd-iWordStart); + iWordStart = iEnd+1; + + Text = Text.Replace("\"\"", "\"" ); + if (Text.Length>1 && Text[0]=='\"' && Text[Text.Length-1]=='\"') + Text = Text.Substring(1, Text.Length-2 ); + + list.Add( Text); + } + + + + #endregion + + #region I2CSV + + public static List ReadI2CSV( string Text ) + { + string[] ColumnSeparator = {"[*]"}; + string[] RowSeparator = {"[ln]"}; + + List CSV = new List(); + foreach (var line in Text.Split (RowSeparator, StringSplitOptions.None)) + CSV.Add (line.Split (ColumnSeparator, StringSplitOptions.None)); + + return CSV; + } + + #endregion + + #region Misc + + public static void ValidateFullTerm( ref string Term ) + { + Term = Term.Replace('\\', '/'); + int First = Term.IndexOf('/'); + if (First<0) + return; + + int second; + while ( (second=Term.LastIndexOf('/')) != First ) + Term = Term.Remove( second,1); + } + + + // this function encodes \r\n and \n into \\n + public static string EncodeString( string str ) + { + if (string.IsNullOrEmpty(str)) + return string.Empty; + + return str.Replace("\r\n", "<\\n>") + .Replace("\r", "<\\n>") + .Replace("\n", "<\\n>"); + } + + public static string DecodeString( string str ) + { + if (string.IsNullOrEmpty(str)) + return string.Empty; + + return str.Replace("<\\n>", "\r\n"); + } + + #endregion + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/LocalizationReader.cs.meta b/popcorn/Assets/I2/Localization/Scripts/LocalizationReader.cs.meta new file mode 100644 index 00000000..e6c09794 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/LocalizationReader.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 6ec1933af6b4d6947ba69b9bda4260d1 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Localize.cs b/popcorn/Assets/I2/Localization/Scripts/Localize.cs new file mode 100644 index 00000000..bc701cab --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Localize.cs @@ -0,0 +1,519 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UnityEngine; +using UnityEngine.Events; +using Object = UnityEngine.Object; + +#if UNITY_EDITOR +using UnityEditor.Events; +using UnityEditor; +#endif + +namespace I2.Loc +{ + [AddComponentMenu("I2/Localization/I2 Localize")] + public class Localize : MonoBehaviour + { + #region Variables: Term + public string Term + { + get { return mTerm; } + set { SetTerm(value); } + } + public string SecondaryTerm + { + get { return mTermSecondary; } + set { SetTerm(null, value); } + } + + public string mTerm = string.Empty, // if Target is a Label, this will be the text, if sprite, this will be the spriteName, etc + mTermSecondary = string.Empty; // if Target is a Label, this will be the font Name, if sprite, this will be the Atlas name, etc + + // This are the terms actually used (will be mTerm/mSecondaryTerm or will get them from the objects if those are missing. e.g. Labels' text and font name) + // This are set when the component starts + [NonSerialized] public string FinalTerm, FinalSecondaryTerm; + + public enum TermModification { DontModify, ToUpper, ToLower, ToUpperFirst, ToTitle/*, CustomRange*/} + public TermModification PrimaryTermModifier = TermModification.DontModify, + SecondaryTermModifier = TermModification.DontModify; + public string TermPrefix, TermSuffix; + + public bool LocalizeOnAwake = true; + + string LastLocalizedLanguage; // Used to avoid Localizing everytime the object is Enabled + +#if UNITY_EDITOR + public ILanguageSource Source; // Source used while in the Editor to preview the Terms (can be of type LanguageSource or LanguageSourceAsset) +#endif + + #endregion + + #region Variables: Target + + public bool IgnoreRTL; // If false, no Right To Left processing will be done + public int MaxCharactersInRTL; // If the language is RTL, the translation will be split in lines not longer than this amount and the RTL fix will be applied per line + public bool IgnoreNumbersInRTL = true; // If the language is RTL, the translation will not convert numbers (will preserve them like: e.g. 123) + + public bool CorrectAlignmentForRTL = true; // If true, when Right To Left language, alignment will be set to Right + + public bool AddSpacesToJoinedLanguages; // Some languages (e.g. Chinese, Japanese and Thai) don't add spaces to their words (all characters are placed toguether), making this variable true, will add spaces to all characters to allow wrapping long texts into multiple lines. + public bool AllowLocalizedParameters=true; + public bool AllowParameters=true; + + #endregion + + #region Variables: References + + public List TranslatedObjects = new List(); // For targets that reference objects (e.g. AudioSource, UITexture,etc) + // this keeps a reference to the possible options. + // If the value is not the name of any of this objects then it will try to load the object from the Resources + + + [NonSerialized] public Dictionary mAssetDictionary = new Dictionary(StringComparer.Ordinal); //This is used to overcome the issue with Unity not serializing Dictionaries + + #endregion + + #region Variable Translation Modifiers + + + public UnityEvent LocalizeEvent = new UnityEvent(); // This allows scripts to modify the translations : e.g. "Player {0} wins" -> "Player Red wins" + + + public static string MainTranslation, SecondaryTranslation; // The callback should use and modify this variables + public static string CallBackTerm, CallBackSecondaryTerm; // during the callback, this will hold the FinalTerm and FinalSecondary to know what terms are originating the translation + public static Localize CurrentLocalizeComponent; // while in the LocalizeCallBack, this points to the Localize calling the callback + + public bool AlwaysForceLocalize; // Force localization when the object gets enabled (useful for callbacks and parameters that change the localization even through the language is the same as in the previous time it was localized) + + [SerializeField] public EventCallback LocalizeCallBack = new EventCallback(); //LocalizeCallBack is deprecated. Please use LocalizeEvent instead. + + #endregion + + #region Variables: Editor Related + public bool mGUI_ShowReferences; + public bool mGUI_ShowTems = true; + public bool mGUI_ShowCallback; + #endregion + + #region Variables: Runtime (LocalizeTarget) + + public ILocalizeTarget mLocalizeTarget; + public string mLocalizeTargetName; // Used to resolve multiple targets in a prefab + + #endregion + + #region Localize + + void Awake() + { + #if UNITY_EDITOR + if (BuildPipeline.isBuildingPlayer) + return; + #endif + + UpdateAssetDictionary(); + FindTarget(); + + if (LocalizeOnAwake) + OnLocalize(); + } + + #if UNITY_EDITOR + void OnValidate() + { + if (LocalizeCallBack.HasCallback()) + { + try + { + var methodInfo = UnityEventBase.GetValidMethodInfo(LocalizeCallBack.Target, LocalizeCallBack.MethodName, Array.Empty()); + + if (methodInfo != null) + { + UnityAction methodDelegate = Delegate.CreateDelegate(typeof(UnityAction), LocalizeCallBack.Target, methodInfo, false) as UnityAction; + if (methodDelegate != null) + UnityEventTools.AddPersistentListener(LocalizeEvent, methodDelegate); + } + } + catch(Exception) + {} + + LocalizeCallBack.Target = null; + LocalizeCallBack.MethodName = null; + } + } + #endif + + void OnEnable() + { + OnLocalize (); + } + + public bool HasCallback() + { + if (LocalizeCallBack.HasCallback()) + return true; + return LocalizeEvent.GetPersistentEventCount() > 0; + } + + public void OnLocalize( bool Force = false ) + { + if (!Force && (!enabled || gameObject==null || !gameObject.activeInHierarchy)) + return; + + if (string.IsNullOrEmpty(LocalizationManager.CurrentLanguage)) + return; + + if (!AlwaysForceLocalize && !Force && !HasCallback() && LastLocalizedLanguage==LocalizationManager.CurrentLanguage) + return; + LastLocalizedLanguage = LocalizationManager.CurrentLanguage; + + // These are the terms actually used (will be mTerm/mSecondaryTerm or will get them from the objects if those are missing. e.g. Labels' text and font name) + if (string.IsNullOrEmpty(FinalTerm) || string.IsNullOrEmpty(FinalSecondaryTerm)) + GetFinalTerms( out FinalTerm, out FinalSecondaryTerm ); + + + bool hasCallback = I2Utils.IsPlaying() && HasCallback(); + + if (!hasCallback && string.IsNullOrEmpty (FinalTerm) && string.IsNullOrEmpty (FinalSecondaryTerm)) + return; + + CallBackTerm = FinalTerm; + CallBackSecondaryTerm = FinalSecondaryTerm; + MainTranslation = string.IsNullOrEmpty(FinalTerm) || FinalTerm=="-" ? null : LocalizationManager.GetTranslation (FinalTerm, false); + SecondaryTranslation = string.IsNullOrEmpty(FinalSecondaryTerm) || FinalSecondaryTerm == "-" ? null : LocalizationManager.GetTranslation (FinalSecondaryTerm, false); + + if (!hasCallback && /*string.IsNullOrEmpty (MainTranslation)*/ string.IsNullOrEmpty(FinalTerm) && string.IsNullOrEmpty (SecondaryTranslation)) + return; + + CurrentLocalizeComponent = this; + + { + LocalizeCallBack.Execute (this); // This allows scripts to modify the translations : e.g. "Player {0} wins" -> "Player Red wins" + LocalizeEvent.Invoke(); + if (AllowParameters) + LocalizationManager.ApplyLocalizationParams (ref MainTranslation, gameObject, AllowLocalizedParameters); + } + + if (!FindTarget()) + return; + bool applyRTL = LocalizationManager.IsRight2Left && !IgnoreRTL; + + if (MainTranslation != null) + { + switch (PrimaryTermModifier) + { + case TermModification.ToUpper: MainTranslation = MainTranslation.ToUpper(); break; + case TermModification.ToLower: MainTranslation = MainTranslation.ToLower(); break; + case TermModification.ToUpperFirst: MainTranslation = GoogleTranslation.UppercaseFirst(MainTranslation); break; + case TermModification.ToTitle: MainTranslation = GoogleTranslation.TitleCase(MainTranslation); break; + } + if (!string.IsNullOrEmpty(TermPrefix)) + MainTranslation = applyRTL ? MainTranslation + TermPrefix : TermPrefix + MainTranslation; + if (!string.IsNullOrEmpty(TermSuffix)) + MainTranslation = applyRTL ? TermSuffix + MainTranslation : MainTranslation + TermSuffix; + + if (AddSpacesToJoinedLanguages && LocalizationManager.HasJoinedWords && !string.IsNullOrEmpty(MainTranslation)) + { + var sb = new StringBuilder(); + sb.Append(MainTranslation[0]); + for (int i = 1, imax = MainTranslation.Length; i < imax; ++i) + { + sb.Append(' '); + sb.Append(MainTranslation[i]); + } + + MainTranslation = sb.ToString(); + } + if (applyRTL && mLocalizeTarget.AllowMainTermToBeRTL() && !string.IsNullOrEmpty(MainTranslation)) + MainTranslation = LocalizationManager.ApplyRTLfix(MainTranslation, MaxCharactersInRTL, IgnoreNumbersInRTL); + + } + + if (SecondaryTranslation != null) + { + switch (SecondaryTermModifier) + { + case TermModification.ToUpper: SecondaryTranslation = SecondaryTranslation.ToUpper(); break; + case TermModification.ToLower: SecondaryTranslation = SecondaryTranslation.ToLower(); break; + case TermModification.ToUpperFirst: SecondaryTranslation = GoogleTranslation.UppercaseFirst(SecondaryTranslation); break; + case TermModification.ToTitle: SecondaryTranslation = GoogleTranslation.TitleCase(SecondaryTranslation); break; + } + if (applyRTL && mLocalizeTarget.AllowSecondTermToBeRTL() && !string.IsNullOrEmpty(SecondaryTranslation)) + SecondaryTranslation = LocalizationManager.ApplyRTLfix(SecondaryTranslation); + } + + if (LocalizationManager.HighlightLocalizedTargets) + { + MainTranslation = "LOC:" + FinalTerm; + } + + mLocalizeTarget.DoLocalize( this, MainTranslation, SecondaryTranslation ); + + CurrentLocalizeComponent = null; + } + + #endregion + + #region Finding Target + + public bool FindTarget() + { + if (mLocalizeTarget != null && mLocalizeTarget.IsValid(this)) + return true; + + if (mLocalizeTarget!=null) + { + DestroyImmediate(mLocalizeTarget); + mLocalizeTarget = null; + mLocalizeTargetName = null; + } + + if (!string.IsNullOrEmpty(mLocalizeTargetName)) + { + foreach (var desc in LocalizationManager.mLocalizeTargets) + { + if (mLocalizeTargetName == desc.GetTargetType().ToString()) + { + if (desc.CanLocalize(this)) + mLocalizeTarget = desc.CreateTarget(this); + if (mLocalizeTarget!=null) + return true; + } + } + } + + foreach (var desc in LocalizationManager.mLocalizeTargets) + { + if (!desc.CanLocalize(this)) + continue; + mLocalizeTarget = desc.CreateTarget(this); + mLocalizeTargetName = desc.GetTargetType().ToString(); + if (mLocalizeTarget != null) + return true; + } + + return false; + } + + #endregion + + #region Finding Term + + // Returns the term that will actually be translated + // its either the Term value in this class or the text of the label if there is no term + public void GetFinalTerms( out string primaryTerm, out string secondaryTerm ) + { + primaryTerm = string.Empty; + secondaryTerm = string.Empty; + + if (!FindTarget()) + return; + + + // if either the primary or secondary term is missing, get them. (e.g. from the label's text and font name) + if (mLocalizeTarget != null) + { + mLocalizeTarget.GetFinalTerms(this, mTerm, mTermSecondary, out primaryTerm, out secondaryTerm); + primaryTerm = I2Utils.GetValidTermName(primaryTerm); + } + + // If there are values already set, go with those + if (!string.IsNullOrEmpty(mTerm)) + primaryTerm = mTerm; + + if (!string.IsNullOrEmpty(mTermSecondary)) + secondaryTerm = mTermSecondary; + + if (primaryTerm != null) + primaryTerm = primaryTerm.Trim(); + if (secondaryTerm != null) + secondaryTerm = secondaryTerm.Trim(); + } + + public string GetMainTargetsText() + { + string primary = null, secondary = null; + + if (mLocalizeTarget!=null) + mLocalizeTarget.GetFinalTerms( this, null, null, out primary, out secondary ); + + return string.IsNullOrEmpty(primary) ? mTerm : primary; + } + + public void SetFinalTerms( string Main, string Secondary, out string primaryTerm, out string secondaryTerm, bool RemoveNonASCII ) + { + primaryTerm = RemoveNonASCII ? I2Utils.GetValidTermName(Main) : Main; + secondaryTerm = Secondary; + } + + #endregion + + #region Misc + + public void SetTerm (string primary) + { + if (!string.IsNullOrEmpty(primary)) + FinalTerm = mTerm = primary; + + OnLocalize (true); + } + + public void SetTerm(string primary, string secondary ) + { + if (!string.IsNullOrEmpty(primary)) + FinalTerm = mTerm = primary; + FinalSecondaryTerm = mTermSecondary = secondary; + + OnLocalize(true); + } + + internal T GetSecondaryTranslatedObj( ref string mainTranslation, ref string secondaryTranslation ) where T: Object + { + string newMain, newSecond; + + //--[ Allow main translation to override Secondary ]------------------- + DeserializeTranslation(mainTranslation, out newMain, out newSecond); + + T obj = null; + + if (!string.IsNullOrEmpty(newSecond)) + { + obj = GetObject(newSecond); + if (obj != null) + { + mainTranslation = newMain; + secondaryTranslation = newSecond; + } + } + + if (obj == null) + obj = GetObject(secondaryTranslation); + + return obj; + } + + public void UpdateAssetDictionary() + { + TranslatedObjects.RemoveAll(x => x == null); + mAssetDictionary = TranslatedObjects.Distinct() + .GroupBy(o => o.name) + .ToDictionary(g => g.Key, g => g.First()); + } + + internal T GetObject( string Translation) where T: Object + { + if (string.IsNullOrEmpty (Translation)) + return null; + T obj = GetTranslatedObject(Translation); + + //if (obj==null) + //{ + // Remove path and search by name + //int Index = Translation.LastIndexOfAny("/\\".ToCharArray()); + //if (Index>=0) + //{ + // Translation = Translation.Substring(Index+1); + // obj = GetTranslatedObject(Translation); + //} + //} + return obj; + } + + T GetTranslatedObject( string Translation) where T: Object + { + T Obj = FindTranslatedObject(Translation); + /*if (Obj == null) + return null; + + if ((Obj as T) != null) + return Obj as T; + + // If the found Obj is not of type T, then try finding a component inside + if (Obj as Component != null) + return (Obj as Component).GetComponent(typeof(T)) as T; + + if (Obj as GameObject != null) + return (Obj as GameObject).GetComponent(typeof(T)) as T; + */ + return Obj; + } + + + // translation format: "[secondary]value" [secondary] is optional + void DeserializeTranslation( string translation, out string value, out string secondary ) + { + if (!string.IsNullOrEmpty(translation) && translation.Length>1 && translation[0]=='[') + { + int Index = translation.IndexOf(']'); + if (Index>0) + { + secondary = translation.Substring(1, Index-1); + value = translation.Substring(Index+1); + return; + } + } + value = translation; + secondary = string.Empty; + } + + public T FindTranslatedObject( string value) where T : Object + { + if (string.IsNullOrEmpty(value)) + return null; + + if (mAssetDictionary == null || mAssetDictionary.Count != TranslatedObjects.Count) + { + UpdateAssetDictionary(); + } + + foreach (var kvp in mAssetDictionary) + { + if (kvp.Value is T && value.EndsWith(kvp.Key, StringComparison.OrdinalIgnoreCase)) + { + // Check if the value is just the name or has a path + if (string.Compare(value, kvp.Key, StringComparison.OrdinalIgnoreCase)==0) + return (T) kvp.Value; + + // Check if the path matches + //Resources.get TranslatedObjects[i]. + } + } + + T obj = LocalizationManager.FindAsset(value) as T; + if (obj) + return obj; + + obj = ResourceManager.pInstance.GetAsset(value); + return obj; + } + + public bool HasTranslatedObject( Object Obj ) + { + if (TranslatedObjects.Contains(Obj)) + return true; + return ResourceManager.pInstance.HasAsset(Obj); + + } + + public void AddTranslatedObject( Object Obj ) + { + if (TranslatedObjects.Contains(Obj)) + return; + TranslatedObjects.Add(Obj); + UpdateAssetDictionary(); + } + + #endregion + + #region Utilities + // This can be used to set the language when a button is clicked + public void SetGlobalLanguage( string Language ) + { + LocalizationManager.CurrentLanguage = Language; + } + + #endregion + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Localize.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Localize.cs.meta new file mode 100644 index 00000000..af8cbcc7 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Localize.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 344445a89b4f74a0e9a0a766903df87e +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/LocalizeDropdown.cs b/popcorn/Assets/I2/Localization/Scripts/LocalizeDropdown.cs new file mode 100644 index 00000000..6df6d26c --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/LocalizeDropdown.cs @@ -0,0 +1,111 @@ +using System.Collections.Generic; +using TMPro; +using UnityEngine; +using UnityEngine.UI; + +namespace I2.Loc +{ + #if !UNITY_5_0 && !UNITY_5_1 + [AddComponentMenu("I2/Localization/Localize Dropdown")] + public class LocalizeDropdown : MonoBehaviour + { + public List _Terms = new List(); + + public void Start() + { + LocalizationManager.OnLocalizeEvent += OnLocalize; + OnLocalize(); + } + + public void OnDestroy() + { + LocalizationManager.OnLocalizeEvent -= OnLocalize; + } + + void OnEnable() + { + if (_Terms.Count == 0) + FillValues(); + OnLocalize (); + } + + public void OnLocalize() + { + if (!enabled || gameObject==null || !gameObject.activeInHierarchy) + return; + + if (string.IsNullOrEmpty(LocalizationManager.CurrentLanguage)) + return; + + UpdateLocalization(); + } + + void FillValues() + { + var _Dropdown = GetComponent(); + if (_Dropdown == null && I2Utils.IsPlaying()) + { + #if TextMeshPro + FillValuesTMPro(); + #endif + return; + } + + foreach (var term in _Dropdown.options) + { + _Terms.Add(term.text); + } + } + + public void UpdateLocalization() + { + var _Dropdown = GetComponent(); + if (_Dropdown == null) + { + #if TextMeshPro + UpdateLocalizationTMPro(); + #endif + return; + } + + _Dropdown.options.Clear(); + foreach (var term in _Terms) + { + var translation = LocalizationManager.GetTranslation(term); + _Dropdown.options.Add( new Dropdown.OptionData( translation ) ); + } + _Dropdown.RefreshShownValue(); + } + + #if TextMeshPro + public void UpdateLocalizationTMPro() + { + var _Dropdown = GetComponent(); + if (_Dropdown == null) + return; + + _Dropdown.options.Clear(); + foreach (var term in _Terms) + { + var translation = LocalizationManager.GetTranslation(term); + _Dropdown.options.Add(new TMP_Dropdown.OptionData(translation)); + } + _Dropdown.RefreshShownValue(); + } + + void FillValuesTMPro() + { + var _Dropdown = GetComponent(); + if (_Dropdown == null) + return; + + foreach (var term in _Dropdown.options) + { + _Terms.Add(term.text); + } + } +#endif + + } +#endif +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/LocalizeDropdown.cs.meta b/popcorn/Assets/I2/Localization/Scripts/LocalizeDropdown.cs.meta new file mode 100644 index 00000000..eaff4eb4 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/LocalizeDropdown.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a5379d3aeaf18a24fa23c26a749edfe5 +timeCreated: 1466568092 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Manager.meta b/popcorn/Assets/I2/Localization/Scripts/Manager.meta new file mode 100644 index 00000000..cc87223c --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Manager.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ba131beaf0aba9d4084aff4ea6e742c3 +folderAsset: yes +timeCreated: 1516397531 +licenseType: Store +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Manager/LocalizationManager.cs b/popcorn/Assets/I2/Localization/Scripts/Manager/LocalizationManager.cs new file mode 100644 index 00000000..d359823d --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Manager/LocalizationManager.cs @@ -0,0 +1,92 @@ +using System; +using System.IO; +using System.Linq; +using UnityEditor; +using UnityEngine; + +namespace I2.Loc +{ + public static partial class LocalizationManager + { + + #region Variables: Misc + + #endregion + + public static void InitializeIfNeeded() + { + #if UNITY_EDITOR + #if UNITY_2017_2_OR_NEWER + EditorApplication.playModeStateChanged -= OnEditorPlayModeStateChanged; + EditorApplication.playModeStateChanged += OnEditorPlayModeStateChanged; + #else + UnityEditor.EditorApplication.playmodeStateChanged -= OldOnEditorPlayModeStateChanged; + UnityEditor.EditorApplication.playmodeStateChanged += OldOnEditorPlayModeStateChanged; + #endif + #endif + + if (string.IsNullOrEmpty(mCurrentLanguage) || Sources.Count == 0) + { + AutoLoadGlobalParamManagers(); + UpdateSources(); + SelectStartupLanguage(); + } + } + + public static string GetVersion() + { + return "2.8.17 f1"; + } + + public static int GetRequiredWebServiceVersion() + { + return 5; + } + + public static string GetWebServiceURL( LanguageSourceData source = null ) + { + if (source != null && !string.IsNullOrEmpty(source.Google_WebServiceURL)) + return source.Google_WebServiceURL; + + InitializeIfNeeded(); + for (int i = 0; i < Sources.Count; ++i) + if (Sources[i] != null && !string.IsNullOrEmpty(Sources[i].Google_WebServiceURL)) + return Sources[i].Google_WebServiceURL; + return string.Empty; + } + +#if UNITY_EDITOR + #if UNITY_2017_2_OR_NEWER + static void OnEditorPlayModeStateChanged( PlayModeStateChange stateChange ) + { + if (stateChange != PlayModeStateChange.ExitingPlayMode) + return; + #else + static void OldOnEditorPlayModeStateChanged() + { + if (UnityEditor.EditorApplication.isPlayingOrWillChangePlaymode) + return; + #endif + + OnLocalizeEvent = null; + + foreach (var source in Sources) + { + source.LoadAllLanguages(true); + } + try + { + var tempPath = Application.temporaryCachePath; + + foreach (var file in Directory.GetFiles(tempPath).Where(f => f.Contains("LangSource_") && f.EndsWith(".loc", StringComparison.Ordinal))) + { + File.Delete(file); + } + } + catch(Exception) + { + } + } +#endif + } +} diff --git a/popcorn/Assets/I2/Localization/Scripts/Manager/LocalizationManager.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Manager/LocalizationManager.cs.meta new file mode 100644 index 00000000..89de7d0b --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Manager/LocalizationManager.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: dd42f89f650a540d9bd641f752368e27 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Manager/LocalizationManager_Language.cs b/popcorn/Assets/I2/Localization/Scripts/Manager/LocalizationManager_Language.cs new file mode 100644 index 00000000..e1fcff15 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Manager/LocalizationManager_Language.cs @@ -0,0 +1,348 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Threading; + +namespace I2.Loc +{ + public static partial class LocalizationManager + { + #region Variables: CurrentLanguage + + public static string CurrentLanguage + { + get { + InitializeIfNeeded(); + return mCurrentLanguage; + } + set { + InitializeIfNeeded(); + string SupportedLanguage = GetSupportedLanguage(value); + if (!string.IsNullOrEmpty(SupportedLanguage) && mCurrentLanguage != SupportedLanguage) + { + SetLanguageAndCode(SupportedLanguage, GetLanguageCode(SupportedLanguage)); + } + } + } + public static string CurrentLanguageCode + { + get { + InitializeIfNeeded(); + return mLanguageCode; } + set { + InitializeIfNeeded(); + if (mLanguageCode != value) + { + string LanName = GetLanguageFromCode(value); + if (!string.IsNullOrEmpty(LanName)) + SetLanguageAndCode(LanName, value); + } + } + } + + // "English (United States)" (get returns "United States") + // when set "Canada", the new language code will be "English (Canada)" + public static string CurrentRegion + { + get { + var Lan = CurrentLanguage; + int idx = Lan.IndexOfAny("/\\".ToCharArray()); + if (idx > 0) + return Lan.Substring(idx + 1); + + idx = Lan.IndexOfAny("[(".ToCharArray()); + int idx2 = Lan.LastIndexOfAny("])".ToCharArray()); + if (idx > 0 && idx != idx2) + return Lan.Substring(idx + 1, idx2 - idx - 1); + return string.Empty; + } + set { + var Lan = CurrentLanguage; + int idx = Lan.IndexOfAny("/\\".ToCharArray()); + if (idx > 0) + { + CurrentLanguage = Lan.Substring(idx + 1) + value; + return; + } + + idx = Lan.IndexOfAny("[(".ToCharArray()); + int idx2 = Lan.LastIndexOfAny("])".ToCharArray()); + if (idx > 0 && idx != idx2) + Lan = Lan.Substring(idx); + + CurrentLanguage = Lan + "(" + value + ")"; + } + } + + // "en-US" (get returns "US") (when set "CA", the new language code will be "en-CA") + public static string CurrentRegionCode + { + get { + var code = CurrentLanguageCode; + int idx = code.IndexOfAny(" -_/\\".ToCharArray()); + return idx < 0 ? string.Empty : code.Substring(idx + 1); + } + set { + var code = CurrentLanguageCode; + int idx = code.IndexOfAny(" -_/\\".ToCharArray()); + if (idx > 0) + code = code.Substring(0, idx); + + CurrentLanguageCode = code + "-" + value; + } + } + + public static CultureInfo CurrentCulture + { + get + { + return mCurrentCulture; + } + } + + static string mCurrentLanguage; + static string mLanguageCode; + static CultureInfo mCurrentCulture; + static bool mChangeCultureInfo; + + public static bool IsRight2Left; + public static bool HasJoinedWords; // Some languages (e.g. Chinese, Japanese and Thai) don't add spaces to their words (all characters are placed toguether) + + #endregion + + public static void SetLanguageAndCode(string LanguageName, string LanguageCode, bool RememberLanguage = true, bool Force = false) + { + if (mCurrentLanguage != LanguageName || mLanguageCode != LanguageCode || Force) + { + if (RememberLanguage) + PersistentStorage.SetSetting_String("I2 Language", LanguageName); + mCurrentLanguage = LanguageName; + mLanguageCode = LanguageCode; + mCurrentCulture = CreateCultureForCode(LanguageCode); + if (mChangeCultureInfo) + SetCurrentCultureInfo(); + + IsRight2Left = IsRTL(mLanguageCode); + HasJoinedWords = GoogleLanguages.LanguageCode_HasJoinedWord(mLanguageCode); + LocalizeAll(Force); + } + } + + static CultureInfo CreateCultureForCode(string code) + { +#if !NETFX_CORE + try + { + return CultureInfo.CreateSpecificCulture(code); + } + catch (Exception) + { + return CultureInfo.InvariantCulture; + } +#else + return CultureInfo.InvariantCulture; +#endif + } + + public static void EnableChangingCultureInfo(bool bEnable) + { + if (!mChangeCultureInfo && bEnable) + SetCurrentCultureInfo(); + mChangeCultureInfo = bEnable; + } + + static void SetCurrentCultureInfo() + { + #if !NETFX_CORE + Thread.CurrentThread.CurrentCulture = mCurrentCulture; + #endif + } + + + static void SelectStartupLanguage() + { + if (Sources.Count == 0) + return; + + // Use the system language if there is a source with that language, + // or pick any of the languages provided by the sources + + string SavedLanguage = PersistentStorage.GetSetting_String("I2 Language", string.Empty); + string SysLanguage = GetCurrentDeviceLanguage(); + + // Try selecting the System Language + // But fallback to the first language found if the System Language is not available in any source + + if (!string.IsNullOrEmpty(SavedLanguage) && HasLanguage(SavedLanguage, Initialize: false, SkipDisabled:true)) + { + SetLanguageAndCode(SavedLanguage, GetLanguageCode(SavedLanguage)); + return; + } + + if (!Sources [0].IgnoreDeviceLanguage) + { + // Check if the device language is supported. + // Also recognize when not region is set ("English (United State") will be used if sysLanguage is "English") + string ValidLanguage = GetSupportedLanguage (SysLanguage, true); + if (!string.IsNullOrEmpty (ValidLanguage)) { + SetLanguageAndCode (ValidLanguage, GetLanguageCode (ValidLanguage), false); + return; + } + } + + //--[ Use first language that its not disabled ]----------- + for (int i = 0, imax = Sources.Count; i < imax; ++i) + if (Sources[i].mLanguages.Count > 0) + { + for (int j = 0; j < Sources[i].mLanguages.Count; ++j) + if (Sources[i].mLanguages[j].IsEnabled()) + { + SetLanguageAndCode(Sources[i].mLanguages[j].Name, Sources[i].mLanguages[j].Code, false); + return; + } + } + } + + + public static bool HasLanguage( string Language, bool AllowDiscartingRegion = true, bool Initialize=true, bool SkipDisabled=true ) + { + if (Initialize) + InitializeIfNeeded(); + + // First look for an exact match + for (int i=0, imax=Sources.Count; i=0) + return true; + + // Then allow matching "English (Canada)" to "english" + if (AllowDiscartingRegion) + { + for (int i=0, imax=Sources.Count; i=0) + return true; + } + return false; + } + + // Returns the provided language or a similar one without the Region + //(e.g. "English (Canada)" could be mapped to "english" or "English (United States)" if "English (Canada)" is not found + public static string GetSupportedLanguage( string Language, bool ignoreDisabled=false ) + { + // First try finding the language that matches one of the official languages + string code = GoogleLanguages.GetLanguageCode(Language); + if (!string.IsNullOrEmpty(code)) + { + // First try finding if the exact language code is in one source + for (int i = 0, imax = Sources.Count; i < imax; ++i) + { + int Idx = Sources[i].GetLanguageIndexFromCode(code, true, ignoreDisabled); + if (Idx >= 0) + return Sources[i].mLanguages[Idx].Name; + } + + // If not, try checking without the region + for (int i = 0, imax = Sources.Count; i < imax; ++i) + { + int Idx = Sources[i].GetLanguageIndexFromCode(code, false, ignoreDisabled); + if (Idx >= 0) + return Sources[i].mLanguages[Idx].Name; + } + } + + // If not found, then try finding an exact match for the name + for (int i=0, imax=Sources.Count; i=0) + return Sources[i].mLanguages[Idx].Name; + } + + // Then allow matching "English (Canada)" to "english" + for (int i=0, imax=Sources.Count; i=0) + return Sources[i].mLanguages[Idx].Name; + } + + return string.Empty; + } + + public static string GetLanguageCode( string Language ) + { + if (Sources.Count==0) + UpdateSources(); + for (int i=0, imax=Sources.Count; i=0) + return Sources[i].mLanguages[Idx].Code; + } + return string.Empty; + } + + public static string GetLanguageFromCode( string Code, bool exactMatch=true ) + { + if (Sources.Count==0) + UpdateSources(); + for (int i=0, imax=Sources.Count; i=0) + return Sources[i].mLanguages[Idx].Name; + } + return string.Empty; + } + + + public static List GetAllLanguages ( bool SkipDisabled = true ) + { + if (Sources.Count==0) + UpdateSources(); + List Languages = new List (); + for (int i=0, imax=Sources.Count; i!Languages.Contains(x))); + } + return Languages; + } + + public static List GetAllLanguagesCode(bool allowRegions=true, bool SkipDisabled = true) + { + List Languages = new List(); + for (int i = 0, imax = Sources.Count; i < imax; ++i) + { + Languages.AddRange(Sources[i].GetLanguagesCode(allowRegions, SkipDisabled).Where(x => !Languages.Contains(x))); + } + return Languages; + } + + public static bool IsLanguageEnabled(string Language) + { + for (int i = 0, imax = Sources.Count; i < imax; ++i) + if (!Sources[i].IsLanguageEnabled(Language)) + return false; + return true; + } + + static void LoadCurrentLanguage() + { + for (int i = 0; i < Sources.Count; ++i) + { + var iCurrentLang = Sources[i].GetLanguageIndex(mCurrentLanguage, true, false); + Sources[i].LoadLanguage(iCurrentLang, true, true, true, false); + } + } + + + // This function should only be called from within the Localize Inspector to temporaly preview that Language + public static void PreviewLanguage(string NewLanguage) + { + mCurrentLanguage = NewLanguage; + mLanguageCode = GetLanguageCode(mCurrentLanguage); + IsRight2Left = IsRTL(mLanguageCode); + HasJoinedWords = GoogleLanguages.LanguageCode_HasJoinedWord(mLanguageCode); + } + } +} diff --git a/popcorn/Assets/I2/Localization/Scripts/Manager/LocalizationManager_Language.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Manager/LocalizationManager_Language.cs.meta new file mode 100644 index 00000000..556a3911 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Manager/LocalizationManager_Language.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 7d629295da7add24e9465e25cd212bf5 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Manager/LocalizationManager_Parameters.cs b/popcorn/Assets/I2/Localization/Scripts/Manager/LocalizationManager_Parameters.cs new file mode 100644 index 00000000..399f60eb --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Manager/LocalizationManager_Parameters.cs @@ -0,0 +1,195 @@ +using System; +using System.Collections.Generic; +using System.Text.RegularExpressions; +using UnityEngine; +using Object = UnityEngine.Object; + +namespace I2.Loc +{ + public static partial class LocalizationManager + { + #region Variables: Misc + + public static List ParamManagers = new List(); + + + // returns true if this replaces the normal ApplyLocalizationParams + // returns false if after running this function the manager should also run the default ApplyLocalizationParams to replace parameters + public delegate bool FnCustomApplyLocalizationParams(ref string translation, _GetParam getParam, bool allowLocalizedParameters); + public static FnCustomApplyLocalizationParams CustomApplyLocalizationParams; + #endregion + + #region Parameters + + public delegate object _GetParam(string param); + + public static void AutoLoadGlobalParamManagers() + { + foreach (var manager in Object.FindObjectsOfType()) + { + if (manager._IsGlobalManager && !ParamManagers.Contains(manager)) + { + Debug.Log(manager); + ParamManagers.Add(manager); + } + } + } + + public static void ApplyLocalizationParams(ref string translation, bool allowLocalizedParameters = true) + { + ApplyLocalizationParams(ref translation, p => GetLocalizationParam(p, null), allowLocalizedParameters); + } + + + public static void ApplyLocalizationParams(ref string translation, GameObject root, bool allowLocalizedParameters = true) + { + ApplyLocalizationParams(ref translation, p => GetLocalizationParam(p, root), allowLocalizedParameters); + } + + public static void ApplyLocalizationParams(ref string translation, Dictionary parameters, bool allowLocalizedParameters = true) + { + ApplyLocalizationParams(ref translation, p => { + object o = null; + if (parameters.TryGetValue(p, out o)) + return o; + return null; + }, allowLocalizedParameters); + } + + + public static void ApplyLocalizationParams(ref string translation, _GetParam getParam, bool allowLocalizedParameters=true) + { + if (translation == null) + return; + + bool skip_processing = CustomApplyLocalizationParams!=null && CustomApplyLocalizationParams.Invoke(ref translation, getParam, allowLocalizedParameters); + if (skip_processing) return; + + string pluralType=null; + int idx0 = 0; + int idx1 = translation.Length; + + int index = 0; + while (index>=0 && index0 && isubParam= 0) + { + result = termData.GetTranslation(idx); + } + } + } + + var paramTag = translation.Substring(iParamStart, iParamEnd - iParamStart + 2); + translation = translation.Replace(paramTag, result); + + int amount = 0; + if (int.TryParse(result, out amount)) + { + pluralType = GoogleLanguages.GetPluralType(CurrentLanguageCode, amount).ToString(); + } + + index = iParamStart + result.Length; + } + else + { + index = iParamEnd + 2; + } + } + + if (pluralType != null) + { + var tag = "[i2p_" + pluralType + "]"; + idx0 = translation.IndexOf(tag, StringComparison.OrdinalIgnoreCase); + if (idx0 < 0) idx0 = 0; + else idx0 += tag.Length; + + idx1 = translation.IndexOf("[i2p_", idx0 + 1, StringComparison.OrdinalIgnoreCase); + if (idx1 < 0) idx1 = translation.Length; + + translation = translation.Substring(idx0, idx1 - idx0); + } + } + + internal static string GetLocalizationParam(string ParamName, GameObject root) + { + string result = null; + if (root) + { + var components = root.GetComponents(); + for (int i = 0, imax = components.Length; i < imax; ++i) + { + var manager = components[i] as ILocalizationParamsManager; + if (manager != null && components[i].enabled) + { + result = manager.GetParameterValue(ParamName); + if (result != null) + return result; + } + } + } + + for (int i = 0, imax = ParamManagers.Count; i < imax; ++i) + { + result = ParamManagers[i].GetParameterValue(ParamName); + if (result != null) + return result; + } + + return null; + } + + #endregion + + #region Plural + + private static string GetPluralType( MatchCollection matches, string langCode, _GetParam getParam) + { + for (int i = 0, nMatches = matches.Count; i < nMatches; ++i) + { + var match = matches[i]; + var param = match.Groups[match.Groups.Count - 1].Value; + var result = (string)getParam(param); + if (result == null) + continue; + + int amount = 0; + if (!int.TryParse (result, out amount)) + continue; + + var pluralType = GoogleLanguages.GetPluralType(langCode, amount); + return pluralType.ToString (); + } + return null; + } + + #endregion + } +} diff --git a/popcorn/Assets/I2/Localization/Scripts/Manager/LocalizationManager_Parameters.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Manager/LocalizationManager_Parameters.cs.meta new file mode 100644 index 00000000..703501dd --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Manager/LocalizationManager_Parameters.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 9bdcae51172bbb8458cf8c42f889c2a0 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Manager/LocalizationManager_RTL.cs b/popcorn/Assets/I2/Localization/Scripts/Manager/LocalizationManager_RTL.cs new file mode 100644 index 00000000..307fb125 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Manager/LocalizationManager_RTL.cs @@ -0,0 +1,82 @@ +using System; +using System.Collections.Generic; + +namespace I2.Loc +{ + public static partial class LocalizationManager + { + static string[] LanguagesRTL = {"ar-DZ", "ar","ar-BH","ar-EG","ar-IQ","ar-JO","ar-KW","ar-LB","ar-LY","ar-MA","ar-OM","ar-QA","ar-SA","ar-SY","ar-TN","ar-AE","ar-YE", + "fa", "he","ur","ji"}; + + public static string ApplyRTLfix(string line) { return ApplyRTLfix(line, 0, true); } + public static string ApplyRTLfix(string line, int maxCharacters, bool ignoreNumbers) + { + if (string.IsNullOrEmpty(line)) + return line; + + // Fix !, ? and . signs not set correctly + char firstC = line[0]; + if (firstC == '!' || firstC == '.' || firstC == '?') + line = line.Substring(1) + firstC; + + int tagStart = -1, tagEnd = 0; + + // Find all Tags (and Numbers if ignoreNumbers is true) + int tagBase = 40000; + tagEnd = 0; + var tags = new List(); + while (I2Utils.FindNextTag(line, tagEnd, out tagStart, out tagEnd)) + { + string tag = "@@" + (char)(tagBase + tags.Count) + "@@"; + tags.Add(line.Substring(tagStart, tagEnd - tagStart + 1)); + + line = line.Substring(0, tagStart) + tag + line.Substring(tagEnd + 1); + tagEnd = tagStart + 5; + } + + // Split into lines and fix each line + line = line.Replace("\r\n", "\n"); + line = I2Utils.SplitLine(line, maxCharacters); + line = RTLFixer.Fix(line, true, !ignoreNumbers); + + + // Restore all tags + + for (int i = 0; i < tags.Count; i++) + { + var len = line.Length; + + for (int j = 0; j < len-4; ++j) + { + if (line[j] == '@' && line[j + 1] == '@' && line[j + 2] >= tagBase && line[j + 3] == '@' && line[j + 4] == '@') + { + int idx = line[j + 2] - tagBase; + if (idx % 2 == 0) idx++; + else idx--; + if (idx >= tags.Count) idx = tags.Count - 1; + + line = line.Substring(0, j) + tags[idx] + line.Substring(j + 5); + + break; + } + } + } + + return line; + } + + + public static string FixRTL_IfNeeded(string text, int maxCharacters = 0, bool ignoreNumber=false) + { + if (IsRight2Left) + return ApplyRTLfix(text, maxCharacters, ignoreNumber); + return text; + } + + public static bool IsRTL(string Code) + { + return Array.IndexOf(LanguagesRTL, Code)>=0; + } + } + +} diff --git a/popcorn/Assets/I2/Localization/Scripts/Manager/LocalizationManager_RTL.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Manager/LocalizationManager_RTL.cs.meta new file mode 100644 index 00000000..bd1ca3c3 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Manager/LocalizationManager_RTL.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: d33b5082085040d44ab79b83d25bffee +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Manager/LocalizationManager_Sources.cs b/popcorn/Assets/I2/Localization/Scripts/Manager/LocalizationManager_Sources.cs new file mode 100644 index 00000000..45056cc4 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Manager/LocalizationManager_Sources.cs @@ -0,0 +1,162 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using Object = UnityEngine.Object; + +namespace I2.Loc +{ + public static partial class LocalizationManager + { + + #region Variables: Misc + + public static List Sources = new List(); + public static string[] GlobalSources = { "I2Languages" }; + + #endregion + + #region Sources + + public static bool UpdateSources() + { + UnregisterDeletededSources(); + RegisterSourceInResources(); + RegisterSceneSources(); + return Sources.Count>0; + } + + static void UnregisterDeletededSources() + { + // Delete sources that were part of another scene and not longer available + for (int i=Sources.Count-1; i>=0; --i) + if (Sources[i] == null) + RemoveSource( Sources[i] ); + } + + static void RegisterSceneSources() + { + LanguageSource[] sceneSources = (LanguageSource[])Resources.FindObjectsOfTypeAll( typeof(LanguageSource) ); + foreach (LanguageSource source in sceneSources) + if (!Sources.Contains(source.mSource)) + { + if (source.mSource.owner == null) + source.mSource.owner = source; + AddSource( source.mSource ); + } + } + + static void RegisterSourceInResources() + { + // Find the Source that its on the Resources Folder + foreach (string SourceName in GlobalSources) + { + LanguageSourceAsset sourceAsset = ResourceManager.pInstance.GetAsset(SourceName); + + if (sourceAsset && !Sources.Contains(sourceAsset.mSource)) + { + if (!sourceAsset.mSource.mIsGlobalSource) + sourceAsset.mSource.mIsGlobalSource = true; + sourceAsset.mSource.owner = sourceAsset; + AddSource(sourceAsset.mSource); + } + } + } + + public static Func Callback_AllowSyncFromGoogle = null; + static bool AllowSyncFromGoogle(LanguageSourceData Source) + { + if (Callback_AllowSyncFromGoogle == null) + return true; + return Callback_AllowSyncFromGoogle.Invoke(Source); + } + + internal static void AddSource ( LanguageSourceData Source ) + { + if (Sources.Contains (Source)) + return; + + Sources.Add( Source ); + + if (Source.HasGoogleSpreadsheet() && Source.GoogleUpdateFrequency != LanguageSourceData.eGoogleUpdateFrequency.Never && AllowSyncFromGoogle(Source)) + { + #if !UNITY_EDITOR + Source.Import_Google_FromCache(); + bool justCheck = false; + #else + bool justCheck=true; + #endif + if (Source.GoogleUpdateDelay > 0) + CoroutineManager.Start( Delayed_Import_Google(Source, Source.GoogleUpdateDelay, justCheck) ); + else + Source.Import_Google(false, justCheck); + } + + //if (force) + { + for (int i = 0; i < Source.mLanguages.Count; ++i) + Source.mLanguages[i].SetLoaded(true); + } + + if (Source.mDictionary.Count==0) + Source.UpdateDictionary(true); + } + + static IEnumerator Delayed_Import_Google ( LanguageSourceData source, float delay, bool justCheck ) + { + yield return new WaitForSeconds( delay ); + if (source != null) // handle cases where the source is already deleted + { + source.Import_Google(false, justCheck); + } + } + + internal static void RemoveSource (LanguageSourceData Source ) + { + //Debug.Log ("RemoveSource " + Source+" " + Source.GetInstanceID()); + Sources.Remove( Source ); + } + + public static bool IsGlobalSource( string SourceName ) + { + return Array.IndexOf(GlobalSources, SourceName)>=0; + } + + public static LanguageSourceData GetSourceContaining( string term, bool fallbackToFirst = true ) + { + if (!string.IsNullOrEmpty(term)) + { + for (int i=0, imax=Sources.Count; i0 ? Sources[0] : null; + } + + public static Object FindAsset (string value) + { + for (int i=0, imax=Sources.Count; i("getDefault"); + mCurrentDeviceLanguage = locale.Call("toString"); + //https://stackoverflow.com/questions/4212320/get-the-current-language-in-device + + + if (!string.IsNullOrEmpty(mCurrentDeviceLanguage)) + { + mCurrentDeviceLanguage = mCurrentDeviceLanguage.Replace('_', '-'); + mCurrentDeviceLanguage = GoogleLanguages.GetLanguageName(mCurrentDeviceLanguage, true, true); + if (!string.IsNullOrEmpty(mCurrentDeviceLanguage)) + return; + } + } + catch (System.Exception) + { + } + #endif + + mCurrentDeviceLanguage = Application.systemLanguage.ToString(); + if (mCurrentDeviceLanguage == "ChineseSimplified") mCurrentDeviceLanguage = "Chinese (Simplified)"; + if (mCurrentDeviceLanguage == "ChineseTraditional") mCurrentDeviceLanguage = "Chinese (Traditional)"; + } + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Manager/LocalizationManager_SystemLanguage.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Manager/LocalizationManager_SystemLanguage.cs.meta new file mode 100644 index 00000000..42447d5b --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Manager/LocalizationManager_SystemLanguage.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: fd54e24a8c653f341a9540011ba06f01 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Manager/LocalizationManager_Targets.cs b/popcorn/Assets/I2/Localization/Scripts/Manager/LocalizationManager_Targets.cs new file mode 100644 index 00000000..aadae704 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Manager/LocalizationManager_Targets.cs @@ -0,0 +1,30 @@ +using System.Collections.Generic; + +namespace I2.Loc +{ + public static partial class LocalizationManager + { + + #region Variables: Misc + + public static List mLocalizeTargets = new List(); + + #endregion + + public static void RegisterTarget( ILocalizeTargetDescriptor desc ) + { + if (mLocalizeTargets.FindIndex(x => x.Name == desc.Name) != -1) + return; + + for (int i = 0; i < mLocalizeTargets.Count; ++i) + { + if (mLocalizeTargets[i].Priority > desc.Priority) + { + mLocalizeTargets.Insert(i, desc); + return; + } + } + mLocalizeTargets.Add(desc); + } + } +} diff --git a/popcorn/Assets/I2/Localization/Scripts/Manager/LocalizationManager_Targets.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Manager/LocalizationManager_Targets.cs.meta new file mode 100644 index 00000000..83dae7bf --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Manager/LocalizationManager_Targets.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 84ead5dc664fd394490f4874012ed099 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Manager/LocalizationManager_Translation.cs b/popcorn/Assets/I2/Localization/Scripts/Manager/LocalizationManager_Translation.cs new file mode 100644 index 00000000..7dcd8aca --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Manager/LocalizationManager_Translation.cs @@ -0,0 +1,225 @@ +using System.Collections; +using System.Collections.Generic; +using System.Reflection; +using UnityEditor; +using UnityEngine; + +namespace I2.Loc +{ + public static partial class LocalizationManager + { + + #region Variables: Misc + + public delegate void OnLocalizeCallback(); + public static event OnLocalizeCallback OnLocalizeEvent; + + static bool mLocalizeIsScheduled; + static bool mLocalizeIsScheduledWithForcedValue; + + public static bool HighlightLocalizedTargets = false; + + + #endregion + + public static string GetTranslation(string Term, bool FixForRTL = true, int maxLineLengthForRTL = 0, bool ignoreRTLnumbers = true, bool applyParameters = false, GameObject localParametersRoot = null, string overrideLanguage = null, bool allowLocalizedParameters=true) + { + string Translation = null; + TryGetTranslation(Term, out Translation, FixForRTL, maxLineLengthForRTL, ignoreRTLnumbers, applyParameters, localParametersRoot, overrideLanguage, allowLocalizedParameters); + + return Translation; + } + public static string GetTermTranslation(string Term, bool FixForRTL = true, int maxLineLengthForRTL = 0, bool ignoreRTLnumbers = true, bool applyParameters = false, GameObject localParametersRoot = null, string overrideLanguage = null, bool allowLocalizedParameters=true) + { + return GetTranslation(Term, FixForRTL, maxLineLengthForRTL, ignoreRTLnumbers, applyParameters, localParametersRoot, overrideLanguage, allowLocalizedParameters); + } + + + public static bool TryGetTranslation(string Term, out string Translation, bool FixForRTL = true, int maxLineLengthForRTL = 0, bool ignoreRTLnumbers = true, bool applyParameters = false, GameObject localParametersRoot = null, string overrideLanguage = null, bool allowLocalizedParameters=true) + { + Translation = null; + if (string.IsNullOrEmpty(Term)) + return false; + + InitializeIfNeeded(); + + for (int i = 0, imax = Sources.Count; i < imax; ++i) + { + if (Sources[i].TryGetTranslation(Term, out Translation, overrideLanguage)) + { + if (applyParameters) + ApplyLocalizationParams(ref Translation, localParametersRoot, allowLocalizedParameters); + + if (IsRight2Left && FixForRTL) + Translation = ApplyRTLfix(Translation, maxLineLengthForRTL, ignoreRTLnumbers); + return true; + } + } + + return false; + } + + public static T GetTranslatedObject( string AssetName, Localize optionalLocComp=null) where T : Object + { + if (optionalLocComp != null) + { + return optionalLocComp.FindTranslatedObject(AssetName); + } + + T obj = FindAsset(AssetName) as T; + if (obj) + return obj; + + obj = ResourceManager.pInstance.GetAsset(AssetName); + return obj; + } + + public static T GetTranslatedObjectByTermName( string Term, Localize optionalLocComp=null) where T : Object + { + string translation = GetTranslation(Term, FixForRTL: false); + return GetTranslatedObject(translation); + } + + + public static string GetAppName(string languageCode) + { + if (!string.IsNullOrEmpty(languageCode)) + { + for (int i = 0; i < Sources.Count; ++i) + { + if (string.IsNullOrEmpty(Sources[i].mTerm_AppName)) + continue; + + int langIdx = Sources[i].GetLanguageIndexFromCode(languageCode, false); + if (langIdx < 0) + continue; + + var termData = Sources[i].GetTermData(Sources[i].mTerm_AppName); + if (termData == null) + continue; + + var appName = termData.GetTranslation(langIdx); + if (!string.IsNullOrEmpty(appName)) + return appName; + } + } + + return Application.productName; + } + + public static void LocalizeAll(bool Force = false) + { + LoadCurrentLanguage(); + + if (!Application.isPlaying) + { + DoLocalizeAll(Force); + return; + } + mLocalizeIsScheduledWithForcedValue |= Force; + if (mLocalizeIsScheduled) + { + return; + } + CoroutineManager.Start(Coroutine_LocalizeAll()); + } + + static IEnumerator Coroutine_LocalizeAll() + { + mLocalizeIsScheduled = true; + yield return null; + mLocalizeIsScheduled = false; + var force = mLocalizeIsScheduledWithForcedValue; + mLocalizeIsScheduledWithForcedValue = false; + DoLocalizeAll(force); + } + + static void DoLocalizeAll(bool Force = false) + { + Localize[] Locals = (Localize[])Resources.FindObjectsOfTypeAll( typeof(Localize) ); + for (int i=0, imax=Locals.Length; i GetCategories () + { + List Categories = new List (); + for (int i=0, imax=Sources.Count; i GetTermsList ( string Category = null ) + { + if (Sources.Count==0) + UpdateSources(); + + if (Sources.Count==1) + return Sources[0].GetTermsList(Category); + + HashSet Terms = new HashSet (); + for (int i=0, imax=Sources.Count; i(Terms); + } + + public static TermData GetTermData( string term ) + { + InitializeIfNeeded(); + + TermData data; + for (int i=0, imax=Sources.Count; i : ILocalizeTarget where T : Object + { + public T mTarget; + + public override bool IsValid(Localize cmp) + { + if (mTarget!=null) + { + var mTargetCmp = mTarget as Component; + if (mTargetCmp != null && mTargetCmp.gameObject != cmp.gameObject) + mTarget = null; + } + if (mTarget==null) + mTarget = cmp.GetComponent(); + return mTarget!=null; + } + } +} + diff --git a/popcorn/Assets/I2/Localization/Scripts/Targets/ILocalizeTarget.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Targets/ILocalizeTarget.cs.meta new file mode 100644 index 00000000..4cd9e46c --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Targets/ILocalizeTarget.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: bc110e805ac87134bb23eb4f9d6989e8 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Targets/ILocalizeTargetDesc.cs b/popcorn/Assets/I2/Localization/Scripts/Targets/ILocalizeTargetDesc.cs new file mode 100644 index 00000000..d2c34e2f --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Targets/ILocalizeTargetDesc.cs @@ -0,0 +1,41 @@ +using System; +using UnityEngine; +using Object = UnityEngine.Object; + +namespace I2.Loc +{ + public abstract class ILocalizeTargetDescriptor + { + public string Name; + public int Priority; + public abstract bool CanLocalize(Localize cmp); + public abstract ILocalizeTarget CreateTarget(Localize cmp); + public abstract Type GetTargetType(); + } + + public abstract class LocalizeTargetDesc : ILocalizeTargetDescriptor where T : ILocalizeTarget + { + public override ILocalizeTarget CreateTarget(Localize cmp) { return ScriptableObject.CreateInstance(); } + public override Type GetTargetType() { return typeof(T); } + } + + + + public class LocalizeTargetDesc_Type : LocalizeTargetDesc where T: Object + where G: LocalizeTarget + { + public override bool CanLocalize(Localize cmp) { return cmp.GetComponent() != null; } + public override ILocalizeTarget CreateTarget(Localize cmp) + { + var target = cmp.GetComponent(); + if (target == null) + return null; + + var locTarget = ScriptableObject.CreateInstance(); + locTarget.mTarget = target; + return locTarget; + } + } + +} + diff --git a/popcorn/Assets/I2/Localization/Scripts/Targets/ILocalizeTargetDesc.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Targets/ILocalizeTargetDesc.cs.meta new file mode 100644 index 00000000..651f1283 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Targets/ILocalizeTargetDesc.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 65c3e6b4b14772c4e9fb35235497819b +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_2DToolKit_Label.cs b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_2DToolKit_Label.cs new file mode 100644 index 00000000..572e4b51 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_2DToolKit_Label.cs @@ -0,0 +1,66 @@ +#if TK2D + +using UnityEngine; + +namespace I2.Loc +{ + #if UNITY_EDITOR + [UnityEditor.InitializeOnLoad] + #endif + + public class LocalizeTarget_2DToolKit_Label : LocalizeTarget + { + static LocalizeTarget_2DToolKit_Label() { AutoRegister(); } + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] static void AutoRegister() { LocalizationManager.RegisterTarget(new LocalizeTargetDesc_Type() { Name = "2DToolKit Label", Priority = 100 }); } + + TextAnchor mOriginalAlignment = TextAnchor.MiddleCenter; + bool mInitializeAlignment = true; + + public override eTermType GetPrimaryTermType(Localize cmp) { return eTermType.Text; } + public override eTermType GetSecondaryTermType(Localize cmp) { return eTermType.TK2dFont; } + + public override bool CanUseSecondaryTerm() { return true; } + public override bool AllowMainTermToBeRTL() { return true; } + public override bool AllowSecondTermToBeRTL() { return false; } + + public override void GetFinalTerms(Localize cmp, string Main, string Secondary, out string primaryTerm, out string secondaryTerm) + { + primaryTerm = mTarget ? mTarget.text : null; + secondaryTerm = (mTarget.font != null ? mTarget.font.name : string.Empty); + } + + + public override void DoLocalize(Localize cmp, string mainTranslation, string secondaryTranslation) + { + //--[ Localize Font Object ]---------- + tk2dFont newFont = cmp.GetSecondaryTranslatedObj(ref mainTranslation, ref secondaryTranslation); + if (newFont != null && mTarget.font != newFont) + { + mTarget.font = newFont.data; + } + + if (mInitializeAlignment) + { + mInitializeAlignment = false; + mOriginalAlignment = mTarget.anchor; + } + + if (mainTranslation != null && mTarget.text != mainTranslation) + { + if (Localize.CurrentLocalizeComponent.CorrectAlignmentForRTL) + { + int align = (int)mTarget.anchor; + + if (align % 3 == 0) + mTarget.anchor = LocalizationManager.IsRight2Left ? mTarget.anchor + 2 : mOriginalAlignment; + else + if (align % 3 == 2) + mTarget.anchor = LocalizationManager.IsRight2Left ? mTarget.anchor - 2 : mOriginalAlignment; + } + mTarget.text = mainTranslation; + } + } + } +} +#endif + diff --git a/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_2DToolKit_Label.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_2DToolKit_Label.cs.meta new file mode 100644 index 00000000..c8989caa --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_2DToolKit_Label.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: f7658f1522689aa4b93bc276acf537b1 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_2DToolKit_Sprite.cs b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_2DToolKit_Sprite.cs new file mode 100644 index 00000000..ec69300c --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_2DToolKit_Sprite.cs @@ -0,0 +1,53 @@ +#if TK2D + +using UnityEngine; + +namespace I2.Loc +{ + #if UNITY_EDITOR + [UnityEditor.InitializeOnLoad] + #endif + + public class LocalizeTarget_2DToolKit_Sprite : LocalizeTarget + { + static LocalizeTarget_2DToolKit_Sprite() { AutoRegister(); } + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] static void AutoRegister() { LocalizationManager.RegisterTarget(new LocalizeTargetDesc_Type() { Name = "2DToolKit Sprite", Priority = 100 }); } + + + public override eTermType GetPrimaryTermType(Localize cmp) { return eTermType.TK2dCollection; } + public override eTermType GetSecondaryTermType(Localize cmp) { return eTermType.TK2dCollection; } + + public override bool CanUseSecondaryTerm() { return true; } + public override bool AllowMainTermToBeRTL() { return false; } + public override bool AllowSecondTermToBeRTL() { return false; } + + public override void GetFinalTerms(Localize cmp, string Main, string Secondary, out string primaryTerm, out string secondaryTerm) + { + primaryTerm = (mTarget.CurrentSprite != null ? mTarget.CurrentSprite.name : string.Empty); + secondaryTerm = (mTarget.Collection != null ? mTarget.Collection.spriteCollectionName : null); + } + + + public override void DoLocalize(Localize cmp, string mainTranslation, string secondaryTranslation) + { + if (string.IsNullOrEmpty(mainTranslation)) + return; + + //--[ Localize Atlas ]---------- + tk2dSpriteCollection newCollection = cmp.GetSecondaryTranslatedObj(ref mainTranslation, ref secondaryTranslation); + + if (newCollection != null) + { + if (mTarget.CurrentSprite.name != mainTranslation || mTarget.Collection.name != secondaryTranslation) + mTarget.SetSprite(newCollection.spriteCollection, mainTranslation); + } + else + { + if (mTarget.CurrentSprite.name != mainTranslation) + mTarget.SetSprite(mainTranslation); + } + } + } +} +#endif + diff --git a/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_2DToolKit_Sprite.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_2DToolKit_Sprite.cs.meta new file mode 100644 index 00000000..f4ca51fc --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_2DToolKit_Sprite.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 53d5ed87a66514e439dddd19568adedd +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_NGUI_Label.cs b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_NGUI_Label.cs new file mode 100644 index 00000000..09447490 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_NGUI_Label.cs @@ -0,0 +1,94 @@ +#if NGUI + +using UnityEditor; +using UnityEngine; + +namespace I2.Loc +{ + #if UNITY_EDITOR + [InitializeOnLoad] + #endif + + public class LocalizeTarget_NGUI_Label : LocalizeTarget + { + static LocalizeTarget_NGUI_Label() { AutoRegister(); } + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] static void AutoRegister() { LocalizationManager.RegisterTarget(new LocalizeTargetDesc_Type { Name = "NGUI Label", Priority = 100 }); } + + NGUIText.Alignment mAlignment_RTL = NGUIText.Alignment.Right; + NGUIText.Alignment mAlignment_LTR = NGUIText.Alignment.Left; + bool mAlignmentWasRTL; + bool mInitializeAlignment = true; + + public override eTermType GetPrimaryTermType(Localize cmp) { return eTermType.Text; } + public override eTermType GetSecondaryTermType(Localize cmp) { return eTermType.UIFont; } + public override bool CanUseSecondaryTerm() { return true; } + public override bool AllowMainTermToBeRTL() { return true; } + public override bool AllowSecondTermToBeRTL() { return false; } + + public override void GetFinalTerms(Localize cmp, string Main, string Secondary, out string primaryTerm, out string secondaryTerm) + { + primaryTerm = mTarget ? mTarget.text : null; + secondaryTerm = mTarget.ambigiousFont != null ? mTarget.ambigiousFont.name : string.Empty; + } + + + public override void DoLocalize(Localize cmp, string mainTranslation, string secondaryTranslation) + { + //--[ Localize Font Object ]---------- + Font newFont = cmp.GetSecondaryTranslatedObj(ref mainTranslation, ref secondaryTranslation); + if (newFont != null) + { + if (newFont != mTarget.ambigiousFont) + mTarget.ambigiousFont = newFont; + } + if (newFont==null) + { + UIFont newUIFont = cmp.GetSecondaryTranslatedObj(ref mainTranslation, ref secondaryTranslation); + if (newUIFont != null && mTarget.ambigiousFont != newUIFont) + mTarget.ambigiousFont = newUIFont; + } + if (newFont == null) + { + NGUIFont newUIFont = cmp.GetSecondaryTranslatedObj(ref mainTranslation, ref secondaryTranslation); + if (newUIFont != null && mTarget.ambigiousFont != newUIFont) + mTarget.ambigiousFont = newUIFont; + } + + + if (mInitializeAlignment) + { + mInitializeAlignment = false; + mAlignment_LTR = mAlignment_RTL = mTarget.alignment; + + if (LocalizationManager.IsRight2Left && mAlignment_RTL == NGUIText.Alignment.Right) + mAlignment_LTR = NGUIText.Alignment.Left; + if (!LocalizationManager.IsRight2Left && mAlignment_LTR == NGUIText.Alignment.Left) + mAlignment_RTL = NGUIText.Alignment.Right; + } + + UIInput input = NGUITools.FindInParents(mTarget.gameObject); + if (input != null && input.label == mTarget) + { + if (mainTranslation != null && input.defaultText != mainTranslation) + { + if (cmp.CorrectAlignmentForRTL && (input.label.alignment == NGUIText.Alignment.Left || input.label.alignment == NGUIText.Alignment.Right)) + input.label.alignment = LocalizationManager.IsRight2Left ? mAlignment_RTL : mAlignment_LTR; + + input.defaultText = mainTranslation; + } + } + else + { + if (mainTranslation != null && mTarget.text != mainTranslation) + { + if (cmp.CorrectAlignmentForRTL && (mTarget.alignment == NGUIText.Alignment.Left || mTarget.alignment == NGUIText.Alignment.Right)) + mTarget.alignment = LocalizationManager.IsRight2Left ? mAlignment_RTL : mAlignment_LTR; + + mTarget.text = mainTranslation; + } + } + } + } +} +#endif + diff --git a/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_NGUI_Label.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_NGUI_Label.cs.meta new file mode 100644 index 00000000..b1f87898 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_NGUI_Label.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 3bd97513069766847851e1041f64e378 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_NGUI_Sprite.cs b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_NGUI_Sprite.cs new file mode 100644 index 00000000..27ffedba --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_NGUI_Sprite.cs @@ -0,0 +1,65 @@ +#if NGUI + +using UnityEngine; + +namespace I2.Loc +{ + #if UNITY_EDITOR + [UnityEditor.InitializeOnLoad] + #endif + + public class LocalizeTarget_NGUI_Sprite : LocalizeTarget + { + static LocalizeTarget_NGUI_Sprite() { AutoRegister(); } + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] static void AutoRegister() { LocalizationManager.RegisterTarget(new LocalizeTargetDesc_Type() { Name = "NGUI UISprite", Priority = 100 }); } + + public override eTermType GetPrimaryTermType(Localize cmp) { return eTermType.Sprite; } + public override eTermType GetSecondaryTermType(Localize cmp) { return eTermType.UIAtlas; } + public override bool CanUseSecondaryTerm () { return true; } + public override bool AllowMainTermToBeRTL () { return false; } + public override bool AllowSecondTermToBeRTL () { return false; } + + public override void GetFinalTerms ( Localize cmp, string Main, string Secondary, out string primaryTerm, out string secondaryTerm ) + { + primaryTerm = mTarget ? mTarget.spriteName : null; + secondaryTerm = (mTarget.atlas as UIAtlas ? (mTarget.atlas as UIAtlas).name : string.Empty); + } + + + public override void DoLocalize ( Localize cmp, string mainTranslation, string secondaryTranslation ) + { + if (mTarget.spriteName == mainTranslation) + return; + + //--[ Localize Atlas ]---------- + UIAtlas newAtlas = cmp.GetSecondaryTranslatedObj(ref mainTranslation, ref secondaryTranslation); + bool bChanged = false; + if (newAtlas != null && ((mTarget.atlas as UIAtlas) != newAtlas)) + { + mTarget.atlas = newAtlas; + bChanged = true; + } + + if (newAtlas==null) + { + NGUIAtlas newNGUIAtlas = cmp.GetSecondaryTranslatedObj(ref mainTranslation, ref secondaryTranslation); + if (newAtlas != null && ((mTarget.atlas as NGUIAtlas) != newNGUIAtlas)) + { + mTarget.atlas = newAtlas; + bChanged = true; + } + + } + + if (mTarget.spriteName != mainTranslation && mTarget.atlas.GetSprite(mainTranslation) != null) + { + mTarget.spriteName = mainTranslation; + bChanged = true; + } + if (bChanged) + mTarget.MakePixelPerfect(); + } + } +} +#endif + diff --git a/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_NGUI_Sprite.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_NGUI_Sprite.cs.meta new file mode 100644 index 00000000..ad158713 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_NGUI_Sprite.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 545ef381b929ce44cad2bf111b096f2c +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_NGUI_Texture.cs b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_NGUI_Texture.cs new file mode 100644 index 00000000..d71b060d --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_NGUI_Texture.cs @@ -0,0 +1,41 @@ +#if NGUI + +using UnityEditor; +using UnityEngine; + +namespace I2.Loc +{ + #if UNITY_EDITOR + [InitializeOnLoad] + #endif + + public class LocalizeTarget_NGUI_Texture : LocalizeTarget + { + static LocalizeTarget_NGUI_Texture() { AutoRegister(); } + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] static void AutoRegister() { LocalizationManager.RegisterTarget(new LocalizeTargetDesc_Type { Name = "NGUI UITexture", Priority = 100 }); } + + public override eTermType GetPrimaryTermType(Localize cmp) { return eTermType.Texture; } + public override eTermType GetSecondaryTermType(Localize cmp) { return eTermType.Text; } + public override bool CanUseSecondaryTerm() { return false; } + public override bool AllowMainTermToBeRTL() { return false; } + public override bool AllowSecondTermToBeRTL() { return false; } + + public override void GetFinalTerms(Localize cmp, string Main, string Secondary, out string primaryTerm, out string secondaryTerm) + { + primaryTerm = mTarget!=null && mTarget.mainTexture!=null ? mTarget.mainTexture.name : null; + secondaryTerm = null; + } + + public override void DoLocalize(Localize cmp, string mainTranslation, string secondaryTranslation) + { + Texture Old = mTarget.mainTexture; + if (Old == null || Old.name != mainTranslation) + { + mTarget.mainTexture = cmp.FindTranslatedObject(mainTranslation); + mTarget.MakePixelPerfect(); + } + } + } +} +#endif + diff --git a/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_NGUI_Texture.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_NGUI_Texture.cs.meta new file mode 100644 index 00000000..2e8fd038 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_NGUI_Texture.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 8488ebda4a4bc5343b6fcd2158af0360 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_SVGImporter_Image.cs b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_SVGImporter_Image.cs new file mode 100644 index 00000000..0e63d90a --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_SVGImporter_Image.cs @@ -0,0 +1,42 @@ +#if SVG +using UnityEngine; + +namespace I2.Loc +{ + #if UNITY_EDITOR + [UnityEditor.InitializeOnLoad] + #endif + + public class LocalizeTarget_SVGImporter_Image : LocalizeTarget + { + static LocalizeTarget_SVGImporter_Image() { AutoRegister(); } + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] static void AutoRegister() { LocalizationManager.RegisterTarget(new LocalizeTargetDesc_Type() { Name = "SVG Image", Priority = 100 }); } + + public override eTermType GetPrimaryTermType(Localize cmp) { return eTermType.SVGAsset; } + public override eTermType GetSecondaryTermType(Localize cmp) { return eTermType.Material; } + public override bool CanUseSecondaryTerm() { return true; } + public override bool AllowMainTermToBeRTL() { return false; } + public override bool AllowSecondTermToBeRTL() { return false; } + + public override void GetFinalTerms(Localize cmp, string Main, string Secondary, out string primaryTerm, out string secondaryTerm) + { + primaryTerm = (mTarget.vectorGraphics != null ? mTarget.vectorGraphics.name : string.Empty); + secondaryTerm = (mTarget.material != null ? mTarget.material.name : null); + } + + + public override void DoLocalize(Localize cmp, string mainTranslation, string secondaryTranslation) + { + var OldVectorG = mTarget.vectorGraphics; + if (OldVectorG == null || OldVectorG.name != mainTranslation) + mTarget.vectorGraphics = cmp.FindTranslatedObject(mainTranslation); + + var OldMaterial = mTarget.material; + if (OldMaterial == null || OldMaterial.name != secondaryTranslation) + mTarget.material = cmp.FindTranslatedObject(secondaryTranslation); + + mTarget.SetAllDirty(); + } + } +} +#endif diff --git a/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_SVGImporter_Image.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_SVGImporter_Image.cs.meta new file mode 100644 index 00000000..0ad6478a --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_SVGImporter_Image.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: bbf97c698c733ea4bbf7bc2996984484 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_SVGImporter_Renderer.cs b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_SVGImporter_Renderer.cs new file mode 100644 index 00000000..3e9d2db8 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_SVGImporter_Renderer.cs @@ -0,0 +1,42 @@ +#if SVG +using UnityEngine; + +namespace I2.Loc +{ + #if UNITY_EDITOR + [UnityEditor.InitializeOnLoad] + #endif + + public class LocalizeTarget_SVGImporter_Renderer : LocalizeTarget + { + static LocalizeTarget_SVGImporter_Renderer() { AutoRegister(); } + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] static void AutoRegister() { LocalizationManager.RegisterTarget(new LocalizeTargetDesc_Type() { Name = "SVG Renderer", Priority = 100 }); } + + public override eTermType GetPrimaryTermType(Localize cmp) { return eTermType.SVGAsset; } + public override eTermType GetSecondaryTermType(Localize cmp) { return eTermType.Material; } + public override bool CanUseSecondaryTerm() { return true; } + public override bool AllowMainTermToBeRTL() { return false; } + public override bool AllowSecondTermToBeRTL() { return false; } + + public override void GetFinalTerms(Localize cmp, string Main, string Secondary, out string primaryTerm, out string secondaryTerm) + { + primaryTerm = (mTarget.vectorGraphics != null ? mTarget.vectorGraphics.name : string.Empty); + secondaryTerm = (mTarget.opaqueMaterial != null ? mTarget.opaqueMaterial.name : string.Empty); + } + + + public override void DoLocalize(Localize cmp, string mainTranslation, string secondaryTranslation) + { + var OldVectorG = mTarget.vectorGraphics; + if (OldVectorG == null || OldVectorG.name != mainTranslation) + mTarget.vectorGraphics = cmp.FindTranslatedObject(mainTranslation); + + var OldMaterial = mTarget.opaqueMaterial; + if (OldMaterial == null || OldMaterial.name != secondaryTranslation) + mTarget.opaqueMaterial = cmp.FindTranslatedObject(secondaryTranslation); + + mTarget.SetAllDirty(); + } + } +} +#endif diff --git a/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_SVGImporter_Renderer.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_SVGImporter_Renderer.cs.meta new file mode 100644 index 00000000..0ac2b0df --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_SVGImporter_Renderer.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: c78c473b19acc3844ba488904981d75c +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_TextMeshPro_Label.cs b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_TextMeshPro_Label.cs new file mode 100644 index 00000000..8cd83383 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_TextMeshPro_Label.cs @@ -0,0 +1,191 @@ +using System; +using TMPro; +using UnityEditor; +using UnityEngine; + +#if TextMeshPro +namespace I2.Loc +{ + #if UNITY_EDITOR + [InitializeOnLoad] + #endif + + public class LocalizeTarget_TextMeshPro_Label : LocalizeTarget + { + static LocalizeTarget_TextMeshPro_Label() { AutoRegister(); } + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] static void AutoRegister() { LocalizationManager.RegisterTarget(new LocalizeTargetDesc_Type { Name = "TextMeshPro Label", Priority = 100 }); } + + TextAlignmentOptions mAlignment_RTL = TextAlignmentOptions.Right; + TextAlignmentOptions mAlignment_LTR = TextAlignmentOptions.Left; + bool mAlignmentWasRTL; + bool mInitializeAlignment = true; + + public override eTermType GetPrimaryTermType(Localize cmp) { return eTermType.Text; } + public override eTermType GetSecondaryTermType(Localize cmp) { return eTermType.Font; } + public override bool CanUseSecondaryTerm() { return true; } + public override bool AllowMainTermToBeRTL() { return true; } + public override bool AllowSecondTermToBeRTL() { return false; } + + public override void GetFinalTerms ( Localize cmp, string Main, string Secondary, out string primaryTerm, out string secondaryTerm) + { + primaryTerm = mTarget ? mTarget.text : null; + secondaryTerm = mTarget.font != null ? mTarget.font.name : string.Empty; + } + + public override void DoLocalize(Localize cmp, string mainTranslation, string secondaryTranslation) + { + //--[ Localize Font Object ]---------- + { + TMP_FontAsset newFont = cmp.GetSecondaryTranslatedObj(ref mainTranslation, ref secondaryTranslation); + + if (newFont != null) + { + SetFont(mTarget, newFont); + } + else + { + //--[ Localize Font Material ]---------- + Material newMat = cmp.GetSecondaryTranslatedObj(ref mainTranslation, ref secondaryTranslation); + if (newMat != null && mTarget.fontMaterial != newMat) + { + if (!newMat.name.StartsWith(mTarget.font.name, StringComparison.Ordinal)) + { + newFont = GetTMPFontFromMaterial(cmp, secondaryTranslation.EndsWith(newMat.name, StringComparison.Ordinal) ? secondaryTranslation : newMat.name); + if (newFont != null) + SetFont(mTarget, newFont); + } + SetMaterial(mTarget, newMat); + } + + } + } + if (mInitializeAlignment) + { + mInitializeAlignment = false; + mAlignmentWasRTL = LocalizationManager.IsRight2Left; + InitAlignment_TMPro(mAlignmentWasRTL, mTarget.alignment, out mAlignment_LTR, out mAlignment_RTL); + } + else + { + TextAlignmentOptions alignRTL, alignLTR; + InitAlignment_TMPro(mAlignmentWasRTL, mTarget.alignment, out alignLTR, out alignRTL); + + if (mAlignmentWasRTL && mAlignment_RTL != alignRTL || + !mAlignmentWasRTL && mAlignment_LTR != alignLTR) + { + mAlignment_LTR = alignLTR; + mAlignment_RTL = alignRTL; + } + mAlignmentWasRTL = LocalizationManager.IsRight2Left; + } + + if (mainTranslation != null && mTarget.text != mainTranslation) + { + if (cmp.CorrectAlignmentForRTL) + { + mTarget.alignment = LocalizationManager.IsRight2Left ? mAlignment_RTL : mAlignment_LTR; + } + + mTarget.isRightToLeftText = LocalizationManager.IsRight2Left; + if (LocalizationManager.IsRight2Left) mainTranslation = I2Utils.ReverseText(mainTranslation); + + mTarget.text = mainTranslation; + } + } + + #region Tools + internal static TMP_FontAsset GetTMPFontFromMaterial(Localize cmp, string matName) + { + string splitChars = " .\\/-[]()"; + for (int i = matName.Length - 1; i > 0;) + { + // Find first valid character + while (i > 0 && splitChars.IndexOf(matName[i]) >= 0) + i--; + + if (i <= 0) break; + + var fontName = matName.Substring(0, i + 1); + var obj = cmp.GetObject(fontName); + if (obj != null) + return obj; + + // skip this word + while (i > 0 && splitChars.IndexOf(matName[i]) < 0) + i--; + } + + return null; + } + + internal static void InitAlignment_TMPro(bool isRTL, TextAlignmentOptions alignment, out TextAlignmentOptions alignLTR, out TextAlignmentOptions alignRTL) + { + alignLTR = alignRTL = alignment; + + if (isRTL) + { + switch (alignment) + { + case TextAlignmentOptions.TopRight: alignLTR = TextAlignmentOptions.TopLeft; break; + case TextAlignmentOptions.Right: alignLTR = TextAlignmentOptions.Left; break; + case TextAlignmentOptions.BottomRight: alignLTR = TextAlignmentOptions.BottomLeft; break; + case TextAlignmentOptions.BaselineRight: alignLTR = TextAlignmentOptions.BaselineLeft; break; + case TextAlignmentOptions.MidlineRight: alignLTR = TextAlignmentOptions.MidlineLeft; break; + case TextAlignmentOptions.CaplineRight: alignLTR = TextAlignmentOptions.CaplineLeft; break; + + case TextAlignmentOptions.TopLeft: alignLTR = TextAlignmentOptions.TopRight; break; + case TextAlignmentOptions.Left: alignLTR = TextAlignmentOptions.Right; break; + case TextAlignmentOptions.BottomLeft: alignLTR = TextAlignmentOptions.BottomRight; break; + case TextAlignmentOptions.BaselineLeft: alignLTR = TextAlignmentOptions.BaselineRight; break; + case TextAlignmentOptions.MidlineLeft: alignLTR = TextAlignmentOptions.MidlineRight; break; + case TextAlignmentOptions.CaplineLeft: alignLTR = TextAlignmentOptions.CaplineRight; break; + + } + } + else + { + switch (alignment) + { + case TextAlignmentOptions.TopRight: alignRTL = TextAlignmentOptions.TopLeft; break; + case TextAlignmentOptions.Right: alignRTL = TextAlignmentOptions.Left; break; + case TextAlignmentOptions.BottomRight: alignRTL = TextAlignmentOptions.BottomLeft; break; + case TextAlignmentOptions.BaselineRight: alignRTL = TextAlignmentOptions.BaselineLeft; break; + case TextAlignmentOptions.MidlineRight: alignRTL = TextAlignmentOptions.MidlineLeft; break; + case TextAlignmentOptions.CaplineRight: alignRTL = TextAlignmentOptions.CaplineLeft; break; + + case TextAlignmentOptions.TopLeft: alignRTL = TextAlignmentOptions.TopRight; break; + case TextAlignmentOptions.Left: alignRTL = TextAlignmentOptions.Right; break; + case TextAlignmentOptions.BottomLeft: alignRTL = TextAlignmentOptions.BottomRight; break; + case TextAlignmentOptions.BaselineLeft: alignRTL = TextAlignmentOptions.BaselineRight; break; + case TextAlignmentOptions.MidlineLeft: alignRTL = TextAlignmentOptions.MidlineRight; break; + case TextAlignmentOptions.CaplineLeft: alignRTL = TextAlignmentOptions.CaplineRight; break; + } + } + } + + internal static void SetFont(TMP_Text label, TMP_FontAsset newFont) + { + if (label.font != newFont) + { + label.font = newFont; + } + if (label.linkedTextComponent != null) + { + SetFont(label.linkedTextComponent, newFont); + } + } + internal static void SetMaterial(TMP_Text label, Material newMat) + { + if (label.fontSharedMaterial != newMat) + { + label.fontSharedMaterial = newMat; + } + if (label.linkedTextComponent != null) + { + SetMaterial(label.linkedTextComponent, newMat); + } + } + #endregion + } +} +#endif \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_TextMeshPro_Label.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_TextMeshPro_Label.cs.meta new file mode 100644 index 00000000..f9e954b5 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_TextMeshPro_Label.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: d96a6c3ea7d28744aacc367115a71af5 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_TextMeshPro_UGUI.cs b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_TextMeshPro_UGUI.cs new file mode 100644 index 00000000..7ea9df68 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_TextMeshPro_UGUI.cs @@ -0,0 +1,98 @@ +using System; +using TMPro; +using UnityEditor; +using UnityEngine; + +#if TextMeshPro +namespace I2.Loc +{ + #if UNITY_EDITOR + [InitializeOnLoad] + #endif + + public class LocalizeTarget_TextMeshPro_UGUI : LocalizeTarget + { + static LocalizeTarget_TextMeshPro_UGUI() { AutoRegister(); } + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] static void AutoRegister() { LocalizationManager.RegisterTarget(new LocalizeTargetDesc_Type { Name = "TextMeshPro UGUI", Priority = 100 }); } + + public TextAlignmentOptions mAlignment_RTL = TextAlignmentOptions.Right; + public TextAlignmentOptions mAlignment_LTR = TextAlignmentOptions.Left; + public bool mAlignmentWasRTL; + public bool mInitializeAlignment = true; + + public override eTermType GetPrimaryTermType(Localize cmp) { return eTermType.Text; } + public override eTermType GetSecondaryTermType(Localize cmp) { return eTermType.TextMeshPFont; } + public override bool CanUseSecondaryTerm() { return true; } + public override bool AllowMainTermToBeRTL() { return true; } + public override bool AllowSecondTermToBeRTL() { return false; } + + public override void GetFinalTerms ( Localize cmp, string Main, string Secondary, out string primaryTerm, out string secondaryTerm) + { + primaryTerm = mTarget ? mTarget.text : null; + secondaryTerm = mTarget.font != null ? mTarget.font.name : string.Empty; + } + + + + public override void DoLocalize(Localize cmp, string mainTranslation, string secondaryTranslation) + { + { + //--[ Localize Font Object ]---------- + TMP_FontAsset newFont = cmp.GetSecondaryTranslatedObj(ref mainTranslation, ref secondaryTranslation); + + if (newFont != null) + { + LocalizeTarget_TextMeshPro_Label.SetFont(mTarget, newFont); + } + else + { + //--[ Localize Font Material ]---------- + Material newMat = cmp.GetSecondaryTranslatedObj(ref mainTranslation, ref secondaryTranslation); + if (newMat != null && mTarget.fontMaterial != newMat) + { + if (!newMat.name.StartsWith(mTarget.font.name, StringComparison.Ordinal)) + { + newFont = LocalizeTarget_TextMeshPro_Label.GetTMPFontFromMaterial(cmp, secondaryTranslation.EndsWith(newMat.name, StringComparison.Ordinal) ? secondaryTranslation : newMat.name); + if (newFont != null) + LocalizeTarget_TextMeshPro_Label.SetFont(mTarget, newFont); + } + LocalizeTarget_TextMeshPro_Label.SetMaterial( mTarget, newMat ); + } + } + } + + if (mInitializeAlignment) + { + mInitializeAlignment = false; + mAlignmentWasRTL = LocalizationManager.IsRight2Left; + LocalizeTarget_TextMeshPro_Label.InitAlignment_TMPro(mAlignmentWasRTL, mTarget.alignment, out mAlignment_LTR, out mAlignment_RTL); + } + else + { + TextAlignmentOptions alignRTL, alignLTR; + LocalizeTarget_TextMeshPro_Label.InitAlignment_TMPro(mAlignmentWasRTL, mTarget.alignment, out alignLTR, out alignRTL); + + if (mAlignmentWasRTL && mAlignment_RTL != alignRTL || + !mAlignmentWasRTL && mAlignment_LTR != alignLTR) + { + mAlignment_LTR = alignLTR; + mAlignment_RTL = alignRTL; + } + mAlignmentWasRTL = LocalizationManager.IsRight2Left; + } + + if (mainTranslation != null && mTarget.text != mainTranslation) + { + if (cmp.CorrectAlignmentForRTL) + { + mTarget.alignment = LocalizationManager.IsRight2Left ? mAlignment_RTL : mAlignment_LTR; + } + mTarget.isRightToLeftText = LocalizationManager.IsRight2Left; + if (LocalizationManager.IsRight2Left) mainTranslation = I2Utils.ReverseText(mainTranslation); + + mTarget.text = mainTranslation; + } + } + } +} +#endif \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_TextMeshPro_UGUI.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_TextMeshPro_UGUI.cs.meta new file mode 100644 index 00000000..acb45b3f --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_TextMeshPro_UGUI.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 481ab606793a67349be805c13febeba0 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityStandard_AudioSource.cs b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityStandard_AudioSource.cs new file mode 100644 index 00000000..12e537f7 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityStandard_AudioSource.cs @@ -0,0 +1,45 @@ +using UnityEditor; +using UnityEngine; + +namespace I2.Loc +{ + #if UNITY_EDITOR + [InitializeOnLoad] + #endif + + public class LocalizeTarget_UnityStandard_AudioSource : LocalizeTarget + { + static LocalizeTarget_UnityStandard_AudioSource() { AutoRegister(); } + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] static void AutoRegister() { LocalizationManager.RegisterTarget(new LocalizeTargetDesc_Type { Name = "AudioSource", Priority = 100 }); } + + public override eTermType GetPrimaryTermType(Localize cmp) { return eTermType.AudioClip; } + public override eTermType GetSecondaryTermType(Localize cmp) { return eTermType.Text; } + public override bool CanUseSecondaryTerm() { return false; } + public override bool AllowMainTermToBeRTL() { return false; } + public override bool AllowSecondTermToBeRTL() { return false; } + + public override void GetFinalTerms ( Localize cmp, string Main, string Secondary, out string primaryTerm, out string secondaryTerm) + { + AudioClip clip = mTarget.clip; + primaryTerm = clip ? clip.name : string.Empty; + secondaryTerm = null; + } + + + public override void DoLocalize(Localize cmp, string mainTranslation, string secondaryTranslation) + { + bool bIsPlaying = (mTarget.isPlaying || mTarget.loop) && Application.isPlaying; + AudioClip OldClip = mTarget.clip; + AudioClip NewClip = cmp.FindTranslatedObject(mainTranslation); + if (OldClip != NewClip) + mTarget.clip = NewClip; + + if (bIsPlaying && mTarget.clip) + mTarget.Play(); + + // If the old clip is not in the translatedObjects, then unload it as it most likely was loaded from Resources + //if (!HasTranslatedObject(OldClip)) + // Resources.UnloadAsset(OldClip); + } + } +} diff --git a/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityStandard_AudioSource.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityStandard_AudioSource.cs.meta new file mode 100644 index 00000000..6f903d82 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityStandard_AudioSource.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 007f2c3f7b0e4a048ae89d65dcd38729 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityStandard_Child.cs b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityStandard_Child.cs new file mode 100644 index 00000000..e3867f4b --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityStandard_Child.cs @@ -0,0 +1,51 @@ +using UnityEditor; +using UnityEngine; + +namespace I2.Loc +{ + public class LocalizeTargetDesc_Child : LocalizeTargetDesc + { + public override bool CanLocalize(Localize cmp) { return cmp.transform.childCount > 1; } + } + + #if UNITY_EDITOR + [InitializeOnLoad] + #endif + + public class LocalizeTarget_UnityStandard_Child : LocalizeTarget + { + static LocalizeTarget_UnityStandard_Child() { AutoRegister(); } + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] static void AutoRegister() { LocalizationManager.RegisterTarget(new LocalizeTargetDesc_Child { Name = "Child", Priority = 200 }); } + + public override bool IsValid(Localize cmp) { return cmp.transform.childCount>1; } + public override eTermType GetPrimaryTermType(Localize cmp) { return eTermType.GameObject; } + public override eTermType GetSecondaryTermType(Localize cmp) { return eTermType.Text; } + public override bool CanUseSecondaryTerm() { return false; } + public override bool AllowMainTermToBeRTL() { return false; } + public override bool AllowSecondTermToBeRTL() { return false; } + + public override void GetFinalTerms(Localize cmp, string Main, string Secondary, out string primaryTerm, out string secondaryTerm) + { + primaryTerm = cmp.name; + secondaryTerm = null; + } + + public override void DoLocalize(Localize cmp, string mainTranslation, string secondaryTranslation) + { + if (string.IsNullOrEmpty(mainTranslation)) + return; + Transform locTr = cmp.transform; + + var objName = mainTranslation; + var idx = mainTranslation.LastIndexOfAny(LanguageSourceData.CategorySeparators); + if (idx >= 0) + objName = objName.Substring(idx + 1); + + for (int i = 0; i < locTr.childCount; ++i) + { + var child = locTr.GetChild(i); + child.gameObject.SetActive(child.name == objName); + } + } + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityStandard_Child.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityStandard_Child.cs.meta new file mode 100644 index 00000000..2ef5fae1 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityStandard_Child.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 61a67a81d07fe85429a253a86ebac910 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityStandard_MeshRenderer.cs b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityStandard_MeshRenderer.cs new file mode 100644 index 00000000..23ca070c --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityStandard_MeshRenderer.cs @@ -0,0 +1,80 @@ +using UnityEditor; +using UnityEngine; + +#pragma warning disable 618 + +namespace I2.Loc +{ + #if UNITY_EDITOR + [InitializeOnLoad] + #endif + + public class LocalizeTarget_UnityStandard_MeshRenderer : LocalizeTarget + { + static LocalizeTarget_UnityStandard_MeshRenderer() { AutoRegister(); } + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] static void AutoRegister() { LocalizationManager.RegisterTarget(new LocalizeTargetDesc_Type { Name = "MeshRenderer", Priority = 800 }); } + + public override eTermType GetPrimaryTermType(Localize cmp) { return eTermType.Mesh; } + public override eTermType GetSecondaryTermType(Localize cmp) { return eTermType.Material; } + public override bool CanUseSecondaryTerm() { return true; } + public override bool AllowMainTermToBeRTL() { return false; } + public override bool AllowSecondTermToBeRTL() { return false; } + + public override void GetFinalTerms ( Localize cmp, string Main, string Secondary, out string primaryTerm, out string secondaryTerm) + { + if (mTarget==null) + { + primaryTerm = secondaryTerm = null; + } + else + { + MeshFilter filter = mTarget.GetComponent(); + if (filter==null || filter.sharedMesh==null) + { + primaryTerm = null; + } + else + { + #if UNITY_EDITOR + primaryTerm = AssetDatabase.GetAssetPath(filter.sharedMesh); + I2Utils.RemoveResourcesPath(ref primaryTerm); + #else + primaryTerm = filter.sharedMesh.name; + #endif + } + } + + if (mTarget==null || mTarget.sharedMaterial==null) + { + secondaryTerm = null; + } + else + { + #if UNITY_EDITOR + secondaryTerm = AssetDatabase.GetAssetPath(mTarget.sharedMaterial); + I2Utils.RemoveResourcesPath(ref secondaryTerm); + #else + secondaryTerm = mTarget.sharedMaterial.name; + #endif + } + } + + public override void DoLocalize(Localize cmp, string mainTranslation, string secondaryTranslation) + { + //--[ Localize Material]---------- + Material newMat = cmp.GetSecondaryTranslatedObj(ref mainTranslation, ref secondaryTranslation); + if (newMat != null && mTarget.sharedMaterial != newMat) + { + mTarget.material = newMat; + } + + //--[ Localize Mesh ]---------- + Mesh newMesh = cmp.FindTranslatedObject( mainTranslation); + MeshFilter filter = mTarget.GetComponent(); + if (newMesh != null && filter.sharedMesh != newMesh) + { + filter.mesh = newMesh; + } + } + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityStandard_MeshRenderer.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityStandard_MeshRenderer.cs.meta new file mode 100644 index 00000000..79ef76f1 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityStandard_MeshRenderer.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: b4679336707a2b54caa10d99561be751 +timeCreated: 1518408606 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityStandard_Prefab.cs b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityStandard_Prefab.cs new file mode 100644 index 00000000..417d8496 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityStandard_Prefab.cs @@ -0,0 +1,96 @@ +using UnityEditor; +using UnityEngine; + +#pragma warning disable 618 + +namespace I2.Loc +{ + public class LocalizeTargetDesc_Prefab : LocalizeTargetDesc + { + public override bool CanLocalize(Localize cmp) { return true; } + } + + #if UNITY_EDITOR + [InitializeOnLoad] + #endif + + public class LocalizeTarget_UnityStandard_Prefab : LocalizeTarget + { + static LocalizeTarget_UnityStandard_Prefab() { AutoRegister(); } + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] static void AutoRegister() { LocalizationManager.RegisterTarget(new LocalizeTargetDesc_Prefab { Name = "Prefab", Priority = 250 }); } + + public override bool IsValid(Localize cmp) { return true; } + public override eTermType GetPrimaryTermType(Localize cmp) { return eTermType.GameObject; } + public override eTermType GetSecondaryTermType(Localize cmp) { return eTermType.Text; } + public override bool CanUseSecondaryTerm() { return false; } + public override bool AllowMainTermToBeRTL() { return false; } + public override bool AllowSecondTermToBeRTL() { return false; } + + public override void GetFinalTerms ( Localize cmp, string Main, string Secondary, out string primaryTerm, out string secondaryTerm) + { + primaryTerm = cmp.name; + secondaryTerm = null; + } + + public override void DoLocalize(Localize cmp, string mainTranslation, string secondaryTranslation) + { + if (string.IsNullOrEmpty(mainTranslation)) + return; + + if (mTarget && mTarget.name == mainTranslation) + return; + + Transform locTr = cmp.transform; + + var objName = mainTranslation; + var idx = mainTranslation.LastIndexOfAny(LanguageSourceData.CategorySeparators); + if (idx >= 0) + objName = objName.Substring(idx + 1); + + Transform mNew = InstantiateNewPrefab(cmp, mainTranslation); + if (mNew == null) + return; + mNew.name = objName; + + for (int i = locTr.childCount - 1; i >= 0; --i) + { + var child = locTr.GetChild(i); + if (child!=mNew) + { + #if UNITY_EDITOR + if (Application.isPlaying) + Destroy(child.gameObject); + else + DestroyImmediate(child.gameObject); + #else + Object.Destroy (child.gameObject); + #endif + } + } + } + + Transform InstantiateNewPrefab(Localize cmp, string mainTranslation) + { + GameObject NewPrefab = cmp.FindTranslatedObject(mainTranslation); + if (NewPrefab == null) + return null; + + GameObject current = mTarget; + + mTarget = Instantiate(NewPrefab); + if (mTarget == null) + return null; + + Transform locTr = cmp.transform; + Transform mNew = mTarget.transform; + mNew.SetParent(locTr); + + Transform bBase = current ? current.transform : locTr; + //mNew.localScale = bBase.localScale; + mNew.rotation = bBase.rotation; + mNew.position = bBase.position; + + return mNew; + } + } +} diff --git a/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityStandard_Prefab.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityStandard_Prefab.cs.meta new file mode 100644 index 00000000..d2de6dfc --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityStandard_Prefab.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: bd8b481d182cbcd4293524eb92ee520c +timeCreated: 1518408606 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityStandard_SpriteRenderer.cs b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityStandard_SpriteRenderer.cs new file mode 100644 index 00000000..396c7076 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityStandard_SpriteRenderer.cs @@ -0,0 +1,41 @@ +using UnityEditor; +using UnityEngine; + +#pragma warning disable 618 + +namespace I2.Loc +{ + #if UNITY_EDITOR + [InitializeOnLoad] + #endif + + public class LocalizeTarget_UnityStandard_SpriteRenderer : LocalizeTarget + { + static LocalizeTarget_UnityStandard_SpriteRenderer() { AutoRegister(); } + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] static void AutoRegister() { LocalizationManager.RegisterTarget(new LocalizeTargetDesc_Type { Name = "SpriteRenderer", Priority = 100 }); } + + public override eTermType GetPrimaryTermType(Localize cmp) { return eTermType.Sprite; } + public override eTermType GetSecondaryTermType(Localize cmp) { return eTermType.Text; } + public override bool CanUseSecondaryTerm() { return false; } + public override bool AllowMainTermToBeRTL() { return false; } + public override bool AllowSecondTermToBeRTL() { return false; } + + public override void GetFinalTerms ( Localize cmp, string Main, string Secondary, out string primaryTerm, out string secondaryTerm) + { + Sprite sprite = mTarget.sprite; + primaryTerm = sprite != null ? sprite.name : string.Empty; + secondaryTerm = null; + } + + public override void DoLocalize(Localize cmp, string mainTranslation, string secondaryTranslation) + { + Sprite Old = mTarget.sprite; + if (Old == null || Old.name != mainTranslation) + mTarget.sprite = cmp.FindTranslatedObject(mainTranslation); + + // If the old value is not in the translatedObjects, then unload it as it most likely was loaded from Resources + //if (!HasTranslatedObject(Old)) + // Resources.UnloadAsset(Old); + } + } +} diff --git a/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityStandard_SpriteRenderer.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityStandard_SpriteRenderer.cs.meta new file mode 100644 index 00000000..05bacef1 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityStandard_SpriteRenderer.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 3b29d7ab09a96634a9f704e6a1f21193 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityStandard_TextMesh.cs b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityStandard_TextMesh.cs new file mode 100644 index 00000000..be23f972 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityStandard_TextMesh.cs @@ -0,0 +1,68 @@ +using UnityEditor; +using UnityEngine; + +#pragma warning disable 618 + +namespace I2.Loc +{ + #if UNITY_EDITOR + [InitializeOnLoad] + #endif + + public class LocalizeTarget_UnityStandard_TextMesh : LocalizeTarget + { + static LocalizeTarget_UnityStandard_TextMesh() { AutoRegister(); } + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] static void AutoRegister() { LocalizationManager.RegisterTarget(new LocalizeTargetDesc_Type { Name = "TextMesh", Priority = 100 }); } + + TextAlignment mAlignment_RTL = TextAlignment.Right; + TextAlignment mAlignment_LTR = TextAlignment.Left; + bool mAlignmentWasRTL; + bool mInitializeAlignment = true; + + public override eTermType GetPrimaryTermType(Localize cmp) { return eTermType.Text; } + public override eTermType GetSecondaryTermType(Localize cmp) { return eTermType.Font; } + public override bool CanUseSecondaryTerm() { return true; } + public override bool AllowMainTermToBeRTL() { return true; } + public override bool AllowSecondTermToBeRTL() { return false; } + + public override void GetFinalTerms ( Localize cmp, string Main, string Secondary, out string primaryTerm, out string secondaryTerm) + { + primaryTerm = mTarget ? mTarget.text : null; + secondaryTerm = string.IsNullOrEmpty(Secondary) && mTarget.font != null ? mTarget.font.name : null; + } + + public override void DoLocalize(Localize cmp, string mainTranslation, string secondaryTranslation) + { + //--[ Localize Font Object ]---------- + Font newFont = cmp.GetSecondaryTranslatedObj(ref mainTranslation, ref secondaryTranslation); + if (newFont != null && mTarget.font != newFont) + { + mTarget.font = newFont; + MeshRenderer rend = mTarget.GetComponentInChildren(); + rend.material = newFont.material; + } + + //--[ Localize Text ]---------- + if (mInitializeAlignment) + { + mInitializeAlignment = false; + + mAlignment_LTR = mAlignment_RTL = mTarget.alignment; + + if (LocalizationManager.IsRight2Left && mAlignment_RTL == TextAlignment.Right) + mAlignment_LTR = TextAlignment.Left; + if (!LocalizationManager.IsRight2Left && mAlignment_LTR == TextAlignment.Left) + mAlignment_RTL = TextAlignment.Right; + + } + if (mainTranslation != null && mTarget.text != mainTranslation) + { + if (cmp.CorrectAlignmentForRTL && mTarget.alignment != TextAlignment.Center) + mTarget.alignment = LocalizationManager.IsRight2Left ? mAlignment_RTL : mAlignment_LTR; + + mTarget.font.RequestCharactersInTexture(mainTranslation); + mTarget.text = mainTranslation; + } + } + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityStandard_TextMesh.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityStandard_TextMesh.cs.meta new file mode 100644 index 00000000..f34d3fc4 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityStandard_TextMesh.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 62e865dd37373234c9d966bdd78278e1 +timeCreated: 1518408606 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityStandard_VideoPlayer.cs b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityStandard_VideoPlayer.cs new file mode 100644 index 00000000..05de2559 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityStandard_VideoPlayer.cs @@ -0,0 +1,33 @@ +using UnityEditor; +using UnityEngine; +using UnityEngine.Video; + +namespace I2.Loc +{ + #if UNITY_EDITOR + [InitializeOnLoad] + #endif + public class LocalizeTarget_UnityStandard_VideoPlayer : LocalizeTarget + { + static LocalizeTarget_UnityStandard_VideoPlayer() { AutoRegister(); } + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] + static void AutoRegister() { LocalizationManager.RegisterTarget(new LocalizeTargetDesc_Type { Name = "VideoPlayer", Priority = 100 }); } + public override eTermType GetPrimaryTermType(Localize cmp) { return eTermType.Video; } + public override eTermType GetSecondaryTermType(Localize cmp) { return eTermType.Text; } + public override bool CanUseSecondaryTerm() { return false; } + public override bool AllowMainTermToBeRTL() { return false; } + public override bool AllowSecondTermToBeRTL() { return false; } + public override void GetFinalTerms ( Localize cmp, string Main, string Secondary, out string primaryTerm, out string secondaryTerm) + { + VideoClip clip = mTarget.clip; + primaryTerm = clip != null ? clip.name: string.Empty; + secondaryTerm = null; + } + public override void DoLocalize(Localize cmp, string mainTranslation, string secondaryTranslation) + { + VideoClip Old = mTarget.clip; + if (Old == null || Old.name != mainTranslation) + mTarget.clip = cmp.FindTranslatedObject(mainTranslation); + } + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityStandard_VideoPlayer.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityStandard_VideoPlayer.cs.meta new file mode 100644 index 00000000..1767437e --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityStandard_VideoPlayer.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 5fcaa99c1874460eb953851cbf4bfad2 +timeCreated: 1601759602 \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityUI_Image.cs b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityUI_Image.cs new file mode 100644 index 00000000..dd6fa690 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityUI_Image.cs @@ -0,0 +1,53 @@ +using UnityEditor; +using UnityEngine; +using UnityEngine.UI; + +namespace I2.Loc +{ + #if UNITY_EDITOR + [InitializeOnLoad] + #endif + + public class LocalizeTarget_UnityUI_Image : LocalizeTarget + { + static LocalizeTarget_UnityUI_Image() { AutoRegister(); } + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] static void AutoRegister() { LocalizationManager.RegisterTarget(new LocalizeTargetDesc_Type { Name = "Image", Priority = 100 }); } + + public override bool CanUseSecondaryTerm () { return false; } + public override bool AllowMainTermToBeRTL () { return false; } + public override bool AllowSecondTermToBeRTL () { return false; } + public override eTermType GetPrimaryTermType(Localize cmp) + { + return mTarget.sprite == null ? eTermType.Texture : eTermType.Sprite; + } + public override eTermType GetSecondaryTermType(Localize cmp) { return eTermType.Text; } + + + public override void GetFinalTerms ( Localize cmp, string Main, string Secondary, out string primaryTerm, out string secondaryTerm ) + { + primaryTerm = mTarget.mainTexture ? mTarget.mainTexture.name : ""; + if (mTarget.sprite!=null && mTarget.sprite.name!=primaryTerm) + primaryTerm += "." + mTarget.sprite.name; + + secondaryTerm = null; + } + + + public override void DoLocalize ( Localize cmp, string mainTranslation, string secondaryTranslation ) + { + Sprite Old = mTarget.sprite; + if (Old==null || Old.name!=mainTranslation) + mTarget.sprite = cmp.FindTranslatedObject( mainTranslation ); + + // If the old value is not in the translatedObjects, then unload it as it most likely was loaded from Resources + //if (!HasTranslatedObject(Old)) + // Resources.UnloadAsset(Old); + + // In the editor, sometimes unity "forgets" to show the changes +#if UNITY_EDITOR + if (!Application.isPlaying) + EditorUtility.SetDirty( mTarget ); +#endif + } + } +} diff --git a/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityUI_Image.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityUI_Image.cs.meta new file mode 100644 index 00000000..3910dd9f --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityUI_Image.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: bedef2aeaac8da04faa9a07b7241d0ad +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityUI_RawImage.cs b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityUI_RawImage.cs new file mode 100644 index 00000000..25b5b5d9 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityUI_RawImage.cs @@ -0,0 +1,47 @@ +using UnityEditor; +using UnityEngine; +using UnityEngine.UI; + +namespace I2.Loc +{ + #if UNITY_EDITOR + [InitializeOnLoad] + #endif + + public class LocalizeTarget_UnityUI_RawImage : LocalizeTarget + { + static LocalizeTarget_UnityUI_RawImage() { AutoRegister(); } + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] static void AutoRegister() { LocalizationManager.RegisterTarget(new LocalizeTargetDesc_Type { Name = "RawImage", Priority = 100 }); } + + public override eTermType GetPrimaryTermType(Localize cmp) { return eTermType.Texture; } + public override eTermType GetSecondaryTermType(Localize cmp) { return eTermType.Text; } + public override bool CanUseSecondaryTerm() { return false; } + public override bool AllowMainTermToBeRTL() { return false; } + public override bool AllowSecondTermToBeRTL() { return false; } + + + public override void GetFinalTerms(Localize cmp, string Main, string Secondary, out string primaryTerm, out string secondaryTerm) + { + primaryTerm = mTarget.mainTexture ? mTarget.mainTexture.name : ""; + secondaryTerm = null; + } + + + public override void DoLocalize(Localize cmp, string mainTranslation, string secondaryTranslation) + { + Texture Old = mTarget.texture; + if (Old == null || Old.name != mainTranslation) + mTarget.texture = cmp.FindTranslatedObject(mainTranslation); + + // If the old value is not in the translatedObjects, then unload it as it most likely was loaded from Resources + //if (!HasTranslatedObject(Old)) + // Resources.UnloadAsset(Old); + + // In the editor, sometimes unity "forgets" to show the changes + #if UNITY_EDITOR + if (!Application.isPlaying) + EditorUtility.SetDirty(mTarget); + #endif + } + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityUI_RawImage.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityUI_RawImage.cs.meta new file mode 100644 index 00000000..6a4c5b0a --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityUI_RawImage.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a58a0cb6f0764ca42b2877aa2c6fa0af +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityUI_Text.cs b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityUI_Text.cs new file mode 100644 index 00000000..cb897e11 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityUI_Text.cs @@ -0,0 +1,111 @@ +using UnityEditor; +using UnityEngine; +using UnityEngine.UI; + +namespace I2.Loc +{ + #if UNITY_EDITOR + [InitializeOnLoad] + #endif + + public class LocalizeTarget_UnityUI_Text : LocalizeTarget + { + static LocalizeTarget_UnityUI_Text() { AutoRegister(); } + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] static void AutoRegister() { LocalizationManager.RegisterTarget(new LocalizeTargetDesc_Type { Name = "Text", Priority = 100 }); } + + TextAnchor mAlignment_RTL = TextAnchor.UpperRight; + TextAnchor mAlignment_LTR = TextAnchor.UpperLeft; + bool mAlignmentWasRTL; + bool mInitializeAlignment = true; + + public override eTermType GetPrimaryTermType(Localize cmp) { return eTermType.Text; } + public override eTermType GetSecondaryTermType(Localize cmp) { return eTermType.Font; } + public override bool CanUseSecondaryTerm () { return true; } + public override bool AllowMainTermToBeRTL () { return true; } + public override bool AllowSecondTermToBeRTL () { return false; } + + public override void GetFinalTerms ( Localize cmp, string Main, string Secondary, out string primaryTerm, out string secondaryTerm ) + { + primaryTerm = mTarget ? mTarget.text : null; + secondaryTerm = mTarget.font!=null ? mTarget.font.name : string.Empty; + } + + + public override void DoLocalize ( Localize cmp, string mainTranslation, string secondaryTranslation ) + { + //--[ Localize Font Object ]---------- + Font newFont = cmp.GetSecondaryTranslatedObj( ref mainTranslation, ref secondaryTranslation ); + if (newFont!=null && newFont!=mTarget.font) + mTarget.font = newFont; + + if (mInitializeAlignment) + { + mInitializeAlignment = false; + mAlignmentWasRTL = LocalizationManager.IsRight2Left; + InitAlignment( mAlignmentWasRTL, mTarget.alignment, out mAlignment_LTR, out mAlignment_RTL ); + } + else + { + TextAnchor alignRTL, alignLTR; + InitAlignment( mAlignmentWasRTL, mTarget.alignment, out alignLTR, out alignRTL ); + + if (mAlignmentWasRTL && mAlignment_RTL!=alignRTL || + !mAlignmentWasRTL && mAlignment_LTR != alignLTR) + { + mAlignment_LTR = alignLTR; + mAlignment_RTL = alignRTL; + } + mAlignmentWasRTL = LocalizationManager.IsRight2Left; + } + + if (mainTranslation!=null && mTarget.text != mainTranslation) + { + if (cmp.CorrectAlignmentForRTL) + { + mTarget.alignment = LocalizationManager.IsRight2Left ? mAlignment_RTL : mAlignment_LTR; + } + + + mTarget.text = mainTranslation; + mTarget.SetVerticesDirty(); + + // In the editor, sometimes unity "forgets" to show the changes + #if UNITY_EDITOR + if (!Application.isPlaying) + EditorUtility.SetDirty( mTarget ); + #endif + } + } + + void InitAlignment ( bool isRTL, TextAnchor alignment, out TextAnchor alignLTR, out TextAnchor alignRTL ) + { + alignLTR = alignRTL = alignment; + + if (isRTL) + { + switch (alignment) + { + case TextAnchor.UpperRight: alignLTR = TextAnchor.UpperLeft; break; + case TextAnchor.MiddleRight: alignLTR = TextAnchor.MiddleLeft; break; + case TextAnchor.LowerRight: alignLTR = TextAnchor.LowerLeft; break; + case TextAnchor.UpperLeft: alignLTR = TextAnchor.UpperRight; break; + case TextAnchor.MiddleLeft: alignLTR = TextAnchor.MiddleRight; break; + case TextAnchor.LowerLeft: alignLTR = TextAnchor.LowerRight; break; + } + } + else + { + switch (alignment) + { + case TextAnchor.UpperRight: alignRTL = TextAnchor.UpperLeft; break; + case TextAnchor.MiddleRight: alignRTL = TextAnchor.MiddleLeft; break; + case TextAnchor.LowerRight: alignRTL = TextAnchor.LowerLeft; break; + case TextAnchor.UpperLeft: alignRTL = TextAnchor.UpperRight; break; + case TextAnchor.MiddleLeft: alignRTL = TextAnchor.MiddleRight; break; + case TextAnchor.LowerLeft: alignRTL = TextAnchor.LowerRight; break; + } + } + } + } +} + diff --git a/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityUI_Text.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityUI_Text.cs.meta new file mode 100644 index 00000000..2372f6e8 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Targets/LocalizeTarget_UnityUI_Text.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 332e36893e7cf4a49b3c1f72f76cd5e1 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/TermData.cs b/popcorn/Assets/I2/Localization/Scripts/TermData.cs new file mode 100644 index 00000000..13325c3b --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/TermData.cs @@ -0,0 +1,150 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace I2.Loc +{ + public enum eTermType + { + Text, Font, Texture, AudioClip, GameObject, Sprite, Material, Child, Mesh, + #if NGUI + UIAtlas, UIFont, + #endif + #if TK2D + TK2dFont, TK2dCollection, + #endif + #if TextMeshPro + TextMeshPFont, + #endif + #if SVG + SVGAsset, + #endif + Object, + Video + } + + public enum TranslationFlag : byte + { + Normal = 1, + AutoTranslated = 2 + } + + + [Serializable] + public class TermData + { + public string Term = string.Empty; + public eTermType TermType = eTermType.Text; + + #if !UNITY_EDITOR + [NonSerialized] + #endif + public string Description; + + public string[] Languages = Array.Empty(); + public byte[] Flags = Array.Empty(); // flags for each translation + + [SerializeField] private string[] Languages_Touch; // TO BE REMOVED IN A FUTURE RELEASE + + public string GetTranslation ( int idx, string specialization=null, bool editMode=false ) + { + string text = Languages[idx]; + if (text != null) + { + text = SpecializationManager.GetSpecializedText(text, specialization); + if (!editMode) + { + text = text.Replace("[i2nt]", "").Replace("[/i2nt]", ""); + } + } + return text; + } + + public void SetTranslation( int idx, string translation, string specialization = null) + { + Languages[idx] = SpecializationManager.SetSpecializedText( Languages[idx], translation, specialization); + } + + public void RemoveSpecialization(string specialization) + { + for (int i = 0; i < Languages.Length; ++i) + RemoveSpecialization(i, specialization); + } + + + public void RemoveSpecialization( int idx, string specialization ) + { + var text = Languages[idx]; + if (specialization == "Any" || !text.Contains("[i2s_" + specialization + "]")) + { + return; + } + + var dict = SpecializationManager.GetSpecializations(text); + dict.Remove(specialization); + Languages[idx] = SpecializationManager.SetSpecializedText(dict); + } + + public bool IsAutoTranslated( int idx, bool IsTouch ) + { + return (Flags[idx] & (byte)TranslationFlag.AutoTranslated) > 0; + } + + public void Validate () + { + int nLanguages = Mathf.Max(Languages.Length, Flags.Length); + + if (Languages.Length != nLanguages) Array.Resize(ref Languages, nLanguages); + if (Flags.Length!=nLanguages) Array.Resize(ref Flags, nLanguages); + + if (Languages_Touch != null) + { + for (int i = 0; i < Mathf.Min(Languages_Touch.Length, nLanguages); ++i) + { + if (string.IsNullOrEmpty(Languages[i]) && !string.IsNullOrEmpty(Languages_Touch[i])) + { + Languages[i] = Languages_Touch[i]; + Languages_Touch[i] = null; + } + } + Languages_Touch = null; + } + } + + public bool IsTerm( string name, bool allowCategoryMistmatch) + { + if (!allowCategoryMistmatch) + return name == Term; + + return name == LanguageSourceData.GetKeyFromFullTerm (Term); + } + + public bool HasSpecializations() + { + for (int i = 0; i < Languages.Length; ++i) + { + if (!string.IsNullOrEmpty(Languages[i]) && Languages[i].Contains("[i2s_")) + return true; + } + return false; + } + + public List GetAllSpecializations() + { + List values = new List(); + for (int i = 0; i < Languages.Length; ++i) + SpecializationManager.AppendSpecializations(Languages[i], values); + return values; + } + } + + public class TermsPopup : PropertyAttribute + { + public TermsPopup(string filter = "") + { + Filter = filter; + } + + public string Filter { get; private set; } + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/TermData.cs.meta b/popcorn/Assets/I2/Localization/Scripts/TermData.cs.meta new file mode 100644 index 00000000..5a63fee5 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/TermData.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: e04d3f1e4351c9740ad1815d63ede4cd +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Utils.meta b/popcorn/Assets/I2/Localization/Scripts/Utils.meta new file mode 100644 index 00000000..7f040687 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Utils.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 23035eaab7d1f024cb7e7b5bae9b078f +folderAsset: yes +timeCreated: 1478234053 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Utils/AutoChangeCultureInfo.cs b/popcorn/Assets/I2/Localization/Scripts/Utils/AutoChangeCultureInfo.cs new file mode 100644 index 00000000..99ded31e --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Utils/AutoChangeCultureInfo.cs @@ -0,0 +1,13 @@ +using UnityEngine; + +namespace I2.Loc +{ + + public class AutoChangeCultureInfo : MonoBehaviour + { + public void Start() + { + LocalizationManager.EnableChangingCultureInfo(true); + } + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Utils/AutoChangeCultureInfo.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Utils/AutoChangeCultureInfo.cs.meta new file mode 100644 index 00000000..9893897e --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Utils/AutoChangeCultureInfo.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9d7ad57256fd47940aba8035315bd2ca +timeCreated: 1478233236 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Utils/CoroutineManager.cs b/popcorn/Assets/I2/Localization/Scripts/Utils/CoroutineManager.cs new file mode 100644 index 00000000..72d168b4 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Utils/CoroutineManager.cs @@ -0,0 +1,53 @@ +using System.Collections; +using UnityEditor; +using UnityEngine; + +namespace I2.Loc +{ + // This class is used to spawn coroutines from outside of MonoBehaviors + public class CoroutineManager : MonoBehaviour + { + static CoroutineManager pInstance + { + get{ + if (mInstance==null) + { + GameObject GO = new GameObject( "_Coroutiner" ); + GO.hideFlags = HideFlags.HideAndDontSave; + mInstance = GO.AddComponent(); + if (Application.isPlaying) + DontDestroyOnLoad(GO); + } + return mInstance; + } + } + static CoroutineManager mInstance; + + + private void Awake() + { + if (Application.isPlaying) + DontDestroyOnLoad(gameObject); + } + + public static Coroutine Start(IEnumerator coroutine) + { + #if UNITY_EDITOR + // Special case to allow coroutines to run in the Editor + if (!Application.isPlaying) + { + EditorApplication.CallbackFunction delg=null; + delg = delegate + { + if (!coroutine.MoveNext()) + EditorApplication.update -= delg; + }; + EditorApplication.update += delg; + return null; + } + #endif + + return pInstance.StartCoroutine(coroutine); + } + } +} diff --git a/popcorn/Assets/I2/Localization/Scripts/Utils/CoroutineManager.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Utils/CoroutineManager.cs.meta new file mode 100644 index 00000000..19594d90 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Utils/CoroutineManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 20c75ea9a203e3d40aafe9b20abbd228 +timeCreated: 1502501187 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Utils/CustomLocalizeCallback.cs b/popcorn/Assets/I2/Localization/Scripts/Utils/CustomLocalizeCallback.cs new file mode 100644 index 00000000..7d9ff923 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Utils/CustomLocalizeCallback.cs @@ -0,0 +1,27 @@ +using UnityEngine; +using UnityEngine.Events; + +namespace I2.Loc +{ + [AddComponentMenu("I2/Localization/I2 Localize Callback")] + public class CustomLocalizeCallback : MonoBehaviour + { + public UnityEvent _OnLocalize = new UnityEvent(); + + public void OnEnable() + { + LocalizationManager.OnLocalizeEvent -= OnLocalize; + LocalizationManager.OnLocalizeEvent += OnLocalize; + } + + public void OnDisable() + { + LocalizationManager.OnLocalizeEvent -= OnLocalize; + } + + public void OnLocalize() + { + _OnLocalize.Invoke(); + } + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Utils/CustomLocalizeCallback.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Utils/CustomLocalizeCallback.cs.meta new file mode 100644 index 00000000..183b8920 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Utils/CustomLocalizeCallback.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 24da539b4435ced4da00f418327a772c +timeCreated: 1520536965 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Utils/HindiFixer.cs b/popcorn/Assets/I2/Localization/Scripts/Utils/HindiFixer.cs new file mode 100644 index 00000000..fa2d14e4 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Utils/HindiFixer.cs @@ -0,0 +1,157 @@ +using System.Linq; + +namespace I2.Loc +{ + + public class HindiFixer + { + + // Needs to also implement: Hindi: https://www.microsoft.com/typography/OpenTypeDev/devanagari/intro.htm + //https://social.msdn.microsoft.com/Forums/windows/en-US/9883ff08-bd72-499b-9543-ed424167281d/converting-hindi-text-to-english-text?forum=winforms + internal static string Fix(string text) + { + while (true) + { + char[] arr = text.ToCharArray(); + bool changed = false; + + for (int i = 0; i < arr.Length; ++i) + { + // interchange the order of "i" vowel + if (arr[i] == 2367 && !char.IsWhiteSpace(arr[i - 1]) && arr[i - 1]!=0) + { + arr[i] = arr[i - 1]; + arr[i - 1] = (char)2367; + changed = true; + } + + if (i == arr.Length - 1) + continue; + + // letter "I" + Nukta forms letter vocalic "L" + if (arr[i] == 2311) + { + if (arr[i + 1] == 2364) + { + arr[i] = (char)2316; + arr[i + 1] = (char)0; + changed = true; + } + } + + // vowel sign vocalic "R" + sign Nukta forms vowel sign vocalic "Rr" + if (arr[i] == 2371) + { + if (arr[i + 1] == 2364) + { + arr[i] = (char)2372; + arr[i + 1] = (char)0; + changed = true; + } + } + + // Candrabindu + sign Nukta forms Om + if (arr[i] == 2305) + { + if (arr[i + 1] == 2364) + { + arr[i] = (char)2384; + arr[i + 1] = (char)0; + changed = true; + } + } + + // letter vocalic "R" + sign Nukta forms letter vocalic "Rr" + if (arr[i] == 2315) + { + if (arr[i + 1] == 2364) + { + arr[i] = (char)2400; + arr[i + 1] = (char)0; + changed = true; + } + } + + // letter "Ii" + sign Nukta forms letter vocalic "LI" + if (arr[i] == 2312) + { + if (arr[i + 1] == 2364) + { + arr[i] = (char)2401; + arr[i + 1] = (char)0; + changed = true; + } + } + + // vowel sign "I" + sign Nukta forms vowel sign vocalic "L" + if (arr[i] == 2367) + { + if (arr[i + 1] == 2364) + { + arr[i] = (char)2402; + arr[i + 1] = (char)0; + changed = true; + } + } + + // vowel sign "Ii" + sign Nukta forms vowel sign vocalic "LI" + if (arr[i] == 2368) + { + if (arr[i + 1] == 2364) + { + arr[i] = (char)2403; + arr[i + 1] = (char)0; + changed = true; + } + } + + // Danda + sign Nukta forms sign Avagraha + if (arr[i] == 2404) + { + if (arr[i + 1] == 2364) + { + arr[i] = (char)2365; + arr[i + 1] = (char)0; + changed = true; + } + } + + // consonant + Halant + Halant + consonant forms consonant + Halant + ZWNJ + consonant + //if (arr[i] == 2381) + //{ + // if (arr[i + 1] == 2381) + // { + // arr[i+1] = (char)8204; // + // } + //} + + // consonant + Halant + Nukta + consonant forms consonant + Halant + ZWJ + Consonant + //if (arr[i] == 2364) + //{ + // if (arr[i + 1] == 2381) + // { + // arr[i] = (char)2381; // + // arr[i+1] = (char)8205; // + // } + //} + /*if (arr[i] == 0x938 && arr[i + 1] == 0x94D)//थ') + { + arr[i] = (char)0x930; + arr[i + 1] = (char)0; + }*/ + } + + if (!changed) + { + return text; + } + + var newText = new string(arr.Where(x => x != 0).ToArray()); + if (newText == text) + return newText; + text = newText; + return text; // remove this later to allow for several passes + } + } + } +} diff --git a/popcorn/Assets/I2/Localization/Scripts/Utils/HindiFixer.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Utils/HindiFixer.cs.meta new file mode 100644 index 00000000..4cd2fde1 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Utils/HindiFixer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 7b58f53b44162054f8b586f0cdbe43ba +timeCreated: 1506968129 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Utils/I2Utils.cs b/popcorn/Assets/I2/Localization/Scripts/Utils/I2Utils.cs new file mode 100644 index 00000000..ee2e789e --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Utils/I2Utils.cs @@ -0,0 +1,308 @@ +using System; +using System.IO; +using System.Linq; +using System.Text.RegularExpressions; +using UnityEditor; +using UnityEngine; +using UnityEngine.Networking; +using UnityEngine.SceneManagement; + +namespace I2.Loc +{ + public static class I2Utils + { + public const string ValidChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"; + public const string NumberChars = "0123456789"; + public const string ValidNameSymbols = ".-_$#@*()[]{}+:?!&',^=<>~`"; + + public static string ReverseText(string source) + { + int len = source.Length; + char[] output = new char[len]; + + char[] separators = { '\r', '\n' }; + for (int istart = 0; istart (ValidChars.IndexOf(c)>=0 || c==' ' || (c == '\\' && allowCategory) || (c == '/' && allowCategory))).ToArray()); + //return new string(text.ToCharArray().Select(c => (char.IsControl(c) || (c == '\\' && !allowCategory) || (c == '\"') || (c == '/')) ? ' ' : c).ToArray()); + //return new string(text.ToCharArray().Select(c => ((allowCategory && (c == '\\' || c == '\"' || (c == '/'))) || char.IsLetterOrDigit(c))?c:' ').ToArray()); + + + // Remove Non-Letter/Digits and collapse all extra espaces into a single space + int current = 0; + char[] output = new char[text.Length]; + bool skipped = false; + + foreach (char cc in text.Trim()) + { + char c = ' '; + if (allowCategory && (cc == '\\' || cc == '\"' || cc == '/') || + char.IsLetterOrDigit(cc) || + ValidNameSymbols.IndexOf(cc) >= 0) + { + c = cc; + } + + if (char.IsWhiteSpace(c)) + { + if (!skipped) + { + if (current > 0) + output[current++] = ' '; + + skipped = true; + } + } + else + { + skipped = false; + output[current++] = c; + } + } + + return new string(output, 0, current); + } + + public static string GetValidTermName( string text, bool allowCategory = false) + { + if (text == null) + return null; + text = RemoveTags(text); + return RemoveNonASCII(text, allowCategory); + } + + public static string SplitLine(string line, int maxCharacters) + { + if (maxCharacters <= 0 || line.Length < maxCharacters) + return line; + + var chars = line.ToCharArray(); + bool insideOfLine = true; + bool allowNewLine = false; + for (int i = 0, nCharsInLine = 0; i < chars.Length; ++i) + { + if (insideOfLine) + { + nCharsInLine++; + if (chars[i] == '\n') + { + nCharsInLine = 0; + } + if (nCharsInLine >= maxCharacters && char.IsWhiteSpace(chars[i])) + { + chars[i] = '\n'; + insideOfLine = false; + allowNewLine = false; + } + } + else + { + if (!char.IsWhiteSpace(chars[i])) + { + insideOfLine = true; + nCharsInLine = 0; + } + else + { + if (chars[i] != '\n') + { + chars[i] = (char)0; + } + else + { + if (!allowNewLine) + chars[i] = (char)0; + allowNewLine = true; + } + } + } + } + + return new string(chars.Where(c => c != (char)0).ToArray()); + } + + public static bool FindNextTag(string line, int iStart, out int tagStart, out int tagEnd) + { + tagStart = -1; + tagEnd = -1; + int len = line.Length; + + // Find where the tag starts + for (tagStart = iStart; tagStart < len; ++tagStart) + if (line[tagStart] == '[' || line[tagStart] == '(' || line[tagStart] == '{' || line[tagStart] == '<') + break; + + if (tagStart == len) + return false; + + bool isArabic = false; + for (tagEnd = tagStart + 1; tagEnd < len; ++tagEnd) + { + char c = line[tagEnd]; + if (c == ']' || c == ')' || c == '}' || c=='>') + { + if (isArabic) return FindNextTag(line, tagEnd + 1, out tagStart, out tagEnd); + return true; + } + if (c > 255) isArabic = true; + } + + // there is an open, but not close character + return false; + } + + public static string RemoveTags(string text) + { + return Regex.Replace(text, @"\{\[(.*?)]}|\[(.*?)]|\<(.*?)>", ""); + } + + public static bool RemoveResourcesPath(ref string sPath) + { + int Ind1 = sPath.IndexOf("\\Resources\\", StringComparison.Ordinal); + int Ind2 = sPath.IndexOf("\\Resources/", StringComparison.Ordinal); + int Ind3 = sPath.IndexOf("/Resources\\", StringComparison.Ordinal); + int Ind4 = sPath.IndexOf("/Resources/", StringComparison.Ordinal); + int Index = Mathf.Max(Ind1, Ind2, Ind3, Ind4); + bool IsResource = false; + if (Index >= 0) + { + sPath = sPath.Substring(Index + 11); + IsResource = true; + } + else + { + // If its not in the Resources, then it has to be in the References + // Therefore, the path has to be stripped and let only the name + Index = sPath.LastIndexOfAny(LanguageSourceData.CategorySeparators); + if (Index > 0) + sPath = sPath.Substring(Index + 1); + } + + string Extension = Path.GetExtension(sPath); + if (!string.IsNullOrEmpty(Extension)) + sPath = sPath.Substring(0, sPath.Length - Extension.Length); + + return IsResource; + } + + public static bool IsPlaying() + { + if (Application.isPlaying) + return true; + #if UNITY_EDITOR + return EditorApplication.isPlayingOrWillChangePlaymode; + #else + return false; + #endif + } + + public static string GetPath(this Transform tr) + { + var parent = tr.parent; + if (tr == null) + return tr.name; + return parent.GetPath() + "/" + tr.name; + } + +#if UNITY_5_3_OR_NEWER + public static Transform FindObject(string objectPath) + { + return FindObject(SceneManager.GetActiveScene(), objectPath); + } + + + public static Transform FindObject(Scene scene, string objectPath) + { + //var roots = SceneManager.GetActiveScene().GetRootGameObjects(); + var roots = scene.GetRootGameObjects(); + for (int i=0; i(Transform tr) where H : Component + { + if (!tr) + return null; + + H comp = tr.GetComponent(); + while (!comp && tr) + { + comp = tr.GetComponent(); + tr = tr.parent; + } + return comp; + } + + public static string GetCaptureMatch(Match match) + { + for (int i = match.Groups.Count - 1; i >= 0; --i) + if (match.Groups[i].Success) + { + return match.Groups[i].ToString(); + } + return match.ToString(); + } + + public static void SendWebRequest(UnityWebRequest www ) + { + #if UNITY_2017_2_OR_NEWER + www.SendWebRequest(); + #else + www.Send(); + #endif + } + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Utils/I2Utils.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Utils/I2Utils.cs.meta new file mode 100644 index 00000000..802419e5 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Utils/I2Utils.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 7a974f5f5b8a8c94abaf68d987ea0662 +timeCreated: 1516389217 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Utils/LocalizationParamsManager.cs b/popcorn/Assets/I2/Localization/Scripts/Utils/LocalizationParamsManager.cs new file mode 100644 index 00000000..8cce108f --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Utils/LocalizationParamsManager.cs @@ -0,0 +1,90 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace I2.Loc +{ + public interface ILocalizationParamsManager + { + string GetParameterValue( string Param ); + } + + public class LocalizationParamsManager : MonoBehaviour, ILocalizationParamsManager + { + [Serializable] + public struct ParamValue + { + public string Name, Value; + + } + + [SerializeField] + public List _Params = new List(); + + public bool _IsGlobalManager; + + public string GetParameterValue( string ParamName ) + { + if (_Params != null) + { + for (int i = 0, imax = _Params.Count; i < imax; ++i) + if (_Params[i].Name == ParamName) + return _Params[i].Value; + } + return null; // not found + } + + public void SetParameterValue( string ParamName, string ParamValue, bool localize = true ) + { + bool setted = false; + for (int i = 0, imax = _Params.Count; i < imax; ++i) + if (_Params[i].Name == ParamName) + { + var temp = _Params[i]; + temp.Value = ParamValue; + _Params[i] = temp; + setted = true; + break; + } + if (!setted) + _Params.Add(new ParamValue { Name = ParamName, Value = ParamValue }); + + if (localize) + OnLocalize(); + } + + public void OnLocalize() + { + var loc = GetComponent(); + if (loc != null) + loc.OnLocalize(true); + } + + public virtual void OnEnable() + { + if (_IsGlobalManager) + DoAutoRegister(); + } + + //[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] + //public void AutoStart() + //{ + // if (_AutoRegister) + // DoAutoRegister(); + //} + + public void DoAutoRegister() + { + if (!LocalizationManager.ParamManagers.Contains(this)) + { + LocalizationManager.ParamManagers.Add(this); + LocalizationManager.LocalizeAll(true); + } + } + + public void OnDisable() + { + LocalizationManager.ParamManagers.Remove(this); + } + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Utils/LocalizationParamsManager.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Utils/LocalizationParamsManager.cs.meta new file mode 100644 index 00000000..0e6360e6 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Utils/LocalizationParamsManager.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: c9586cfd190ca384a8dd72aa92c86152 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Utils/LocalizedString.cs b/popcorn/Assets/I2/Localization/Scripts/Utils/LocalizedString.cs new file mode 100644 index 00000000..66b758cc --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Utils/LocalizedString.cs @@ -0,0 +1,42 @@ +using System; + +namespace I2.Loc +{ + [Serializable] + public struct LocalizedString + { + public string mTerm; + public bool mRTL_IgnoreArabicFix; + public int mRTL_MaxLineLength; + public bool mRTL_ConvertNumbers; + public bool m_DontLocalizeParameters; + + public static implicit operator string(LocalizedString s) + { + return s.ToString(); + } + + public static implicit operator LocalizedString(string term) + { + return new LocalizedString { mTerm = term }; + } + + public LocalizedString (LocalizedString str) + { + mTerm = str.mTerm; + mRTL_IgnoreArabicFix = str.mRTL_IgnoreArabicFix; + mRTL_MaxLineLength = str.mRTL_MaxLineLength; + mRTL_ConvertNumbers = str.mRTL_ConvertNumbers; + m_DontLocalizeParameters = str.m_DontLocalizeParameters; + } + + + + public override string ToString() + { + var translation = LocalizationManager.GetTranslation(mTerm, !mRTL_IgnoreArabicFix, mRTL_MaxLineLength, !mRTL_ConvertNumbers, true ); + LocalizationManager.ApplyLocalizationParams(ref translation, !m_DontLocalizeParameters); + return translation; + } + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Utils/LocalizedString.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Utils/LocalizedString.cs.meta new file mode 100644 index 00000000..b2bfa06f --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Utils/LocalizedString.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0bf401b4b1a2c364ba3795d47b95835f +timeCreated: 1478236841 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Utils/RTLFixer.cs b/popcorn/Assets/I2/Localization/Scripts/Utils/RTLFixer.cs new file mode 100644 index 00000000..8dc3fdac --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Utils/RTLFixer.cs @@ -0,0 +1,971 @@ +using System; +using System.Collections.Generic; + +namespace I2.Loc +{ + + public class RTLFixer + { + /// + /// Fix the specified string. + /// + /// + /// String to be fixed. + /// + public static string Fix(string str) + { + return Fix(str, false, true); + } + + public static string Fix(string str, bool rtl) + { + if (rtl) + + { + return Fix(str); + } + + string[] words = str.Split(' '); + string result = ""; + string arabicToIgnore = ""; + foreach (string word in words) + { + if (char.IsLower(word.ToLower()[word.Length / 2])) + { + result += Fix(arabicToIgnore) + word + " "; + arabicToIgnore = ""; + } + else + { + arabicToIgnore += word + " "; + + } + } + if (arabicToIgnore != "") + result += Fix(arabicToIgnore); + + return result; + } + + /// + /// Fix the specified string with customization options. + /// + /// + /// String to be fixed. + /// + /// + /// Show tashkeel. + /// + /// + /// Use hindu numbers. + /// + public static string Fix(string str, bool showTashkeel, bool useHinduNumbers) + { + var newStr = HindiFixer.Fix(str); + if (newStr != str) + return newStr; + RTLFixerTool.showTashkeel = showTashkeel; + RTLFixerTool.useHinduNumbers = useHinduNumbers; + + if (str.Contains("\n")) + str = str.Replace("\n", Environment.NewLine); + + if (str.Contains(Environment.NewLine)) + { + string[] stringSeparators = { Environment.NewLine }; + string[] strSplit = str.Split(stringSeparators, StringSplitOptions.None); + + if (strSplit.Length == 0) + return RTLFixerTool.FixLine(str); + if (strSplit.Length == 1) + return RTLFixerTool.FixLine(str); + string outputString = RTLFixerTool.FixLine(strSplit[0]); + int iteration = 1; + if (strSplit.Length > 1) + { + while (iteration < strSplit.Length) + { + outputString += Environment.NewLine + RTLFixerTool.FixLine(strSplit[iteration]); + iteration++; + } + } + return outputString; + } + + return RTLFixerTool.FixLine(str); + + } + + } + + + /// + /// Arabic Contextual forms General - Unicode + /// + internal enum IsolatedArabicLetters + { + Hamza = 0xFE80, + Alef = 0xFE8D, + AlefHamza = 0xFE83, + WawHamza = 0xFE85, + AlefMaksoor = 0xFE87, + AlefMaksora = 0xFBFC, + HamzaNabera = 0xFE89, + Ba = 0xFE8F, + Ta = 0xFE95, + Tha2 = 0xFE99, + Jeem = 0xFE9D, + H7aa = 0xFEA1, + Khaa2 = 0xFEA5, + Dal = 0xFEA9, + Thal = 0xFEAB, + Ra2 = 0xFEAD, + Zeen = 0xFEAF, + Seen = 0xFEB1, + Sheen = 0xFEB5, + S9a = 0xFEB9, + Dha = 0xFEBD, + T6a = 0xFEC1, + T6ha = 0xFEC5, + Ain = 0xFEC9, + Gain = 0xFECD, + Fa = 0xFED1, + Gaf = 0xFED5, + Kaf = 0xFED9, + Lam = 0xFEDD, + Meem = 0xFEE1, + Noon = 0xFEE5, + Ha = 0xFEE9, + Waw = 0xFEED, + Ya = 0xFEF1, + AlefMad = 0xFE81, + TaMarboota = 0xFE93, + PersianPe = 0xFB56, // Persian Letters; + PersianChe = 0xFB7A, + PersianZe = 0xFB8A, + PersianGaf = 0xFB92, + PersianGaf2 = 0xFB8E + + } + + /// + /// Arabic Contextual forms - Isolated + /// + internal enum GeneralArabicLetters + { + Hamza = 0x0621, + Alef = 0x0627, + AlefHamza = 0x0623, + WawHamza = 0x0624, + AlefMaksoor = 0x0625, + AlefMagsora = 0x0649, + HamzaNabera = 0x0626, + Ba = 0x0628, + Ta = 0x062A, + Tha2 = 0x062B, + Jeem = 0x062C, + H7aa = 0x062D, + Khaa2 = 0x062E, + Dal = 0x062F, + Thal = 0x0630, + Ra2 = 0x0631, + Zeen = 0x0632, + Seen = 0x0633, + Sheen = 0x0634, + S9a = 0x0635, + Dha = 0x0636, + T6a = 0x0637, + T6ha = 0x0638, + Ain = 0x0639, + Gain = 0x063A, + Fa = 0x0641, + Gaf = 0x0642, + Kaf = 0x0643, + Lam = 0x0644, + Meem = 0x0645, + Noon = 0x0646, + Ha = 0x0647, + Waw = 0x0648, + Ya = 0x064A, + AlefMad = 0x0622, + TaMarboota = 0x0629, + PersianPe = 0x067E, // Persian Letters; + PersianChe = 0x0686, + PersianZe = 0x0698, + PersianGaf = 0x06AF, + PersianGaf2 = 0x06A9 + + } + + /// + /// Data Structure for conversion + /// + internal class ArabicMapping + { + public int from; + public int to; + public ArabicMapping(int from, int to) + { + this.from = from; + this.to = to; + } + } + + /// + /// Sets up and creates the conversion table + /// + internal class ArabicTable + { + + private static List mapList; + private static ArabicTable arabicMapper; + + /// + /// Setting up the conversion table + /// + private ArabicTable() + { + mapList = new List(); + + + + mapList.Add(new ArabicMapping((int)GeneralArabicLetters.Hamza, (int)IsolatedArabicLetters.Hamza)); + mapList.Add(new ArabicMapping((int)GeneralArabicLetters.Alef, (int)IsolatedArabicLetters.Alef)); + mapList.Add(new ArabicMapping((int)GeneralArabicLetters.AlefHamza, (int)IsolatedArabicLetters.AlefHamza)); + mapList.Add(new ArabicMapping((int)GeneralArabicLetters.WawHamza, (int)IsolatedArabicLetters.WawHamza)); + mapList.Add(new ArabicMapping((int)GeneralArabicLetters.AlefMaksoor, (int)IsolatedArabicLetters.AlefMaksoor)); + mapList.Add(new ArabicMapping((int)GeneralArabicLetters.AlefMagsora, (int)IsolatedArabicLetters.AlefMaksora)); + mapList.Add(new ArabicMapping((int)GeneralArabicLetters.HamzaNabera, (int)IsolatedArabicLetters.HamzaNabera)); + mapList.Add(new ArabicMapping((int)GeneralArabicLetters.Ba, (int)IsolatedArabicLetters.Ba)); + mapList.Add(new ArabicMapping((int)GeneralArabicLetters.Ta, (int)IsolatedArabicLetters.Ta)); + mapList.Add(new ArabicMapping((int)GeneralArabicLetters.Tha2, (int)IsolatedArabicLetters.Tha2)); + mapList.Add(new ArabicMapping((int)GeneralArabicLetters.Jeem, (int)IsolatedArabicLetters.Jeem)); + mapList.Add(new ArabicMapping((int)GeneralArabicLetters.H7aa, (int)IsolatedArabicLetters.H7aa)); + mapList.Add(new ArabicMapping((int)GeneralArabicLetters.Khaa2, (int)IsolatedArabicLetters.Khaa2)); + mapList.Add(new ArabicMapping((int)GeneralArabicLetters.Dal, (int)IsolatedArabicLetters.Dal)); + mapList.Add(new ArabicMapping((int)GeneralArabicLetters.Thal, (int)IsolatedArabicLetters.Thal)); + mapList.Add(new ArabicMapping((int)GeneralArabicLetters.Ra2, (int)IsolatedArabicLetters.Ra2)); + mapList.Add(new ArabicMapping((int)GeneralArabicLetters.Zeen, (int)IsolatedArabicLetters.Zeen)); + mapList.Add(new ArabicMapping((int)GeneralArabicLetters.Seen, (int)IsolatedArabicLetters.Seen)); + mapList.Add(new ArabicMapping((int)GeneralArabicLetters.Sheen, (int)IsolatedArabicLetters.Sheen)); + mapList.Add(new ArabicMapping((int)GeneralArabicLetters.S9a, (int)IsolatedArabicLetters.S9a)); + mapList.Add(new ArabicMapping((int)GeneralArabicLetters.Dha, (int)IsolatedArabicLetters.Dha)); + mapList.Add(new ArabicMapping((int)GeneralArabicLetters.T6a, (int)IsolatedArabicLetters.T6a)); + mapList.Add(new ArabicMapping((int)GeneralArabicLetters.T6ha, (int)IsolatedArabicLetters.T6ha)); + mapList.Add(new ArabicMapping((int)GeneralArabicLetters.Ain, (int)IsolatedArabicLetters.Ain)); + mapList.Add(new ArabicMapping((int)GeneralArabicLetters.Gain, (int)IsolatedArabicLetters.Gain)); + mapList.Add(new ArabicMapping((int)GeneralArabicLetters.Fa, (int)IsolatedArabicLetters.Fa)); + mapList.Add(new ArabicMapping((int)GeneralArabicLetters.Gaf, (int)IsolatedArabicLetters.Gaf)); + mapList.Add(new ArabicMapping((int)GeneralArabicLetters.Kaf, (int)IsolatedArabicLetters.Kaf)); + mapList.Add(new ArabicMapping((int)GeneralArabicLetters.Lam, (int)IsolatedArabicLetters.Lam)); + mapList.Add(new ArabicMapping((int)GeneralArabicLetters.Meem, (int)IsolatedArabicLetters.Meem)); + mapList.Add(new ArabicMapping((int)GeneralArabicLetters.Noon, (int)IsolatedArabicLetters.Noon)); + mapList.Add(new ArabicMapping((int)GeneralArabicLetters.Ha, (int)IsolatedArabicLetters.Ha)); + mapList.Add(new ArabicMapping((int)GeneralArabicLetters.Waw, (int)IsolatedArabicLetters.Waw)); + mapList.Add(new ArabicMapping((int)GeneralArabicLetters.Ya, (int)IsolatedArabicLetters.Ya)); + mapList.Add(new ArabicMapping((int)GeneralArabicLetters.AlefMad, (int)IsolatedArabicLetters.AlefMad)); + mapList.Add(new ArabicMapping((int)GeneralArabicLetters.TaMarboota, (int)IsolatedArabicLetters.TaMarboota)); + mapList.Add(new ArabicMapping((int)GeneralArabicLetters.PersianPe, (int)IsolatedArabicLetters.PersianPe)); // Persian Letters; + mapList.Add(new ArabicMapping((int)GeneralArabicLetters.PersianChe, (int)IsolatedArabicLetters.PersianChe)); + mapList.Add(new ArabicMapping((int)GeneralArabicLetters.PersianZe, (int)IsolatedArabicLetters.PersianZe)); + mapList.Add(new ArabicMapping((int)GeneralArabicLetters.PersianGaf, (int)IsolatedArabicLetters.PersianGaf)); + mapList.Add(new ArabicMapping((int)GeneralArabicLetters.PersianGaf2, (int)IsolatedArabicLetters.PersianGaf2)); + + + + + //for (int i = 0; i < generalArabic.Length; i++) + // mapList.Add(new ArabicMapping((int)generalArabic.GetValue(i), (int)isolatedArabic.GetValue(i))); // I + + + } + + /// + /// Singleton design pattern, Get the mapper. If it was not created before, create it. + /// + internal static ArabicTable ArabicMapper + { + get + { + if (arabicMapper == null) + arabicMapper = new ArabicTable(); + return arabicMapper; + } + } + + internal int Convert(int toBeConverted) + { + + foreach (ArabicMapping arabicMap in mapList) + if (arabicMap.from == toBeConverted) + { + return arabicMap.to; + } + return toBeConverted; + } + + + } + + + internal class TashkeelLocation + { + public char tashkeel; + public int position; + public TashkeelLocation(char tashkeel, int position) + { + this.tashkeel = tashkeel; + this.position = position; + } + } + + + internal class RTLFixerTool + { + internal static bool showTashkeel = true; + internal static bool useHinduNumbers; + + + internal static string RemoveTashkeel(string str, out List tashkeelLocation) + { + tashkeelLocation = new List(); + char[] letters = str.ToCharArray(); + + int index = 0; + for (int i = 0; i < letters.Length; i++) + { + if (letters[i] == (char)0x064B) + { // Tanween Fatha + tashkeelLocation.Add(new TashkeelLocation((char)0x064B, i)); + index++; + } + else if (letters[i] == (char)0x064C) + { // DAMMATAN + tashkeelLocation.Add(new TashkeelLocation((char)0x064C, i)); + index++; + } + else if (letters[i] == (char)0x064D) + { // KASRATAN + tashkeelLocation.Add(new TashkeelLocation((char)0x064D, i)); + index++; + } + else if (letters[i] == (char)0x064E) + { // FATHA + if (index > 0) + { + if (tashkeelLocation[index - 1].tashkeel == (char)0x0651) // SHADDA + { + tashkeelLocation[index - 1].tashkeel = (char)0xFC60; // Shadda With Fatha + continue; + } + } + + tashkeelLocation.Add(new TashkeelLocation((char)0x064E, i)); + index++; + } + else if (letters[i] == (char)0x064F) + { // DAMMA + if (index > 0) + { + if (tashkeelLocation[index - 1].tashkeel == (char)0x0651) + { // SHADDA + tashkeelLocation[index - 1].tashkeel = (char)0xFC61; // Shadda With DAMMA + continue; + } + } + tashkeelLocation.Add(new TashkeelLocation((char)0x064F, i)); + index++; + } + else if (letters[i] == (char)0x0650) + { // KASRA + if (index > 0) + { + if (tashkeelLocation[index - 1].tashkeel == (char)0x0651) + { // SHADDA + tashkeelLocation[index - 1].tashkeel = (char)0xFC62; // Shadda With KASRA + continue; + } + } + tashkeelLocation.Add(new TashkeelLocation((char)0x0650, i)); + index++; + } + else if (letters[i] == (char)0x0651) + { // SHADDA + if (index > 0) + { + if (tashkeelLocation[index - 1].tashkeel == (char)0x064E) // FATHA + { + tashkeelLocation[index - 1].tashkeel = (char)0xFC60; // Shadda With Fatha + continue; + } + + if (tashkeelLocation[index - 1].tashkeel == (char)0x064F) // DAMMA + { + tashkeelLocation[index - 1].tashkeel = (char)0xFC61; // Shadda With DAMMA + continue; + } + + if (tashkeelLocation[index - 1].tashkeel == (char)0x0650) // KASRA + { + tashkeelLocation[index - 1].tashkeel = (char)0xFC62; // Shadda With KASRA + continue; + } + } + + tashkeelLocation.Add(new TashkeelLocation((char)0x0651, i)); + index++; + } + else if (letters[i] == (char)0x0652) + { // SUKUN + tashkeelLocation.Add(new TashkeelLocation((char)0x0652, i)); + index++; + } + else if (letters[i] == (char)0x0653) + { // MADDAH ABOVE + tashkeelLocation.Add(new TashkeelLocation((char)0x0653, i)); + index++; + } + } + + string[] split = str.Split((char)0x064B, (char)0x064C, (char)0x064D, (char)0x064E, (char)0x064F, (char)0x0650, (char)0x0651, (char)0x0652, (char)0x0653, (char)0xFC60, (char)0xFC61, (char)0xFC62); + str = ""; + + foreach (string s in split) + { + str += s; + } + + return str; + } + + internal static char[] ReturnTashkeel(char[] letters, List tashkeelLocation) + { + char[] lettersWithTashkeel = new char[letters.Length + tashkeelLocation.Count]; + + int letterWithTashkeelTracker = 0; + for (int i = 0; i < letters.Length; i++) + { + lettersWithTashkeel[letterWithTashkeelTracker] = letters[i]; + letterWithTashkeelTracker++; + foreach (TashkeelLocation hLocation in tashkeelLocation) + { + if (hLocation.position == letterWithTashkeelTracker) + { + lettersWithTashkeel[letterWithTashkeelTracker] = hLocation.tashkeel; + letterWithTashkeelTracker++; + } + } + } + + return lettersWithTashkeel; + } + + /// + /// Converts a string to a form in which the sting will be displayed correctly for arabic text. + /// + /// String to be converted. Example: "Aaa" + /// Converted string. Example: "aa aaa A" without the spaces. + internal static string FixLine(string str) + { + string test = ""; + + List tashkeelLocation; + + string originString = RemoveTashkeel(str, out tashkeelLocation); + + char[] lettersOrigin = originString.ToCharArray(); + char[] lettersFinal = originString.ToCharArray(); + + + + for (int i = 0; i < lettersOrigin.Length; i++) + { + lettersOrigin[i] = (char)ArabicTable.ArabicMapper.Convert(lettersOrigin[i]); + } + + for (int i = 0; i < lettersOrigin.Length; i++) + { + bool skip = false; + + + //lettersOrigin[i] = (char)ArabicTable.ArabicMapper.Convert(lettersOrigin[i]); + + + // For special Lam Letter connections. + if (lettersOrigin[i] == (char)IsolatedArabicLetters.Lam) + { + + if (i < lettersOrigin.Length - 1) + { + //lettersOrigin[i + 1] = (char)ArabicTable.ArabicMapper.Convert(lettersOrigin[i + 1]); + if (lettersOrigin[i + 1] == (char)IsolatedArabicLetters.AlefMaksoor) + { + lettersOrigin[i] = (char)0xFEF7; + lettersFinal[i + 1] = (char)0xFFFF; + skip = true; + } + else if (lettersOrigin[i + 1] == (char)IsolatedArabicLetters.Alef) + { + lettersOrigin[i] = (char)0xFEF9; + lettersFinal[i + 1] = (char)0xFFFF; + skip = true; + } + else if (lettersOrigin[i + 1] == (char)IsolatedArabicLetters.AlefHamza) + { + lettersOrigin[i] = (char)0xFEF5; + lettersFinal[i + 1] = (char)0xFFFF; + skip = true; + } + else if (lettersOrigin[i + 1] == (char)IsolatedArabicLetters.AlefMad) + { + lettersOrigin[i] = (char)0xFEF3; + lettersFinal[i + 1] = (char)0xFFFF; + skip = true; + } + } + + } + + + if (!IsIgnoredCharacter(lettersOrigin[i])) + { + if (IsMiddleLetter(lettersOrigin, i)) + lettersFinal[i] = (char)(lettersOrigin[i] + 3); + else if (IsFinishingLetter(lettersOrigin, i)) + lettersFinal[i] = (char)(lettersOrigin[i] + 1); + else if (IsLeadingLetter(lettersOrigin, i)) + lettersFinal[i] = (char)(lettersOrigin[i] + 2); + } + + //string strOut = String.Format(@"\x{0:x4}", (ushort)lettersOrigin[i]); + //UnityEngine.Debug.Log(strOut); + + //strOut = String.Format(@"\x{0:x4}", (ushort)lettersFinal[i]); + //UnityEngine.Debug.Log(strOut); + + test += Convert.ToString(lettersOrigin[i], 16) + " "; + if (skip) + i++; + + + //chaning numbers to hindu + if (useHinduNumbers) + { + if (lettersOrigin[i] == (char)0x0030) + lettersFinal[i] = (char)0x0660; + else if (lettersOrigin[i] == (char)0x0031) + lettersFinal[i] = (char)0x0661; + else if (lettersOrigin[i] == (char)0x0032) + lettersFinal[i] = (char)0x0662; + else if (lettersOrigin[i] == (char)0x0033) + lettersFinal[i] = (char)0x0663; + else if (lettersOrigin[i] == (char)0x0034) + lettersFinal[i] = (char)0x0664; + else if (lettersOrigin[i] == (char)0x0035) + lettersFinal[i] = (char)0x0665; + else if (lettersOrigin[i] == (char)0x0036) + lettersFinal[i] = (char)0x0666; + else if (lettersOrigin[i] == (char)0x0037) + lettersFinal[i] = (char)0x0667; + else if (lettersOrigin[i] == (char)0x0038) + lettersFinal[i] = (char)0x0668; + else if (lettersOrigin[i] == (char)0x0039) + lettersFinal[i] = (char)0x0669; + } + + } + + + + //Return the Tashkeel to their places. + if (showTashkeel) + lettersFinal = ReturnTashkeel(lettersFinal, tashkeelLocation); + + + List list = new List(); + + List numberList = new List(); + + for (int i = lettersFinal.Length - 1; i >= 0; i--) + { + + + // if (lettersFinal[i] == '(') + // numberList.Add(')'); + // else if (lettersFinal[i] == ')') + // numberList.Add('('); + // else if (lettersFinal[i] == '<') + // numberList.Add('>'); + // else if (lettersFinal[i] == '>') + // numberList.Add('<'); + // else + if (char.IsPunctuation(lettersFinal[i]) && i > 0 && i < lettersFinal.Length - 1 && + (char.IsPunctuation(lettersFinal[i - 1]) || char.IsPunctuation(lettersFinal[i + 1]))) + { + if (lettersFinal[i] == '(') + list.Add(')'); + else if (lettersFinal[i] == ')') + list.Add('('); + else if (lettersFinal[i] == '<') + list.Add('>'); + else if (lettersFinal[i] == '>') + list.Add('<'); + else if (lettersFinal[i] == '[') + list.Add(']'); + else if (lettersFinal[i] == ']') + list.Add('['); + else if (lettersFinal[i] != 0xFFFF) + list.Add(lettersFinal[i]); + } + // For cases where english words and arabic are mixed. This allows for using arabic, english and numbers in one sentence. + else if (lettersFinal[i] == ' ' && i > 0 && i < lettersFinal.Length - 1 && + (char.IsLower(lettersFinal[i - 1]) || char.IsUpper(lettersFinal[i - 1]) || char.IsNumber(lettersFinal[i - 1])) && + (char.IsLower(lettersFinal[i + 1]) || char.IsUpper(lettersFinal[i + 1]) || char.IsNumber(lettersFinal[i + 1]))) + + { + numberList.Add(lettersFinal[i]); + } + + else if (char.IsNumber(lettersFinal[i]) || char.IsLower(lettersFinal[i]) || + char.IsUpper(lettersFinal[i]) || char.IsSymbol(lettersFinal[i]) || + char.IsPunctuation(lettersFinal[i]))// || lettersFinal[i] == '^') //) + { + + if (lettersFinal[i] == '(') + numberList.Add(')'); + else if (lettersFinal[i] == ')') + numberList.Add('('); + else if (lettersFinal[i] == '<') + numberList.Add('>'); + else if (lettersFinal[i] == '>') + numberList.Add('<'); + else if (lettersFinal[i] == '[') + list.Add(']'); + else if (lettersFinal[i] == ']') + list.Add('['); + else + numberList.Add(lettersFinal[i]); + } + else if (lettersFinal[i] >= (char)0xD800 && lettersFinal[i] <= (char)0xDBFF || + lettersFinal[i] >= (char)0xDC00 && lettersFinal[i] <= (char)0xDFFF) + { + numberList.Add(lettersFinal[i]); + } + else + { + if (numberList.Count > 0) + { + for (int j = 0; j < numberList.Count; j++) + list.Add(numberList[numberList.Count - 1 - j]); + numberList.Clear(); + } + if (lettersFinal[i] != 0xFFFF) + list.Add(lettersFinal[i]); + + } + } + if (numberList.Count > 0) + { + for (int j = 0; j < numberList.Count; j++) + list.Add(numberList[numberList.Count - 1 - j]); + numberList.Clear(); + } + + // Moving letters from a list to an array. + lettersFinal = new char[list.Count]; + for (int i = 0; i < lettersFinal.Length; i++) + lettersFinal[i] = list[i]; + + + str = new string(lettersFinal); + return str; + } + + /// + /// English letters, numbers and punctuation characters are ignored. This checks if the ch is an ignored character. + /// + /// The character to be checked for skipping + /// True if the character should be ignored, false if it should not be ignored. + internal static bool IsIgnoredCharacter(char ch) + { + bool isPunctuation = char.IsPunctuation(ch); + bool isNumber = char.IsNumber(ch); + bool isLower = char.IsLower(ch); + bool isUpper = char.IsUpper(ch); + bool isSymbol = char.IsSymbol(ch); + bool isPersianCharacter = ch == (char)0xFB56 || ch == (char)0xFB7A || ch == (char)0xFB8A || ch == (char)0xFB92 || ch == (char)0xFB8E; + bool isPresentationFormB = ch <= (char)0xFEFF && ch >= (char)0xFE70; + bool isAcceptableCharacter = isPresentationFormB || isPersianCharacter || ch == (char)0xFBFC; + + + + return isPunctuation || + isNumber || + isLower || + isUpper || + isSymbol || + !isAcceptableCharacter || + ch == 'a' || ch == '>' || ch == '<' || ch == (char)0x061B; + + // return char.IsPunctuation(ch) || char.IsNumber(ch) || ch == 'a' || ch == '>' || ch == '<' || + // char.IsLower(ch) || char.IsUpper(ch) || ch == (char)0x061B || char.IsSymbol(ch) + // || !(ch <= (char)0xFEFF && ch >= (char)0xFE70) // Presentation Form B + // || ch == (char)0xFB56 || ch == (char)0xFB7A || ch == (char)0xFB8A || ch == (char)0xFB92; // Persian Characters + + // PersianPe = 0xFB56, + // PersianChe = 0xFB7A, + // PersianZe = 0xFB8A, + // PersianGaf = 0xFB92 + //lettersOrigin[i] <= (char)0xFEFF && lettersOrigin[i] >= (char)0xFE70 + } + + /// + /// Checks if the letter at index value is a leading character in Arabic or not. + /// + /// The whole word that contains the character to be checked + /// The index of the character to be checked + /// True if the character at index is a leading character, else, returns false + internal static bool IsLeadingLetter(char[] letters, int index) + { + + bool lettersThatCannotBeBeforeALeadingLetter = index == 0 + || letters[index - 1] == ' ' + || letters[index - 1] == '*' // ??? Remove? + || letters[index - 1] == 'A' // ??? Remove? + || char.IsPunctuation(letters[index - 1]) + || letters[index - 1] == '>' + || letters[index - 1] == '<' + || letters[index - 1] == (int)IsolatedArabicLetters.Alef + || letters[index - 1] == (int)IsolatedArabicLetters.Dal + || letters[index - 1] == (int)IsolatedArabicLetters.Thal + || letters[index - 1] == (int)IsolatedArabicLetters.Ra2 + || letters[index - 1] == (int)IsolatedArabicLetters.Zeen + || letters[index - 1] == (int)IsolatedArabicLetters.PersianZe + //|| letters[index - 1] == (int)IsolatedArabicLetters.AlefMaksora + || letters[index - 1] == (int)IsolatedArabicLetters.Waw + || letters[index - 1] == (int)IsolatedArabicLetters.AlefMad + || letters[index - 1] == (int)IsolatedArabicLetters.AlefHamza + || letters[index - 1] == (int)IsolatedArabicLetters.AlefMaksoor + || letters[index - 1] == (int)IsolatedArabicLetters.WawHamza; + + bool lettersThatCannotBeALeadingLetter = letters[index] != ' ' + && letters[index] != (int)IsolatedArabicLetters.Dal + && letters[index] != (int)IsolatedArabicLetters.Thal + && letters[index] != (int)IsolatedArabicLetters.Ra2 + && letters[index] != (int)IsolatedArabicLetters.Zeen + && letters[index] != (int)IsolatedArabicLetters.PersianZe + && letters[index] != (int)IsolatedArabicLetters.Alef + && letters[index] != (int)IsolatedArabicLetters.AlefHamza + && letters[index] != (int)IsolatedArabicLetters.AlefMaksoor + && letters[index] != (int)IsolatedArabicLetters.AlefMad + && letters[index] != (int)IsolatedArabicLetters.WawHamza + && letters[index] != (int)IsolatedArabicLetters.Waw + && letters[index] != (int)IsolatedArabicLetters.Hamza; + + bool lettersThatCannotBeAfterLeadingLetter = index < letters.Length - 1 + && letters[index + 1] != ' ' + && !char.IsPunctuation(letters[index + 1]) + && !char.IsNumber(letters[index + 1]) + && !char.IsSymbol(letters[index + 1]) + && !char.IsLower(letters[index + 1]) + && !char.IsUpper(letters[index + 1]) + && letters[index + 1] != (int)IsolatedArabicLetters.Hamza; + + if (lettersThatCannotBeBeforeALeadingLetter && lettersThatCannotBeALeadingLetter && lettersThatCannotBeAfterLeadingLetter) + + // if ((index == 0 || letters[index - 1] == ' ' || letters[index - 1] == '*' || letters[index - 1] == 'A' || char.IsPunctuation(letters[index - 1]) + // || letters[index - 1] == '>' || letters[index - 1] == '<' + // || letters[index - 1] == (int)IsolatedArabicLetters.Alef + // || letters[index - 1] == (int)IsolatedArabicLetters.Dal || letters[index - 1] == (int)IsolatedArabicLetters.Thal + // || letters[index - 1] == (int)IsolatedArabicLetters.Ra2 + // || letters[index - 1] == (int)IsolatedArabicLetters.Zeen || letters[index - 1] == (int)IsolatedArabicLetters.PersianZe + // || letters[index - 1] == (int)IsolatedArabicLetters.AlefMaksora || letters[index - 1] == (int)IsolatedArabicLetters.Waw + // || letters[index - 1] == (int)IsolatedArabicLetters.AlefMad || letters[index - 1] == (int)IsolatedArabicLetters.AlefHamza + // || letters[index - 1] == (int)IsolatedArabicLetters.AlefMaksoor || letters[index - 1] == (int)IsolatedArabicLetters.WawHamza) + // && letters[index] != ' ' && letters[index] != (int)IsolatedArabicLetters.Dal + // && letters[index] != (int)IsolatedArabicLetters.Thal + // && letters[index] != (int)IsolatedArabicLetters.Ra2 + // && letters[index] != (int)IsolatedArabicLetters.Zeen && letters[index] != (int)IsolatedArabicLetters.PersianZe + // && letters[index] != (int)IsolatedArabicLetters.Alef && letters[index] != (int)IsolatedArabicLetters.AlefHamza + // && letters[index] != (int)IsolatedArabicLetters.AlefMaksoor + // && letters[index] != (int)IsolatedArabicLetters.AlefMad + // && letters[index] != (int)IsolatedArabicLetters.WawHamza + // && letters[index] != (int)IsolatedArabicLetters.Waw + // && letters[index] != (int)IsolatedArabicLetters.Hamza + // && index < letters.Length - 1 && letters[index + 1] != ' ' && !char.IsPunctuation(letters[index + 1] ) && !char.IsNumber(letters[index + 1]) + // && letters[index + 1] != (int)IsolatedArabicLetters.Hamza ) + { + return true; + } + + return false; + } + + /// + /// Checks if the letter at index value is a finishing character in Arabic or not. + /// + /// The whole word that contains the character to be checked + /// The index of the character to be checked + /// True if the character at index is a finishing character, else, returns false + internal static bool IsFinishingLetter(char[] letters, int index) + { + //bool indexZero = index != 0; + bool lettersThatCannotBeBeforeAFinishingLetter = index == 0 ? false : + letters[index - 1] != ' ' + // && char.IsDigit(letters[index-1]) + // && char.IsLower(letters[index-1]) + // && char.IsUpper(letters[index-1]) + // && char.IsNumber(letters[index-1]) + // && char.IsWhiteSpace(letters[index-1]) + // && char.IsPunctuation(letters[index-1]) + // && char.IsSymbol(letters[index-1]) + + && letters[index - 1] != (int)IsolatedArabicLetters.Dal + && letters[index - 1] != (int)IsolatedArabicLetters.Thal + && letters[index - 1] != (int)IsolatedArabicLetters.Ra2 + && letters[index - 1] != (int)IsolatedArabicLetters.Zeen + && letters[index - 1] != (int)IsolatedArabicLetters.PersianZe + //&& letters[index - 1] != (int)IsolatedArabicLetters.AlefMaksora + && letters[index - 1] != (int)IsolatedArabicLetters.Waw + && letters[index - 1] != (int)IsolatedArabicLetters.Alef + && letters[index - 1] != (int)IsolatedArabicLetters.AlefMad + && letters[index - 1] != (int)IsolatedArabicLetters.AlefHamza + && letters[index - 1] != (int)IsolatedArabicLetters.AlefMaksoor + && letters[index - 1] != (int)IsolatedArabicLetters.WawHamza + && letters[index - 1] != (int)IsolatedArabicLetters.Hamza + + + + && !char.IsPunctuation(letters[index - 1]) + && letters[index - 1] != '>' + && letters[index - 1] != '<'; + + + bool lettersThatCannotBeFinishingLetters = letters[index] != ' ' && letters[index] != (int)IsolatedArabicLetters.Hamza; + + + + + if (lettersThatCannotBeBeforeAFinishingLetter && lettersThatCannotBeFinishingLetters) + + // if (index != 0 && letters[index - 1] != ' ' && letters[index - 1] != '*' && letters[index - 1] != 'A' + // && letters[index - 1] != (int)IsolatedArabicLetters.Dal && letters[index - 1] != (int)IsolatedArabicLetters.Thal + // && letters[index - 1] != (int)IsolatedArabicLetters.Ra2 + // && letters[index - 1] != (int)IsolatedArabicLetters.Zeen && letters[index - 1] != (int)IsolatedArabicLetters.PersianZe + // && letters[index - 1] != (int)IsolatedArabicLetters.AlefMaksora && letters[index - 1] != (int)IsolatedArabicLetters.Waw + // && letters[index - 1] != (int)IsolatedArabicLetters.Alef && letters[index - 1] != (int)IsolatedArabicLetters.AlefMad + // && letters[index - 1] != (int)IsolatedArabicLetters.AlefHamza && letters[index - 1] != (int)IsolatedArabicLetters.AlefMaksoor + // && letters[index - 1] != (int)IsolatedArabicLetters.WawHamza && letters[index - 1] != (int)IsolatedArabicLetters.Hamza + // && !char.IsPunctuation(letters[index - 1]) && letters[index - 1] != '>' && letters[index - 1] != '<' + // && letters[index] != ' ' && index < letters.Length + // && letters[index] != (int)IsolatedArabicLetters.Hamza) + { + //try + //{ + // if (char.IsPunctuation(letters[index + 1])) + // return true; + // else + // return false; + //} + //catch (Exception e) + //{ + // return false; + //} + + return true; + } + //return true; + + return false; + } + + /// + /// Checks if the letter at index value is a middle character in Arabic or not. + /// + /// The whole word that contains the character to be checked + /// The index of the character to be checked + /// True if the character at index is a middle character, else, returns false + internal static bool IsMiddleLetter(char[] letters, int index) + { + bool lettersThatCannotBeMiddleLetters = index == 0 ? false : + letters[index] != (int)IsolatedArabicLetters.Alef + && letters[index] != (int)IsolatedArabicLetters.Dal + && letters[index] != (int)IsolatedArabicLetters.Thal + && letters[index] != (int)IsolatedArabicLetters.Ra2 + && letters[index] != (int)IsolatedArabicLetters.Zeen + && letters[index] != (int)IsolatedArabicLetters.PersianZe + //&& letters[index] != (int)IsolatedArabicLetters.AlefMaksora + && letters[index] != (int)IsolatedArabicLetters.Waw + && letters[index] != (int)IsolatedArabicLetters.AlefMad + && letters[index] != (int)IsolatedArabicLetters.AlefHamza + && letters[index] != (int)IsolatedArabicLetters.AlefMaksoor + && letters[index] != (int)IsolatedArabicLetters.WawHamza + && letters[index] != (int)IsolatedArabicLetters.Hamza; + + bool lettersThatCannotBeBeforeMiddleCharacters = index == 0 ? false : + letters[index - 1] != (int)IsolatedArabicLetters.Alef + && letters[index - 1] != (int)IsolatedArabicLetters.Dal + && letters[index - 1] != (int)IsolatedArabicLetters.Thal + && letters[index - 1] != (int)IsolatedArabicLetters.Ra2 + && letters[index - 1] != (int)IsolatedArabicLetters.Zeen + && letters[index - 1] != (int)IsolatedArabicLetters.PersianZe + //&& letters[index - 1] != (int)IsolatedArabicLetters.AlefMaksora + && letters[index - 1] != (int)IsolatedArabicLetters.Waw + && letters[index - 1] != (int)IsolatedArabicLetters.AlefMad + && letters[index - 1] != (int)IsolatedArabicLetters.AlefHamza + && letters[index - 1] != (int)IsolatedArabicLetters.AlefMaksoor + && letters[index - 1] != (int)IsolatedArabicLetters.WawHamza + && letters[index - 1] != (int)IsolatedArabicLetters.Hamza + && !char.IsPunctuation(letters[index - 1]) + && letters[index - 1] != '>' + && letters[index - 1] != '<' + && letters[index - 1] != ' ' + && letters[index - 1] != '*'; + + bool lettersThatCannotBeAfterMiddleCharacters = index >= letters.Length - 1 ? false : + letters[index + 1] != ' ' + && letters[index + 1] != '\r' + && letters[index + 1] != (int)IsolatedArabicLetters.Hamza + && !char.IsNumber(letters[index + 1]) + && !char.IsSymbol(letters[index + 1]) + && !char.IsPunctuation(letters[index + 1]); + if (lettersThatCannotBeAfterMiddleCharacters && lettersThatCannotBeBeforeMiddleCharacters && lettersThatCannotBeMiddleLetters) + + // if (index != 0 && letters[index] != ' ' + // && letters[index] != (int)IsolatedArabicLetters.Alef && letters[index] != (int)IsolatedArabicLetters.Dal + // && letters[index] != (int)IsolatedArabicLetters.Thal && letters[index] != (int)IsolatedArabicLetters.Ra2 + // && letters[index] != (int)IsolatedArabicLetters.Zeen && letters[index] != (int)IsolatedArabicLetters.PersianZe + // && letters[index] != (int)IsolatedArabicLetters.AlefMaksora + // && letters[index] != (int)IsolatedArabicLetters.Waw && letters[index] != (int)IsolatedArabicLetters.AlefMad + // && letters[index] != (int)IsolatedArabicLetters.AlefHamza && letters[index] != (int)IsolatedArabicLetters.AlefMaksoor + // && letters[index] != (int)IsolatedArabicLetters.WawHamza && letters[index] != (int)IsolatedArabicLetters.Hamza + // && letters[index - 1] != (int)IsolatedArabicLetters.Alef && letters[index - 1] != (int)IsolatedArabicLetters.Dal + // && letters[index - 1] != (int)IsolatedArabicLetters.Thal && letters[index - 1] != (int)IsolatedArabicLetters.Ra2 + // && letters[index - 1] != (int)IsolatedArabicLetters.Zeen && letters[index - 1] != (int)IsolatedArabicLetters.PersianZe + // && letters[index - 1] != (int)IsolatedArabicLetters.AlefMaksora + // && letters[index - 1] != (int)IsolatedArabicLetters.Waw && letters[index - 1] != (int)IsolatedArabicLetters.AlefMad + // && letters[index - 1] != (int)IsolatedArabicLetters.AlefHamza && letters[index - 1] != (int)IsolatedArabicLetters.AlefMaksoor + // && letters[index - 1] != (int)IsolatedArabicLetters.WawHamza && letters[index - 1] != (int)IsolatedArabicLetters.Hamza + // && letters[index - 1] != '>' && letters[index - 1] != '<' + // && letters[index - 1] != ' ' && letters[index - 1] != '*' && !char.IsPunctuation(letters[index - 1]) + // && index < letters.Length - 1 && letters[index + 1] != ' ' && letters[index + 1] != '\r' && letters[index + 1] != 'A' + // && letters[index + 1] != '>' && letters[index + 1] != '>' && letters[index + 1] != (int)IsolatedArabicLetters.Hamza + // ) + { + try + { + if (char.IsPunctuation(letters[index + 1])) + return false; + return true; + } + catch + { + return false; + } + //return true; + } + + return false; + } + } +} diff --git a/popcorn/Assets/I2/Localization/Scripts/Utils/RTLFixer.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Utils/RTLFixer.cs.meta new file mode 100644 index 00000000..c101c011 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Utils/RTLFixer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: cada559fcf5844047b6f6333f8a36012 +timeCreated: 1506968129 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Utils/RegisterCallback_AllowSyncFromGoogle.cs b/popcorn/Assets/I2/Localization/Scripts/Utils/RegisterCallback_AllowSyncFromGoogle.cs new file mode 100644 index 00000000..979d062e --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Utils/RegisterCallback_AllowSyncFromGoogle.cs @@ -0,0 +1,27 @@ +using UnityEngine; + +namespace I2.Loc +{ + public class RegisterCallback_AllowSyncFromGoogle : MonoBehaviour + { + public void Awake() + { + LocalizationManager.Callback_AllowSyncFromGoogle = AllowSyncFromGoogle; + } + + public void OnEnable() + { + LocalizationManager.Callback_AllowSyncFromGoogle = AllowSyncFromGoogle; + } + + public void OnDisable() + { + LocalizationManager.Callback_AllowSyncFromGoogle = null; + } + + public virtual bool AllowSyncFromGoogle(LanguageSourceData Source) + { + return true; + } + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Utils/RegisterCallback_AllowSyncFromGoogle.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Utils/RegisterCallback_AllowSyncFromGoogle.cs.meta new file mode 100644 index 00000000..840e486f --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Utils/RegisterCallback_AllowSyncFromGoogle.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 893c292e5fa149cf965cc68e2d471396 +timeCreated: 1601758486 \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Utils/RegisterGlobalParameters.cs b/popcorn/Assets/I2/Localization/Scripts/Utils/RegisterGlobalParameters.cs new file mode 100644 index 00000000..bde99812 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Utils/RegisterGlobalParameters.cs @@ -0,0 +1,28 @@ +using UnityEngine; + +namespace I2.Loc +{ + + public class RegisterGlobalParameters : MonoBehaviour, ILocalizationParamsManager + { + public virtual void OnEnable() + { + if (!LocalizationManager.ParamManagers.Contains(this)) + { + LocalizationManager.ParamManagers.Add(this); + LocalizationManager.LocalizeAll(true); + } + } + + public virtual void OnDisable() + { + LocalizationManager.ParamManagers.Remove(this); + } + + public virtual string GetParameterValue( string ParamName ) + { + return null; + } + + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Utils/RegisterGlobalParameters.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Utils/RegisterGlobalParameters.cs.meta new file mode 100644 index 00000000..a3c5dbb0 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Utils/RegisterGlobalParameters.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 31f3671f793c32f47b37480ed345e8fa +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/popcorn/Assets/I2/Localization/Scripts/Utils/ResourceManager.cs b/popcorn/Assets/I2/Localization/Scripts/Utils/ResourceManager.cs new file mode 100644 index 00000000..88914ac7 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Utils/ResourceManager.cs @@ -0,0 +1,186 @@ +using UnityEngine; +using System.Collections.Generic; +#if UNITY_5_4_OR_NEWER +using UnityEngine.SceneManagement; +#endif + +namespace I2.Loc +{ + public interface IResourceManager_Bundles + { + Object LoadFromBundle(string path, System.Type assetType ); + } + + public class ResourceManager : MonoBehaviour + { + #region Singleton + public static ResourceManager pInstance + { + get { + bool changed = mInstance==null; + + if (mInstance==null) + mInstance = (ResourceManager)FindObjectOfType(typeof(ResourceManager)); + + if (mInstance==null) + { + GameObject GO = new GameObject("I2ResourceManager", typeof(ResourceManager)); + GO.hideFlags = GO.hideFlags | HideFlags.HideAndDontSave; // Only hide it if this manager was autocreated + mInstance = GO.GetComponent(); + #if UNITY_5_4_OR_NEWER + SceneManager.sceneLoaded += MyOnLevelWasLoaded; + #endif + } + + if (changed && Application.isPlaying) + DontDestroyOnLoad(mInstance.gameObject); + + return mInstance; + } + } + static ResourceManager mInstance; + + #endregion + + #region Management + + public List mBundleManagers = new List(); + + #if UNITY_5_4_OR_NEWER + public static void MyOnLevelWasLoaded(Scene scene, LoadSceneMode mode) + #else + public void OnLevelWasLoaded() + #endif + { + pInstance.CleanResourceCache(); + LocalizationManager.UpdateSources(); + } + + #endregion + + #region Assets + + public Object[] Assets; + + // This function tries finding an asset in the Assets array, if not found it tries loading it from the Resources Folder + public T GetAsset( string Name ) where T : Object + { + T Obj = FindAsset( Name ) as T; + if (Obj!=null) + return Obj; + + return LoadFromResources( Name ); + } + + Object FindAsset( string Name ) + { + if (Assets!=null) + { + for (int i=0, imax=Assets.Length; i= 0; + } + + #endregion + + #region Resources Cache + + // This cache is kept for a few moments and then cleared + // Its meant to avoid doing several Resource.Load for the same Asset while Localizing + // (e.g. Lot of labels could be trying to Load the same Font) + readonly Dictionary mResourcesCache = new Dictionary(System.StringComparer.Ordinal); // This is used to avoid re-loading the same object from resources in the same frame + //bool mCleaningScheduled = false; + + public T LoadFromResources( string Path ) where T : Object + { + try + { + if (string.IsNullOrEmpty( Path )) + return null; + + Object Obj; + // Doing Resource.Load is very slow so we are catching the recently loaded objects + if (mResourcesCache.TryGetValue( Path, out Obj ) && Obj!=null) + { + return Obj as T; + } + + T obj = null; + + if (Path.EndsWith("]", System.StringComparison.OrdinalIgnoreCase)) // Handle sprites (Multiple) loaded from resources : "SpritePath[SpriteName]" + { + int idx = Path.LastIndexOf("[", System.StringComparison.OrdinalIgnoreCase); + int len = Path.Length - idx - 2; + string MultiSpriteName = Path.Substring(idx + 1, len); + Path = Path.Substring(0, idx); + + T[] objs = Resources.LoadAll(Path); + for (int j = 0, jmax = objs.Length; j < jmax; ++j) + if (objs[j].name.Equals(MultiSpriteName)) + { + obj = objs[j]; + break; + } + } + else + { + obj = Resources.Load(Path, typeof(T)) as T; + } + + if (obj == null) + obj = LoadFromBundle( Path ); + + if (obj!=null) + mResourcesCache[Path] = obj; + + /*if (!mCleaningScheduled) + { + Invoke("CleanResourceCache", 0.1f); + mCleaningScheduled = true; + }*/ + //if (obj==null) + //Debug.LogWarningFormat( "Unable to load {0} '{1}'", typeof( T ), Path ); + + return obj; + } + catch (System.Exception e) + { + Debug.LogErrorFormat( "Unable to load {0} '{1}'\nERROR: {2}", typeof(T), Path, e.ToString() ); + return null; + } + } + + public T LoadFromBundle(string path ) where T : Object + { + for (int i = 0, imax = mBundleManagers.Count; i < imax; ++i) + if (mBundleManagers[i]!=null) + { + var obj = mBundleManagers[i].LoadFromBundle(path, typeof(T)) as T; + if (obj != null) + return obj; + } + return null; + } + + public void CleanResourceCache( bool unloadResources=false ) + { + mResourcesCache.Clear(); + if (unloadResources) + Resources.UnloadUnusedAssets(); + + CancelInvoke(); + //mCleaningScheduled = false; + } + + #endregion + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Utils/ResourceManager.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Utils/ResourceManager.cs.meta new file mode 100644 index 00000000..9734d609 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Utils/ResourceManager.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: f3ae68c55d3a8e44989e08d4686b3db9 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Utils/SetLanguage.cs b/popcorn/Assets/I2/Localization/Scripts/Utils/SetLanguage.cs new file mode 100644 index 00000000..82871361 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Utils/SetLanguage.cs @@ -0,0 +1,27 @@ +using UnityEngine; + +namespace I2.Loc +{ + [AddComponentMenu("I2/Localization/SetLanguage Button")] + public class SetLanguage : MonoBehaviour + { + public string _Language; + +#if UNITY_EDITOR + public LanguageSource mSource; +#endif + + void OnClick() + { + ApplyLanguage(); + } + + public void ApplyLanguage() + { + if( LocalizationManager.HasLanguage(_Language)) + { + LocalizationManager.CurrentLanguage = _Language; + } + } + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Utils/SetLanguage.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Utils/SetLanguage.cs.meta new file mode 100644 index 00000000..fe2f0f44 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Utils/SetLanguage.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: f8d7972c568b50940a54c7f599af66c5 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Utils/SetLanguageDropdown.cs b/popcorn/Assets/I2/Localization/Scripts/Utils/SetLanguageDropdown.cs new file mode 100644 index 00000000..2b218985 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Utils/SetLanguageDropdown.cs @@ -0,0 +1,43 @@ +using UnityEngine; +using UnityEngine.UI; + +namespace I2.Loc +{ + [AddComponentMenu("I2/Localization/SetLanguage Dropdown")] + public class SetLanguageDropdown : MonoBehaviour + { + #if UNITY_5_2 || UNITY_5_3 || UNITY_5_4_OR_NEWER + void OnEnable() + { + var dropdown = GetComponent(); + if (dropdown==null) + return; + + var currentLanguage = LocalizationManager.CurrentLanguage; + if (LocalizationManager.Sources.Count==0) LocalizationManager.UpdateSources(); + var languages = LocalizationManager.GetAllLanguages(); + + // Fill the dropdown elements + dropdown.ClearOptions(); + dropdown.AddOptions( languages ); + + dropdown.value = languages.IndexOf( currentLanguage ); + dropdown.onValueChanged.RemoveListener( OnValueChanged ); + dropdown.onValueChanged.AddListener( OnValueChanged ); + } + + + void OnValueChanged( int index ) + { + var dropdown = GetComponent(); + if (index<0) + { + index = 0; + dropdown.value = index; + } + + LocalizationManager.CurrentLanguage = dropdown.options[index].text; + } + #endif + } +} \ No newline at end of file diff --git a/popcorn/Assets/I2/Localization/Scripts/Utils/SetLanguageDropdown.cs.meta b/popcorn/Assets/I2/Localization/Scripts/Utils/SetLanguageDropdown.cs.meta new file mode 100644 index 00000000..10b09caf --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Utils/SetLanguageDropdown.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 33897b093844df84a8e8a0258a1fb0dd +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/popcorn/Assets/I2/Localization/Scripts/Utils/StringObfuscator.cs b/popcorn/Assets/I2/Localization/Scripts/Utils/StringObfuscator.cs new file mode 100644 index 00000000..2d9406d9 --- /dev/null +++ b/popcorn/Assets/I2/Localization/Scripts/Utils/StringObfuscator.cs @@ -0,0 +1,74 @@ +using System; +using System.Text; + +namespace I2.Loc +{ + // Simple String Obfucator + // (not particularly safe, but will stop most players from hacking your strings and its FAST) + + public class StringObfucator + { + // Change this for your projects if you need extra security + public static char[] StringObfuscatorPassword = "ÝúbUu¸CÁ§*4PÚ©-᩾@T6Dl±ÒWâuzÅm4GÐóØ$=Íg,¥Që®iKEßr¡×60Ít4öÃ~^«y:Èd1