比较提交

...
此合并请求有变更与目标分支冲突。
/.gitignore
/com.unity.ml-agents.extensions/package.json
/ML-Agents-Input-Example/Assets/ML-Agents/Examples/PushBlock/PushBlockActions.inputactions.meta
/com.unity.ml-agents.extensions/Tests/Editor/Sensors/CountingGridSensorPerceiveTests.cs
/com.unity.ml-agents.extensions/Tests/Editor/Sensors/GridObservationPerceiveTests.cs
/com.unity.ml-agents.extensions/Tests/Editor/Sensors/GridSensorTestUtils.cs
/com.unity.ml-agents.extensions/Runtime/Sensors/CountingGridSensor.cs
/com.unity.ml-agents.extensions/Runtime/Sensors/GridSensor.cs
/ML-Agents-Input-Example/.gitignore
/ML-Agents-Input-Example/ProjectSettings/DynamicsManager.asset
/ML-Agents-Input-Example/ProjectSettings/EditorSettings.asset
/ML-Agents-Input-Example/ProjectSettings/PresetManager.asset
/ML-Agents-Input-Example/ProjectSettings/ProjectSettings.asset
/ML-Agents-Input-Example/ProjectSettings/ProjectVersion.txt
/ML-Agents-Input-Example/ProjectSettings/QualitySettings.asset
/ML-Agents-Input-Example/ProjectSettings/TagManager.asset
/ML-Agents-Input-Example/ProjectSettings/VFXManager.asset
/ML-Agents-Input-Example/ProjectSettings/EditorBuildSettings.asset
/ML-Agents-Input-Example/ProjectSettings/GraphicsSettings.asset
/ML-Agents-Input-Example/Assets/InputSystem.inputsettings.asset
/ML-Agents-Input-Example/Assets/InputSystem.inputsettings.asset.meta
/ML-Agents-Input-Example/Assets/ML-Agents.meta
/ML-Agents-Input-Example/Assets/ML-Agents/Examples.meta
/ML-Agents-Input-Example/Assets/ML-Agents/Examples/PushBlock.meta
/ML-Agents-Input-Example/Packages/manifest.json
/ML-Agents-Input-Example/Packages/packages-lock.json
/ML-Agents-Input-Example/ProjectSettings/BurstAotSettings_StandaloneLinux64.json
/ML-Agents-Input-Example/LinuxPlayer_s.debug
/ML-Agents-Input-Example/UnityPlayer.so
/ML-Agents-Input-Example/UnityPlayer_s.debug
/ML-Agents-Input-Example/Assets/Samples.meta
/ML-Agents-Input-Example/Assets/Samples
/ML-Agents-Input-Example/Assets/ML-Agents/Examples/PushBlock/Prefabs.meta
/ML-Agents-Input-Example/Assets/ML-Agents/Examples/PushBlock/Prefabs
/ML-Agents-Input-Example/Assets/ML-Agents/Examples/PushBlock/Prefabs
/ML-Agents-Input-Example/Assets/ML-Agents/Examples/PushBlock/Scenes.meta
/ML-Agents-Input-Example/Assets/ML-Agents/Examples/PushBlock/Scripts.meta
/ML-Agents-Input-Example/Assets/ML-Agents/Examples/PushBlock/Scripts
/ML-Agents-Input-Example/Assets/ML-Agents/Examples/PushBlock/Scripts
/ML-Agents-Input-Example/Assets/ML-Agents/Examples/PushBlock/Scripts
/ML-Agents-Input-Example/Assets/ML-Agents/Examples/PushBlock/Scripts
/ML-Agents-Input-Example/Assets/ML-Agents/Examples/PushBlock/Scripts
/ML-Agents-Input-Example/Assets/ML-Agents/Examples/PushBlock/Scripts
/ML-Agents-Input-Example/Assets/ML-Agents/Examples/PushBlock/Scripts
/ML-Agents-Input-Example/Assets/ML-Agents/Examples/PushBlock/Prefabs.meta
/ML-Agents-Input-Example/Assets/ML-Agents/Examples/PushBlock/Prefabs
/ML-Agents-Input-Example/Assets/ML-Agents/Examples/PushBlock/Prefabs
/ML-Agents-Input-Example/Assets/ML-Agents/Examples/PushBlock/Prefabs
/ML-Agents-Input-Example/Assets/ML-Agents/Examples/PushBlock/Scenes.meta
/ML-Agents-Input-Example/Assets/ML-Agents/Examples/PushBlock/Scripts.meta
/ML-Agents-Input-Example/Assets/ML-Agents/Examples/PushBlock/Scripts
/ML-Agents-Input-Example/Assets/ML-Agents/Examples/PushBlock/Scripts
/ML-Agents-Input-Example/Assets/ML-Agents/Examples/PushBlock/Scripts
/ML-Agents-Input-Example/Assets/ML-Agents/Examples/PushBlock/Scripts
/ML-Agents-Input-Example/Assets/ML-Agents/Examples/PushBlock/Scripts
/ML-Agents-Input-Example/Assets/ML-Agents/Examples/PushBlock/TFModels

7 次代码提交

作者 SHA1 备注 提交日期
Christopher Goy 6db4c0d4 Update tanks to work again. 4 年前
Christopher Goy eeeb7ba3 upate scene layout. 4 年前
Christopher Goy ee7c0d18 Make debug drawing more transparent. 4 年前
Christopher Goy b23b467d minor tweaks. 4 年前
Christopher Goy 20c5c293 Get grid sensor working again. 4 年前
Christopher Goy dd6caee9 Jobify grid sensor 4 年前
Christopher Goy f6596d8d reset everything except tanks example to main. 4 年前
共有 714 个文件被更改,包括 8476 次插入1612 次删除
  1. 3
      com.unity.ml-agents.extensions/package.json
  2. 37
      com.unity.ml-agents.extensions/Tests/Editor/Sensors/CountingGridSensorPerceiveTests.cs
  3. 25
      com.unity.ml-agents.extensions/Tests/Editor/Sensors/GridObservationPerceiveTests.cs
  4. 3
      com.unity.ml-agents.extensions/Tests/Editor/Sensors/GridSensorTestUtils.cs
  5. 3
      com.unity.ml-agents.extensions/Runtime/Unity.ML-Agents.Extensions.asmdef
  6. 45
      com.unity.ml-agents.extensions/Runtime/Sensors/CountingGridSensor.cs
  7. 680
      com.unity.ml-agents.extensions/Runtime/Sensors/GridSensor.cs
  8. 2
      .gitignore
  9. 2
      ML-Agents-Input-Example/.gitignore
  10. 21
      ML-Agents-Input-Example/ProjectSettings/DynamicsManager.asset
  11. 6
      ML-Agents-Input-Example/ProjectSettings/EditorSettings.asset
  12. 3
      ML-Agents-Input-Example/ProjectSettings/PresetManager.asset
  13. 155
      ML-Agents-Input-Example/ProjectSettings/ProjectSettings.asset
  14. 4
      ML-Agents-Input-Example/ProjectSettings/ProjectVersion.txt
  15. 20
      ML-Agents-Input-Example/ProjectSettings/QualitySettings.asset
  16. 34
      ML-Agents-Input-Example/ProjectSettings/TagManager.asset
  17. 1
      ML-Agents-Input-Example/ProjectSettings/VFXManager.asset
  18. 6
      ML-Agents-Input-Example/ProjectSettings/EditorBuildSettings.asset
  19. 3
      ML-Agents-Input-Example/ProjectSettings/GraphicsSettings.asset
  20. 5
      ML-Agents-Input-Example/Assets/InputSystem.inputsettings.asset
  21. 4
      ML-Agents-Input-Example/Assets/InputSystem.inputsettings.asset.meta
  22. 2
      ML-Agents-Input-Example/Assets/ML-Agents.meta
  23. 2
      ML-Agents-Input-Example/Assets/ML-Agents/Examples.meta
  24. 4
      ML-Agents-Input-Example/Assets/ML-Agents/Examples/PushBlock.meta
  25. 58
      ML-Agents-Input-Example/Assets/ML-Agents/Examples/PushBlock/PushBlockActions.inputactions
  26. 11
      ML-Agents-Input-Example/Assets/ML-Agents/Examples/PushBlock/PushBlockActions.inputactions.meta
  27. 23
      ML-Agents-Input-Example/Packages/manifest.json
  28. 133
      ML-Agents-Input-Example/Packages/packages-lock.json
  29. 2
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Scripts/Tank/TankAgent.cs.meta
  30. 2
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Scripts/Tank/TanksInputActions.cs.meta
  31. 2
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Scripts/UI/ButtonRemapScreenController.cs.meta
  32. 2
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Prefabs/Tanks.onnx.meta
  33. 15
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Materials/BuildingGlass.mat
  34. 1001
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Models/Concrete.fbx
  35. 33
      config/poca/Tanks.yaml
  36. 15
      ML-Agents-Input-Example/ProjectSettings/BurstAotSettings_StandaloneLinux64.json
  37. 3
      ML-Agents-Input-Example/LinuxPlayer_s.debug
  38. 8
      ML-Agents-Input-Example/Assets/Samples.meta
  39. 8
      ML-Agents-Input-Example/Assets/Samples/Input System.meta
  40. 8
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2.meta
  41. 8
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo.meta
  42. 4
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/.sample.json
  43. 9
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Animators.meta
  44. 72
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Animators/Pumpjack.controller
  45. 8
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Animators/Pumpjack.controller.meta
  46. 9
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/AudioClips.meta
  47. 21
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/AudioClips/BackgroundMusic.wav.meta
  48. 1001
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/AudioClips/EngineDriving.aif
  49. 21
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/AudioClips/EngineDriving.aif.meta
  50. 1001
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/AudioClips/EngineIdle.aif
  51. 21
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/AudioClips/EngineIdle.aif.meta
  52. 879
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/AudioClips/ShellExplosion.wav
  53. 21
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/AudioClips/ShellExplosion.wav.meta
  54. 1001
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/AudioClips/ShotCharging.wav
  55. 21
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/AudioClips/ShotCharging.wav.meta
  56. 1001
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/AudioClips/ShotFiring.wav
  57. 21
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/AudioClips/ShotFiring.wav.meta
  58. 1001
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/AudioClips/TankExplosion.wav
  59. 21
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/AudioClips/TankExplosion.wav.meta
  60. 9
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/AudioMixers.meta
  61. 225
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/AudioMixers/MainMix.mixer
  62. 8
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/AudioMixers/MainMix.mixer.meta
  63. 9
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Editor.meta
  64. 17
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Editor/MoveSceneViewCamera.cs
  65. 12
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Editor/MoveSceneViewCamera.cs.meta
  66. 9
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Fonts.meta
  67. 9
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Fonts/Bowlby_One.meta
  68. 518
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Fonts/Bowlby_One/BowlbyOne-Regular.ttf
  69. 18
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Fonts/Bowlby_One/BowlbyOne-Regular.ttf.meta
  70. 93
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Fonts/Bowlby_One/FontLicense.txt
  71. 8
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Fonts/Bowlby_One/FontLicense.txt.meta
  72. 9
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Materials.meta
  73. 75
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Materials/Blue.mat
  74. 8
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Materials/Blue.mat.meta
  75. 79
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Materials/Brown.mat
  76. 8
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Materials/Brown.mat.meta
  77. 8
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Materials/BuildingGlass.mat.meta
  78. 77
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Materials/BuildingGrey.mat
  79. 8
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Materials/BuildingGrey.mat.meta
  80. 77
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Materials/BuildingMetal.mat
  81. 8
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Materials/BuildingMetal.mat.meta
  82. 77
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Materials/BuildingStone.mat
  83. 8
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Materials/BuildingStone.mat.meta
  84. 77
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Materials/BuildingWhite.mat
  85. 8
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Materials/BuildingWhite.mat.meta
  86. 91
      ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Materials/Dust.mat

3
com.unity.ml-agents.extensions/package.json


"unity": "2018.4",
"description": "A source-only package for new features based on ML-Agents",
"dependencies": {
"com.unity.ml-agents": "1.9.0-preview"
"com.unity.ml-agents": "1.9.0-preview",
"com.unity.burst": "1.4.6"
}
}

37
com.unity.ml-agents.extensions/Tests/Editor/Sensors/CountingGridSensorPerceiveTests.cs


using System.Collections;
using NUnit.Framework;
using Unity.Collections;
using UnityEngine;
using UnityEngine.TestTools;
using Unity.MLAgents.Extensions.Sensors;

public GameObject CreateBlock(Vector3 postion, string tag, string name)
{
GameObject boxGo = new GameObject(name);
var boxGo = new GameObject(name);
boxGo.tag = tag;
boxGo.transform.position = postion;
boxGo.AddComponent<BoxCollider>();

yield return null;
float[] output = gridSensor.Perceive();
var output = gridSensor.Perceive(); gridSensor.UpdateBufferFromJob();
int[] subarrayIndicies = new int[] { 77, 78, 87, 88 };
float[][] expectedSubarrays = GridObsTestUtils.DuplicateArray(new[] { 1f }, 4);
float[] expectedDefault = new float[] { 0 };
var subarrayIndicies = new int[] { 77, 78, 87, 88 };
var expectedSubarrays = GridObsTestUtils.DuplicateArray(new[] { 1f }, 4);
var expectedDefault = new float[] { 0 };
GridObsTestUtils.AssertSubarraysAtIndex(output, subarrayIndicies, expectedSubarrays, expectedDefault);
}

yield return null;
float[] output = gridSensor.Perceive();
var output = gridSensor.Perceive(); gridSensor.UpdateBufferFromJob();
int[] subarrayIndicies = new int[] { 77, 78, 87, 88 };
float[][] expectedSubarrays = GridObsTestUtils.DuplicateArray(new[] { 1f }, 4);
float[] expectedDefault = new float[] { 0f };
var subarrayIndicies = new int[] { 77, 78, 87, 88 };
var expectedSubarrays = GridObsTestUtils.DuplicateArray(new[] { 1f }, 4);
var expectedDefault = new float[] { 0f };
GridObsTestUtils.AssertSubarraysAtIndex(output, subarrayIndicies, expectedSubarrays, expectedDefault);
}

yield return null;
float[] output = gridSensor.Perceive();
var output = gridSensor.Perceive();
gridSensor.UpdateBufferFromJob();
int[] subarrayIndicies = new int[] { 77, 78, 87, 88 };
float[][] expectedSubarrays = GridObsTestUtils.DuplicateArray(new[] { .5f }, 4);
float[] expectedDefault = new float[] { 0 };
var subarrayIndicies = new int[] { 77, 78, 87, 88 };
var expectedSubarrays = GridObsTestUtils.DuplicateArray(new[] { .25f }, 4);
var expectedDefault = new float[] { 0 };
GridObsTestUtils.AssertSubarraysAtIndex(output, subarrayIndicies, expectedSubarrays, expectedDefault);
}

yield return null;
float[] output = gridSensor.Perceive();
var output = gridSensor.Perceive();
gridSensor.UpdateBufferFromJob();
int[] subarrayIndicies = new int[] { 77, 78, 87, 88 };
float[][] expectedSubarrays = GridObsTestUtils.DuplicateArray(new[] { .5f, 1 }, 4);
float[] expectedDefault = new float[] { 0, 0 };
var subarrayIndicies = new int[] { 77, 78, 87, 88 };
var expectedSubarrays = GridObsTestUtils.DuplicateArray(new[] { 0f, 1 }, 4);
var expectedDefault = new float[] { 0, 0 };
GridObsTestUtils.AssertSubarraysAtIndex(output, subarrayIndicies, expectedSubarrays, expectedDefault);
}
}

25
com.unity.ml-agents.extensions/Tests/Editor/Sensors/GridObservationPerceiveTests.cs


using System.Collections;
using NUnit.Framework;
using Unity.Collections;
using UnityEngine;
using UnityEngine.TestTools;
using Unity.MLAgents.Extensions.Sensors;

yield return null;
float[] output = gridSensor.Perceive();
var output = gridSensor.Perceive(); gridSensor.UpdateBufferFromJob();
int[] subarrayIndicies = new int[] { 77, 78, 87, 88 };
float[][] expectedSubarrays = GridObsTestUtils.DuplicateArray(new float[] { 0, 0, 1 }, 4);
float[] expectedDefault = new float[] { 1, 0, 0 };
var subarrayIndicies = new int[] { 77, 78, 87, 88 };
var expectedSubarrays = GridObsTestUtils.DuplicateArray(new float[] { 0, 0, 1 }, 4);
var expectedDefault = new float[] { 1, 0, 0 };
GridObsTestUtils.AssertSubarraysAtIndex(output, subarrayIndicies, expectedSubarrays, expectedDefault);
}

yield return null;
float[] output = gridSensor.Perceive();
var output = gridSensor.Perceive(); gridSensor.UpdateBufferFromJob();
int[] subarrayIndicies = new int[] { 77, 78, 87, 88 };
float[][] expectedSubarrays = GridObsTestUtils.DuplicateArray(new[] { 2f / 3f }, 4);
float[] expectedDefault = new float[] { 0f };
var subarrayIndicies = new int[] { 77, 78, 87, 88 };
var expectedSubarrays = GridObsTestUtils.DuplicateArray(new[] { 2f / 3f }, 4);
var expectedDefault = new float[] { 0f };
GridObsTestUtils.AssertSubarraysAtIndex(output, subarrayIndicies, expectedSubarrays, expectedDefault);
}

yield return null;
float[] output = gridSensor.Perceive();
var output = gridSensor.Perceive(); gridSensor.UpdateBufferFromJob();
int[] subarrayIndicies = new int[] { 77, 78, 87, 88 };
float[][] expectedSubarrays = GridObsTestUtils.DuplicateArray(new[] { 1f / 3f }, 4);
float[] expectedDefault = new float[] { 0f };
var subarrayIndicies = new int[] { 77, 78, 87, 88 };
var expectedSubarrays = GridObsTestUtils.DuplicateArray(new[] { 1f / 3f }, 4);
var expectedDefault = new float[] { 0f };
GridObsTestUtils.AssertSubarraysAtIndex(output, subarrayIndicies, expectedSubarrays, expectedDefault);
}
}

3
com.unity.ml-agents.extensions/Tests/Editor/Sensors/GridSensorTestUtils.cs


using NUnit.Framework;
using System;
using System.Linq;
using Unity.Collections;
namespace Unity.MLAgents.Extensions.Tests.Sensors
{

/// expecedDefaultArray = new float[] {0, 0}
/// )
/// </example>
public static void AssertSubarraysAtIndex(float[] total, int[] indicies, float[][] expectedArrays, float[] expectedDefaultArray)
public static void AssertSubarraysAtIndex(NativeArray<float> total, int[] indicies, float[][] expectedArrays, float[] expectedDefaultArray)
{
int totalIndex = 0;
int subIndex = 0;

3
com.unity.ml-agents.extensions/Runtime/Unity.ML-Agents.Extensions.asmdef


"references": [
"Unity.Barracuda",
"Unity.ML-Agents",
"Unity.ML-Agents.Extensions.Input"
"Unity.ML-Agents.Extensions.Input",
"Unity.Burst"
]
}

45
com.unity.ml-agents.extensions/Runtime/Sensors/CountingGridSensor.cs


using System;
using Unity.Collections;
using UnityEngine;
namespace Unity.MLAgents.Extensions.Sensors

/// </summary>
public override void InitChannelHotDefaultPerceptionBuffer()
{
m_ChannelHotDefaultPerceptionBuffer = new float[ObservationPerCell];
m_ChannelHotDefaultPerceptionBuffer = new NativeArray<float>(ObservationPerCell, Allocator.Persistent);
}
/// <inheritdoc/>

/// For each collider, calls LoadObjectData on the gameobejct
/// </summary>
/// <param name="foundColliders">The array of colliders</param>
/// <param name="numFound"></param>
/// <param name="cellIndex">The cell index the collider is in</param>
/// <param name="cellCenter">the center of the cell the collider is in</param>
protected override void ParseColliders(Collider[] foundColliders, int numFound, int cellIndex, Vector3 cellCenter)

closestColliderPoint = foundColliders[i].ClosestPointOnBounds(cellCenter);
LoadObjectData(currentColliderGo, cellIndex,
Vector3.Distance(closestColliderPoint, transform.position) * InverseSphereRadius);
if (m_DetectableObjectToIndex.TryGetValue(currentColliderGo.tag, out var detectableIndex))
{
LoadObjectData(currentColliderGo, cellIndex,
detectableIndex, Vector3.Distance(closestColliderPoint, transform.position) * InverseSphereRadius);
}
}
}

/// </summary>
/// <param name="currentColliderGo">the current game object</param>
/// <param name="cellIndex">the index of the cell</param>
/// <param name="detectableIndex"></param>
protected override void LoadObjectData(GameObject currentColliderGo, int cellIndex, float normalizedDistance)
protected override void LoadObjectData(GameObject currentColliderGo, int cellIndex, int detectableIndex, float normalizedDistance)
for (int i = 0; i < DetectableObjects.Length; i++)
if (ShowGizmos)
if (currentColliderGo != null && currentColliderGo.CompareTag(DetectableObjects[i]))
Color debugRayColor = Color.white;
if (DebugColors.Length > 0)
if (ShowGizmos)
{
Color debugRayColor = Color.white;
if (DebugColors.Length > 0)
{
debugRayColor = DebugColors[i];
}
CellActivity[cellIndex] = new Color(debugRayColor.r, debugRayColor.g, debugRayColor.b, .5f);
}
/// <remarks>
/// The observations are "channel count" so each grid is WxHxC where C is the number of tags
/// This means that each value channelValues[i] is a counter of gameobject included into grid cells where i is the index of the tag in DetectableObjects
/// </remarks>
int countIndex = cellIndex * ObservationPerCell + i;
m_PerceptionBuffer[countIndex] = Mathf.Min(1f, m_PerceptionBuffer[countIndex] + 1f / ChannelDepth[i]);
break;
debugRayColor = DebugColors[detectableIndex];
CellActivity[cellIndex] = new Color(debugRayColor.r, debugRayColor.g, debugRayColor.b, .5f);
// <remarks>
// The observations are "channel count" so each grid is WxHxC where C is the number of tags
// This means that each value channelValues[i] is a counter of gameobject included into grid cells where i is the index of the tag in DetectableObjects
// </remarks>
int countIndex = cellIndex * ObservationPerCell + detectableIndex;
m_PerceptionBuffer[countIndex] = Mathf.Min(1f, m_PerceptionBuffer[countIndex] + (1f / ChannelDepth[detectableIndex]));
}
}
}

680
com.unity.ml-agents.extensions/Runtime/Sensors/GridSensor.cs


using System;
using System.Collections.Generic;
using Unity.Collections;
using Unity.Jobs;
using UnityEngine.Jobs;
using Unity.Burst;
using Unity.Collections.LowLevel.Unsafe;
#if UNITY_EDITOR
using UnityEditor;
#endif
namespace Unity.MLAgents.Extensions.Sensors
{

"Physics API. If the number of colliders found is >= InitialColliderBufferSize the array " +
"will be resized to double its current size. The hard coded absolute size is 500.")]
public int InitialColliderBufferSize = 4;
Collider[] m_ColliderBuffer;
// Collider[] m_ColliderBuffer;
NativeArray<RaycastHit> m_Hits;
NativeArray<int> m_HitIndexes;
NativeArray<BoxcastCommand> m_BoxcastCommands;
protected Dictionary<string, int> m_DetectableObjectToIndex = new Dictionary<string, int>();
/// <summary>
/// The offsets used to specify where within a cell's allotted data, certain observations will be inserted.
/// </summary>
[HideInInspector]
public NativeArray<int> ChannelOffsets;
public NativeArray<float> PerceptionBuffer => m_PerceptionBuffer;
/// <summary>
/// The main storage of perceptual information.
/// </summary>
protected NativeArray<float> m_PerceptionBuffer;
/// <summary>
/// The default value of the perceptionBuffer when using the ChannelHot DepthType. Used to reset the array/
/// </summary>
protected NativeArray<float> m_ChannelHotDefaultPerceptionBuffer;
/// <summary>
/// Array of colors displaying the DebugColors for each cell in OnDrawGizmos. Only updated if ShowGizmos.
/// </summary>
protected NativeArray<Color> CellActivity;
/// <summary>
/// Array of positions where each position is the center of a cell.
/// </summary>
private NativeArray<Vector3> CellPoints;
float[] m_ChannelBuffer;

[HideInInspector]
public int NumberOfObservations;
/// <summary>
/// The offsets used to specify where within a cell's allotted data, certain observations will be inserted.
/// </summary>
[HideInInspector]
public int[] ChannelOffsets;
/// <summary>
/// The main storage of perceptual information.
/// </summary>
protected float[] m_PerceptionBuffer;
/// <summary>
/// The default value of the perceptionBuffer when using the ChannelHot DepthType. Used to reset the array/
/// </summary>
protected float[] m_ChannelHotDefaultPerceptionBuffer;
/// <summary>
/// Array of Colors needed in order to load the values of the perception buffer to a texture.

public bool ShowGizmos = false;
public SensorCompressionType CompressionType = SensorCompressionType.PNG;
/// <summary>
/// Array of colors displaying the DebugColors for each cell in OnDrawGizmos. Only updated if ShowGizmos.
/// </summary>
protected Color[] CellActivity;
/// <summary>
/// Array of positions where each position is the center of a cell.
/// </summary>
private Vector3[] CellPoints;
/// <summary>
/// List representing the multiple compressed images of all of the grids

private List<byte[]> byteSizesBytesList;
private Color DebugDefaultColor = new Color(1f, 1f, 1f, 0.25f);
internal JobHandle m_boxcastJobHandle;
/// <inheritdoc/>
public override ISensor CreateSensor()

public void InitGridParameters()
{
NumCells = GridNumSideX * GridNumSideZ;
float sphereRadiusX = (CellScaleX * GridNumSideX) / Mathf.Sqrt(2);
float sphereRadiusZ = (CellScaleZ * GridNumSideZ) / Mathf.Sqrt(2);
var sphereRadiusX = (CellScaleX * GridNumSideX) / Mathf.Sqrt(2);
var sphereRadiusZ = (CellScaleZ * GridNumSideZ) / Mathf.Sqrt(2);
ChannelOffsets = new int[ChannelDepth.Length];
DisposeNativeArray(ChannelOffsets);
ChannelOffsets = new NativeArray<int>(ChannelDepth.Length, Allocator.Persistent);
DiffNumSideZX = (GridNumSideZ - GridNumSideX);
OffsetGridNumSide = (GridNumSideZ - 1f) / 2f;
HalfOfGridX = CellScaleX * GridNumSideX / 2;

ObservationPerCell = 0;
ChannelOffsets[ChannelOffsets.Length - 1] = 0;
for (int i = 1; i < ChannelDepth.Length; i++)
for (var i = 1; i < ChannelDepth.Length; i++)
for (int i = 0; i < ChannelDepth.Length; i++)
for (var i = 0; i < ChannelDepth.Length; i++)
{
ObservationPerCell += ChannelDepth[i];
}

/// </summary>
private void InitCellPoints()
{
CellPoints = new Vector3[NumCells];
if (CellPoints.IsCreated)
{
CellPoints.Dispose();
}
CellPoints = new NativeArray<Vector3>(NumCells, Allocator.Persistent);
for (int i = 0; i < NumCells; i++)
for (var i = 0; i < NumCells; i++)
{
CellPoints[i] = CellToPoint(i, false);
}

/// </summary>
public virtual void InitChannelHotDefaultPerceptionBuffer()
{
m_ChannelHotDefaultPerceptionBuffer = new float[ObservationPerCell];
for (int i = 0; i < ChannelDepth.Length; i++)
if (m_ChannelHotDefaultPerceptionBuffer.IsCreated)
{
m_ChannelHotDefaultPerceptionBuffer.Dispose();
}
m_ChannelHotDefaultPerceptionBuffer = new NativeArray<float>(ObservationPerCell, Allocator.Persistent);
for (var i = 0; i < ChannelDepth.Length; i++)
{
if (ChannelDepth[i] > 1)
{

Initialized = true;
NumberOfObservations = ObservationPerCell * NumCells;
m_PerceptionBuffer = new float[NumberOfObservations];
if (m_PerceptionBuffer.IsCreated)
{
m_boxcastJobHandle.Complete();
}
DisposeNativeArray(m_PerceptionBuffer);
m_PerceptionBuffer = new NativeArray<float>(NumberOfObservations, Allocator.Persistent);
if (gridDepthType == GridDepthType.ChannelHot)
{
InitChannelHotDefaultPerceptionBuffer();

else
NumImages += 1;
CellActivity = new Color[NumCells];
m_ChannelBuffer = new float[ChannelDepth.Length];
DisposeNativeArray(CellActivity);
CellActivity = new NativeArray<Color>(NumCells, Allocator.Persistent);
}
void OnEnable()
{
Start();
}
void OnDestroy()
{
DisposeNativeArray(m_Hits);
DisposeNativeArray(m_HitIndexes);
DisposeNativeArray(m_PerceptionBuffer);
DisposeNativeArray(m_BoxcastCommands);
DisposeNativeArray(CellActivity);
DisposeNativeArray(CellPoints);
DisposeNativeArray(m_ChannelHotDefaultPerceptionBuffer);
DisposeNativeArray(ChannelOffsets);
/// <summary>
/// Calls the initialization methods. Creates the data storing properties used to send the data

InitDepthType();
InitCellPoints();
InitPerceptionBuffer();
m_ColliderBuffer = new Collider[Math.Min(MaxColliderBufferSize, InitialColliderBufferSize)];
DisposeNativeArray(m_Hits);
m_Hits = new NativeArray<RaycastHit>(NumCells, Allocator.Persistent);
DisposeNativeArray(m_HitIndexes);
m_HitIndexes = new NativeArray<int>(NumCells, Allocator.Persistent);
DisposeNativeArray(m_BoxcastCommands);
m_BoxcastCommands = new NativeArray<BoxcastCommand>(NumCells, Allocator.Persistent);
for (var i = 0; i < DetectableObjects.Length; i++)
{
m_DetectableObjectToIndex[DetectableObjects[i]] = i;
}
// Default root reference to current game object
if (rootReference == null)
rootReference = gameObject;

/// <inheritdoc cref="ISensor.Reset"/>
void ISensor.Reset() { }
[BurstCompile(CompileSynchronously = true)]
struct ClearBufferOneHotJob : IJobParallelFor
{
public NativeArray<float> PerceptionBuf;
[ReadOnly]
public NativeArray<float> ChannelHotBuf;
public int ObservationPerCell;
public void Execute(int index)
{
PerceptionBuf[index] = ChannelHotBuf[index % ObservationPerCell];
}
}
[BurstCompile(CompileSynchronously = true)]
struct ClearBufferChannelJob : IJobParallelFor
{
public NativeArray<float> PerceptionBuf;
public void Execute(int index)
{
PerceptionBuf[index] = 0;
}
}
[BurstCompile(CompileSynchronously = true)]
struct ClearCellActivityJob : IJobParallelFor
{
public NativeArray<Color> CellActivity;
public Color DebugDefault;
public void Execute(int index)
{
CellActivity[index] = DebugDefault;
}
}
/// <summary>
/// Clears the perception buffer before loading in new data. If the gridDepthType is ChannelHot, then it initializes the

{
if (m_PerceptionBuffer != null)
Profiler.BeginSample("ClearPerceptionBuffer");
for (int i = 0; i < NumCells; i++)
for (var i = 0; i < m_PerceptionBuffer.Length; i++)
Array.Copy(m_ChannelHotDefaultPerceptionBuffer, 0, m_PerceptionBuffer, i * ObservationPerCell, ObservationPerCell);
m_PerceptionBuffer[i] = m_ChannelHotDefaultPerceptionBuffer[i % ObservationPerCell];
Array.Clear(m_PerceptionBuffer, 0, m_PerceptionBuffer.Length);
for (var i = 0; i < m_PerceptionBuffer.Length; i++)
{
m_PerceptionBuffer[i] = 0;
}
}
if (ShowGizmos)
{
// Assign the default color to the cell activities
for (var i = 0; i < NumCells; i++)
{
CellActivity[i] = DebugDefaultColor;
}
else
{
m_PerceptionBuffer = new float[NumberOfObservations];
m_ColliderBuffer = new Collider[Math.Min(MaxColliderBufferSize, InitialColliderBufferSize)];
}
Profiler.EndSample();
}
if (ShowGizmos)
static void DisposeNativeArray<TD>(NativeArray<TD> array)
where TD : struct
{
if (array.IsCreated)
// Ensure to init arrays if not yet assigned (for editor)
if (CellActivity == null)
CellActivity = new Color[NumCells];
// Assign the default color to the cell activities
for (int i = 0; i < NumCells; i++)
{
CellActivity[i] = DebugDefaultColor;
}
array.Dispose();
}
}

/// <returns>byte[] containing the compressed observation of the grid observation</returns>
public byte[] GetCompressedObservation()
{
using (TimerStack.Instance.Scoped("GridSensor.GetCompressedObservation"))
UpdateBufferFromJob();
var allBytes = new List<byte>();
Profiler.BeginSample("GridSensor.GetCompressedObservation");
Perceive(); // Fill the perception buffer with observed data
var allBytes = new List<byte>();
for (int i = 0; i < NumImages - 1; i++)
for (var i = 0; i < NumImages - 1; i++)
{
ChannelsToTexture(3 * i, 3);
allBytes.AddRange(m_perceptionTexture2D.EncodeToPNG());

allBytes.AddRange(m_perceptionTexture2D.EncodeToPNG());
return allBytes.ToArray();
Profiler.EndSample();
return allBytes.ToArray();
}
/// <summary>

/// <param name="numChannelsToAdd"></param>
protected void ChannelsToTexture(int channelIndex, int numChannelsToAdd)
{
for (int i = 0; i < NumCells; i++)
for (var i = 0; i < NumCells; i++)
for (int j = 0; j < numChannelsToAdd; j++)
for (var j = 0; j < numChannelsToAdd; j++)
{
m_PerceptionColors[i][j] = m_PerceptionBuffer[i * ObservationPerCell + channelIndex + j];
}

[BurstCompile(CompileSynchronously = true)]
struct CreateBoxcastBatch : IJobParallelFor
{
public NativeArray<BoxcastCommand> Commands;
[ReadOnly]
public float YOffset;
[ReadOnly]
public Vector3 halfScale;
public int ObserveMask;
[ReadOnly]
public NativeArray<Vector3> CellPoints;
[ReadOnly]
public Vector3 Pos;
public void Execute(int index)
{
var cellCenter = Pos + CellPoints[index];
var rotation = Quaternion.identity;
Commands[index] = new BoxcastCommand(new Vector3(cellCenter.x, cellCenter.y + YOffset, cellCenter.z),
halfScale,
rotation,
Vector3.down,
10.0f,
ObserveMask);
}
}
[BurstCompile(CompileSynchronously = true)]
struct CreateBoxcastRotateBatch : IJobParallelFor
{
public NativeArray<BoxcastCommand> Commands;
public Vector3 halfScale;
public int ObserveMask;
[ReadOnly]
public NativeArray<Vector3> CellPoints;
[ReadOnly]
public float YOffset;
[ReadOnly]
public Matrix4x4 Mat;
public Quaternion Rotation;
public void Execute(int index)
{
var cellCenter = Mat.MultiplyPoint(CellPoints[index]);
var rotation = Rotation;
Commands[index] = new BoxcastCommand(new Vector3(cellCenter.x, cellCenter.y + YOffset, cellCenter.z),
halfScale,
rotation,
Vector3.down,
10.0f,
ObserveMask);
}
}
// ReSharper disable Unity.PerformanceAnalysis
/// <summary>
/// Perceive - Clears the buffers, calls overlap box on the actual cell (the actual perception part)
/// for all found colliders, LoadObjectData is called

public float[] Perceive()
public NativeArray<float> Perceive()
if (m_ColliderBuffer == null)
if (!m_PerceptionBuffer.IsCreated || !m_Hits.IsCreated || !m_BoxcastCommands.IsCreated)
return Array.Empty<float>();
return new NativeArray<float>();
ClearPerceptionBuffer();
using (TimerStack.Instance.Scoped("GridSensor.Perceive"))
Profiler.BeginSample("GridSensor.Perceive");
var halfCellScale = new Vector3(CellScaleX / 2f, CellScaleY, CellScaleZ / 2f);
for (var cellIndex = 0; cellIndex < NumCells; cellIndex++)
m_boxcastJobHandle.Complete();
JobHandle clearHandle;
if (gridDepthType == GridDepthType.ChannelHot)
int numFound;
Vector3 cellCenter;
if (RotateToAgent)
var clearJob = new ClearBufferOneHotJob
Transform transform1;
cellCenter = (transform1 = transform).TransformPoint(CellPoints[cellIndex]);
numFound = BufferResizingOverlapBoxNonAlloc(cellCenter, halfCellScale, transform1.rotation);
}
else
PerceptionBuf = m_PerceptionBuffer,
ChannelHotBuf = m_ChannelHotDefaultPerceptionBuffer,
ObservationPerCell = ObservationPerCell
};
clearHandle = clearJob.Schedule(NumberOfObservations, NumberOfObservations / 12);
}
else
{
var clearJob = new ClearBufferChannelJob
cellCenter = transform.position + CellPoints[cellIndex];
numFound = BufferResizingOverlapBoxNonAlloc(cellCenter, halfCellScale, Quaternion.identity);
}
PerceptionBuf = m_PerceptionBuffer
};
clearHandle = clearJob.Schedule(NumberOfObservations, NumberOfObservations / 12);
}
if (numFound > 0)
if (ShowGizmos)
{
var gizmoJob = new ClearCellActivityJob
ParseColliders(m_ColliderBuffer, numFound, cellIndex, cellCenter);
}
CellActivity = CellActivity,
DebugDefault = DebugDefaultColor
};
var gizmoHandle = gizmoJob.Schedule(NumCells, NumCells / 12);
clearHandle = JobHandle.CombineDependencies(clearHandle, gizmoHandle);
}
return m_PerceptionBuffer;
}
/// <summary>
/// This method attempts to perform the Physics.OverlapBoxNonAlloc and will double the size of the Collider buffer
/// if the number of Colliders in the buffer after the call is equal to the length of the buffer.
/// </summary>
/// <param name="cellCenter"></param>
/// <param name="halfCellScale"></param>
/// <param name="rotation"></param>
/// <returns></returns>
int BufferResizingOverlapBoxNonAlloc(Vector3 cellCenter, Vector3 halfCellScale, Quaternion rotation)
{
int numFound;
// Since we can only get a fixed number of results, requery
// until we're sure we can hold them all (or until we hit the max size).
while (true)
{
numFound = Physics.OverlapBoxNonAlloc(cellCenter, halfCellScale, m_ColliderBuffer, rotation, ObserveMask);
if (numFound == m_ColliderBuffer.Length && m_ColliderBuffer.Length < MaxColliderBufferSize)
var t = transform;
var halfCellScale = new Vector3(CellScaleX / 2f, CellScaleY / 2f, CellScaleZ / 2f);
JobHandle createBoxHandle;
if (RotateToAgent)
m_ColliderBuffer = new Collider[Math.Min(MaxColliderBufferSize, m_ColliderBuffer.Length * 2)];
InitialColliderBufferSize = m_ColliderBuffer.Length;
var createBoxcasts = new CreateBoxcastRotateBatch
{
Commands = m_BoxcastCommands,
halfScale = halfCellScale,
Mat = t.localToWorldMatrix,
CellPoints = CellPoints,
ObserveMask = ObserveMask,
Rotation = t.rotation,
YOffset = GizmoYOffset
};
createBoxHandle = createBoxcasts.Schedule(NumCells, NumCells / 12, clearHandle);
break;
var createBoxcasts = new CreateBoxcastBatch
{
Commands = m_BoxcastCommands,
halfScale = halfCellScale,
Pos = t.position,
CellPoints = CellPoints,
ObserveMask = ObserveMask,
YOffset = GizmoYOffset
};
createBoxHandle = createBoxcasts.Schedule(NumCells, NumCells / 12, clearHandle);
m_boxcastJobHandle = BoxcastCommand.ScheduleBatch(m_BoxcastCommands, m_Hits, NumCells / 12, createBoxHandle);
return numFound;
Profiler.EndSample();
return m_PerceptionBuffer;
/// <summary>
/// Parses the array of colliders found within a cell. Finds the closest gameobject to the agent root reference within the cell

/// <param name="cellCenter">The center position of the cell</param>
protected virtual void ParseColliders(Collider[] foundColliders, int numFound, int cellIndex, Vector3 cellCenter)
{
Profiler.BeginSample("GridSensor.ParseColliders");
GameObject closestColliderGo = null;
var minDistanceSquared = float.MaxValue;
for (var i = 0; i < numFound; i++)
{
var currentColliderGo = foundColliders[i].gameObject;
// Continue if the current collider go is the root reference
if (ReferenceEquals(currentColliderGo, rootReference))
continue;
var closestColliderPoint = foundColliders[i].ClosestPointOnBounds(cellCenter);
var currentDistanceSquared = (closestColliderPoint - rootReference.transform.position).sqrMagnitude;
// Checks if our colliders contain a detectable object
var index = -1;
for (var ii = 0; ii < DetectableObjects.Length; ii++)
{
if (currentColliderGo.CompareTag(DetectableObjects[ii]))
{
index = ii;
break;
}
}
if (index > -1 && currentDistanceSquared < minDistanceSquared)
{
minDistanceSquared = currentDistanceSquared;
closestColliderGo = currentColliderGo;
}
}
if (!ReferenceEquals(closestColliderGo, null))
LoadObjectData(closestColliderGo, cellIndex, (float)Math.Sqrt(minDistanceSquared) * InverseSphereRadius);
Profiler.EndSample();
// Profiler.BeginSample("GridSensor.ParseColliders");
// GameObject closestColliderGo = null;
// var minDistanceSquared = float.MaxValue;
//
// var detectableIndex = -1;
// for (var i = 0; i < numFound; i++)
// {
// if (ReferenceEquals(foundColliders[i], null))
// {
// continue;
// }
// var currentColliderGo = foundColliders[i].gameObject;
//
// // Continue if the current collider go is the root reference
// if (ReferenceEquals(currentColliderGo, rootReference))
// continue;
//
// var closestColliderPoint = foundColliders[i].ClosestPointOnBounds(cellCenter);
// var currentDistanceSquared = (closestColliderPoint - rootReference.transform.position).sqrMagnitude;
// Profiler.EndSample();
//
// // Checks if our colliders contain a detectable object
// if (m_DetectableObjectToIndex.TryGetValue(currentColliderGo.tag, out detectableIndex) && currentDistanceSquared < minDistanceSquared)
// {
// }
// for (var ii = 0; ii < DetectableObjects.Length; ii++)
// {
// if (currentColliderGo.CompareTag(DetectableObjects[ii]))
// {
// minDistanceSquared = currentDistanceSquared;
// closestColliderGo = currentColliderGo;
// break;
// }
// }
// }
//
// if (!ReferenceEquals(closestColliderGo, null))
// LoadObjectData(closestColliderGo, cellIndex, detectableIndex, (float)Math.Sqrt(minDistanceSquared) * InverseSphereRadius);
// Profiler.EndSample();
}
/// <summary>

/// </example>
protected virtual float[] GetObjectData(GameObject currentColliderGo, float typeIndex, float normalizedDistance)
{
if (m_ChannelBuffer == null)
{
m_ChannelBuffer = new float[ChannelDepth.Length];
}
Array.Clear(m_ChannelBuffer, 0, m_ChannelBuffer.Length);
m_ChannelBuffer[0] = typeIndex;
return m_ChannelBuffer;

/// <param name="currentColliderGo">The gameobject used for better error messages</param>
protected virtual void ValidateValues(float[] channelValues, GameObject currentColliderGo)
{
for (int j = 0; j < channelValues.Length; j++)
for (var j = 0; j < channelValues.Length; j++)
{
if (channelValues[j] < 0)
throw new UnityAgentsException("Expected ChannelValue[" + j + "] for " + currentColliderGo.name + " to be non-negative, was " + channelValues[j]);

/// </summary>
/// <param name="currentColliderGo">The game object that was found colliding with a certain cell</param>
/// <param name="cellIndex">The index of the current cell</param>
/// <param name="detectableIndex">Index into the DetectableObjects array.</param>
/// the distance currentColliderGo is compared to the edge of the gridsensor</param>
protected virtual void LoadObjectData(GameObject currentColliderGo, int cellIndex, float normalizedDistance)
/// the distance currentColliderGo is compared to the edge of the gridsensor</param>
protected virtual void LoadObjectData(GameObject currentColliderGo, int cellIndex, int detectableIndex, float normalizedDistance)
var channelHotVals = new ArraySegment<float>(m_PerceptionBuffer, cellIndex * ObservationPerCell, ObservationPerCell);
for (var i = 0; i < DetectableObjects.Length; i++)
var offset = cellIndex * ObservationPerCell;
for (var ii = 0; ii < ObservationPerCell; ii++)
for (var ii = 0; ii < channelHotVals.Count; ii++)
m_PerceptionBuffer[offset + ii] = 0f;
}
// TODO: Create the array already then set the values using "out" in GetObjectData
// Using i+1 as the type index as "0" represents "empty"
var channelValues = GetObjectData(currentColliderGo, (float)detectableIndex + 1, normalizedDistance);
ValidateValues(channelValues, currentColliderGo);
if (ShowGizmos)
{
var debugRayColor = Color.white;
if (DebugColors.Length > 0)
m_PerceptionBuffer[channelHotVals.Offset + ii] = 0f;
debugRayColor = DebugColors[detectableIndex];
if (!ReferenceEquals(currentColliderGo, null) && currentColliderGo.CompareTag(DetectableObjects[i]))
{
// TODO: Create the array already then set the values using "out" in GetObjectData
// Using i+1 as the type index as "0" represents "empty"
float[] channelValues = GetObjectData(currentColliderGo, (float)i + 1, normalizedDistance);
CellActivity[cellIndex] = new Color(debugRayColor.r, debugRayColor.g, debugRayColor.b, .15f);
}
ValidateValues(channelValues, currentColliderGo);
if (ShowGizmos)
switch (gridDepthType)
{
case GridDepthType.Channel:
Color debugRayColor = Color.white;
if (DebugColors.Length > 0)
// The observations are "channel based" so each grid is WxHxC where C is the number of channels
// This typically means that each channel value is normalized between 0 and 1
// If channelDepth is 1, the value is assumed normalized, else the value is normalized by the channelDepth
// The channels are then stored consecutively in PerceptionBuffer.
// NOTE: This is the only grid type that uses floating point values
// For example, if a cell contains the 3rd type of 5 possible on the 2nd team of 3 possible teams:
// channelValues = {2, 1}
// ObservationPerCell = channelValues.Length
// channelValues = {2f/5f, 1f/3f} = {.4, .33..}
// Array.Copy(channelValues, 0, PerceptionBuffer, cell_id*ObservationPerCell, ObservationPerCell);
for (var j = 0; j < channelValues.Length; j++)
debugRayColor = DebugColors[i];
channelValues[j] /= ChannelDepth[j];
CellActivity[cellIndex] = new Color(debugRayColor.r, debugRayColor.g, debugRayColor.b, .5f);
for (var ii = 0; ii < ObservationPerCell; ii++)
{
m_PerceptionBuffer[offset + ii] = channelValues[ii];
}
break;
switch (gridDepthType)
case GridDepthType.ChannelHot:
case GridDepthType.Channel:
// The observations are "channel hot" so each grid is WxHxD where D is the sum of all of the channel depths
// The opposite of the "channel based" case, the channel values are represented as one hot vector per channel and then concatenated together
// Thus channelDepth is assumed to be greater than 1.
// For example, if a cell contains the 3rd type of 5 possible on the 2nd team of 3 possible teams,
// channelValues = {2, 1}
// channelOffsets = {5, 3}
// ObservationPerCell = 5 + 3 = 8
// channelHotVals = {0, 0, 1, 0, 0, 0, 1, 0}
// Array.Copy(channelHotVals, 0, PerceptionBuffer, cell_id*ObservationPerCell, ObservationPerCell);
for (var j = 0; j < channelValues.Length; j++)
{
if (ChannelDepth[j] > 1)
// The observations are "channel based" so each grid is WxHxC where C is the number of channels
// This typically means that each channel value is normalized between 0 and 1
// If channelDepth is 1, the value is assumed normalized, else the value is normalized by the channelDepth
// The channels are then stored consecutively in PerceptionBuffer.
// NOTE: This is the only grid type that uses floating point values
// For example, if a cell contains the 3rd type of 5 possible on the 2nd team of 3 possible teams:
// channelValues = {2, 1}
// ObservationPerCell = channelValues.Length
// channelValues = {2f/5f, 1f/3f} = {.4, .33..}
// Array.Copy(channelValues, 0, PerceptionBuffer, cell_id*ObservationPerCell, ObservationPerCell);
for (int j = 0; j < channelValues.Length; j++)
{
channelValues[j] /= ChannelDepth[j];
}
Array.Copy(channelValues, 0, m_PerceptionBuffer, cellIndex * ObservationPerCell, ObservationPerCell);
break;
m_PerceptionBuffer[offset + (int)channelValues[j] + ChannelOffsets[j]] = 1f;
case GridDepthType.ChannelHot:
else
// The observations are "channel hot" so each grid is WxHxD where D is the sum of all of the channel depths
// The opposite of the "channel based" case, the channel values are represented as one hot vector per channel and then concatenated together
// Thus channelDepth is assumed to be greater than 1.
// For example, if a cell contains the 3rd type of 5 possible on the 2nd team of 3 possible teams,
// channelValues = {2, 1}
// channelOffsets = {5, 3}
// ObservationPerCell = 5 + 3 = 8
// channelHotVals = {0, 0, 1, 0, 0, 0, 1, 0}
// Array.Copy(channelHotVals, 0, PerceptionBuffer, cell_id*ObservationPerCell, ObservationPerCell);
for (int j = 0; j < channelValues.Length; j++)
{
if (ChannelDepth[j] > 1)
{
m_PerceptionBuffer[channelHotVals.Offset + (int)channelValues[j] + ChannelOffsets[j]] = 1f;
}
else
{
m_PerceptionBuffer[channelHotVals.Offset + ChannelOffsets[j]] = channelValues[j];
}
}
break;
m_PerceptionBuffer[offset + ChannelOffsets[j]] = channelValues[j];
}
}
break;
}
break;
}
Profiler.EndSample();
}

/// <param name="shouldTransformPoint">Bool weather to transform the point to the current transform</param>
protected Vector3 CellToPoint(int cell, bool shouldTransformPoint = true)
{
float x = (cell % GridNumSideZ - OffsetGridNumSide) * CellScaleX;
float z = (cell / GridNumSideZ - OffsetGridNumSide) * CellScaleZ - DiffNumSideZX;
var x = (cell % GridNumSideZ - OffsetGridNumSide) * CellScaleX;
var z = (cell / GridNumSideZ - OffsetGridNumSide) * CellScaleZ - DiffNumSideZX;
if (shouldTransformPoint)
return transform.TransformPoint(new Vector3(x, 0, z));

/// <param name="globalPoint">The 3D point in global space</param>
public int PointToCell(Vector3 globalPoint)
{
Vector3 point = transform.InverseTransformPoint(globalPoint);
var point = transform.InverseTransformPoint(globalPoint);
float x = point.x + HalfOfGridX;
float z = point.z + HalfOfGridZ;
var x = point.x + HalfOfGridX;
var z = point.z + HalfOfGridZ;
int _x = (int)Mathf.Floor(x * PointToCellScalingX);
int _z = (int)Mathf.Floor(z * PointToCellScalingZ);
var _x = (int)Mathf.Floor(x * PointToCellScalingX);
var _z = (int)Mathf.Floor(z * PointToCellScalingZ);
/// <summary>Copies the data from one cell to another</summary>
/// <param name="fromCellID">index of the cell to copy from</param>
/// <param name="toCellID">index of the cell to copy into</param>
protected void CopyCellData(int fromCellID, int toCellID)
{
Array.Copy(m_PerceptionBuffer,
fromCellID * ObservationPerCell,
m_PerceptionBuffer,
toCellID * ObservationPerCell,
ObservationPerCell);
if (ShowGizmos)
CellActivity[toCellID] = CellActivity[fromCellID];
}
// /// <summary>Copies the data from one cell to another</summary>
// /// <param name="fromCellID">index of the cell to copy from</param>
// /// <param name="toCellID">index of the cell to copy into</param>
// protected void CopyCellData(int fromCellID, int toCellID)
// {
// Array.Copy(m_PerceptionBuffer,
// fromCellID * ObservationPerCell,
// m_PerceptionBuffer,
// toCellID * ObservationPerCell,
// ObservationPerCell);
// if (ShowGizmos)
// CellActivity[toCellID] = CellActivity[fromCellID];
// }
void OnDrawGizmos()
{

Start();
Perceive();
UpdateBufferFromJob();
var scale = new Vector3(CellScaleX, 1, CellScaleZ);
var scale = new Vector3(CellScaleX, CellScaleY, CellScaleZ);
var offset = new Vector3(0, GizmoYOffset, 0);
var oldGizmoMatrix = Gizmos.matrix;
for (var i = 0; i < NumCells; i++)

/// <inheritdoc/>
void ISensor.Update()
{
using (TimerStack.Instance.Scoped("GridSensor.Update"))
Profiler.BeginSample("GridSensor.Update");
Profiler.EndSample();
}
/// <summary>Gets the observation shape</summary>

/// <inheritdoc/>
public int Write(ObservationWriter writer)
{
using (TimerStack.Instance.Scoped("GridSensor.WriteToTensor"))
UpdateBufferFromJob();
var index = 0;
Profiler.BeginSample("GridSensor.WriteToTensor");
int index = 0;
for (var h = GridNumSideZ - 1; h >= 0; h--) // height
{
for (var w = 0; w < GridNumSideX; w++) // width

}
}
}
return index;
Profiler.EndSample();
return index;
}
internal void UpdateBufferFromJob()
{
Profiler.BeginSample("UpdateBufferFromJob");
{
m_boxcastJobHandle.Complete();
for (var cellIndex = 0; cellIndex < NumCells; cellIndex++)
{
var c = m_Hits[cellIndex].collider;
if (ReferenceEquals(c, null))
{
continue;
}
for (var i = 0; i < DetectableObjects.Length; i++)
{
if (c.CompareTag(DetectableObjects[i]))
{
LoadObjectData(c.gameObject, cellIndex, i, 0);
break;
}
}
}
}
Profiler.EndSample();
}
}
}

2
.gitignore


# Unity3D Generated File On Crash Reports
/com.unity.ml-agents/sysinfo.txt
*/UserSettings/
# Builds
*.apk
*.unitypackage

2
ML-Agents-Input-Example/.gitignore


/Assets/Plugins*
/Assets/Demonstrations*
/Assets/ML-Agents/Timers*
/*_timers.json
/csharp_timers.json
# Environemnt logfile
*Project.log

21
ML-Agents-Input-Example/ProjectSettings/DynamicsManager.asset


--- !u!55 &1
PhysicsManager:
m_ObjectHideFlags: 0
serializedVersion: 10
serializedVersion: 13
m_DefaultSolverIterations: 12
m_DefaultSolverVelocityIterations: 12
m_DefaultSolverIterations: 6
m_DefaultSolverVelocityIterations: 1
m_ClothInterCollisionDistance: 0
m_ClothInterCollisionStiffness: 0
m_ClothInterCollisionDistance: 0.1
m_ClothInterCollisionStiffness: 0.2
m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffebffffffddffffffeffffffff5fffffffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
m_AutoSyncTransforms: 1
m_ReuseCollisionCallbacks: 1
m_AutoSyncTransforms: 0
m_ReuseCollisionCallbacks: 0
m_ClothGravity: {x: 0, y: -9.81, z: 0}
m_ContactPairsMode: 0
m_BroadphaseType: 0
m_WorldBounds:

m_FrictionType: 0
m_EnableEnhancedDeterminism: 1
m_EnableEnhancedDeterminism: 0
m_SolverType: 0
m_DefaultMaxAngularSpeed: 50

6
ML-Agents-Input-Example/ProjectSettings/EditorSettings.asset


EditorSettings:
m_ObjectHideFlags: 0
serializedVersion: 9
m_ExternalVersionControlSupport: Hidden Meta Files
m_ExternalVersionControlSupport: Visible Meta Files
m_SerializationMode: 2
m_LineEndingsForNewScripts: 1
m_DefaultBehaviorMode: 0

m_EtcTextureFastCompressor: 1
m_EtcTextureNormalCompressor: 2
m_EtcTextureBestCompressor: 4
m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;rsp;asmref
m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;asmref;rsp
m_ProjectGenerationRootNamespace:
m_CollabEditorSettings:
inProgressEnabled: 1

m_EnterPlayModeOptionsEnabled: 0
m_EnterPlayModeOptions: 3
m_ShowLightmapResolutionOverlay: 1
m_UseLegacyProbeSampleCount: 1
m_UseLegacyProbeSampleCount: 0
m_AssetPipelineMode: 1
m_CacheServerMode: 0
m_CacheServerEndpoint:

3
ML-Agents-Input-Example/ProjectSettings/PresetManager.asset


--- !u!1386491679 &1
PresetManager:
m_ObjectHideFlags: 0
m_DefaultList: []
serializedVersion: 2
m_DefaultPresets: {}

155
ML-Agents-Input-Example/ProjectSettings/ProjectSettings.asset


PlayerSettings:
m_ObjectHideFlags: 0
serializedVersion: 20
productGUID: cd7e9a0e0d1d14312ad9e89757262f3b
productGUID: 4afafe345a24f402aa7513be24dd3990
AndroidProfiler: 0
AndroidFilterTouchesWhenObscured: 0
AndroidEnableSustainedPerformanceMode: 0

accelerometerFrequency: 60
companyName: Unity Technologies
productName: UnityEnvironment
companyName: DefaultCompany
productName: ML-Agents-Input-Example
defaultCursor: {fileID: 0}
cursorHotspot: {x: 0, y: 0}
m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1}

m_SplashScreenLogos: []
m_VirtualRealitySplashScreen: {fileID: 0}
m_HolographicTrackingLossScreen: {fileID: 0}
defaultScreenWidth: 80
defaultScreenHeight: 80
defaultScreenWidth: 1024
defaultScreenHeight: 768
defaultScreenWidthWeb: 960
defaultScreenHeightWeb: 600
m_StereoRenderingPath: 0

preserveFramebufferAlpha: 0
disableDepthAndStencilBuffers: 0
androidStartInFullscreen: 1
androidRenderOutsideSafeArea: 0
androidRenderOutsideSafeArea: 1
androidUseSwappy: 0
androidBlitType: 0
defaultIsNativeResolution: 1

hideHomeButton: 0
submitAnalytics: 1
usePlayerLog: 1
bakeCollisionMeshes: 1
bakeCollisionMeshes: 0
forceSingleInstance: 0
useFlipModelSwapchain: 1
resizableWindow: 1

xboxEnableKinectAutoTracking: 0
xboxEnableFitness: 0
visibleInBackground: 1
allowFullscreenSwitch: 1
allowFullscreenSwitch: 0
fullscreenMode: 3
xboxSpeechDB: 0
xboxEnableHeadOrientation: 0

16:9: 1
Others: 1
bundleVersion: 1.0
preloadedAssets:
- {fileID: 11400000, guid: 778a63fac82734ee1b70a0b7c3e975c0, type: 2}
preloadedAssets: []
xboxOneDisableKinectGpuReservation: 0
xboxOneEnable7thCore: 0
xboxOneDisableKinectGpuReservation: 1
xboxOneEnable7thCore: 1
vrSettings:
cardboard:
depthFormat: 0

maximumSupportedHeadTracking: 1
hololens:
depthFormat: 1
depthBufferSharingEnabled: 0
depthBufferSharingEnabled: 1
lumin:
depthFormat: 0
frameTiming: 2

oculus:
sharedDepthBuffer: 0
dashSupport: 0
sharedDepthBuffer: 1
dashSupport: 1
v2Signing: 0
v2Signing: 1
enable360StereoCapture: 0
isWsaHolographicRemotingEnabled: 0
enableFrameTimingStats: 0

resolutionScalingMode: 0
androidSupportedAspectRatio: 1
androidMaxAspectRatio: 2.1
applicationIdentifier:
Android: com.Company.ProductName
buildNumber:
iPhone: 0
applicationIdentifier: {}
buildNumber: {}
AndroidBundleVersionCode: 1
AndroidMinSdkVersion: 19
AndroidTargetSdkVersion: 0

APKExpansionFiles: 0
keepLoadedShadersAlive: 0
StripUnusedMeshComponents: 0
VertexChannelCompressionMask: 214
VertexChannelCompressionMask: 4054
iPhoneSdkVersion: 988
iOSTargetOSVersionString: 10.0
tvOSSdkVersion: 0

iOSMetalForceHardShadows: 0
metalEditorSupport: 1
metalAPIValidation: 1
iOSRenderExtraFrameOnPause: 1
iosCopyPluginsCodeInsteadOfSymlink: 0
iOSRenderExtraFrameOnPause: 0
appleDeveloperTeamID:
iOSManualSigningProvisioningProfileID:
tvOSManualSigningProvisioningProfileID:

clonedFromGUID: 00000000000000000000000000000000
templatePackageId:
templateDefaultScene:
AndroidTargetArchitectures: 5
AndroidTargetArchitectures: 1
AndroidTVCompatibility: 1
AndroidTVCompatibility: 0
AndroidIsGame: 1
AndroidEnableTango: 0
androidEnableBanner: 1

m_BuildTargetIcons: []
m_BuildTargetPlatformIcons: []
m_BuildTargetBatching: []
m_BuildTargetGraphicsJobs:
- m_BuildTarget: MacStandaloneSupport
m_GraphicsJobs: 0
- m_BuildTarget: Switch
m_GraphicsJobs: 0
- m_BuildTarget: MetroSupport
m_GraphicsJobs: 0
- m_BuildTarget: AppleTVSupport
m_GraphicsJobs: 0
- m_BuildTarget: BJMSupport
m_GraphicsJobs: 0
- m_BuildTarget: LinuxStandaloneSupport
m_GraphicsJobs: 0
- m_BuildTarget: PS4Player
m_GraphicsJobs: 0
- m_BuildTarget: iOSSupport
m_GraphicsJobs: 0
- m_BuildTarget: WindowsStandaloneSupport
m_GraphicsJobs: 0
- m_BuildTarget: XboxOnePlayer
m_GraphicsJobs: 0
- m_BuildTarget: LuminSupport
m_GraphicsJobs: 0
- m_BuildTarget: AndroidPlayer
m_GraphicsJobs: 0
- m_BuildTarget: WebGLSupport
m_GraphicsJobs: 0
m_BuildTargetGraphicsJobMode:
- m_BuildTarget: PS4Player
m_GraphicsJobMode: 0
- m_BuildTarget: XboxOnePlayer
m_GraphicsJobMode: 0
m_BuildTargetGraphicsAPIs:
- m_BuildTarget: MacStandaloneSupport
m_APIs: 10000000
m_Automatic: 0
m_BuildTargetGraphicsJobs: []
m_BuildTargetGraphicsJobMode: []
m_BuildTargetGraphicsAPIs: []
m_BuildTargetVRSettings: []
openGLRequireES31: 0
openGLRequireES31AEP: 0

Android: 1
iPhone: 1
tvOS: 1
m_BuildTargetGroupLightmapEncodingQuality:
- m_BuildTarget: Standalone
m_EncodingQuality: 1
- m_BuildTarget: XboxOne
m_EncodingQuality: 1
- m_BuildTarget: PS4
m_EncodingQuality: 1
m_BuildTargetGroupLightmapEncodingQuality: []
m_BuildTargetGroupLightmapSettings: []
playModeTestRunnerEnabled: 0
runPlayModeTestAsEditModeTest: 0

switchSocketConcurrencyLimit: 14
switchScreenResolutionBehavior: 2
switchUseCPUProfiler: 0
switchApplicationID: 0x0005000C10000001
switchApplicationID: 0x01004b9000490000
switchNSODependencies:
switchTitleNames_0:
switchTitleNames_1:

switchAccessibleURLs:
switchLegalInformation:
switchMainThreadStackSize: 1048576
switchPresenceGroupId: 0x0005000C10000001
switchPresenceGroupId:
switchLogoHandling: 0
switchReleaseVersion: 0
switchDisplayVersion: 1.0.0

switchUserAccountSaveDataSize: 0
switchUserAccountSaveDataJournalSize: 0
switchApplicationAttribute: 0
switchCardSpecSize: 4
switchCardSpecClock: 25
switchCardSpecSize: -1
switchCardSpecClock: -1
switchRatingsMask: 0
switchRatingsInt_0: 0
switchRatingsInt_1: 0

switchRatingsInt_10: 0
switchRatingsInt_11: 0
switchRatingsInt_12: 0
switchLocalCommunicationIds_0: 0x0005000C10000001
switchLocalCommunicationIds_0:
switchLocalCommunicationIds_1:
switchLocalCommunicationIds_2:
switchLocalCommunicationIds_3:

switchDataLossConfirmation: 0
switchUserAccountLockEnabled: 0
switchSystemResourceMemory: 16777216
switchSupportedNpadStyles: 3
switchSupportedNpadStyles: 22
switchNativeFsCacheSize: 32
switchIsHoldTypeHorizontal: 0
switchSupportedNpadCount: 8

ps4NPAgeRating: 12
ps4NPTitleSecret:
ps4NPTrophyPackPath:
ps4ParentalLevel: 1
ps4ParentalLevel: 11
ps4ContentID: ED1633-NPXX51362_00-0000000000000000
ps4Category: 0
ps4MasterVersion: 01.00

ps4VideoOutPixelFormat: 0
ps4VideoOutInitialWidth: 1920
ps4VideoOutBaseModeInitialWidth: 1920
ps4VideoOutReprojectionRate: 120
ps4VideoOutReprojectionRate: 60
ps4PronunciationXMLPath:
ps4PronunciationSIGPath:
ps4BackgroundImagePath:

ps4ShareFilePath:
ps4ShareOverlayImagePath:
ps4PrivacyGuardImagePath:
ps4ExtraSceSysFile:
ps4EnterButtonAssignment: 1
ps4EnterButtonAssignment: 2
ps4ApplicationParam1: 0
ps4ApplicationParam2: 0
ps4ApplicationParam3: 0

ps4ProGarlicHeapSize: 2560
playerPrefsMaxSize: 32768
ps4Passcode: uGXbEWRK5RhRXdCdG5nG5azdNMK66MuC
ps4Passcode: j99nsQzldVI5ZuGXbEWRK5RhRXdCdG5n
ps4pnSessions: 1
ps4pnPresence: 1
ps4pnFriends: 1

ps4UseAudio3dBackend: 0
ps4UseLowGarlicFragmentationMode: 1
ps4SocialScreenEnabled: 0
ps4ScriptOptimizationLevel: 0
ps4ScriptOptimizationLevel: 2
ps4Audio3dVirtualSpeakerCount: 14
ps4attribCpuUsage: 0
ps4PatchPkgPath:

ps4disableAutoHideSplash: 0
ps4videoRecordingFeaturesUsed: 0
ps4contentSearchFeaturesUsed: 0
ps4CompatibilityPS5: 0
ps4GPU800MHz: 1
ps4attribEyeToEyeDistanceSettingVR: 0
ps4IncludedModules: []
ps4attribVROutputEnabled: 0

blurSplashScreenBackground: 1
spritePackerPolicy:
webGLMemorySize: 256
webGLMemorySize: 32
webGLDataCaching: 0
webGLDataCaching: 1
webGLDebugSymbols: 0
webGLEmscriptenArgs:
webGLModulesDirectory:

webGLCompressionFormat: 1
webGLCompressionFormat: 0
scriptingDefineSymbols:
1:
7: UNITY_POST_PROCESSING_STACK_V2
13: UNITY_POST_PROCESSING_STACK_V2
14: UNITY_POST_PROCESSING_STACK_V2
17: UNITY_POST_PROCESSING_STACK_V2
18: UNITY_POST_PROCESSING_STACK_V2
19: UNITY_POST_PROCESSING_STACK_V2
21: UNITY_POST_PROCESSING_STACK_V2
23: UNITY_POST_PROCESSING_STACK_V2
25: UNITY_POST_PROCESSING_STACK_V2
26: UNITY_POST_PROCESSING_STACK_V2
27: UNITY_POST_PROCESSING_STACK_V2
scriptingDefineSymbols: {}
allowUnsafeCode: 1
allowUnsafeCode: 0
assemblyVersionValidation: 1
apiCompatibilityLevelPerPlatform:
Standalone: 3
apiCompatibilityLevelPerPlatform: {}
metroPackageName: UnityEnvironment
metroPackageName: ML-Agents-Input-Example
metroPackageVersion:
metroCertificatePath:
metroCertificatePassword:

metroApplicationDescription: UnityEnvironment
metroApplicationDescription: ML-Agents-Input-Example
wsaImages: {}
metroTileShortName:
metroTileShowName: 0

XboxOneCapability: []
XboxOneGameRating: {}
XboxOneIsContentPackage: 0
XboxOneEnhancedXboxCompatibilityMode: 0
XboxOneEnableGPUVariability: 0
XboxOneEnableGPUVariability: 1
XboxOneSockets: {}
XboxOneSplashScreen: {fileID: 0}
XboxOneAllowedProductIds: []

luminVersion:
m_VersionCode: 1
m_VersionName:
apiCompatibilityLevel: 3
apiCompatibilityLevel: 6
cloudProjectId:
framebufferDepthMemorylessMode: 0
projectName:

disableOldInputManagerSupport: 1
legacyClampBlendShapeWeights: 1
legacyClampBlendShapeWeights: 0

4
ML-Agents-Input-Example/ProjectSettings/ProjectVersion.txt


m_EditorVersion: 2019.4.19f1
m_EditorVersionWithRevision: 2019.4.19f1 (ca5b14067cec)
m_EditorVersion: 2019.4.21f1
m_EditorVersionWithRevision: 2019.4.21f1 (b76dac84db26)

20
ML-Agents-Input-Example/ProjectSettings/QualitySettings.asset


shadowCascade2Split: 0.33333334
shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
shadowmaskMode: 0
blendWeights: 1
skinWeights: 1
textureQuality: 1
anisotropicTextures: 0
antiAliasing: 0

asyncUploadBufferSize: 16
asyncUploadPersistentBuffer: 1
resolutionScalingFixedDPIFactor: 1
customRenderPipeline: {fileID: 0}
excludedTargetPlatforms: []
- serializedVersion: 2
name: Low

shadowCascade2Split: 0.33333334
shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
shadowmaskMode: 0
blendWeights: 2
skinWeights: 2
textureQuality: 0
anisotropicTextures: 0
antiAliasing: 0

asyncUploadBufferSize: 16
asyncUploadPersistentBuffer: 1
resolutionScalingFixedDPIFactor: 1
customRenderPipeline: {fileID: 0}
excludedTargetPlatforms: []
- serializedVersion: 2
name: Medium

shadowCascade2Split: 0.33333334
shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
shadowmaskMode: 0
blendWeights: 2
skinWeights: 2
textureQuality: 0
anisotropicTextures: 1
antiAliasing: 0

asyncUploadBufferSize: 16
asyncUploadPersistentBuffer: 1
resolutionScalingFixedDPIFactor: 1
customRenderPipeline: {fileID: 0}
excludedTargetPlatforms: []
- serializedVersion: 2
name: High

shadowCascade2Split: 0.33333334
shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
shadowmaskMode: 1
blendWeights: 2
skinWeights: 2
textureQuality: 0
anisotropicTextures: 1
antiAliasing: 0

asyncUploadBufferSize: 16
asyncUploadPersistentBuffer: 1
resolutionScalingFixedDPIFactor: 1
customRenderPipeline: {fileID: 0}
excludedTargetPlatforms: []
- serializedVersion: 2
name: Very High

shadowCascade2Split: 0.33333334
shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
shadowmaskMode: 1
blendWeights: 4
skinWeights: 4
textureQuality: 0
anisotropicTextures: 2
antiAliasing: 2

asyncUploadBufferSize: 16
asyncUploadPersistentBuffer: 1
resolutionScalingFixedDPIFactor: 1
customRenderPipeline: {fileID: 0}
excludedTargetPlatforms: []
- serializedVersion: 2
name: Ultra

shadowCascade2Split: 0.33333334
shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
shadowmaskMode: 1
blendWeights: 4
skinWeights: 255
textureQuality: 0
anisotropicTextures: 2
antiAliasing: 2

asyncUploadBufferSize: 16
asyncUploadPersistentBuffer: 1
resolutionScalingFixedDPIFactor: 1
customRenderPipeline: {fileID: 0}
CloudRendering: 5
Stadia: 5
Standalone: 5
WebGL: 3
Windows Store Apps: 5

34
ML-Agents-Input-Example/ProjectSettings/TagManager.asset


TagManager:
serializedVersion: 2
tags:
- agent
- iWall
- wall
- pit
- frozenAgent
- ball
- blueGoal
- blueAgent
- goal
- ground
- block
- switchOff
- pyramid
- switchOn
- stone
- target
- badFood
- food
- walkableSurface
- symbol_X
- symbol_O
- symbol_X_Goal
- symbol_O_Goal
- purpleAgent
- purpleGoal
- tank
- shell
- terrain
layers:
- Default
- TransparentFX

- UI
-
-
- invisible
-
-
- tanks
- terrain
- shell
-
-
-

1
ML-Agents-Input-Example/ProjectSettings/VFXManager.asset


m_IndirectShader: {fileID: 0}
m_CopyBufferShader: {fileID: 0}
m_SortShader: {fileID: 0}
m_StripUpdateShader: {fileID: 0}
m_RenderPipeSettingsPath:
m_FixedTimeStep: 0.016666668
m_MaxDeltaTime: 0.05

6
ML-Agents-Input-Example/ProjectSettings/EditorBuildSettings.asset


serializedVersion: 2
m_Scenes:
- enabled: 1
path: Assets/ML-Agents/Examples/PushBlock/Scenes/PushBlock.unity
guid: ae8cc75939e3e4d07a79c8c6a08b54f4
path: Assets/Samples/Input System/1.0.2/Tanks Demo/Scenes/Tanks_Training.unity
guid: 37961ba4d27bd46428d20c2ffe403dc3
com.unity.input.settings: {fileID: 11400000, guid: 778a63fac82734ee1b70a0b7c3e975c0,
com.unity.input.settings: {fileID: 11400000, guid: fe070b6f942ad418d965ebcea37bd28b,
type: 2}

3
ML-Agents-Input-Example/ProjectSettings/GraphicsSettings.asset


- {fileID: 16000, guid: 0000000000000000f000000000000000, type: 0}
- {fileID: 16001, guid: 0000000000000000f000000000000000, type: 0}
- {fileID: 17000, guid: 0000000000000000f000000000000000, type: 0}
- {fileID: 16002, guid: 0000000000000000f000000000000000, type: 0}
m_PreloadedShaders: []
m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000,
type: 0}

m_LightsUseLinearIntensity: 0
m_LightsUseColorTemperature: 0
m_LogWhenShaderIsCompiled: 0
m_AllowEnlightenSupportForUpgradedProject: 1
m_AllowEnlightenSupportForUpgradedProject: 0

5
ML-Agents-Input-Example/Assets/InputSystem.inputsettings.asset


m_Name: InputSystem.inputsettings
m_EditorClassIdentifier:
m_SupportedDevices:
- Keyboard
m_CompensateForScreenOrientation: 0
m_FilterNoiseOnCurrent: 0
m_CompensateForScreenOrientation: 1
m_FilterNoiseOnCurrent: 1
m_DefaultDeadzoneMin: 0.125
m_DefaultDeadzoneMax: 0.925
m_DefaultButtonPressPoint: 0.5

4
ML-Agents-Input-Example/Assets/InputSystem.inputsettings.asset.meta


fileFormatVersion: 2
guid: 778a63fac82734ee1b70a0b7c3e975c0
guid: fe070b6f942ad418d965ebcea37bd28b
mainObjectFileID: 0
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

2
ML-Agents-Input-Example/Assets/ML-Agents.meta


fileFormatVersion: 2
guid: 11630fa83cc8b4194b94352e3e6cdb9d
guid: 299d34408f29d45eb8bc39e55ca2b1a3
folderAsset: yes
DefaultImporter:
externalObjects: {}

2
ML-Agents-Input-Example/Assets/ML-Agents/Examples.meta


fileFormatVersion: 2
guid: 6584f096f53dc43eeb32803b91f36c5c
guid: 2face27c9e7c541e09005a676bae0f96
folderAsset: yes
DefaultImporter:
externalObjects: {}

4
ML-Agents-Input-Example/Assets/ML-Agents/Examples/PushBlock.meta


fileFormatVersion: 2
guid: 4197ece8ca6d74a00adc6bafbabda158
guid: a01603c67d05d4638959f4b66cf0e4c1
timeCreated: 1506303336
licenseType: Pro
DefaultImporter:
externalObjects: {}
userData:

58
ML-Agents-Input-Example/Assets/ML-Agents/Examples/PushBlock/PushBlockActions.inputactions


],
"bindings": [
{
"name": "gamepad_move",
"id": "477500ef-6d32-4b84-b9f8-158f18bcb906",
"name": "keyboard_move",
"id": "6bcba4bf-5ce0-4005-9e6a-0de2487211b0",
"path": "2DVector",
"interactions": "",
"processors": "",

},
{
"name": "up",
"id": "6d2537b8-2266-4a50-8575-fb0fe310daa5",
"path": "<Gamepad>/dpad/up",
"id": "63da699e-b354-4e63-b0f8-26fb92abea41",
"path": "<Keyboard>/w",
"interactions": "",
"processors": "",
"groups": "Keyboard",

},
{
"name": "down",
"id": "50584c83-beb6-4e90-a453-a635c03a761e",
"path": "<Gamepad>/dpad/down",
"id": "39409748-9002-4aff-9a09-cdc05b9708ad",
"path": "<Keyboard>/s",
"interactions": "",
"processors": "",
"groups": "Keyboard",

},
{
"name": "left",
"id": "44408b8f-27e7-4c6d-b078-7536ba020d1a",
"path": "<Gamepad>/dpad/left",
"id": "0afe45fc-dc45-4310-9c73-7dc3c503addf",
"path": "<Keyboard>/a",
"interactions": "",
"processors": "",
"groups": "Keyboard",

},
{
"name": "right",
"id": "f5681423-d3e3-41a5-b85e-0a7642c774aa",
"path": "<Gamepad>/dpad/right",
"id": "69fe0335-9e0c-495d-a90d-4b0fcbfd2b34",
"path": "<Keyboard>/d",
"interactions": "",
"processors": "",
"groups": "Keyboard",

},
{
"name": "keyboard_move",
"id": "6bcba4bf-5ce0-4005-9e6a-0de2487211b0",
"path": "2DVector",
"interactions": "",
"processors": "",
"groups": "",
"action": "movement",
"isComposite": true,
"isPartOfComposite": false
},
{
"id": "63da699e-b354-4e63-b0f8-26fb92abea41",
"path": "<Keyboard>/w",
"id": "6d2537b8-2266-4a50-8575-fb0fe310daa5",
"path": "<Gamepad>/dpad/up",
"interactions": "",
"processors": "",
"groups": "Keyboard",

},
{
"name": "down",
"id": "39409748-9002-4aff-9a09-cdc05b9708ad",
"path": "<Keyboard>/s",
"id": "50584c83-beb6-4e90-a453-a635c03a761e",
"path": "<Gamepad>/dpad/down",
"interactions": "",
"processors": "",
"groups": "Keyboard",

},
{
"name": "left",
"id": "0afe45fc-dc45-4310-9c73-7dc3c503addf",
"path": "<Keyboard>/a",
"id": "44408b8f-27e7-4c6d-b078-7536ba020d1a",
"path": "<Gamepad>/dpad/left",
"interactions": "",
"processors": "",
"groups": "Keyboard",

},
{
"name": "right",
"id": "69fe0335-9e0c-495d-a90d-4b0fcbfd2b34",
"path": "<Keyboard>/d",
"id": "f5681423-d3e3-41a5-b85e-0a7642c774aa",
"path": "<Gamepad>/dpad/right",
"interactions": "",
"processors": "",
"groups": "Keyboard",

},
{
"name": "gamepad_move",
"id": "477500ef-6d32-4b84-b9f8-158f18bcb906",
"path": "2DVector",
"interactions": "",
"processors": "",
"groups": "",
"action": "movement",
"isComposite": true,
"isPartOfComposite": false
},
{
"name": "",

11
ML-Agents-Input-Example/Assets/ML-Agents/Examples/PushBlock/PushBlockActions.inputactions.meta


fileFormatVersion: 2
guid: fcfa5a3b2c4254b2baad1ae474fc4b93
ScriptedImporter:
internalIDToNameTable: []
guid: 49459a7f177004c6cab3136c322d80dc
DefaultImporter:
serializedVersion: 2
script: {fileID: 11500000, guid: 8404be70184654265930450def6a9037, type: 3}
generateWrapperCode: 1
wrapperCodePath: Assets/ML-Agents/Examples/PushBlock/Scripts/PushBlockActions.cs
wrapperClassName:
wrapperCodeNamespace:

23
ML-Agents-Input-Example/Packages/manifest.json


{
"dependencies": {
"com.unity.2d.sprite": "1.0.0",
"com.unity.2d.tilemap": "1.0.0",
"com.unity.ads": "3.6.1",
"com.unity.analytics": "3.3.5",
"com.unity.ide.rider": "3.0.3",
"com.unity.ide.rider": "1.1.4",
"com.unity.multiplayer-hlapi": "1.0.8",
"com.unity.package-validation-suite": "0.19.3-preview",
"com.unity.purchasing": "2.2.1",
"com.unity.test-framework": "1.1.20",
"com.unity.testtools.codecoverage": "1.0.0-pre.3",
"com.unity.test-framework": "1.1.22",
"com.unity.timeline": "1.2.15",
"com.unity.timeline": "1.2.18",
"com.unity.toolchain.macos-x86_64-linux-x86_64": "0.1.20-preview",
"com.unity.xr.legacyinputhelpers": "2.1.7",
"com.unity.modules.ai": "1.0.0",
"com.unity.modules.androidjni": "1.0.0",
"com.unity.modules.animation": "1.0.0",

"com.unity.modules.vr": "1.0.0",
"com.unity.modules.wind": "1.0.0",
"com.unity.modules.xr": "1.0.0"
},
"testables": [
"com.unity.ml-agents",
"com.unity.ml-agents.extensions",
"com.unity.inputsystem"
]
}
}

133
ML-Agents-Input-Example/Packages/packages-lock.json


{
"dependencies": {
"com.unity.2d.sprite": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {}
},
"com.unity.2d.tilemap": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {}
},
"com.unity.ads": {
"version": "3.6.1",
"depth": 0,
"source": "registry",
"dependencies": {
"com.unity.ugui": "1.0.0"
},
"url": "https://packages.unity.com"
},
"com.unity.analytics": {
"version": "3.3.5",
"depth": 0,
"source": "registry",
"dependencies": {
"com.unity.ugui": "1.0.0"
},
"url": "https://packages.unity.com"
},
"version": "1.3.1-preview",
"version": "1.3.2-preview",
"depth": 1,
"source": "registry",
"dependencies": {

"url": "https://packages.unity.com"
},
"com.unity.burst": {
"version": "1.3.4",
"depth": 2,
"version": "1.4.6",
"depth": 1,
"source": "registry",
"dependencies": {
"com.unity.mathematics": "1.2.1"

"url": "https://packages.unity.com"
},
"com.unity.ide.rider": {
"version": "3.0.3",
"version": "1.1.4",
"depth": 0,
"source": "registry",
"dependencies": {

},
"com.unity.mathematics": {
"version": "1.2.1",
"depth": 3,
"depth": 2,
"source": "registry",
"dependencies": {},
"url": "https://packages.unity.com"

"depth": 0,
"source": "local",
"dependencies": {
"com.unity.barracuda": "1.3.1-preview",
"com.unity.barracuda": "1.3.2-preview",
"com.unity.modules.physics2d": "1.0.0",
"com.unity.modules.unityanalytics": "1.0.0"
"com.unity.modules.physics2d": "1.0.0"
}
},
"com.unity.ml-agents.extensions": {

"dependencies": {
"com.unity.ml-agents": "1.8.0-preview"
"com.unity.ml-agents": "1.9.0-preview",
"com.unity.burst": "1.4.6"
"com.unity.multiplayer-hlapi": {
"version": "1.0.8",
"depth": 0,
"com.unity.sysroot": {
"version": "0.1.19-preview",
"depth": 1,
"dependencies": {
"nuget.mono-cecil": "0.1.6-preview"
},
"dependencies": {},
"com.unity.nuget.mono-cecil": {
"version": "0.1.6-preview.2",
"com.unity.sysroot.linux-x86_64": {
"version": "0.1.14-preview",
"nuget.mono-cecil": "0.1.6-preview"
"com.unity.sysroot": "0.1.18-preview"
"com.unity.package-validation-suite": {
"version": "0.19.3-preview",
"depth": 0,
"source": "registry",
"dependencies": {
"com.unity.nuget.mono-cecil": "0.1.6-preview.2"
},
"url": "https://packages.unity.com"
},
"com.unity.purchasing": {
"version": "2.2.1",
"depth": 0,
"source": "registry",
"dependencies": {
"com.unity.ugui": "1.0.0"
},
"url": "https://packages.unity.com"
},
"com.unity.settings-manager": {
"version": "1.0.1",
"depth": 1,
"source": "registry",
"dependencies": {},
"url": "https://packages.unity.com"
},
"version": "1.1.20",
"version": "1.1.22",
"depth": 0,
"source": "registry",
"dependencies": {

},
"url": "https://packages.unity.com"
},
"com.unity.testtools.codecoverage": {
"version": "1.0.0-pre.3",
"com.unity.textmeshpro": {
"version": "2.1.1",
"com.unity.test-framework": "1.0.16",
"com.unity.settings-manager": "1.0.1"
"com.unity.ugui": "1.0.0"
"com.unity.textmeshpro": {
"version": "2.1.1",
"com.unity.timeline": {
"version": "1.2.18",
"com.unity.ugui": "1.0.0"
"com.unity.modules.director": "1.0.0",
"com.unity.modules.animation": "1.0.0",
"com.unity.modules.audio": "1.0.0",
"com.unity.modules.particlesystem": "1.0.0"
"com.unity.timeline": {
"version": "1.2.15",
"com.unity.toolchain.macos-x86_64-linux-x86_64": {
"version": "0.1.20-preview",
"dependencies": {},
"dependencies": {
"com.unity.sysroot": "0.1.19-preview",
"com.unity.sysroot.linux-x86_64": "0.1.14-preview"
},
"url": "https://packages.unity.com"
},
"com.unity.ugui": {

"com.unity.modules.ui": "1.0.0",
"com.unity.modules.imgui": "1.0.0"
}
},
"com.unity.xr.legacyinputhelpers": {
"version": "2.1.7",
"depth": 0,
"source": "registry",
"dependencies": {
"com.unity.modules.vr": "1.0.0",
"com.unity.modules.xr": "1.0.0"
},
"url": "https://packages.unity.com"
},
"nuget.mono-cecil": {
"version": "0.1.6-preview",
"depth": 1,
"source": "registry",
"dependencies": {},
"url": "https://packages.unity.com"
},
"com.unity.modules.ai": {
"version": "1.0.0",

2
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Scripts/Tank/TankAgent.cs.meta


fileFormatVersion: 2
guid: d6f125a5c899346259be7aac2df8daa0
guid: 4b31088c456fe4aadafd554c7c522867
MonoImporter:
externalObjects: {}
serializedVersion: 2

2
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Scripts/Tank/TanksInputActions.cs.meta


fileFormatVersion: 2
guid: bb9a2d951ffa44f53ba04a31f2712f5f
guid: 2e6ba51a4e2ce47499d0ba87edbdf0f5
MonoImporter:
externalObjects: {}
serializedVersion: 2

2
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Scripts/UI/ButtonRemapScreenController.cs.meta


fileFormatVersion: 2
guid: e5ed63dbfa25542ecb8bc013adfba183
guid: 5961b4e68deb21c4b8c94f211522c8b1
MonoImporter:
externalObjects: {}
serializedVersion: 2

2
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Prefabs/Tanks.onnx.meta


fileFormatVersion: 2
guid: bee50ae7fd03e4e16a4ac45db4d96f6e
guid: 2473d2d483f914b869221ca66f5770e9
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}

15
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Materials/BuildingGlass.mat


Material:
serializedVersion: 6
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_Name: Headband
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: BuildingGlass
m_ShaderKeywords:
m_LightmapFlags: 4
m_ShaderKeywords: _EMISSION
m_LightmapFlags: 1
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1

- _UVSec: 0
- _ZWrite: 1
m_Colors:
- _Color: {r: 0.98039216, g: 0.6509804, b: 0.16078432, a: 1}
- _EmissionColor: {r: 0.98039216, g: 0.6509804, b: 0.16078432, a: 1}
- _Color: {r: 0.21388409, g: 0.23575348, b: 0.31617647, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}

1001
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Models/Concrete.fbx
文件差异内容过多而无法显示
查看文件

33
config/poca/Tanks.yaml


behaviors:
Tanks:
trainer_type: ppo
hyperparameters:
batch_size: 2048
buffer_size: 20480
learning_rate: 0.0003
beta: 0.005
epsilon: 0.2
lambd: 0.95
num_epoch: 3
learning_rate_schedule: constant
network_settings:
normalize: false
hidden_units: 512
num_layers: 2
vis_encode_type: simple
reward_signals:
extrinsic:
gamma: 0.99
strength: 1.0
keep_checkpoints: 5
max_steps: 50000000
time_horizon: 1000
summary_freq: 10000
threaded: false
self_play:
save_steps: 50000
team_change: 200000
swap_steps: 2000
window: 10
play_against_latest_model_ratio: 0.5
initial_elo: 1200.0

15
ML-Agents-Input-Example/ProjectSettings/BurstAotSettings_StandaloneLinux64.json


{
"MonoBehaviour": {
"Version": 3,
"EnableBurstCompilation": true,
"EnableOptimisations": true,
"EnableSafetyChecks": false,
"EnableDebugInAllBuilds": false,
"UsePlatformSDKLinker": false,
"CpuMinTargetX32": 0,
"CpuMaxTargetX32": 0,
"CpuMinTargetX64": 0,
"CpuMaxTargetX64": 0,
"CpuTargetsX64": 72
}
}

3
ML-Agents-Input-Example/LinuxPlayer_s.debug


ELF>@@@X
@8 @@@@@@��88@8@@@�� � � `� `x � � `� `0TT@T@DDP�td��@�@<Q�tdR�td� � `� `HHGNU GNU*������ʶ4UcR)��GCC: (GNU) 4.8.5 20150623 (Red Hat 4.8.5-39)GCC: (GNU) 7.3.1 20180303 (Red Hat 7.3.1-5)clang version 5.0.1 (tags/RELEASE_501/final)p@�@�@,(`;� `b@n� `��@��@�`�� `�� `�� `8@T@t@�@�@�@b@x@ �@
�@ �@ @ 0@@@�@�@�@� `� `� `�``(`��@c@@ ��@/B(`N0@e^(`�0`j(`q @X �@deregister_tm_clones__do_global_dtors_auxcompleted.6945__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entry__FRAME_END____GNU_EH_FRAME_HDR_GLOBAL_OFFSET_TABLE___init_array_end__init_array_start_DYNAMIC__libc_csu_fini__gmon_start____libc_start_main@@GLIBC_2.2.5_Z10PlayerMainiPPc__TMC_END____libc_csu_init__bss_start_edatamain.symtab.strtab.shstrtab.interp.note.ABI-tag.note.gnu.build-id.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.got.text.fini.eh_frame_hdr.eh_frame.init_array.fini_array.dynamic.got.plt.bss.comment8@8#T@T 1t@t$D�@�8J�@��R�@��Zb@�gx@� v�@���@�0��@��@�0�0@��@@�b��@� ��@�<��@��� `� �� `� �� `� 0��`� �`� (�(`� �0�� �& �v^ �

8
ML-Agents-Input-Example/Assets/Samples.meta


fileFormatVersion: 2
guid: c330ceb41d70d4bd88a07a110d85ed5d
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

8
ML-Agents-Input-Example/Assets/Samples/Input System.meta


fileFormatVersion: 2
guid: de87d60e12adb479a94471090f99df10
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

8
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2.meta


fileFormatVersion: 2
guid: 5d36bcee90e4a419683606d699b0409b
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

8
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo.meta


fileFormatVersion: 2
guid: 28e0d2e3e22e6428eaa34f5f277988bd
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

4
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/.sample.json


{
"displayName": "Tanks Demo",
"description": "The Unity Tanks demo game, converted to using the Input System package, and with a custom input binding screen. This sample is not actually part of the package, but needs to be downloaded."
}

9
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Animators.meta


fileFormatVersion: 2
guid: 63db5dd3902ac1c48b09ef34d5fac746
folderAsset: yes
timeCreated: 1432285408
licenseType: Store
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

72
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Animators/Pumpjack.controller


%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!91 &9100000
AnimatorController:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Pumpjack
serializedVersion: 5
m_AnimatorParameters: []
m_AnimatorLayers:
- serializedVersion: 5
m_Name: Base Layer
m_StateMachine: {fileID: 110745078}
m_Mask: {fileID: 0}
m_Motions: []
m_Behaviours: []
m_BlendingMode: 0
m_SyncedLayerIndex: -1
m_DefaultWeight: 0
m_IKPass: 0
m_SyncedLayerAffectsTiming: 0
m_Controller: {fileID: 9100000}
--- !u!1102 &110219802
AnimatorState:
serializedVersion: 5
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Take 001
m_Speed: 1
m_CycleOffset: 0
m_Transitions: []
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: 7400000, guid: d7962f90116a5c94d9a7a2b2e4fbc1b2, type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1107 &110745078
AnimatorStateMachine:
serializedVersion: 5
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Base Layer
m_ChildStates:
- serializedVersion: 1
m_State: {fileID: 110219802}
m_Position: {x: 336, y: -12, z: 0}
m_ChildStateMachines: []
m_AnyStateTransitions: []
m_EntryTransitions: []
m_StateMachineTransitions: {}
m_StateMachineBehaviours: []
m_AnyStatePosition: {x: 50, y: 20, z: 0}
m_EntryPosition: {x: 50, y: 120, z: 0}
m_ExitPosition: {x: 800, y: 120, z: 0}
m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
m_DefaultState: {fileID: 110219802}

8
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Animators/Pumpjack.controller.meta


fileFormatVersion: 2
guid: 92ebf232461ebc342884766124202572
timeCreated: 1431510763
licenseType: Store
NativeFormatImporter:
userData:
assetBundleName:
assetBundleVariant:

9
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/AudioClips.meta


fileFormatVersion: 2
guid: 0df7b64f0e702f14897580a356feae92
folderAsset: yes
timeCreated: 1430408541
licenseType: Store
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

21
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/AudioClips/BackgroundMusic.wav.meta


fileFormatVersion: 2
guid: 8ce5d020a687c314891341b4126d1de2
timeCreated: 1431358214
licenseType: Store
AudioImporter:
serializedVersion: 6
defaultSettings:
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
platformSettingOverrides: {}
forceToMono: 0
preloadAudioData: 1
loadInBackground: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:

1001
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/AudioClips/EngineDriving.aif
文件差异内容过多而无法显示
查看文件

21
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/AudioClips/EngineDriving.aif.meta


fileFormatVersion: 2
guid: d7ca9fb5aa30155449192b23d7fb3336
timeCreated: 1432892509
licenseType: Store
AudioImporter:
serializedVersion: 6
defaultSettings:
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
platformSettingOverrides: {}
forceToMono: 0
preloadAudioData: 1
loadInBackground: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:

1001
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/AudioClips/EngineIdle.aif
文件差异内容过多而无法显示
查看文件

21
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/AudioClips/EngineIdle.aif.meta


fileFormatVersion: 2
guid: 4932ab25b84dd7649b80af68a9660ddc
timeCreated: 1432892508
licenseType: Store
AudioImporter:
serializedVersion: 6
defaultSettings:
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
platformSettingOverrides: {}
forceToMono: 0
preloadAudioData: 1
loadInBackground: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:

879
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/AudioClips/ShellExplosion.wav
文件差异内容过多而无法显示
查看文件

21
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/AudioClips/ShellExplosion.wav.meta


fileFormatVersion: 2
guid: 3a77defcde1caaa40b6f7502547e0c4e
timeCreated: 1430408618
licenseType: Store
AudioImporter:
serializedVersion: 6
defaultSettings:
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
platformSettingOverrides: {}
forceToMono: 0
preloadAudioData: 1
loadInBackground: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:

1001
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/AudioClips/ShotCharging.wav
文件差异内容过多而无法显示
查看文件

21
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/AudioClips/ShotCharging.wav.meta


fileFormatVersion: 2
guid: c17f124fcdc0f5446a72f793898bd74b
timeCreated: 1430473600
licenseType: Store
AudioImporter:
serializedVersion: 6
defaultSettings:
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
platformSettingOverrides: {}
forceToMono: 0
preloadAudioData: 1
loadInBackground: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:

1001
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/AudioClips/ShotFiring.wav
文件差异内容过多而无法显示
查看文件

21
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/AudioClips/ShotFiring.wav.meta


fileFormatVersion: 2
guid: 672a9941361ad494a99fba36759eca80
timeCreated: 1430408618
licenseType: Store
AudioImporter:
serializedVersion: 6
defaultSettings:
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
platformSettingOverrides: {}
forceToMono: 0
preloadAudioData: 1
loadInBackground: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:

1001
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/AudioClips/TankExplosion.wav
文件差异内容过多而无法显示
查看文件

21
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/AudioClips/TankExplosion.wav.meta


fileFormatVersion: 2
guid: 5c27182a28a7eb942a362e6d198fe0e6
timeCreated: 1430408618
licenseType: Store
AudioImporter:
serializedVersion: 6
defaultSettings:
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
platformSettingOverrides: {}
forceToMono: 0
preloadAudioData: 1
loadInBackground: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:

9
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/AudioMixers.meta


fileFormatVersion: 2
guid: 137d74c4bd2116d45bee226676d8a18a
folderAsset: yes
timeCreated: 1431339592
licenseType: Store
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

225
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/AudioMixers/MainMix.mixer


%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!241 &24100000
AudioMixerController:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: MainMix
m_OutputGroup: {fileID: 0}
m_MasterGroup: {fileID: 24300001}
m_Snapshots:
- {fileID: 24500003}
m_StartSnapshot: {fileID: 24500003}
m_SuspendThreshold: -80
m_EnableSuspend: 1
m_UpdateMode: 0
m_ExposedParameters: []
m_AudioMixerGroupViews:
- guids:
- 657524ba984754abaac186128b61ff53
- a121704ff81124f9fa29f693fdd96cc3
- 62fce877effda4216a8d65f5cdc66c07
- 728eba4afc0e64bc48c6cf4a1a95e26f
name: View
m_CurrentViewIndex: 0
m_TargetSnapshot: {fileID: 24500003}
--- !u!243 &24300001
AudioMixerGroupController:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Master
m_AudioMixer: {fileID: 24100000}
m_GroupID: 657524ba984754abaac186128b61ff53
m_Children:
- {fileID: 24328132}
- {fileID: 24304612}
- {fileID: 24378114}
m_Volume: 5245138f308574c97bb2e90e86dea2bc
m_Pitch: 01de1675bb0334e3caa11066974f4f74
m_Send: 00000000000000000000000000000000
m_Effects:
- {fileID: 24400002}
m_UserColorIndex: 0
m_Mute: 0
m_Solo: 0
m_BypassEffects: 0
--- !u!243 &24304612
AudioMixerGroupController:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: SFX
m_AudioMixer: {fileID: 24100000}
m_GroupID: 62fce877effda4216a8d65f5cdc66c07
m_Children: []
m_Volume: 01a0a59d33edd4a43ab6f7a75c2a195e
m_Pitch: e0c1a16160901493282fb17124bf5871
m_Send: 00000000000000000000000000000000
m_Effects:
- {fileID: 24461918}
- {fileID: 24438064}
m_UserColorIndex: 0
m_Mute: 0
m_Solo: 0
m_BypassEffects: 0
--- !u!243 &24328132
AudioMixerGroupController:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Music
m_AudioMixer: {fileID: 24100000}
m_GroupID: a121704ff81124f9fa29f693fdd96cc3
m_Children: []
m_Volume: 12b87a22f80c640c4878bc4db160c002
m_Pitch: 001e830854822406d91711025a248286
m_Send: 00000000000000000000000000000000
m_Effects:
- {fileID: 24404316}
- {fileID: 24408874}
m_UserColorIndex: 0
m_Mute: 0
m_Solo: 0
m_BypassEffects: 0
--- !u!243 &24378114
AudioMixerGroupController:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Driving
m_AudioMixer: {fileID: 24100000}
m_GroupID: 728eba4afc0e64bc48c6cf4a1a95e26f
m_Children: []
m_Volume: c5da2ac9be67a41218ed1a496dff2e9f
m_Pitch: b3d63b19279b74b28a085e0b81641780
m_Send: 00000000000000000000000000000000
m_Effects:
- {fileID: 24495850}
m_UserColorIndex: 0
m_Mute: 0
m_Solo: 0
m_BypassEffects: 0
--- !u!244 &24400002
AudioMixerEffectController:
m_ObjectHideFlags: 3
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_EffectID: f2b760a50e94a4494a09e0a07583ab06
m_EffectName: Attenuation
m_MixLevel: 038ff4fbe2c99406092d093e38a6e193
m_Parameters: []
m_SendTarget: {fileID: 0}
m_EnableWetMix: 0
m_Bypass: 0
--- !u!244 &24404316
AudioMixerEffectController:
m_ObjectHideFlags: 3
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_EffectID: 70cd9e9ed6b4448e3ba1d10f2df79c13
m_EffectName: Attenuation
m_MixLevel: 163d083338b274e40b1af723a24d27f7
m_Parameters: []
m_SendTarget: {fileID: 0}
m_EnableWetMix: 0
m_Bypass: 0
--- !u!244 &24408874
AudioMixerEffectController:
m_ObjectHideFlags: 3
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_EffectID: ae436f4bbdad34121866b80566c8120a
m_EffectName: Duck Volume
m_MixLevel: 10568d2e9df294cd2b10e1e3e539992d
m_Parameters:
- m_ParameterName: Threshold
m_GUID: ba3cf072024a24329b117e4b7731be11
- m_ParameterName: Ratio
m_GUID: 08473e984487c474f9abde7a3301cfed
- m_ParameterName: Attack Time
m_GUID: fdd90cff72bc4400bb70581069eb2979
- m_ParameterName: Release Time
m_GUID: 43fbdfef65e044a5290531550ea79fd7
- m_ParameterName: Make-up Gain
m_GUID: 0be1c80004e514a828df548d70ca49db
- m_ParameterName: Knee
m_GUID: 49f5706bae1fd4c9b91415150f9ee924
- m_ParameterName: Sidechain Mix
m_GUID: 71041a16456084fc896c84fed1f77e33
m_SendTarget: {fileID: 0}
m_EnableWetMix: 0
m_Bypass: 0
--- !u!244 &24438064
AudioMixerEffectController:
m_ObjectHideFlags: 3
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_EffectID: 578911788d0614622ac49160deb16eeb
m_EffectName: Send
m_MixLevel: 922d1a6273ce0479b9d9f3fe90459aa6
m_Parameters: []
m_SendTarget: {fileID: 24408874}
m_EnableWetMix: 0
m_Bypass: 0
--- !u!244 &24461918
AudioMixerEffectController:
m_ObjectHideFlags: 3
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_EffectID: 98e08e83e973243ebbeb65bfa93e8ad5
m_EffectName: Attenuation
m_MixLevel: 8c05feeed996f4a68ae353b615606a77
m_Parameters: []
m_SendTarget: {fileID: 0}
m_EnableWetMix: 0
m_Bypass: 0
--- !u!244 &24495850
AudioMixerEffectController:
m_ObjectHideFlags: 3
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_EffectID: b768dec352604465b8cd8a5db603d56f
m_EffectName: Attenuation
m_MixLevel: 1de599e31987e41638062158dacc763a
m_Parameters: []
m_SendTarget: {fileID: 0}
m_EnableWetMix: 0
m_Bypass: 0
--- !u!245 &24500003
AudioMixerSnapshotController:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Snapshot
m_AudioMixer: {fileID: 24100000}
m_SnapshotID: e8437f1cdbde946ea9a7f6e7f7462c2d
m_FloatValues:
12b87a22f80c640c4878bc4db160c002: -12
922d1a6273ce0479b9d9f3fe90459aa6: 0
ba3cf072024a24329b117e4b7731be11: -46
08473e984487c474f9abde7a3301cfed: 2.5
c5da2ac9be67a41218ed1a496dff2e9f: -28
b3232ae98fdaf654980460028ddea9fe: 0
43fbdfef65e044a5290531550ea79fd7: 0.1
fdd90cff72bc4400bb70581069eb2979: 0
m_TransitionOverrides: {}

8
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/AudioMixers/MainMix.mixer.meta


fileFormatVersion: 2
guid: 86a7353f2579d476fbaa7f161c2e5d00
timeCreated: 1430901405
licenseType: Store
NativeFormatImporter:
userData:
assetBundleName:
assetBundleVariant:

9
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Editor.meta


fileFormatVersion: 2
guid: 0336cc9e4e68ca84392077b848decb81
folderAsset: yes
timeCreated: 1427813490
licenseType: Store
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

17
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Editor/MoveSceneViewCamera.cs


#if UNITY_EDITOR
using UnityEditor;
using UnityEngine;
public class MoveSceneViewCamera
{
[MenuItem("Window/Position Scene View Camera")]
static void PositionCamera()
{
SceneView.lastActiveSceneView.pivot = new Vector3(-147f, 23.5f, 237f);
SceneView.lastActiveSceneView.rotation = Quaternion.Euler(0f, 150f, 0f);
SceneView.lastActiveSceneView.orthographic = true;
SceneView.lastActiveSceneView.size = 100f;
Selection.activeGameObject = Camera.main.gameObject;
}
}
#endif

12
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Editor/MoveSceneViewCamera.cs.meta


fileFormatVersion: 2
guid: 1ac54707d3a75084eb41ad5c4c3a43b5
timeCreated: 1431528686
licenseType: Store
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

9
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Fonts.meta


fileFormatVersion: 2
guid: 32145277a30f2c840a782ff0c6321632
folderAsset: yes
timeCreated: 1427814917
licenseType: Store
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

9
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Fonts/Bowlby_One.meta


fileFormatVersion: 2
guid: b14ff24d0c1ad87409c85023c1d71c37
folderAsset: yes
timeCreated: 1432116479
licenseType: Store
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

518
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Fonts/Bowlby_One/BowlbyOne-Regular.ttf


DSIG��FFTM^N ��GDEFT&� (GPOS��[�HjGSUBl�t�� OS/2DHg�`cmap�r�|�gasp����glyf��p `Δhead��T 6hheaD$hmtx
,���locaP�^
LmaxpxUh name�8�)�� �post�4%�� .��[_<� �B�!�B�!���\
p���\
`����
p%%� �@��3��3��f��@�Knewt@ ���\���� ���k� ��i#�@�C)�Y�a� [2�$���+��D�����L�5�H�%�2|�
�Y�^�Ya4�Og��#h1psk�q�4vfJcg��nn�t���Zm#�uj1g�5&��Oh��R��@�����s �)�� @����y��'#�&��!���}.?&�(�4�'`>��2!"!�,f%26���X!{�����6�X d��M��� ������d����n M@7g�8���n|�[�����-NJ+!�]����4
m
)m
Ra4g��g��g��g��g��g�� O��1kkkk=2@bK��=m���Zm#m#m#m#m#�m#OhOhOhOh����uH'#'#'#'#'#'#4�����������������������k�������2!!!!!h�6666{��Ve{���>���h���)�#�6"$���s����cg��'#g��'#�����k���J����J�����m#!m#!g���g�,Oh6Oh655�$&��2�����������V yn���������;>3��������&�#�"�������������w�T
`����'����@�2�T��^7i�+"FrIzJl8���k��@�i�@�E�E�V�`�@�E�@I.�.��pX@~��1BSax~���&��    " & 0 : D t �!""""""""+"H"`"e%�'/'���� ��1AR`x}���&��    & 0 9 D t �!""""""""+"H"`"d%�'.'���������������r�f�P�L�9���"��������J�4�������������������Z����������������ޱޮ�J��ٍ 

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a���������������������������������qdei�w�okuj��rgv 
�l{����cn � m|b��������������!"�x��������������������p���y���N�P�d�H�d���h��f�Z��<�� b � �
t
� X �  Z � � l � ^��x�j�F��@���*j��2Z~Z���Z��0l|�j�R��,T��Jx����n� z!(!r!�"*"�"�#n#�$6$h$�$�%B%�%�&>&�&�&�'4'T'�(�)n*p*�*�+r+~,,(,�-`-l-x-�-�.�.�/4/�00�0�0�1 11�1�22j2v2�2�3x3�3�4\4h555�5�6�7�7�7�8Z8f929>9�9�::�:�:�;,;8;�;�<<�<�<�<�=h=t=�>l>�??�?�@b@�A�A�A�B0B�C�DnEE�F~G`G�H�I<I�J:J�KRL L�M$M�N�O.O�PBP�QLQ�R8R�S<S�S�TTZT�T�T�UU~U�VVBV�W W0W^W�W�W�X4X�X�Y*Y�Y�Z2[[H[�[�\N\�]v]�^^Z^�^�_$_r_�`R`�aa�a�a�bbpb�c`dd�d�e>e�ff�g gJgJgJk����1'4737672+'###&'4/.'###/463 r�8@=�G+\<)(T'"
 ��6
d�cy ����h3 � ^�`��4
|��_��.4''4?'75'47372#"&=6='473 5"#5#��Z %�Hu$F{XiA
:> k9R�l!, �������&@#@P*�}
���.�evz326?6;23673232737#'#32#'#"'4?67#'&'7'6?#"&='4337#"574'#3?6?&#42�? � 3
 ��  !" cK
��+9Z` C#' �
 #1J6!l.iw & � $-��^�G�
Vk�['��K2\7e W�E�P7Ob1w���A
9N�-�"*���(�H.�2�i ����T0'""&'&'#"/654.'&'63!264./$'&%67&47372�B.H<��iS &G('��f������)��3c00�  �X@0!5&��N�;]l8�fx=AX,& "8=����k�)S*��S5Ac- 
G&k
My#D S��b����7$9=P^6 ### &46%47763 # '&/67275"'774#32='4#"32='5��Fx-L�����M<��g��d5����_2+l�mۜ0[P^Xe6��
�: �}<$?x� ny�r@|M$x6W~���*Z���)p{�q�L���t�93� ��'�����v��| ���<R�$�C0����1\���)V��Z:IX327#'!"'&/"$&5%.5476$3 5>76./".'2'276764'&"��B
gY�"</��rd!'5֏Y��Į�k�f>
�P�~��5l7��+0� C6Y(K�c  q "9�j
#r�Y�!!P t�|&�E�S�_:VtY�r�n5gJc
�"8�A�{/UV>T"9UHb�f`�'4732+'#&567�B��kho' �* ��eAC���)�#0%&'676!7%2��"Sddhy6 x9��2S��D ��B�����p�
)���)/1725
+'#"74?4'67'#'674%'237{? 7;??M�j? =G
�@ � �r ������|����L \����� 
 Y\AHMP76;2##77&'5"&/6?#".472'&'67632?>4'7'%41'"H�A)B< "�*�'X*4KG@a7 bf8-%^( =
!�)��K!\[ T :A)S �Qh%-f-RZWF%L7pA)D�r a���75##!'#'#"#'0#'#&575'54632755463372%���NLW2Lf�'% �� m<C � �&#d�2!� BE!@!B�! �w/ ���72#'#&'>?>76763��9  A�*�  0&� �W+#g� [#pF2�2c,�#&'07575'4;%33,�%
 �G0"&D&*s �BT������%"#'&57547;72�����x.P�k-E &$ h6� ����N !723#+&'6?763
*Y[ �2.&+&F3<�""?� C8M����?"���/P+H���W���#+&"3276=64."'&'&/%673 Q=RA+( OGq,%
�p��d�g��!
"��XY�#4-x��:~ntc�=�?U@����P7�+�B��z�Q�c����k�%#'##"/&4&'5'>7$727_ hV))?ec
��3B 94\,��������bXp1j-
{Y2D���6%% '&475654?67654&"#!'#"'67>763 %2��d�R�+ ���^�?b5>��-'"�\��_���l�F�=+��  �ZR+is|U�w4=/T  y9_�'J�t���ct? T���F"&46;32654&"7"'#"'>7676!2! '&'43%23264'.|O &^h?x


��%5;y�;t�B��������������d ��BIs`)�XQg7G  ; ( p+�Mb-��ݓ+;����r8�W�  �Lk";#������;?CY72+#&+"''754""'47>7676762?6;337#'3%7'3%675'w:U�D%�e�M��x;8�k �1
d
Zdž�Bx �GE 3 68:0  *j�j]r*!�$+ߊ����P
0��`7c#
��P [cbfX#L���GL254&"&+"=7'&=47547372+ 632 '&'&'63%'42_
!+|;�G��%1W�%������� (H���7�f>6N��$6 �tZIa*܆@�6$7 ��8' J `!c���f�]PV2OR�� 5���*7"73'27654&%6 .'&'&54$7!"'&#" �a 27$sV��|�%ӥ����5�:�O�S�LX�s8l'!���=2�mv{�������|N/�ц��p� �e�<"fVh- H��r $'43 #'#'#"546767#"#"&'Lh��\;��Z12YA��[Fa���@>�/��d��� )
J�' %��� &0 '&'&'67&5476$3 4#"26"32654j��)V�[���s�aO��(GQ�P���*�Rh
_�a�KP�QM@�VR4l��z@9/{d��{g�gS���v���zXYig�{D�oR�2���(0672>7675465"$'&'%63 5!"'& #"q �&H1 " y����?""��d�aQ���$ۑ�~ v�}2z G?�N��LY7�Z�z��������vcY��r=|���7/32!'#"&=474##'&=754737372M8�Y��?'1  ���&HHEs�� �^H+!�� +#�/%F$#F<� >
�%�%172#'#&?674;72'#.=657>737 ��$</
ҟ2b~x����  %J� e��168 ]�o��"  \ � Y���Y"&'476732#"'.'.=757Z�F@ ���<�5  
�B<=A>%\E �e�7��By )1:0^i��25%# '&475075'5476;!767"5'5&=75'5435� ���� �9&� �.������� @
� $0F 1w�}
&T :�� Y���=!%754'3'476%767&$'&"'g �o��z  �.ቦG
� �VM�W�K
� �*_F2�
�b9D"�w"� 7$�D4��Q".GQ#"&4>767.#'5654%72'"#&=75'4753#737� x�� AL&WI9|�!}'��-T+ #6=�5 #�6(?K0VN F
�uSXG$VV7&8�wEI6CS-~OK�S(%8�a < ZS`&��O��R�?J64'&$# !27 $&6$ &'#"&=476327>74&"26�!=������\m��c������{��( �}n�[t=!;�ݲjp�nOH
TD/�\DŽZC}��TMZb���S�������
G/r�P/�nS�������
�JL�{#�}�Lk$c��9�I9Gy�hcs�������/A+#"'&/&'#'###&'7#76673%727&/.'&'�6\>=a�` &�T,
U:��Fd� {�c`O<dN�/)�&<�  g`�+
 ZGS(lj����A2w8�
 ��Bh���(6'547'7$3!2#%"& 54'&'#654&"76m6N���8F����Й������sF?����*1�\>��c0�fŊ)���xZ ;0�͵s'"8g��&6iH<kp5&1��8676763 #'#'#"."27676733733# 18kԽ�t�g Ɵ W;N;& 
�(+ 
&.�1_:;(  .U��������s�]S�y�^�5'$>�Ve��&s!v`���s��Y�27 #%"&5757&=7463&'.'676���*2��ǻ�������A9ES"g8���I���9ڃ $1$��n~>� ��) %8����� F�/k���92$%+"%%6;25+%2%"#'3&'5r��6���6P$=&�ж/- ��b�ܤ�T
� ��) .
&&^��� 0��
#-q����*#62+'&'&5433%372�u���� 6���� �D�W"�]�k
X#!��!
�r"^B.o 4��YN%3"'# !2#%&'&'&"2?'#'&=47323;72M/���3P �\�I��J�Rd� %�5NE.$  '[�WH
h CWl
b3<� :$<� �)�^o Q .=FJHB+EA3=7+�%�� f���J '&'54&+"+"'&5756473;7323327575'546337 �`�3_7�0�]
 Bpy&�>P,. A�VwK��3- ��}���0�')}/�$�JE3;)G4���0 4c����747&=&47 7##&'7g �B< "��
k�O��?@!0 ���� ��  
�����637276=#'&7'4?!732 '.'&='43�x# �-�  1nIb[�Z���tg�%R �52>0B�� z -3���n���q%A#k0l� 'n����:'476262>?>7623#&"!#'##"/57s �7�'�#O AD'F� C��x)>,8E8�?�� ]6��\ PV7 ���'�  ��1���%3� e'I QP�� ���5t����%!"'&575754'5'47;7  6 ��+-h#0�(�S� 5�REA㾼/TJ �&$���� �` ���S�Q#'"4757&5'5'4737 33>73%3+#&554/+'##"'.'w I��" �P�59G#��'p 
%-64a�#&!^ !
^ p=/O.[K\������Hg]42^
�������!���*��ʱ �:Qk3y�^(�)�e"DZ��]�4+"'& &+#'&=774%57433[+���b^�$cZ�H! � J�"��J�C���2/�f����p-��IS (���/��#��H.2>7654&#"7>76$  '$b'),mK30kl6Q)+�� (-k��l=uJ�.]���������*htt$&0)m���48�M;}�T��Y5Q������=lux�u����$16;2?6;%23632&5&'&#">54u% |0�&<H" ȎEP*!����
 ��k(�, {����=�͐2�" ��Q 0j�i��K<d�81��~,B70& #"$'"'&47676!27326767574&'&"�AD�����X���e {.T�� �^�LC�n ?L
H=$u`> [n)
% a1# (���$����tvh���h�[NZ+j����[���:xhg��(�9=AK%2 '#"'.## '"'7'577'043354"5&+$54/AfS�钌�/ 
 ���l#EU 5 n�o@9@=��<d: 9�ƴ}�CF��;�3Z( '+nL�� �
Z�IK"�?����4�Y5���C%2264.'3'&'.54676! ##"'&'&+"5"$'.'> �X6@}97%��XG�i�iN
���= L;T6#�D՛�9�����=) � D0Cj'%
@¤w�<�hL�l
$$74" 0H׏��q!lz;cY����9�*#0%''#"'&'4'.#'&575&'2%29���B�J%   & (� �'o!a�dP��X/c%[X�  ��h���0 '.'"47363326?74/&47 #
SD��,�Ga
 ��_t1C ��  ����=��=�{�c�����n�V6
Q��I,F ��׬����:�)'#"&
/&''4!23767676!3"',~K ��'Di  e J
Oc( W +.�- �/q1:#Oa.j.oW� �+��54��q9� �)O��������X7!23765>3 '+'""/&/& &/&'&'67;?232326467/��$?&H,A�nF 
F��6q] ( %9, ����&x L  _�D%?  :'%-  ��f�e66!�p�&|%< �Ý�:< 2�����\nb'�a:W�� �&9�6$�����s�CFI55"'.'&#0#&54767'&/&532277677$3#5'&`�6�V&�Z2��<"�;m/��A�`x\mh���u\1&w"|rN� ���U��(+�*8���B Qp.�-�M�­�%��(CFH  �����*�175#&575?4'&'.'&543!26;2�!
A�+"7���k,�4P �l �-fq��.�;}��[Aj��"D�c$}I��2[* d:z(�%�n��c�23%2+"&''?7#&6'575'722 %7G�M�Pr5D �Q�6���Jmn  U��" c� d�T�b��pA 
C ���0;�
%8����"%%2"'%3'&57575437|�D,:��"%� r��=-� �^���|d= 59M���������[!+#'#"727 :+�+(uAc���i�0�/�u�.u(b�@��z ,/+%&#&'5&46;275#&'575'4737375b
DO!���  �W�� R��FI�
��fO ��s]��5 )
G1���3�
���!%(+.'#"./&'#'"6?>?27%#'#774�g.(74�� 8`M\Q�>�> � �a0 Rze�K~��/�/{�z ����C�Z%2+'#' '5&43'7Fv�z D*,�[�5C�(Gv ���Q&''.547;7#� "Y� ���(=�*&k���9#����P_32?6765&4&+"&#!676$?23722!'"&'#"1"'&5476?74'32?4
"6�9'`,��;S�<  -1`H�4
�<$(  ?�Mr�z=�:�!vT2);#K �
@ 1
8>�EP�� `��s�EtD  _U<hEH
�Up�7� 2. 5\L6
>&���!4#"'!6!>3254'&#"2>4'565���\x��.+���X�Y�t
=$��$J<B; G4)�3�&~&� T  ^��vKTt&Q�MN�`O���tV-5{M����B"'"'&/&/&47?632"53'!'&/#32656;3#"P=;(D�pW?ʇ��UHSp2��&X 
53&M�&``���#&��6�p� YLkH6Z�e}%s& �  :
KP|3���=!��� 37!%0!&/#"547>772'7&5'327654'&"g*,�
(`�{���%(��Uz��B" h6!O7�e ��"FUN<�����k 3��#7:]-��a<<m������Q]6255!5>763!3#"'##"'#'"'/.'.=4754?677.'&"63)-f.*c5�uO�� 
!7' $B�q <4n��X
 
W+[����5*U5@6�   A� �CZ!2
 ZC
zfR;m
,ݓI 0 �5?
�� l=**J�.��@#!'4676 #"';2#"'#'53�C95=�"$O *-��]�rv�P0�2&������B��&�3��I^%74' .>3275!%5"'#"/&'./37!3276="&7#"327#65� -m����Q��ˈ )�Z
:a� Mf I<�� >��-%A w"*N<B,~:B.0�ӜZq,F�[$) 58X"n�
 9�� 4UJ:A. "(�;# R��')(��_"!74&#"!6!>2]��5'J �����zFɦ�4,>��ɷ�o[YJ4T�*�Z�O^PBE�A4���2/!4/#7!"'5'54757373762���
n��*�" N HU*��`)�
� �)r-ł__��B}55'��I.1!%&756=753276=7!%3#'##"'#"'#&#7�$$��!~$%E7��j$���� `�V)A��{�lS�&T�
��""32635!'&' '!%76WM 23�Ht y�PE*=&a�Xx>>&$`�/OM���B��z�V�H!y��ps>���#72!>�t���"������26 !74#"!74'!%!>3232E�r�E��Q[����P^����%A�VW����DS^- 'H��L��E��A��<��YU�Ip��2��w�"%6?632!74#"!<  ( e�c�d��QW�����Z-Ke �w�j ����f�� ��XV����1>3 .'&475&57#674776?6?>762'3632&'&"32�If������0r7v�#Bw + + 
٘G��5?0 .o]
����E�=�  �7 �8 Y ���FI�yWaA"����"6%!>25#"&'&'!%7&4754/&'&#"6"&j��T��YpdZ5_�V& ����E M|7&h�'FaQ'E�����gV X9)���@?1 *
3����R& !����'80!#".5&47&546763>?467!7'676?���4!,�L��tJF��)�8C 
D���z9'w/Z�g�,9��� " }�\�K +3 
�v- TPG./��!&Mz,��c�%!36?6776723&"!,

#%i(!bG%Z_AJ��������H '��) c�i�U%��2�P'"."##'#"'$'2$3264. '&5476%>27'�[Q� IX85`_A2Y�K- ș "aG+_I ����5�ASZvD&J?d0^G_IT�[r`$�
0w�� �!.'F8  )AE���22]�,8.I1   ^��Xm! 1�S2���� 327!#".'.5#'53!%3#$c ��" %X+ vs55���#!-��0%6iN*��K����6����325%!!'#"'7.'&57!%�I=IF��/����2 A>>L��fl��U��n?v� ���g�%!3!#!&/|t !l����:J/\�3�|���������Ha����'36?67!!'&#!&/4!%3>776uJ�:�8��%X�["FFOM$1m��"L�hJD���<ܧn3����,�� +��iq%!���2%37>7!!&##&+#6?6?&'3'.'�; $ #'"
s�/8�E��,P$  
�Oef� `*4 4: �A�(B�
�!��(W2�����l�*lK�,,0 \�O�30�����_�:654/!%!5#"'#'"'"#'&475754'626;>3�]&u�1--aO��)(2}9Z�^Q='**!
8� �8y2w'��+�(��$g�z��f� 3
rv9����w�'#!#3!0"'"&#67��R�q�y���dW
 .�3w��[����KF6����D30#'#";2'".4.'./&5&4767'5%672O0:7uTUF-)?5 ���\ ,5#1 �
Gg��S+82EP6nGh !r{$8Y8 P!�9s�xGL( ! �� l . X���#+"/&'765'54762� gJO 
/�,9�������� 
T�Q� d����O273237+'#'".''7'473265'>7.574&#"575'47;b�K�
� b@/�].~B7BCU�|YFc 5�%J��.�n
 w*�, LDR}~+W= 
�,2M��u-&qq�L7�<@9�'�*&'772"'&/&"/4&'&547632332 
N?��t ~�L$E /u�I`7!�-_� 
�6Xa9 ?>B
+}5�)AM�a��,/32'&'7>76#'#&'?54;74�>�m%- G � +�7 �$W� E���U%9�-��Z �Y�b�w �������d2=#'#"'54'&#3276?!2#"/7&'&'&5%5'4 � �� c!:� *"�rW
�" 61��G}\�G��$#�
��q��L*�F )�?JY)X5>�6=��kX��7�  ���[%+#' +'#"/5'4?6=7#'#"57575'473&5476$3 $.'.#72"/&"63o &�5���$05`>!�S 3 ))jFP5���7��l(.f�, :����.���K
�)P&&7' B@�~t{�B� ;�0!�`m�&e�?BEY%.'#"'&'6?&'3'&/>7'&46763273"'&/7%#7327654'.+"�cD�4G= #69+ 
AL5u) ����y�-g%5tYU< :`K�d��� d&�G,e@#�5�$; 7,LF  >9<6;!E=ng�N7w�fp�$ k$9�����Y?9
?fKA
��>J��I,�9h�E������y|7!'620#'#'"##"/&'54757'5"'57'433374##&=7476;3/./&54;72#?>337372275'  ��.
u�%C!"<R�[]��Y#! �1)<W�
+!{ C$4�J��&&o8Nk�'6>IS*'"3/ 82+`Mc�
'^%V+2 5$Z 90� PSf��8 W&cv\ TPcf<�+
&�(�ggU�d���#/+0"#"/5'54762+"#"/'542�
`J9
/�+
`J9
�l9����� ��#�b�� ���S6FH32654'.'3&5467.'676 &"'# /&4'264."#7"��x6{ �/koN\��r���@u� 2�AN 7�w����J�8I�� -+�+I +.J"]�X�')I�M7,�A'Z/ /�Zk&wP,z�:cW/O� EF7.GG"-����E)72''4675#"'#'#'7J�=�� 7Om��
G3�$�@��U� ��/bm/ #:  ��w'MP%!"'&&'76$ #" >4.732# '&'>32#'#'&#"2767637'�������b �sA<*ދ^S��}��D���ea��� .!́��zD��m�� +�%o�% Y�%.����~�^XZS�{����Ϋ���c[h�������b���֘[�@���s�}�p�� r�(*`�*C�@��$04""#6!32"'#"'#&#'&=#"54!2"26757'5� $�$28�Z$"FB �r�=[D�Fk; �:tA)Pn��7b��z95,81"��h#(O32#'##"'&'3'&'7676;#'27327#"/&67>?67#76733�GO`@Z */5)E�
v%UK8�( /��� � 7 �+� ���&��;"+� \* ��$�<Zl
�8��\lA��"&b-��h��H  8-�.V0> �g���%'"'%&575'50%#7&x_v��7���"h�3 ���m�8���%GKQT_%$767632# '&!" $-2##./#&+0'&=#5%1635'264'."���(�Vh���(ߍzhs�ύ���������YQDQ��/���w�h-+j .0HP!� 7��
x
�ޮGJM�EO��H�e:s���ͬ���lr��2�Mcc��ۧb��|`_�2� !N
-�'?a)�\-K�  �+q<��� �'47!37+'#"#'57t�C� �SD���HN>' H*@|�� "'.'>2���d1>����q�J$~P���[����.3N#"='54;?546337233#!3#'#&'&"5'4737372#'##"'7��.+��
� !�8��y'� :? ���ɨUT�s �J]�=%� Q�� �� j*Y}� ��1;  Q�����1;4%'& '&574?67654&"+'#"'>27%215����� $�hCu/H(
'�!;!\����M%�v.e&��   6��I<iX'-%+Hr`O%J~�9f�K
.8���@<=@"&546332654#""'#"'>7>2"&'&'43%7226547(6 ,DLY%) �{%
.����zM�d�x��A��EDB1i5���%9H=;n>  Vq\%Ev=oh+x[��09E<�889'��-��#'673}1�+F�(�V?G�?
.�bJ�H'%PV#"'&='#"'#+'#"'67'5'4763!3265'5765423%7+'"4�4�\I ">9$tR=4j / 7m: +$@ � K 
!
�n O s R�� Q��E�)L��ElJZAD�._T�}�� �s !����05"=$676!3?632#'"'5'54'&32"*�;�7���c ��d 0?� ?;���ZX� �qR�UJ*/��H��b�� " "i������� 3232"&'>7#6�  W��ޕ
'H �Ӡ�j}+R��f��+/32"&54?4673254#"/3&56767'�� x���� Y9nN ,46 0dQm|&2$?,"[c�����$#'#0#/&5"576376727 K�4
 yj]�.��
�){���NH^R%- HA��f�56%632#"$(GZ� ��X\����
�GEM���C���A$CGKNP'#+"''7&4;725#'423+"54?6?%7'7#'�W4X%��=�d&�O
 (�%����m 19(5p@ A^�29)B<��9!�
+
��/q #. :�8  �'�2S^?Y� `�_�4
*��
m�� ��$F��#'#0#/&5"576376727723#+&'6?7637263+#&"'754"0#".'47>77>?6;'33767'574'� K�4
 yj]�.��
4
*Y[ �2-&+&F3<�""?��
 ). ^�PM@�_-n:�>BZ��!�w � 5){���NH^R%- HAG C8M����?"���/P+H���W���4#VD��Ls�Z"�
%�z: 8% 1n�]%m�� ^�$F}#'#0#/&5"576376727723#+&'6?763'& '&574>?67654&"+'#"'>27%2� K�4
 yj]�.��
4
*Y[ �2-&+&F3<�""?�g5����� : �hCu/H(
'�!;!\����M$�v.e&){���NH^R%- HAG C8M����?"���/P+H���W�i�   6�&
pI<iX'-%+Hr`O%J~�9f�K
.8R�� ��<?a��"546332654#""'#"'>7>2"&'&'43%722654#7%723#+&'6?7637263+#&"'754"#".'47>77>?6;'33767'574'� ,DLY%) �{%
.����zM�d�x��A��EDB1i5���(
*Y[ �2.&+&F3<�""?�)
 ). ^�PM@�_-n:�>BZ��!�w � 53FH=:o>  Vq\%Ev=oh+x[��09E<�889'��Y C8M����?"���/P+H���W���4#VD��Ls�Z"�
%�z: 8% 1n�]%4�GQ�2FJ'6736372?3767"/&/.'6767676'52%7'&$&=6�
 x&�f 5L&Z I8��!�^��-V(  8Co($O�FUm��2S_
j iG+G%WW7%8�wJJ7C%�~NeU D�\� Ff`)��������&$CJ�������/AP+#"'&/&'#'###&'7#76673%727&/.'&'#'673�6\>=a�` &�T,
U:��Fd� {�c`O<dN�/)�&<� [1�+F�(�V?G  g`�+
 ZGS(lj����A2w8�
 ��Bg?
.�b�������&$�������/Aad+#"'&/&'#'###&'7#76673%727&/.'&'7!"/&"+&546325276'7�6\>=a�` &�T,
U:��Fd� {�c`O<dN�/)�&<� c�
��6X:j1���5�9
&   g`�+
 ZGS(lj����A2w8�
 ��B���!  ��% 

��������&$j��������/ANW+#"'&/&'#'###&'7#76673%727&/.'&'#"'&4>76&"26�6\>=a�` &�T,
U:��Fd� {�c`O<dN�/)�&<� #��p�T'"I PhP [kM  g`�+
 ZGS(lj����A2w8�
 ��B��爐;7*b*\�HA9EOG���� �MSWn%"+#'&'&/&#"1#'###&'673%72$3+"%%62#+%27"'274&/&/4.'&'
 ����O3.&(�WeJ�� ( U;��FTW<�c`O �� 4- -���(R� !(�ݷ982Q�����)�&%*M>
' �%�%
 "���/N 0a���� LS��D=K �^�  ����'B��1��&&y���k��&(Cx�k���9H2$%+"%%6;25+%2%"#'3&'5#'673r��6���6P$=&�ж/- ��b�ܤ�T
1�+F�(�V?G� ��) .
&&^��� 0��
#- ?
.�b��k��&(�Bk���9HJPd2$%+"%%6;25+%2%"#'3&'572''4675#"'#'#&'7r��6���6P$=&�ж/- ��b�ܤ�T
'�=�� 7Om��
G3�$�@� ��) .
&&^��� 0��
#-���U� ��/bm/ : 2���5747&=&47 7##&'77#!"&''.5473b �B< "��
��(=��"Y� ��k�O��?@!0 ���� ��  
��9*&k�b��q.747&=&47 7##&'7#'673f �B< "��
�1�+F�(�V?Gk�O��?@!0 ���� ��  
�?
.�b�����H747&=&47 7##&'7&'&/#!"5476?>?5#'d �B< "��
 ��.$ ��19Dq^ޱ"
> #  k�O��?@!0 ���� ��  
�6 <F2 i�#) 2 \/���.06J747&=&47 7##&'772''4675#"'#'#&'7^ �B< "��
_�=�� 7Om��
G3�$�@k�O��?@!0 ���� ��  
��U� ��/bm/ : ����V�,N7 ##%"&57575#&'7575'4;&=74636764'&'.'33#'#��� �6(I�~������u��@�,h7�'@6\O2*By����`�~��� !-+�ި R )-/t� ��Cj E��<t/" %9Np# X4��Z��]�&1����#��H&&2C #��H.=2>7654&#"7>76$  '$#'673b'),mK30kl6Q)+�� (-k��l=uJ�.]���������1�+F�(�V?G�*htt$&0)m���48�M;}�T��Y5Q������=lux��?
.�b��#��H &2��#��H.NQ2>7654&#"7>76$  '$7!"/&"+&546325276'7b'),mK30kl6Q)+�� (-k��l=uJ�.]����������
��6X:j1���5�9
& �*htt$&0)m���48�M;}�T��Y5Q������=lux����!  ��% 

��#��H�&2j���0r�9<%./.4>?&/&4?67636322�"��"vd
@  Gw@R�9= 1`Lgr, LsMd� k' !W" 'qc>"JsAY�1= 4bOe~-KmP`�g%
"#�HHf%4<7>76$ 72 ''"'?'$&#"%264# (-k��w/r���.]�����)L U ��??r6Q)+���6R�g�}�T��e��n������=l;;GD}Q� ��*�~T~48�M���L�;��h��&8C�h��
0? '.'"47363326?74/&47 ##'673
SD��,�Ga
 ��_t1C ��  �%1�+F�(�V?G����=��=�{�c�����n�V6
Q��I,F ��׬H?
.�b��h��&8��h���0?AGZ '.'"47363326?74/&47 #72''4675#"'#'#'7
SD��,�Ga
 ��_t1C ��  �(�=�� 7Om��
G3�$�@����=��=�{�c�����n�V6
Q��I,F ��׬���U� ��/bm/ #: ������*�&<u��u���V%/3632&56=47$54'&+��]" ȎEP)"���� ��< uAV5
�j=�̑3�" 9�R 0j���ki1 �F
��$?��H��F&KRY '&'#%#47676$ #7>54 7%32?654&'&'.4'74+63�v��q=&CR��!Zd%+�<Y@�N`�� !&&��.&.j/
M02]� �z�zпc�b<zG���u�\V`$�9�M~A;2L9l\Ml i���-%9*.B!?���� 4��#���&DC)#���Q`o%!'"&'#"1"'&5476?32?6765&4&+"&#!676$?23722%74'32?#'673�
�<$(  ?�Nr�z=�:�!.
"6�9'`,��;S�<  -1`�c$D,��T2);#K ��1�+F�(�V?G� _U<hEH
�Up�7
@ 1
8>�GN�� 8J4b��EtD � 2. 5\L6
>�?
.�b��#����&D��#����Q`��%!'"&'#"1"'&5476?32?6765&4&+"&#!676$?23722%74'32?7!"/&"+&546325276'7�
�<$(  ?�Nr�z=�:�!.
"6�9'`,��;S�<  -1`�c$D,��T2);#K O�
��6X:j1���5�9
& � _U<hEH
�Up�7
@ 1
8>�GN�� 8J4b��EtD � 2. 5\L6
>E��!  ��% 

��#���&Dj�#����Q`nw%!'"&'#"1"'&5476?32?6765&4&+"&#!676$?23722%74'32?#"'&'>76&"26�
�<$(  ?�Nr�z=�:�!.
"6�9'`,��;S�<  -1`�c$D,��T2);#K ��p�T'"I PhP [kM� _U<hEH
�Up�7
@ 1
8>�GN�� 8J4b��EtD � 2. 5\L6
>'�櫓147b*\�HA9EOG��|�������"'3%2#"'3%2'+'#'#'#"'+"'5#"/.#!#'#+'4'7>7#6?#6?67#7;;3326;73"'#/276;264''&5'&/&''&'2&473#67#3'&'623'"5�'� .u  !��nB �% 6  E2 \3P�akX>6@) !�� 
S G,Q� '�#2$H� e"#O1+m�5� A ��� �('! �]  �
e`�^ &X' '3 _$ k
G�
�
)/oF4FtO^�^=Z�Z,���4*+8~NP �1
M� 
��,A������&Fy��������&HC������Q]l6255!5>763!3#"'##"'#'"'/.'.=4754?677.'&"63#'673)-f.*c5�uO�� 
!7' $B�q <4n��X
 
W+[����5*U5@6�1�+F�(�V?G�   A� �CZ!2
 ZC
zfR;m
,ݓI 0 �5?
�� l=**J��?
.�b��������&H�z�����Q]lnt�6255!5>763!3#"'##"'#'"'/.'.=4754?677.'&"6372''4675#"'#'#&'7)-f.*c5�uO�� 
!7' $B�q <4n��X
 
W+[����5*U5@6��=�� 7Om��
G3�$�@�   A� �CZ!2
 ZC
zfR;m
,ݓI 0 �5?
�� l=**J�J��U� ��/bm/ : �������&�Cd�����%4#!"/5'54?573762#'673d ��'<p�D 
��1�+F�(�V?G9 �?t -����?&L�e*Gh*?
.�b���k��A�&�������3%46<P#!"/5'54?57376272''4675#"'#'#&'7d ��'<p�D 
,�=�� 7Om��
G3�$�@9 �?t -����?&L�e*Gh���U� ��/bm/ : ��(�z2\'4;&5'5&='6;26; '"'#'&=6=7#&'75732>=.'.+5332#"w ���>M��圹,Y%o��O k$Ed1&"�Q 18  V! )/1��G.dg����~�g#�S�BT T��=C�gQd2[;% <3g57��2��w�&Q�������&RC&���1>M3 .'&475&57#674776?6?>762'3632&'&"32#'673�If������0r7v�#Bw + + 
٘G��5?0 .o��1�+F�(�V?G]
����E�=�  �7 �8 Y ���FI�yWaAX?
.�b������&R������1>^a3 .'&475&57#674776?6?>762'3632&'&"327!"/&"+&546325276'7�If������0r7v�#Bw + + 
٘G��5?0 .oM�
��7W:j1���5�9
& ]
����E�=�  �7 �8 Y ���FI�yWaA���!  ��% 

�����&Rj�h���:(%2#7+"#&5473"&462"&46| �r?f���$;&d]Tx\T[2�QW��.  "� �]H�YP�Lk%CO�O�`�n8COQ'7>?'&'&/7?6?6732743 '#'&"3 2>7>=43 =]JZ�3_(t�"���# qQ��*W����� &2:5�V{��>XH/0� P! t?f��=>�7)3,� 9%����5fb+'LR�,YT6a2j����'!:�Y&R��6���&XC6���(325%!!'#"'7.'&57!%'#'673�I=IF��/����2 A>>�1�+F�(�V?GL��fl��U��n?v� ��?
.�b��6����&X��6���(*0D325%!!'#"'7.'&57!%72''4675#"'#'#&'7�I=IF��/����2 A>>7�=�� 8Pm��
G3�$�@L��fl��U��n?v� �f��U� ��/bm/ : ������_&\u:e*[�(='63!3732#+"#!&'47#73264.#i7���zLb�{�#)f 7�%   
N�LgE�� i��
P5�nӠ? l��9!�G%SQ% 
S�G����_:IKQe654/!%!5#"'#'"'"#'&475754'626;>372''4675#"'#'#&'7�]&u�1--aO��)(2}9Z�^Q='**!
8��=�� 8Pm��
G3�$�@� �8y2w'��+�(��$g�z��f� 3
rv9���U� ��/bm/ : >��f%#!"/5'54?573762d ��'<p�D 
9 �?t -����?&L�e*Gh�����@F636 !"'&57&/&4>?7574'5'47;7 763#EQ2 �� *�S�+1d&  g$.� z�

jhQj��  5�Q CA�  M!W! "�0@ �w.%��0-���&qzN'47323;7623372+!++/"'54?'47'"//&4?6n��YY 
�=?����LHH����*dF �   ��}  +,= h<��?-[=HP��=�'2f C>A!cJ)����26IN"'&'&47?#632%&#62#"'63327"'75'"2?&'7#���~[�#j�f��`�@ ����0s�"VK�# ��� ,[|Sn O0j�,�~ M:C A��?�$��R��� ��� !2g\nO5"'�R�� ! #���R(5C7263 #%#"'327673%2# ' 76&"326.26=4&";V]����*����P�1) 2P'"b�DG�聄����n��6Q"d�mL��>2g�Y2Bhv��*%�-O�. �w�����J��ðP:�#!8nvZ-6����9\`c%2264./"'$&576!2".'&" '&'.'32>?!"&/3./&4"'7K)FfXlv8�����?i�TxA \v�P y`�D�r�����լa',
 !�HL'"X>LZЪ(93%��e� f"Ax4 =Ҳ�t23S�`";:; 6<����{R\3N>[b#-9.(4O3 7ec)S7���$ �JMOqv73;674'./$47676 #'#"&'&#"$/&'4327327373!2#''./&4736?#��.9/rH4�=�e:n�\K�`)$: ��! Y�v/ ),5a@X��c����w�& 5:��.7>:� [�J vu1 7 &*6( �<$d4#y}\�::-4(B�-F4
 +v��rD7 X r�< PIM� #(�(B )c?Y
������*�&<j������c�&=�V�����w;@'#!#3!0"'"&#6773!2#''./&4736?#��R�q�y���dW
 .�.7>:� [�J vu1 7 &*6( 3w��[����KFpIM� #(�(B )c?Y
c�=(JRX]b"'50'#"27732!"&54?6727326?67"'#'#"'&'&76?6$'#'7#'3'67'"5(4 :B
� 1�10 &9r��;�"X. 2 #5�1�j��� ) �b� ���  fgWT�P��T ��n�n� ��+@y ->C��� 4 �8
0 ������/A[mrx{+#"'&/&'#'###&'7#76673%727&/.'&'%27375&#&"'"/&'-?/#"&'&'25'#"6573#�6\>=a�` &�T,
U:��Fd� {�c`O<dN�/)�&<� � �  -Z
�7?&m���M��A4y����U  g`�+
 ZGS(lj����A2w8�
 ��BW0O2�1 z�()��"��( �tx#���Q`z����%!'"&'#"1"'&5476?32?6765&4&+"&#!676$?23722%74'32?%27375&#&"'"/&'-?/#"&'&'25'#"6573#�
�<$(  ?�Nr�z=�:�!.
"6�9'`,��;S�<  -1`�c$D,��T2);#K ���  -Z
�7?&m���M��A4y����U� _U<hEH
�Up�7
@ 1
8>�GN�� 8J4b��EtD � 2. 5\L6
>d0O2�1 z�()��"��( �tx�����o/A`e+#"'&/&'#'###&'7#76673%727&/.'&'+'>2+'&'3&'&"3'�6\>=a�` &�T,
U:��Fd� {�c`O<dN�/)�&<� �\^���9�� ";'��  g`�+
 ZGS(lj����A2w8�
 ��B���Tn]>h"?&-  #����Q`�%!'"&'#"1"'&5476?32?6765&4&+"&#!676$?23722%74'32?+'>2+'&'3&'&"3'�
�<$(  ?�Nr�z=�:�!.
"6�9'`,��;S�<  -1`�c$D,��T2);#K ��\^���9�� ";'��� _U<hEH
�Up�7
@ 1
8>�GN�� 8J4b��EtD � 2. 5\L6
>���Tn]>h"?&-  ����>�9Sejps2$%+"%%6;25+%2%"#'3&'5%27375&#&"'"/&'-?/#"&'&'25'#"6573#r��6���6P$=&�ж/- ��b�ܤ�T
��  -Z �7?&m���M��A4y����U� ��) .
&&^��� 0��
#-)0O2�1 z�()��"��( �tx�����Q]w����6255!5>763!3#"'##"'#'"'/.'.=4754?677.'&"63%27375&#&"'"/&'-?/#"&'&'25'#"6573#)-f.*c5�uO�� 
!7' $B�q <4n��X
 
W+[����5*U5@6�q�  -Z �7?&m���M��A4y����U�   A� �CZ!2
 ZC
zfR;m
,ݓI 0 �5?
�� l=**J�.0O2�1 z�()��"��( �txk��o9X^2$%+"%%6;25+%2%"#'3&'5+'>2+'&'3&'&"0'"r��6���6P$=&�ж/- ��b�ܤ�T
��\^���9�� ";'��� ��) .
&&^��� 0��
#-���Tn]>h"?&-  ������Q]|�6255!5>763!3#"'##"'#'"'/.'.=4754?677.'&"63+'>2+'&'3&'&"3')-f.*c5�uO�� 
!7' $B�q <4n��X
 
W+[����5*U5@6��\^���9�� ";'���   A� �CZ!2
 ZC
zfR;m
,ݓI 0 �5?
�� l=**J����Tn]>h"?&-  ���V�9KPVY747&=&47 7##&'7%27375&#&"'"/&'-?/#"&'&'25'#"6573#g �B< "��
���  -Z �7?&m���M��A4y����Uk�O��?@!0 ���� ��  
q0O2�1 z�()��"��( �tx����%?QV\_#!"/5'54?573762%27375&#&"'"/&'-?/#"&'&'25'#"6573#d ��'<p�D 
�M�  -Z
�7?&m���M��A4y����U9 �?t -����?&L�e*Gh�0O2�1 z�()��"��( �tx����`o>C747&=&47 7##&'7+'>2+'&'3&'&"3'g �B< "��
��\^���9�� ";'��k�O��?@!0 ���� ��  
���Tn]>h"?&-  ����9�%DI#!"/5'54?573762+'>2+'&'3&'&"3'd ��'<p�D 
���\^���9�� ";'��9 �?t -����?&L�e*Gh��Tn]>h"?&-  #��H�.HZ_fi2>7654&#"7>76$  '$%27375&#&"'"/&'-?/#"&'&'25'#"07"'#b'),mK30kl6Q)+�� (-k��l=uJ�.]��������u�  -Z
�7?&m���M��A4y���
�]�*htt$&0)m���48�M;}�T��Y5Q������=lux�g0O2�1 z�()��"��( �t
~���1>Xjoux3 .'&475&57#674776?6?>762'3632&'&"32%27375&#&"'"/&'-?/#"&'&'25'#"6573#�If������0r7v�#Bw + + 
٘G��5?0 .o���  -Z �7?&m���M��A4y����U]
����E�=�  �7 �8 Y ���FI�yWaA�0O2�1 z�()��"��( �tx#��Ho.MR2>7654&#"7>76$  '$+'>2+'&'3&'&"3'b'),mK30kl6Q)+�� (-k��l=uJ�.]����������\^���9�� ";'���*htt$&0)m���48�M;}�T��Y5Q������=lux����Tn]>h"?&-  ����1>]b3 .'&475&57#674776?6?>762'3632&'&"32+'>2+'&'3&'&"3'�If������0r7v�#Bw + + 
٘G��5?0 .o��\^���9�� ";'��]
����E�=�  �7 �8 Y ���FI�yWaAK��Tn]>h"?&-   g��(�9=AKew|��%2 '#"'.## '"'7'577'043354"5&+$54%27375&#&"'"/&'-?/#"&'&'25'#"6573#/AfS�钌�/ 
 ���l#EU 5 n�o@9@=��<d: 9�t�  -Z
�7?&m���M��A4y����U�ƴ}�CF��;�3Z( '+nL�� �
Z�IK"�?����4�Y�0O2�1 z�()��"��( �tx����9KPVY%!36?6776723&"! %27375&#&"'"/&'-?/#"&'&'25'#"6573#,

#%i(!bG%Z_AJ����y�  -Z �7?&m���M��A4y����U����H '��) c�i�U�0O2�1 z�()��"��( �txg��(o9=AKjp%2 '#"'.## '"'7'577'043354"5&+$54+'>2+'&'3&'&"0'"/AfS�钌�/ 
 ���l#EU 5 n�o@9@=��<d: 9���\^���9�� ";'���ƴ}�CF��;�3Z( '+nL�� �
Z�IK"�?����4�Y}��Tn]>h"?&-  ,��c�>C%!36?6776723&"!+'>2+'&'3&'&"3',

#%i(!bG%Z_AJ������\^���9�� ";'������H '��) c�i�U!��Tn]>h"?&-  h���0J\agj '.'"47363326?74/&47 #%27375&#&"'"/&'-?/#"&'&'25'#"6573#
SD��,�Ga
 ��_t1C ��  ���  -Z �7?&m���M��A4y����U����=��=�{�c�����n�V6
Q��I,F ��׬,0O2�1 z�()��"��( �tx6���3EJPS325%!!'#"'7.'&57!%%27375&#&"'"/&'-?/#"&'&'25'#"6573#�I=IF��/����2 A>>���  -Z
�7?&m���M��A4y����UL��fl��U��n?v� �J0O2�1 z�()��"��( �txh��o0OU '.'"47363326?74/&47 #27>2#%327&'."32?0'"
SD��,�Ga
 ��_t1C ��  ��1';" 9���^\�����=��=�{�c�����n�V6
Q��I,F ��׬�-&?"h>]nT�� 6����8=325%!!'#"'7.'&57!%'+'>2+'&'3&'&"3'�I=IF��/����2 A>>C�\^���9�� ";'��L��fl��U��n?v� ����Tn]>h"?&-  5�p�C[%2264.'3'&'.54676! ##"'&'&+"5"$'.'72#'#'6763> �X6@}97%��XG�i�iN
���= L;T6#�D՛�9�����=) ���= /�*�)� D0Cj'%
@¤w�<�hL�l
$$74" 0H׏��q!lz;cY�p �;8+3?3� U$�\�JMOg73;674'./$47676 #'#"&'&#"$/&'4327327372#'#'6763��.9/rH4�=�e:n�\K�`)$: ��! Y�v/ ),5a@X��c����w�& 5:����= /�*�)�<$d4#y}\�::-4(B�-F4
 +v��rD7 X r�< � �;8+3?3� U���p9�*B#0%''#"'&'4'.#'&575&'2%272#'#'67639���B�J%   & (� �'����= /�*�)o!a�dP��X/c%[X�  ���N �;8+3?3� U2�p�� 8327!#".'.5#'53!%3#72#'#'6763$c ��" %X+ vs55��ؗ�= /�*�)�#!-��0%6iN*��K������ �;8+3?3� U��wY�(&'&/#!"5476?>?5#'���.$ ��19Dq^ޱ"
> #
 ~5 <F2 i�#) 2 \/��qS!&73!2#''./&4736?#�.7>:� [�J vu1 7 &*6( �IM� #(�(B )c?Y
��X" %)72"&'&'7;7;3267#67%5�';���72#
[$_ :%��G�t9crZUT�0 +>)* �o�7>732+''&� IC�U' ��s�  yM* " �O� #"'&'>76&"26���p�T'"I PhP [kM��櫓147b*\�HA9EOGn���!73632"&46732'32?6m!�֤�q� z[b'/��v*'e�� Jb/A��|'�"7!"/&"+&546325276'7�
��7W:j1���5�9
& ���!  ��% 

�~,05;'&567#3323&'"'6?6?#"477"4#����(B9
��&�37NI�v( $ �
*�-$��,z�#9B"�F2%�� c�t_+069%27375&#&"'"/&'-?/#"&'&'25'#"6573#��  -Z
�7?&m���M��A4y����U�0O2�1 z�()��"��( �tx��K�#+'>2+'&'3&'&"3'†\^���9�� ";'��u��Tn]>h"?&-  �p��72#'#'6763��= /�*�)� �;8+3?3� U>��
;?A747!.76$3 5%2' '6='4'>'& '7&%"50'> ��rum9������H��@���qW���b^ V
����r! ~�]hc��������* M�
:Rel��|^滅�P 2#�+  ����V�2<27#&/&57'"%4'"&476!673&54��ؚ  
:8���8�P ���vb[5v0���!� )hm*��R�� �@��? �J%  1�_ ��g9�72+#&57'43 7�;" �� �'�� ��&�Tf��g5�$!# #&''2! -75���0/����J, �  ����N &j��'#&'>?6 +#�0(
9 7] �7
2p�j,���8�0�"
#h��!#72+#"/>?&'763767��*I2*�[ D.

&} �� "~Q�}!
%
�Eh��"���#"/.'6;372#'"�("  KXf6�+��[ �;� @5 �z�� ��g#�%27#+'#'7#6'7>?6732+���=;"}�,*Gs8(��8>5��-Bc�� 
����0�z��%��2)�,�3�y��c/�0'7>7;2#'325#''467763�. 
[TB�</1 �0����E^�� &Z>)d�(\TGE0���J49����VW +�������26'67>737#'?6736 57#"'+''��73>%,>�I��4G0j$J/ *
�� ���9�- @����� p؂ � ���6�5+"'#7+'"&55'#"&575'432?5'56772%22-Fq>  �3~ZW�G;7 ��� " ��/�/" �� +C"� ���=�RW+"0#'##&5'%&57'47547#"5#"547746326;+';73253<0N[d8_u R��YAm<Z]�� k��I*\A+,S �@
. 46�/)F�Xt,N��a2�
?\����
e$ 4�[�u2#"'&'767>7B�����xDa0��� u�����_z�w;G�f
T����/E%#'#&'3'5&47434232!'#'&474"#'&57547;72���[   �� �� �I*iY&��>Y
�����x.Q�83`,�� �V � �q4 ��
�k-E &$ h6� ��
p� 0L_p��� # &47.547632">32"'.=472"/>7>763754#325'74#"325'754#27>5'37"�[����D�'KD���P,+/���
��S~H;-)��<ke��7 C�7 ��F
��"y�/k+! %0-m��j}6$m�n< X%���?�B��Id��U�d'��i��kWh�
��>]���qP`/��;"�+f�����4 #�=�-n��� I�/jD0�E~k��;<�)���I�
5':);=h<$e6�s
�����" #&/'.4>?676;2+���Ee$^#D
Iy"^�17�:6 $= , �� +�.8]v�
���%>uR9z&���$-172#"#"47'3.543577#&47'c(8J7���O��y S6}�.Z1 �)*)+O�Y�"�  �� ����Q0$3253#'#&'>?67676?63�7m���� *v
:
 �)|�@F4*0;�����5#%h18'L�~�^_����2DT7263+#&"'0754"0#".'47>77>?6;'33767'574'h
 ). ^�PM@�_-n:�>BZ��!�w � 5��4#VD��Ls�Z"�
%�z: 8% 1n�]%����UZ_"'63327#276?&''&'&#"'767375#"'7637676776 !."37'7637'4��=R`/4#4 7�<T% �  %��Q�6=*>�fO!( #@M)8d<�Te:c-�b?�,15Q5ź v,g Ҷ(0k\h0� )bW
.�#J���NUn0PY7^#
��D &@p�;bg327##"&575'#'&/+#"&=472#63%2"'+#"&'55"#".'&=46376��;["aN*&> cp+! !&
T ;%�� .!$���$RC Q� �9)

<( Gj���}(��U<hv->�)(�4m��[���_TsF �+ a��$"Q %N8�2��� (6325! '&'763.'&/&2 �IF�sk�Qa�����ʏ 뇧�q
4!G�()ҹ��!Y f�������z�Ƌ�H J�|!G* ����a8VTj� &76$7! 7>5&/'&'#77TZcY2�$�K���)V8�1�6* !�( ��wZ�4�>nC@ ){@��� !v��5&,02'47%#'#"%"'&04/&5''53%'&5\P
�<�q �4��z�G
���]�g �h���X �_6@���� �$%$3" &5747&'&'%0�l���0�J %a��F#�\��
�� �ey�T LP%WC �> ^L��#"'&57575'476;!7>7� �����A � ''�* � $61(6u7���D3732#3#'&/&&/47%>732727767�-x�A��%c�2:ONi�2�.'�.#=05C

�8-�4�z��> w���J�oC o9�Y�AE�
i��$0>32'#"#"#"&76 326?&'&"267&'&"3�N�l�tA����N�S��mq����u�YC���B�JKNOԍ�oҏ��h���0x��X���g���y�O;��o�~v=>�ؙ�O��4@DKOQS+"'&#7&#"327#"&'32>5'4532'637'2747"547437#5�
8"E: �w�4� (jSJ2��) >/��"I_E A�����������t�O�Vz�$>/W�{ �
"�1":=#"'&'""/32323"&"'&'""/>22'[$\��d��>`M���qn?i+f�99%�J�߅�BdJ,�L�����T0c�WPY#�A%6f ��n�SMU0�l��dr����B%746?63327#2#%"#'7+'##"5'42"&575&547S�(2
wDA0�.��(R�.�F.JP�K>A@!+ ��s^��x�X x
8"�;�`�;�
#�1T�:�  #;&Q z�� �,28< &5736%7$73&$'%&5747 %3&5#"'204���d���x6M�m�x?��
/0 ��no��������c��Q��
� *P� �� l��"(,158:?"65'$%&%&576$7'77"&#'62"'27#73731#o*S��u���� �����
��

� ��pz%��~}�
�˴\ ��( � G �� 
=��T����: &, 6;5&'.'#3676'567������Ȩm�����) ��% 8���L�s�{����� +�q2�? �(!R
�b~
�F�� !%!���o�|��Jq��ۭ_���D��/�?����/!%&/!0^��8
��3�*T
�uW}�;�+� |Ezf>@���"4&=754&'"'367;7322 '&'767g��'�i.WX 33�v��(�������ρ���~��ſa!P2HM1 �n%5����Sz��������x,S����_i���7K%$ 33>=74&"#6764&'&# ;327>322 '&54?67|\ED y 7 -l�$�<TH���ҋ4!:"�0' -�D6Fk4��)��������{���w���>  �KM��E��*T�5n`rG�.%3F'�z��������x(J��$9��A@���=O>2+'#"272"&'&#!27$4&'654&'&'";$  $&�( ^61 %"2{ :-c�O�9?�O[�UC�X�ĥ2L&t�)2� ��������ك��iC&*DHB+ X"%;�K�6C^z&?�S�'Lg}>S&�z.T�_���iR,x�)M*E���HY_p%'5&564&#0#"47575&55&'7&+"5;27363?62>4'537326"#+4'6?&2 '&'67z$-  �H|\ N
UQL[(%(  �y Q�^
8��8
B[U
�(��������~���"��ޏ 22 7�7�{p�fO� �AJ+ �!� �n* z��������x.U����_E���=N326753632#"./#"! 76&#">?3%326=&#%'6$  $& �1325
��I&��mάiM=m & 9�2 8L)/~� "���~����ك�k0�$& ���ob�& (j�";+|v/�
A'.z/T�`���]U.x�)M*V���
+=%&546323 7>76=.#!676&#"632 &'&7632ga*69L43,  �����S� ��i��pK K������U��!�lވ� oBN "A|6   ����������mP�3��9z@8vm��R-���ާ��`���$4";73733277676=4#'$&$  $&�5��" ���-?!h �� S 4��6�(.��������ۃ�WA"�"#O��1/�P(&S�Bz-T�Z��`S,x�)M*@���"*<654&'& !276762"&'>2#"5462 '&'767�{TH��N�ltMAX��NTE���]0T25&PJP%&�(�������ρ���~�E�_�+VwZ��I-{^�Lp3cHs,5:--@��b#@�z��������x,S����_E���%7#"'.'% 7676'&!"362"'46567!2 '&�
F���d�Qu����ĔJ[�d_�
3�����(��������~���u� !��3u� ��b1�d�����z9Q�w8��az��������x(K{@��� K]#"=47632!>4.+ &=754&+#"'367;7322 '&'767�ME&@�!v��X5W�d �� %Ht5 3)6Mr)'`��(��������~���� �+�z �Ww��|�_? ���^Z�aM8< -  �W"-����z��������x,S����_.��2!'*Q'4676 #"';2#"'#'53!4/#7!"'5'54757373762�C95=�"$O *-��]�rvd��
n��*�" N HU�P0�2&������B�����`)�
� �)r-ł__��B}55.��#!''4676 #"';2#"'#'5372!�C95=�"$O *-��]�rv��t����P0�2&������B�����n
 $
D N [*d � �
� � � � &" H \ @j � � � T� > V
&n < � < � &
 4 2Copyright (c) 2011 by vernon adams (vern@newtypography.co.uk), with Reserved Font Names "Bowlby" "Bowlby One" and "Bowlby One SC". This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is available with a FAQ at: http://scripts.sil.org/OFLBowlby OneRegularvernonadams: Bowlby One SC: 2011Bowlby OneVersion 1.000BowlbyOneBowlby One is a trademark of vernon adams.vernon adamsvernon adamsCopyright (c) 2011 by vernon adams (vern@newtypography.co.uk), with Reserved Font Names "Bowlby" "Bowlby One" and "Bowlby One SC". This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is available with a FAQ at: http://scripts.sil.org/OFLhttp://www.newtypography.co.ukhttp://www.newtypography.co.ukCopyright (c) 2011 by vernon adams (vern@newtypography.co.uk), with Reserved Font Names "Bowlby" "Bowlby One" and "Bowlby One SC". This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is available with a FAQ at: http://scripts.sil.org/OFLhttp://scripts.sil.org/OFLCopyright (c) 2011 by vernon adams (vern@newtypography.co.uk), with Reserved Font Names "Bowlby" "Bowlby One" and "Bowlby One SC". This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is available with a FAQ at: http://scripts.sil.org/OFLBowlby OneRegularvernonadams: Bowlby One SC: 2011Bowlby OneVersion 1.000BowlbyOneBowlby One is a trademark of vernon adams.vernon adamsvernon adamsCopyright (c) 2011 by vernon adams (vern@newtypography.co.uk), with Reserved Font Names "Bowlby" "Bowlby One" and "Bowlby One SC". This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is available with a FAQ at: http://scripts.sil.org/OFLhttp://www.newtypography.co.ukhttp://www.newtypography.co.ukCopyright (c) 2011 by vernon adams (vern@newtypography.co.uk), with Reserved Font Names "Bowlby" "Bowlby One" and "Bowlby One SC". This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is available with a FAQ at: http://scripts.sil.org/OFLhttp://scripts.sil.org/OFL�ff%
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a��������������������������������bc�d�e�������f����g�����h���jikmln�oqprsutvw�xzy{}|��~���������������� 
    ��������!"#$�����������������%&��'�����������()*+,-./0123��45uni00A0 overscoremiddotuni0200uni0201uni0202uni0203uni0204uni0205uni0206uni0207uni0208uni0209uni020Auni020Buni020Cuni020Duni020Euni020Funi0210uni0211uni0212uni0213uni0214uni0215uni0216uni0217uni0218uni0219uni021Auni021Buni030Funi0311uni0326uni03A9 foursuperiorEuro incrementuni272Euni272Funi278Auni278Buni278Cuni278Duni278Euni278Funi2790uni2791uni2792uni2793NULLCR��ɉo1�BY��B�
latn�� $
,latn��kern�B`n||���������&Hft~��T����|$��7��9��:��<�������������������������� 7��8��9�h:��<�HSY��Z��\����h��h��������$��9��:
<�h����$����������2��H��R��\�h7�D9�D:��<�\����h��h����$��7��9��:
;��<������$�hD��H��R�����7��9��<�����������\�\$��2��D�H�R�U�DX�DZ�\������������������V��V����������������$�������h�h$�h*��2��D��H�hL��R�hX����������������������������������h���h����$��2
D��H��R��X��������������������D�D$�H2��6��D�H�L��R�X�D��V��s$�h��dG�hU��W��Y����d$�h$%&')*-./12356789:<����

18
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Fonts/Bowlby_One/BowlbyOne-Regular.ttf.meta


fileFormatVersion: 2
guid: 3d7fe0a26ba72d949874021dc3d6995e
timeCreated: 1432116480
licenseType: Store
TrueTypeFontImporter:
serializedVersion: 2
fontSize: 16
forceTextureCase: -2
characterSpacing: 1
characterPadding: 0
includeFontData: 1
use2xBehaviour: 0
fontNames: []
customCharacters:
fontRenderingMode: 0
userData:
assetBundleName:
assetBundleVariant:

93
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Fonts/Bowlby_One/FontLicense.txt


Copyright (c) 2011 by vernon adams (vern@newtypography.co.uk),
with Reserved Font Names "Bowlby" "Bowlby One" and "Bowlby One SC"
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.

8
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Fonts/Bowlby_One/FontLicense.txt.meta


fileFormatVersion: 2
guid: 327f44d86230f28468dc6a953ee98fa5
timeCreated: 1432116479
licenseType: Store
TextScriptImporter:
userData:
assetBundleName:
assetBundleVariant:

9
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Materials.meta


fileFormatVersion: 2
guid: e5dbc7bfeb0203344a6c08c8ed7678bc
folderAsset: yes
timeCreated: 1426689574
licenseType: Store
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

75
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Materials/Blue.mat


%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 6
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Blue
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
m_ShaderKeywords:
m_LightmapFlags: 5
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Floats:
- _BumpScale: 1
- _Cutoff: 0.5
- _DetailNormalMapScale: 1
- _DstBlend: 0
- _EmissionScaleUI: 0
- _Glossiness: 0.5
- _Metallic: 0.21
- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _SrcBlend: 1
- _UVSec: 0
- _ZWrite: 1
m_Colors:
- _Color: {r: 0.078503475, g: 0.4907082, b: 0.9705882, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 0}
- _EmissionColorUI: {r: 1, g: 1, b: 1, a: 1}

8
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Materials/Blue.mat.meta


fileFormatVersion: 2
guid: ff21ff0ea9b18924bb1fdfbb0e58f5cb
timeCreated: 1426684256
licenseType: Store
NativeFormatImporter:
userData:
assetBundleName:
assetBundleVariant:

79
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Materials/Brown.mat


%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 6
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Brown
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
m_ShaderKeywords:
m_LightmapFlags: 5
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Floats:
- _BumpScale: 1
- _Cutoff: 0.5
- _DetailNormalMapScale: 1
- _DstBlend: 0
- _EmissionScaleUI: 0
- _GlossMapScale: 1
- _Glossiness: 0
- _GlossyReflections: 1
- _Metallic: 0
- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
- _UVSec: 0
- _ZWrite: 1
m_Colors:
- _Color: {r: 0.31617647, g: 0.20529023, b: 0.120891005, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 0}
- _EmissionColorUI: {r: 1, g: 1, b: 1, a: 1}

8
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Materials/Brown.mat.meta


fileFormatVersion: 2
guid: 65b34bd0b696fd64c809daa8ff1aac63
timeCreated: 1427798063
licenseType: Store
NativeFormatImporter:
userData:
assetBundleName:
assetBundleVariant:

8
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Materials/BuildingGlass.mat.meta


fileFormatVersion: 2
guid: 7e41e83d6bd224b4d99fa3ffa5e3a3a4
timeCreated: 1431084896
licenseType: Store
NativeFormatImporter:
userData:
assetBundleName:
assetBundleVariant:

77
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Materials/BuildingGrey.mat


%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 6
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: BuildingGrey
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
m_ShaderKeywords:
m_LightmapFlags: 5
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Floats:
- _BumpScale: 1
- _Cutoff: 0.5
- _DetailNormalMapScale: 1
- _DstBlend: 0
- _GlossMapScale: 1
- _Glossiness: 0.65
- _GlossyReflections: 1
- _Metallic: 0
- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
- _UVSec: 0
- _ZWrite: 1
m_Colors:
- _Color: {r: 0.43382353, g: 0.40511462, b: 0.40511462, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}

8
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Materials/BuildingGrey.mat.meta


fileFormatVersion: 2
guid: 87d2e70ca18454e4f855f8d99afb32e3
timeCreated: 1431084896
licenseType: Store
NativeFormatImporter:
userData:
assetBundleName:
assetBundleVariant:

77
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Materials/BuildingMetal.mat


%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 6
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: BuildingMetal
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
m_ShaderKeywords:
m_LightmapFlags: 5
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Floats:
- _BumpScale: 1
- _Cutoff: 0.5
- _DetailNormalMapScale: 1
- _DstBlend: 0
- _GlossMapScale: 1
- _Glossiness: 0.6
- _GlossyReflections: 1
- _Metallic: 1
- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
- _UVSec: 0
- _ZWrite: 1
m_Colors:
- _Color: {r: 0.8088235, g: 0.8088235, b: 0.8088235, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}

8
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Materials/BuildingMetal.mat.meta


fileFormatVersion: 2
guid: e7df269b1d6121e4787b2f27aab18dbe
timeCreated: 1431084896
licenseType: Store
NativeFormatImporter:
userData:
assetBundleName:
assetBundleVariant:

77
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Materials/BuildingStone.mat


%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 6
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: BuildingStone
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
m_ShaderKeywords:
m_LightmapFlags: 5
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Floats:
- _BumpScale: 1
- _Cutoff: 0.5
- _DetailNormalMapScale: 1
- _DstBlend: 0
- _GlossMapScale: 1
- _Glossiness: 0
- _GlossyReflections: 1
- _Metallic: 0
- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
- _UVSec: 0
- _ZWrite: 1
m_Colors:
- _Color: {r: 0.66176474, g: 0.61901176, b: 0.5352509, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}

8
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Materials/BuildingStone.mat.meta


fileFormatVersion: 2
guid: 03ad6a4c3c0e64440b1d6cee74fc2a4f
timeCreated: 1431084896
licenseType: Store
NativeFormatImporter:
userData:
assetBundleName:
assetBundleVariant:

77
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Materials/BuildingWhite.mat


%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 6
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: BuildingWhite
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
m_ShaderKeywords:
m_LightmapFlags: 5
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Floats:
- _BumpScale: 1
- _Cutoff: 0.5
- _DetailNormalMapScale: 1
- _DstBlend: 0
- _GlossMapScale: 1
- _Glossiness: 0
- _GlossyReflections: 1
- _Metallic: 0
- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
- _UVSec: 0
- _ZWrite: 1
m_Colors:
- _Color: {r: 0.85294116, g: 0.85294116, b: 0.85294116, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}

8
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Materials/BuildingWhite.mat.meta


fileFormatVersion: 2
guid: d0c31a39c426da94496d2abbf928d525
timeCreated: 1431084896
licenseType: Store
NativeFormatImporter:
userData:
assetBundleName:
assetBundleVariant:

91
ML-Agents-Input-Example/Assets/Samples/Input System/1.0.2/Tanks Demo/Materials/Dust.mat


%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 6
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Dust
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
m_ShaderKeywords: _ALPHABLEND_ON
m_LightmapFlags: 5
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: 3000
stringTagMap:
RenderType: Transparent
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 2800000, guid: 8e2e7f1c0de3a1e4bab7041325aef152, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SpecGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Floats:
- PixelSnap: 0
- _BumpScale: 1
- _Cutoff: 0.334
- _DetailNormalMapScale: 1
- _DstBlend: 10
- _EmissionScaleUI: 0
- _GlossMapScale: 1
- _Glossiness: 0
- _GlossyReflections: 1
- _InvFade: 1.05
- _Metallic: 0
- _Mode: 2
- _OcclusionStrength: 1
- _Parallax: 0.02
- _Shininess: 0.1
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 5
- _UVSec: 0
- _ZWrite: 0
m_Colors:
- _Color: {r: 1, g: 0.76031375, b: 0.2794118, a: 1}
- _EmisColor: {r: 0.1544118, g: 0.1544118, b: 0.1544118, a: 0}
- _Emission: {r: 0.1102941, g: 0.1102941, b: 0.1102941, a: 0}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 0}
- _EmissionColorUI: {r: 1, g: 1, b: 1, a: 1}
- _SpecColor: {r: 1, g: 1, b: 1, a: 1}
- _TintColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}

部分文件因为文件数量过多而无法显示

正在加载...
取消
保存