浏览代码

merging master and addressing comments

/develop/rm-rf-new-models
vincentpierre 3 年前
当前提交
c3699de8
共有 68 个文件被更改,包括 4175 次插入4349 次删除
  1. 1001
      Project/Assets/ML-Agents/Examples/FoodCollector/Demos/ExpertFood.demo
  2. 62
      Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs/FoodCollectorArea.prefab
  3. 52
      Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs/GridFoodCollectorArea.prefab
  4. 32
      Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs/VisualFoodCollectorArea.prefab
  5. 72
      Project/Assets/ML-Agents/Examples/FoodCollector/Scripts/FoodCollectorAgent.cs
  6. 18
      Project/Assets/ML-Agents/Examples/GridWorld/Scenes/GridWorld.unity
  7. 3
      Project/Assets/ML-Agents/Examples/GridWorld/Scripts/GridArea.cs
  8. 6
      README.md
  9. 2
      com.unity.ml-agents.extensions/package.json
  10. 23
      com.unity.ml-agents/CHANGELOG.md
  11. 4
      com.unity.ml-agents/Documentation~/com.unity.ml-agents.md
  12. 6
      com.unity.ml-agents/Editor/BrainParametersDrawer.cs
  13. 14
      com.unity.ml-agents/Editor/DemonstrationDrawer.cs
  14. 2
      com.unity.ml-agents/Runtime/Academy.cs
  15. 2
      com.unity.ml-agents/Runtime/Actuators/IActionReceiver.cs
  16. 14
      com.unity.ml-agents/Runtime/Agent.cs
  17. 5
      com.unity.ml-agents/Runtime/Agent.deprecated.cs
  18. 36
      com.unity.ml-agents/Runtime/Communicator/GrpcExtensions.cs
  19. 12
      com.unity.ml-agents/Runtime/Communicator/RpcCommunicator.cs
  20. 10
      com.unity.ml-agents/Runtime/Inference/ModelRunner.cs
  21. 24
      com.unity.ml-agents/Runtime/Policies/BarracudaPolicy.cs
  22. 5
      com.unity.ml-agents/Runtime/Policies/BehaviorParameters.cs
  23. 23
      com.unity.ml-agents/Runtime/Policies/BrainParameters.cs
  24. 4
      com.unity.ml-agents/Tests/Editor/Communicator/RpcCommunicatorTests.cs
  25. 8
      com.unity.ml-agents/Tests/Editor/MLAgentsEditModeTest.cs
  26. 2
      com.unity.ml-agents/package.json
  27. 117
      docs/Learning-Environment-Create-New.md
  28. 9
      docs/Learning-Environment-Examples.md
  29. 255
      docs/images/3dball_learning_brain.png
  30. 999
      docs/images/roller-ball-agent.png
  31. 268
      docs/images/team_id.png
  32. 2
      gym-unity/gym_unity/__init__.py
  33. 2
      ml-agents-envs/mlagents_envs/__init__.py
  34. 15
      ml-agents-envs/mlagents_envs/environment.py
  35. 2
      ml-agents/mlagents/trainers/__init__.py
  36. 30
      ml-agents/mlagents/trainers/demo_loader.py
  37. 4
      ml-agents/mlagents/trainers/policy/policy.py
  38. 8
      ml-agents/mlagents/trainers/tests/torch/saver/test_saver.py
  39. 12
      ml-agents/mlagents/trainers/tests/torch/test_policy.py
  40. 2
      ml-agents/mlagents/trainers/tests/torch/test_reward_providers/test_gail.py
  41. 9
      ml-agents/mlagents/trainers/torch/components/bc/module.py
  42. 10
      ml-agents/mlagents/trainers/torch/components/reward_providers/curiosity_reward_provider.py
  43. 10
      ml-agents/mlagents/trainers/torch/components/reward_providers/gail_reward_provider.py
  44. 8
      ml-agents/mlagents/trainers/torch/components/reward_providers/rnd_reward_provider.py
  45. 8
      ml-agents/mlagents/trainers/torch/distributions.py
  46. 26
      ml-agents/mlagents/trainers/torch/networks.py
  47. 467
      Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/FoodCollector.onnx
  48. 14
      Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/FoodCollector.onnx.meta
  49. 1001
      Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/GridFoodCollector.onnx
  50. 14
      Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/GridFoodCollector.onnx.meta
  51. 1001
      Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/VisualFoodCollector.onnx
  52. 14
      Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/VisualFoodCollector.onnx.meta
  53. 3
      com.unity.ml-agents/Runtime/Analytics.meta
  54. 3
      com.unity.ml-agents/Tests/Editor/Analytics.meta
  55. 89
      com.unity.ml-agents/Runtime/Analytics/Events.cs
  56. 3
      com.unity.ml-agents/Runtime/Analytics/Events.cs.meta
  57. 263
      com.unity.ml-agents/Runtime/Analytics/InferenceAnalytics.cs
  58. 3
      com.unity.ml-agents/Runtime/Analytics/InferenceAnalytics.cs.meta
  59. 68
      com.unity.ml-agents/Tests/Editor/Analytics/InferenceAnalyticsTests.cs
  60. 3
      com.unity.ml-agents/Tests/Editor/Analytics/InferenceAnalyticsTests.cs.meta
  61. 11
      Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/FoodCollector.nn.meta
  62. 305
      Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/FoodCollector.nn
  63. 1001
      Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/GridFoodCollector.nn
  64. 11
      Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/GridFoodCollector.nn.meta
  65. 1001
      Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/VisualFoodCollector.nn
  66. 11
      Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/VisualFoodCollector.nn.meta

1001
Project/Assets/ML-Agents/Examples/FoodCollector/Demos/ExpertFood.demo
文件差异内容过多而无法显示
查看文件

62
Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs/FoodCollectorArea.prefab


m_BrainParameters:
VectorObservationSize: 4
NumStackedVectorObservations: 1
VectorActionSize: 03000000030000000300000002000000
m_ActionSpec:
m_NumContinuousActions: 3
BranchSizes: 02000000
VectorActionSize:
VectorActionSpaceType: 0
m_Model: {fileID: 11400000, guid: 36ab3e93020504f48858d0856f939685, type: 3}
VectorActionSpaceType: 1
hasUpgradedBrainParametersWithActionSpec: 1
m_Model: {fileID: 11400000, guid: 3210b528a2bc44a86bd6bd1d571070f8, type: 3}
m_UseChildActuators: 1
m_ObservableAttributeHandling: 0
--- !u!114 &114176228333253036
MonoBehaviour:

myLaser: {fileID: 1081721624670010}
contribute: 1
useVectorObs: 1
useVectorFrozenFlag: 0
--- !u!114 &114725457980523372
MonoBehaviour:
m_ObjectHideFlags: 0

m_BrainParameters:
VectorObservationSize: 4
NumStackedVectorObservations: 1
VectorActionSize: 03000000030000000300000002000000
m_ActionSpec:
m_NumContinuousActions: 3
BranchSizes: 02000000
VectorActionSize:
VectorActionSpaceType: 0
m_Model: {fileID: 11400000, guid: 36ab3e93020504f48858d0856f939685, type: 3}
VectorActionSpaceType: 1
hasUpgradedBrainParametersWithActionSpec: 1
m_Model: {fileID: 11400000, guid: 3210b528a2bc44a86bd6bd1d571070f8, type: 3}
m_UseChildActuators: 1
m_ObservableAttributeHandling: 0
--- !u!114 &114711827726849508
MonoBehaviour:

myLaser: {fileID: 1941433838307300}
contribute: 0
useVectorObs: 1
useVectorFrozenFlag: 0
--- !u!114 &114443152683847924
MonoBehaviour:
m_ObjectHideFlags: 0

m_BrainParameters:
VectorObservationSize: 4
NumStackedVectorObservations: 1
VectorActionSize: 03000000030000000300000002000000
m_ActionSpec:
m_NumContinuousActions: 3
BranchSizes: 02000000
VectorActionSize:
VectorActionSpaceType: 0
m_Model: {fileID: 11400000, guid: 36ab3e93020504f48858d0856f939685, type: 3}
VectorActionSpaceType: 1
hasUpgradedBrainParametersWithActionSpec: 1
m_Model: {fileID: 11400000, guid: 3210b528a2bc44a86bd6bd1d571070f8, type: 3}
m_UseChildActuators: 1
m_ObservableAttributeHandling: 0
--- !u!114 &114542632553128056
MonoBehaviour:

myLaser: {fileID: 1421240237750412}
contribute: 0
useVectorObs: 1
useVectorFrozenFlag: 0
--- !u!114 &114986980423924774
MonoBehaviour:
m_ObjectHideFlags: 0

m_BrainParameters:
VectorObservationSize: 4
NumStackedVectorObservations: 1
VectorActionSize: 03000000030000000300000002000000
m_ActionSpec:
m_NumContinuousActions: 3
BranchSizes: 02000000
VectorActionSize:
VectorActionSpaceType: 0
m_Model: {fileID: 11400000, guid: 36ab3e93020504f48858d0856f939685, type: 3}
VectorActionSpaceType: 1
hasUpgradedBrainParametersWithActionSpec: 1
m_Model: {fileID: 11400000, guid: 3210b528a2bc44a86bd6bd1d571070f8, type: 3}
m_UseChildActuators: 1
m_ObservableAttributeHandling: 0
--- !u!114 &114189751434580810
MonoBehaviour:

myLaser: {fileID: 1617924810425504}
contribute: 0
useVectorObs: 1
useVectorFrozenFlag: 0
--- !u!114 &114644889237473510
MonoBehaviour:
m_ObjectHideFlags: 0

m_BrainParameters:
VectorObservationSize: 4
NumStackedVectorObservations: 1
VectorActionSize: 03000000030000000300000002000000
m_ActionSpec:
m_NumContinuousActions: 3
BranchSizes: 02000000
VectorActionSize:
VectorActionSpaceType: 0
m_Model: {fileID: 11400000, guid: 36ab3e93020504f48858d0856f939685, type: 3}
VectorActionSpaceType: 1
hasUpgradedBrainParametersWithActionSpec: 1
m_Model: {fileID: 11400000, guid: 3210b528a2bc44a86bd6bd1d571070f8, type: 3}
m_UseChildActuators: 1
m_ObservableAttributeHandling: 0
--- !u!114 &114235147148547996
MonoBehaviour:

myLaser: {fileID: 1045923826166930}
contribute: 0
useVectorObs: 1
useVectorFrozenFlag: 0
--- !u!114 &114276061479012222
MonoBehaviour:
m_ObjectHideFlags: 0

m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1819751139121548}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 12.3, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:

52
Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs/GridFoodCollectorArea.prefab


m_BrainParameters:
VectorObservationSize: 0
NumStackedVectorObservations: 1
VectorActionSize: 03000000030000000300000002000000
m_ActionSpec:
m_NumContinuousActions: 3
BranchSizes: 02000000
VectorActionSize:
m_Model: {fileID: 11400000, guid: 699f852e79b5ba642871514fb1fb9843, type: 3}
hasUpgradedBrainParametersWithActionSpec: 1
m_Model: {fileID: 11400000, guid: 75910f45f20be49b18e2b95879a217b2, type: 3}
m_InferenceDevice: 0
m_BehaviorType: 0
m_BehaviorName: GridFoodCollector

myLaser: {fileID: 1081721624670010}
contribute: 0
useVectorObs: 0
useVectorFrozenFlag: 0
--- !u!114 &8297075921230369060
MonoBehaviour:
m_ObjectHideFlags: 0

- {r: 0, g: 0, b: 0, a: 0}
GizmoYOffset: 0
ShowGizmos: 0
CompressionType: 1
--- !u!1 &1482701732800114
GameObject:
m_ObjectHideFlags: 0

m_BrainParameters:
VectorObservationSize: 0
NumStackedVectorObservations: 1
VectorActionSize: 03000000030000000300000002000000
m_ActionSpec:
m_NumContinuousActions: 3
BranchSizes: 02000000
VectorActionSize:
m_Model: {fileID: 11400000, guid: 699f852e79b5ba642871514fb1fb9843, type: 3}
hasUpgradedBrainParametersWithActionSpec: 1
m_Model: {fileID: 11400000, guid: 75910f45f20be49b18e2b95879a217b2, type: 3}
m_InferenceDevice: 0
m_BehaviorType: 0
m_BehaviorName: GridFoodCollector

myLaser: {fileID: 1941433838307300}
contribute: 0
useVectorObs: 0
useVectorFrozenFlag: 0
--- !u!114 &259154752087955944
MonoBehaviour:
m_ObjectHideFlags: 0

- {r: 0, g: 0, b: 0, a: 0}
GizmoYOffset: 0
ShowGizmos: 0
CompressionType: 1
--- !u!1 &1528397385587768
GameObject:
m_ObjectHideFlags: 0

m_BrainParameters:
VectorObservationSize: 0
NumStackedVectorObservations: 1
VectorActionSize: 03000000030000000300000002000000
m_ActionSpec:
m_NumContinuousActions: 3
BranchSizes: 02000000
VectorActionSize:
m_Model: {fileID: 11400000, guid: 699f852e79b5ba642871514fb1fb9843, type: 3}
hasUpgradedBrainParametersWithActionSpec: 1
m_Model: {fileID: 11400000, guid: 75910f45f20be49b18e2b95879a217b2, type: 3}
m_InferenceDevice: 0
m_BehaviorType: 0
m_BehaviorName: GridFoodCollector

myLaser: {fileID: 1421240237750412}
contribute: 0
useVectorObs: 0
useVectorFrozenFlag: 0
--- !u!114 &5519119940433428255
MonoBehaviour:
m_ObjectHideFlags: 0

- {r: 0, g: 0, b: 0, a: 0}
GizmoYOffset: 0
ShowGizmos: 0
CompressionType: 1
--- !u!1 &1617924810425504
GameObject:
m_ObjectHideFlags: 0

m_BrainParameters:
VectorObservationSize: 0
NumStackedVectorObservations: 1
VectorActionSize: 03000000030000000300000002000000
m_ActionSpec:
m_NumContinuousActions: 3
BranchSizes: 02000000
VectorActionSize:
m_Model: {fileID: 11400000, guid: 699f852e79b5ba642871514fb1fb9843, type: 3}
hasUpgradedBrainParametersWithActionSpec: 1
m_Model: {fileID: 11400000, guid: 75910f45f20be49b18e2b95879a217b2, type: 3}
m_InferenceDevice: 0
m_BehaviorType: 0
m_BehaviorName: GridFoodCollector

myLaser: {fileID: 1617924810425504}
contribute: 0
useVectorObs: 0
useVectorFrozenFlag: 0
--- !u!114 &5884750436653390196
MonoBehaviour:
m_ObjectHideFlags: 0

- {r: 0, g: 0, b: 0, a: 0}
GizmoYOffset: 0
ShowGizmos: 0
CompressionType: 1
--- !u!1 &1688105343773098
GameObject:
m_ObjectHideFlags: 0

m_BrainParameters:
VectorObservationSize: 0
NumStackedVectorObservations: 1
VectorActionSize: 03000000030000000300000002000000
m_ActionSpec:
m_NumContinuousActions: 3
BranchSizes: 02000000
VectorActionSize:
m_Model: {fileID: 11400000, guid: 699f852e79b5ba642871514fb1fb9843, type: 3}
hasUpgradedBrainParametersWithActionSpec: 1
m_Model: {fileID: 11400000, guid: 75910f45f20be49b18e2b95879a217b2, type: 3}
m_InferenceDevice: 0
m_BehaviorType: 0
m_BehaviorName: GridFoodCollector

myLaser: {fileID: 1045923826166930}
contribute: 0
useVectorObs: 0
useVectorFrozenFlag: 0
--- !u!114 &4768752321433982785
MonoBehaviour:
m_ObjectHideFlags: 0

- {r: 0, g: 0, b: 0, a: 0}
GizmoYOffset: 0
ShowGizmos: 0
CompressionType: 1
--- !u!1 &1729825611722018
GameObject:
m_ObjectHideFlags: 0

m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1819751139121548}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 12.3, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:

32
Project/Assets/ML-Agents/Examples/FoodCollector/Prefabs/VisualFoodCollectorArea.prefab


m_BrainParameters:
VectorObservationSize: 1
NumStackedVectorObservations: 1
VectorActionSize: 03000000030000000300000002000000
m_ActionSpec:
m_NumContinuousActions: 3
BranchSizes: 02000000
VectorActionSize:
m_Model: {fileID: 11400000, guid: c3b1eb0bcf06b4c0488599c7ab806de7, type: 3}
hasUpgradedBrainParametersWithActionSpec: 1
m_Model: {fileID: 11400000, guid: ec4b31b5d66ca4e51ae3ac41945facb2, type: 3}
m_InferenceDevice: 0
m_BehaviorType: 0
m_BehaviorName: VisualFoodCollector

m_BrainParameters:
VectorObservationSize: 1
NumStackedVectorObservations: 1
VectorActionSize: 03000000030000000300000002000000
m_ActionSpec:
m_NumContinuousActions: 3
BranchSizes: 02000000
VectorActionSize:
m_Model: {fileID: 11400000, guid: c3b1eb0bcf06b4c0488599c7ab806de7, type: 3}
hasUpgradedBrainParametersWithActionSpec: 1
m_Model: {fileID: 11400000, guid: ec4b31b5d66ca4e51ae3ac41945facb2, type: 3}
m_InferenceDevice: 0
m_BehaviorType: 0
m_BehaviorName: VisualFoodCollector

m_BrainParameters:
VectorObservationSize: 1
NumStackedVectorObservations: 1
VectorActionSize: 03000000030000000300000002000000
m_ActionSpec:
m_NumContinuousActions: 3
BranchSizes: 02000000
VectorActionSize:
m_Model: {fileID: 11400000, guid: c3b1eb0bcf06b4c0488599c7ab806de7, type: 3}
hasUpgradedBrainParametersWithActionSpec: 1
m_Model: {fileID: 11400000, guid: ec4b31b5d66ca4e51ae3ac41945facb2, type: 3}
m_InferenceDevice: 0
m_BehaviorType: 0
m_BehaviorName: VisualFoodCollector

m_BrainParameters:
VectorObservationSize: 1
NumStackedVectorObservations: 1
VectorActionSize: 03000000030000000300000002000000
m_ActionSpec:
m_NumContinuousActions: 3
BranchSizes: 02000000
VectorActionSize:
m_Model: {fileID: 11400000, guid: c3b1eb0bcf06b4c0488599c7ab806de7, type: 3}
hasUpgradedBrainParametersWithActionSpec: 1
m_Model: {fileID: 11400000, guid: ec4b31b5d66ca4e51ae3ac41945facb2, type: 3}
m_InferenceDevice: 0
m_BehaviorType: 0
m_BehaviorName: VisualFoodCollector

72
Project/Assets/ML-Agents/Examples/FoodCollector/Scripts/FoodCollectorAgent.cs


return new Color32(r, g, b, 255);
}
public void MoveAgent(ActionSegment<int> act)
public void MoveAgent(ActionBuffers actionBuffers)
{
m_Shoot = false;

var dirToGo = Vector3.zero;
var rotateDir = Vector3.zero;
var continuousActions = actionBuffers.ContinuousActions;
var discreteActions = actionBuffers.DiscreteActions;
var shootCommand = false;
var forwardAxis = (int)act[0];
var rightAxis = (int)act[1];
var rotateAxis = (int)act[2];
var shootAxis = (int)act[3];
switch (forwardAxis)
{
case 1:
dirToGo = transform.forward;
break;
case 2:
dirToGo = -transform.forward;
break;
}
var forward = Mathf.Clamp(continuousActions[0], -1f, 1f);
var right = Mathf.Clamp(continuousActions[1], -1f, 1f);
var rotate = Mathf.Clamp(continuousActions[2], -1f, 1f);
switch (rightAxis)
{
case 1:
dirToGo = transform.right;
break;
case 2:
dirToGo = -transform.right;
break;
}
dirToGo = transform.forward * forward;
dirToGo += transform.right * right;
rotateDir = -transform.up * rotate;
switch (rotateAxis)
{
case 1:
rotateDir = -transform.up;
break;
case 2:
rotateDir = transform.up;
break;
}
switch (shootAxis)
{
case 1:
shootCommand = true;
break;
}
var shootCommand = (int)discreteActions[0] > 0;
if (shootCommand)
{
m_Shoot = true;

public override void OnActionReceived(ActionBuffers actionBuffers)
{
MoveAgent(actionBuffers.DiscreteActions);
MoveAgent(actionBuffers);
var discreteActionsOut = actionsOut.DiscreteActions;
discreteActionsOut[0] = 0;
discreteActionsOut[1] = 0;
discreteActionsOut[2] = 0;
var continuousActionsOut = actionsOut.ContinuousActions;
continuousActionsOut[0] = 0;
continuousActionsOut[1] = 0;
continuousActionsOut[2] = 0;
discreteActionsOut[2] = 2;
continuousActionsOut[2] = 1;
discreteActionsOut[0] = 1;
continuousActionsOut[0] = 1;
discreteActionsOut[2] = 1;
continuousActionsOut[2] = -1;
discreteActionsOut[0] = 2;
continuousActionsOut[0] = -1;
discreteActionsOut[3] = Input.GetKey(KeyCode.Space) ? 1 : 0;
var discreteActionsOut = actionsOut.DiscreteActions;
discreteActionsOut[0] = Input.GetKey(KeyCode.Space) ? 1 : 0;
}
public override void OnEpisodeBegin()

18
Project/Assets/ML-Agents/Examples/GridWorld/Scenes/GridWorld.unity


m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 0}
m_IndirectSpecularColor: {r: 0.44971168, g: 0.4997775, b: 0.57563686, a: 1}
m_IndirectSpecularColor: {r: 0.44971228, g: 0.49977815, b: 0.57563734, a: 1}
m_UseRadianceAmbientProbe: 0
--- !u!157 &3
LightmapSettings:

agentParameters:
maxStep: 100
hasUpgradedFromAgentParameters: 1
maxStep: 100
MaxStep: 100
area: {fileID: 1795599557}
timeBetweenDecisionsAtInference: 0.15
renderCamera: {fileID: 797520692}

m_Name:
m_EditorClassIdentifier:
m_BrainParameters:
vectorObservationSize: 0
numStackedVectorObservations: 1
vectorActionSize: 05000000
vectorActionDescriptions: []
vectorActionSpaceType: 0
VectorObservationSize: 0
NumStackedVectorObservations: 1
VectorActionSize: 05000000
VectorActionDescriptions: []
VectorActionSpaceType: 0
m_Model: {fileID: 11400000, guid: a812f1ce7763a4a0c912717f3594fe20, type: 3}
m_InferenceDevice: 0
m_BehaviorType: 0

m_UseChildActuators: 1
m_ObservableAttributeHandling: 0
--- !u!114 &125487791
MonoBehaviour:
m_ObjectHideFlags: 0

m_RenderTexture: {fileID: 8400000, guid: 114608d5384404f89bff4b6f88432958, type: 2}
m_SensorName: RenderTextureSensor
m_Grayscale: 0
m_ObservationStacks: 1
m_Compression: 1
--- !u!1 &260425459
GameObject:

trueAgent: {fileID: 125487785}
goalPref: {fileID: 1508142483324970, guid: 1ec4e4e96e7514d45b7ebc3ba5a9a481, type: 3}
pitPref: {fileID: 1811317785436014, guid: d13ee2db77b3a4dcc8664d2fe2a0f219, type: 3}
numberOfObstacles: 1
--- !u!4 &1795599558
Transform:
m_ObjectHideFlags: 0

3
Project/Assets/ML-Agents/Examples/GridWorld/Scripts/GridArea.cs


public GameObject goalPref;
public GameObject pitPref;
GameObject[] m_Objects;
public int numberOfObstacles = 1;
GameObject m_Plane;
GameObject m_Sn;

transform.position = m_InitialPosition * (m_ResetParams.GetWithDefault("gridSize", 5f) + 1);
var playersList = new List<int>();
for (var i = 0; i < (int)m_ResetParams.GetWithDefault("numObstacles", 1); i++)
for (var i = 0; i < (int)m_ResetParams.GetWithDefault("numObstacles", numberOfObstacles); i++)
{
playersList.Add(1);
}

6
README.md


For any other questions or feedback, connect directly with the ML-Agents team at
ml-agents@unity3d.com.
## Privacy
In order to improve the developer experience for Unity ML-Agents Toolkit, we have added in-editor analytics.
Please refer to "Information that is passively collected by Unity" in the
[Unity Privacy Policy](https://unity3d.com/legal/privacy-policy).
## License
[Apache License 2.0](LICENSE)

2
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.6.0-preview"
"com.unity.ml-agents": "1.7.0-preview"
}
}

23
com.unity.ml-agents/CHANGELOG.md


#### com.unity.ml-agents (C#)
#### ml-agents / ml-agents-envs / gym-unity (Python)
- TensorFlow trainers have been removed, please use the Torch trainers instead. (#4707)
### Minor Changes
#### com.unity.ml-agents / com.unity.ml-agents.extensions (C#)
#### ml-agents / ml-agents-envs / gym-unity (Python)
### Bug Fixes
#### com.unity.ml-agents (C#)
#### ml-agents / ml-agents-envs / gym-unity (Python)
## [1.7.0-preview] - 2020-12-21
### Major Changes
#### com.unity.ml-agents (C#)
#### ml-agents / ml-agents-envs / gym-unity (Python)
- PyTorch trainers now support training agents with both continuous and discrete action spaces. (#4702)
The `.onnx` models generated by the trainers of this release are incompatible with versions of Barracuda before `1.2.1-preview`. If you upgrade the trainers, you must upgrade the version of the Barracuda package as well (which can be done by upgrading the `com.unity.ml-agents` package).
### Minor Changes

- In order to improve the developer experience for Unity ML-Agents Toolkit, we have added in-editor analytics.
Please refer to "Information that is passively collected by Unity" in the
[Unity Privacy Policy](https://unity3d.com/legal/privacy-policy). (#4677)
- The FoodCollector example environment now uses continuous actions for moving and
discrete actions for shooting. (#4746)
- `ActionSpec.validate_action()` now enforces that `UnityEnvironment.set_action_for_agent()` receives a 1D `np.array`.
- `ActionSpec.validate_action()` now enforces that `UnityEnvironment.set_action_for_agent()` receives a 1D `np.array`. (#4691)
- Removed noisy warnings about API minor version mismatches in both the C# and python code. (#4688)
#### ml-agents / ml-agents-envs / gym-unity (Python)

4
com.unity.ml-agents/Documentation~/com.unity.ml-agents.md


the documentation, you can checkout our [GitHub Repository], which also includes
a number of ways to [connect with us] including our [ML-Agents Forum].
In order to improve the developer experience for Unity ML-Agents Toolkit, we have added in-editor analytics.
Please refer to "Information that is passively collected by Unity" in the
[Unity Privacy Policy](https://unity3d.com/legal/privacy-policy).
[unity ML-Agents Toolkit]: https://github.com/Unity-Technologies/ml-agents
[unity inference engine]: https://docs.unity3d.com/Packages/com.unity.barracuda@latest/index.html
[package manager documentation]: https://docs.unity3d.com/Manual/upm-ui-install.html

6
com.unity.ml-agents/Editor/BrainParametersDrawer.cs


/// to make the custom GUI for.</param>
static void DrawVectorAction(Rect position, SerializedProperty property)
{
EditorGUI.LabelField(position, "Vector Action");
EditorGUI.LabelField(position, "Actions");
position.y += k_LineHeight;
EditorGUI.indentLevel++;
var actionSpecProperty = property.FindPropertyRelative(k_ActionSpecName);

EditorGUI.PropertyField(
position,
continuousActionSize,
new GUIContent("Continuous Action Size", "Length of continuous action vector."));
new GUIContent("Continuous Actions", "Number of continuous actions."));
}
/// <summary>

{
var branchSizes = property.FindPropertyRelative(k_DiscreteBranchSizeName);
var newSize = EditorGUI.IntField(
position, "Discrete Branch Size", branchSizes.arraySize);
position, "Discrete Branches", branchSizes.arraySize);
// This check is here due to:
// https://fogbugz.unity3d.com/f/cases/1246524/

14
com.unity.ml-agents/Editor/DemonstrationDrawer.cs


using System.Text;
using UnityEditor;
using Unity.MLAgents.Demonstrations;
using Unity.MLAgents.Policies;
namespace Unity.MLAgents.Editor

const string k_NumberStepsName = "numberSteps";
const string k_NumberEpisodesName = "numberEpisodes";
const string k_MeanRewardName = "meanReward";
const string k_ActionSpecName = "ActionSpec";
const string k_ActionSpecName = "m_ActionSpec";
const string k_NumDiscreteActionsName = "m_NumDiscreteActions";
const string k_NumDiscreteActionsName = "BranchSizes";
const string k_ShapeName = "shape";

var actSpecProperty = property.FindPropertyRelative(k_ActionSpecName);
var continuousSizeProperty = actSpecProperty.FindPropertyRelative(k_NumContinuousActionsName);
var discreteSizeProperty = actSpecProperty.FindPropertyRelative(k_NumDiscreteActionsName);
var continuousSizeLabel =
continuousSizeProperty.displayName + ": " + continuousSizeProperty.intValue;
var discreteSizeLabel = discreteSizeProperty.displayName + ": " +
discreteSizeProperty.intValue;
var continuousSizeLabel = "Continuous Actions: " + continuousSizeProperty.intValue;
var discreteSizeLabel = "Discrete Action Branches: ";
discreteSizeLabel += discreteSizeProperty == null ? "[]" : BuildIntArrayLabel(discreteSizeProperty);
EditorGUILayout.LabelField(continuousSizeLabel);
EditorGUILayout.LabelField(discreteSizeLabel);
}

2
com.unity.ml-agents/Runtime/Academy.cs


/// Unity package version of com.unity.ml-agents.
/// This must match the version string in package.json and is checked in a unit test.
/// </summary>
internal const string k_PackageVersion = "1.6.0-preview";
internal const string k_PackageVersion = "1.7.0-preview";
const int k_EditorTrainingPort = 5004;

2
com.unity.ml-agents/Runtime/Actuators/IActionReceiver.cs


/// <param name="destination">A float array to pack actions into whose length is greater than or
/// equal to the addition of the Lengths of this objects <see cref="ContinuousActions"/> and
/// <see cref="DiscreteActions"/> segments.</param>
/// [Obsolete("PackActions has been deprecated.")]
[Obsolete("PackActions has been deprecated.")]
public void PackActions(in float[] destination)
{
Debug.Assert(destination.Length >= ContinuousActions.Length + DiscreteActions.Length,

14
com.unity.ml-agents/Runtime/Agent.cs


/// <seealso cref="IActionReceiver.OnActionReceived"/>
public virtual void Heuristic(in ActionBuffers actionsOut)
{
// For backward compatibility
// Disable deprecation warnings so we can call the legacy overload.
#pragma warning disable CS0618
// The default implementation of Heuristic calls the
// obsolete version for backward compatibility
switch (m_PolicyFactory.BrainParameters.VectorActionSpaceType)
{
case SpaceType.Continuous:

actionsOut.ContinuousActions.Clear();
break;
}
#pragma warning restore CS0618
}
/// <summary>

{
m_ActionMasker = new DiscreteActionMasker(actionMask);
}
// Disable deprecation warnings so we can call the legacy overload.
#pragma warning disable CS0618
#pragma warning restore CS0618
}
/// <summary>

{
m_LegacyActionCache = Array.ConvertAll(actions.DiscreteActions.Array, x => (float)x);
}
// Disable deprecation warnings so we can call the legacy overload.
#pragma warning disable CS0618
#pragma warning restore CS0618
}
/// <summary>

5
com.unity.ml-agents/Runtime/Agent.deprecated.cs


/// Deprecated, use <see cref="WriteDiscreteActionMask"/> instead.
/// </summary>
/// <param name="actionMasker"></param>
[Obsolete("CollectDiscreteActionMasks has been deprecated, please use WriteDiscreteActionMask.")]
public virtual void CollectDiscreteActionMasks(DiscreteActionMasker actionMasker)
{
}

/// </summary>
/// <param name="actionsOut"></param>
[Obsolete("The float[] version of Heuristic has been deprecated, please use the ActionBuffers version instead.")]
public virtual void Heuristic(float[] actionsOut)
{
Debug.LogWarning("Heuristic method called but not implemented. Returning placeholder actions.");

/// Deprecated, use <see cref="OnActionReceived(ActionBuffers)"/> instead.
/// </summary>
/// <param name="vectorAction"></param>
[Obsolete("The float[] version of OnActionReceived has been deprecated, please use the ActionBuffers version instead.")]
public virtual void OnActionReceived(float[] vectorAction) { }
/// <summary>

/// The last action that was decided by the Agent (or null if no decision has been made).
/// </returns>
/// <seealso cref="OnActionReceived(ActionBuffers)"/>
// [Obsolete("GetAction has been deprecated, please use GetStoredActionBuffers, Or GetStoredDiscreteActions.")]
[Obsolete("GetAction has been deprecated, please use GetStoredActionBuffers instead.")]
public float[] GetAction()
{
var storedAction = m_Info.storedVectorActions;

36
com.unity.ml-agents/Runtime/Communicator/GrpcExtensions.cs


/// <param name="isTraining">Whether or not the Brain is training.</param>
public static BrainParametersProto ToProto(this BrainParameters bp, string name, bool isTraining)
{
// Disable deprecation warnings so we can set legacy fields
#pragma warning disable CS0618
var brainParametersProto = new BrainParametersProto
{
VectorActionSpaceTypeDeprecated = (SpaceTypeProto)bp.VectorActionSpaceType,

{
brainParametersProto.VectorActionDescriptionsDeprecated.AddRange(bp.VectorActionDescriptions);
}
#pragma warning restore CS0618
return brainParametersProto;
}

/// <returns>A BrainParameters struct.</returns>
public static BrainParameters ToBrainParameters(this BrainParametersProto bpp)
{
ActionSpec actionSpec;
if (bpp.ActionSpec == null)
{
var spaceType = (SpaceType)bpp.VectorActionSpaceTypeDeprecated;
if (spaceType == SpaceType.Continuous)
{
actionSpec = ActionSpec.MakeContinuous(bpp.VectorActionSizeDeprecated.ToArray()[0]);
}
else
{
actionSpec = ActionSpec.MakeDiscrete(bpp.VectorActionSizeDeprecated.ToArray());
}
}
else
{
actionSpec = ToActionSpec(bpp.ActionSpec);
}
ActionSpec = ToActionSpec(bpp.ActionSpec),
ActionSpec = actionSpec,
};
return bp;
}

{
if (!s_HaveWarnedTrainerCapabilitiesMultiPng)
{
Debug.LogWarning($"Attached trainer doesn't support multiple PNGs. Switching to uncompressed observations for sensor {sensor.GetName()}.");
Debug.LogWarning(
$"Attached trainer doesn't support multiple PNGs. Switching to uncompressed observations for sensor {sensor.GetName()}. " +
"Please find the versions that work best together from our release page: " +
"https://github.com/Unity-Technologies/ml-agents/releases"
);
s_HaveWarnedTrainerCapabilitiesMultiPng = true;
}
compressionType = SensorCompressionType.None;

{
if (!s_HaveWarnedTrainerCapabilitiesMapping)
{
Debug.LogWarning($"The sensor {sensor.GetName()} is using non-trivial mapping and " +
Debug.LogWarning(
$"The sensor {sensor.GetName()} is using non-trivial mapping and " +
"Switching to uncompressed observations.");
"Switching to uncompressed observations. " +
"Please find the versions that work best together from our release page: " +
"https://github.com/Unity-Technologies/ml-agents/releases"
);
s_HaveWarnedTrainerCapabilitiesMapping = true;
}
compressionType = SensorCompressionType.None;

12
com.unity.ml-agents/Runtime/Communicator/RpcCommunicator.cs


}
else if (unityVersion.Minor != pythonVersion.Minor)
{
// Even if we initialize, we still want to check to make sure that we inform users of minor version
// changes. This will surface any features that may not work due to minor version incompatibilities.
Debug.LogWarningFormat(
"WARNING: The communication API versions between Unity and python differ at the minor version level. " +
"Python API: {0}, Unity API: {1} Python Library Version: {2} .\n" +
"This means that some features may not work unless you upgrade the package with the lower version." +
"Please find the versions that work best together from our release page.\n" +
"https://github.com/Unity-Technologies/ml-agents/releases",
pythonApiVersion, unityCommunicationVersion, pythonLibraryVersion
);
// If a feature is used in Unity but not supported in the trainer,
// we will warn at the point it's used. Don't warn here to avoid noise.
}
return true;
}

10
com.unity.ml-agents/Runtime/Inference/ModelRunner.cs


actionSpec, seed, m_TensorAllocator, m_Memories, barracudaModel);
}
public InferenceDevice InferenceDevice
{
get { return m_InferenceDevice; }
}
public NNModel Model
{
get { return m_Model; }
}
static Dictionary<string, Tensor> PrepareBarracudaInputs(IEnumerable<TensorProxy> infInputs)
{
var inputs = new Dictionary<string, Tensor>();

24
com.unity.ml-agents/Runtime/Policies/BarracudaPolicy.cs


List<int[]> m_SensorShapes;
ActionSpec m_ActionSpec;
private string m_BehaviorName;
/// <summary>
/// Whether or not we've tried to send analytics for this model. We only ever try to send once per policy,
/// and do additional deduplication in the analytics code.
/// </summary>
private bool m_AnalyticsSent;
InferenceDevice inferenceDevice)
InferenceDevice inferenceDevice,
string behaviorName
)
m_BehaviorName = behaviorName;
m_ActionSpec = actionSpec;
}

if (!m_AnalyticsSent)
{
m_AnalyticsSent = true;
Analytics.InferenceAnalytics.InferenceModelSet(
m_ModelRunner.Model,
m_BehaviorName,
m_ModelRunner.InferenceDevice,
sensors,
m_ActionSpec
);
}
m_AgentId = info.episodeId;
m_ModelRunner?.PutObservations(info, sensors);
}

5
com.unity.ml-agents/Runtime/Policies/BehaviorParameters.cs


"Either assign a model, or change to a different Behavior Type."
);
}
return new BarracudaPolicy(actionSpec, m_Model, m_InferenceDevice);
return new BarracudaPolicy(actionSpec, m_Model, m_InferenceDevice, m_BehaviorName);
}
case BehaviorType.Default:
if (Academy.Instance.IsCommunicatorOn)

if (m_Model != null)
{
return new BarracudaPolicy(actionSpec, m_Model, m_InferenceDevice);
return new BarracudaPolicy(actionSpec, m_Model, m_InferenceDevice, m_BehaviorName);
}
else
{

}
agent.ReloadPolicy();
}
}
}

23
com.unity.ml-agents/Runtime/Policies/BrainParameters.cs


/// the action.
/// For the discrete action space: the number of branches in the action space.
/// </value>
/// [Obsolete("VectorActionSize has been deprecated, please use ActionSpec instead.")]
[Obsolete("VectorActionSize has been deprecated, please use ActionSpec instead.")]
[FormerlySerializedAs("vectorActionSize")]
public int[] VectorActionSize = new[] { 1 };

/// <summary>
/// (Deprecated) Defines if the action is discrete or continuous.
/// </summary>
/// [Obsolete("VectorActionSpaceType has been deprecated, please use ActionSpec instead.")]
[Obsolete("VectorActionSpaceType has been deprecated, please use ActionSpec instead.")]
[FormerlySerializedAs("vectorActionSpaceType")]
public SpaceType VectorActionSpaceType = SpaceType.Discrete;

/// <summary>
/// (Deprecated) The number of actions specified by this Brain.
/// </summary>
/// [Obsolete("NumActions has been deprecated, please use ActionSpec instead.")]
[Obsolete("NumActions has been deprecated, please use ActionSpec instead.")]
public int NumActions
{
get

/// <returns> A new BrainParameter object with the same values as the original.</returns>
public BrainParameters Clone()
{
// Disable deprecation warnings so we can read/write the old fields.
#pragma warning disable CS0618
return new BrainParameters
{
VectorObservationSize = VectorObservationSize,

VectorActionSize = (int[])VectorActionSize.Clone(),
VectorActionSpaceType = VectorActionSpaceType,
};
#pragma warning restore CS0618
}
/// <summary>

{
if (!hasUpgradedBrainParametersWithActionSpec)
// Disable deprecation warnings so we can read the old fields.
#pragma warning disable CS0618
if (!hasUpgradedBrainParametersWithActionSpec
&& m_ActionSpec.NumContinuousActions == 0
&& m_ActionSpec.BranchSizes == null)
{
if (VectorActionSpaceType == SpaceType.Continuous)
{

m_ActionSpec.NumContinuousActions = 0;
m_ActionSpec.BranchSizes = (int[])VectorActionSize.Clone();
}
hasUpgradedBrainParametersWithActionSpec = true;
hasUpgradedBrainParametersWithActionSpec = true;
#pragma warning restore CS0618
}
/// <summary>

{
// Disable deprecation warnings so we can read the old fields.
#pragma warning disable CS0618
if (m_ActionSpec.NumContinuousActions == 0)
{
VectorActionSize = (int[])ActionSpec.BranchSizes.Clone();

{
VectorActionSize = null;
}
#pragma warning restore CS0618
}
/// <summary>

4
com.unity.ml-agents/Tests/Editor/Communicator/RpcCommunicatorTests.cs


Assert.IsTrue(RpcCommunicator.CheckCommunicationVersionsAreCompatible(unityVerStr,
pythonVerStr,
pythonPackageVerStr));
// Ensure that a warning was printed.
LogAssert.Expect(LogType.Warning, new Regex("(.\\s)+"));
LogAssert.NoUnexpectedReceived();
unityVerStr = "2.0.0";
Assert.IsFalse(RpcCommunicator.CheckCommunicationVersionsAreCompatible(unityVerStr,

8
com.unity.ml-agents/Tests/Editor/MLAgentsEditModeTest.cs


Assert.AreEqual(numSteps, agent1.sensor1.numWriteCalls);
Assert.AreEqual(numSteps, agent1.sensor2.numCompressedCalls);
// Disable deprecation warnings so we can read/write the old fields.
#pragma warning disable CS0618
Assert.AreEqual(
agent1.collectObservationsCallsForEpisode,
agent1.GetStoredActionBuffers().ContinuousActions[0]
);
#pragma warning restore CS0618
}
}

2
com.unity.ml-agents/package.json


{
"name": "com.unity.ml-agents",
"displayName": "ML Agents",
"version": "1.6.0-preview",
"version": "1.7.0-preview",
"unity": "2018.4",
"description": "Use state-of-the-art machine learning to create intelligent character behaviors in any Unity environment (games, robotics, film, etc.).",
"dependencies": {

117
docs/Learning-Environment-Create-New.md


### Create the Floor Plane
1. Right click in Hierarchy window, select 3D Object > Plane.
1. Name the GameObject "Floor."
1. Name the GameObject "Floor".
1. Select the Floor Plane to view its properties in the Inspector window.
1. Set Transform to Position = `(0, 0, 0)`, Rotation = `(0, 0, 0)`, Scale =
`(1, 1, 1)`.

### Add the Target Cube
1. Right click in Hierarchy window, select 3D Object > Cube.
1. Name the GameObject "Target"
1. Name the GameObject "Target".
1. Select the Target Cube to view its properties in the Inspector window.
1. Set Transform to Position = `(3, 0.5, 3)`, Rotation = `(0, 0, 0)`, Scale =
`(1, 1, 1)`.

### Add the Agent Sphere
1. Right click in Hierarchy window, select 3D Object > Sphere.
1. Name the GameObject "RollerAgent"
1. Name the GameObject "RollerAgent".
1. Select the RollerAgent Sphere to view its properties in the Inspector window.
1. Set Transform to Position = `(0, 0.5, 0)`, Rotation = `(0, 0, 0)`, Scale =
`(1, 1, 1)`.

<p align="left">
<img src="images/roller-ball-agent.png"
alt="The Agent GameObject in the Inspector window"
width="400" border="10" />
</p>
### Group into Training Area
Note that the screenshot above includes the `Roller Agent` script, which we will
create in the next section. However, before we do that, we'll first group the
floor, target and agent under a single, empty, GameObject. This will simplify
Group the floor, target and agent under a single, empty, GameObject. This will simplify
<p align="left">
<img src="images/roller-ball-hierarchy.png"
alt="The Hierarchy window"
width="250" border="10" />
</p>
To do so:

1. Drag the Floor, Target, and RollerAgent GameObjects in the Hierarchy into the
TrainingArea GameObject.
<p align="left">
<img src="images/roller-ball-hierarchy.png"
alt="The Hierarchy window"
width="250" border="10" />
</p>
To create the Agent:
To create the Agent Script:
1. Select the RollerAgent GameObject to view it in the Inspector window.
1. Click **Add Component**.

1. In the Unity Project window, double-click the `RollerAgent` script to open it
in your code editor.
1. In the editor, add the `using Unity.MLAgents;` and
`using Unity.MLAgents.Sensors;` statements and then change the base class from
`MonoBehaviour` to `Agent`.
1. Delete the `Update()` method, but we will use the `Start()` function, so
leave it alone for now.
1. Import ML-Agent package by adding
```csharp
using Unity.MLAgents;
using Unity.MLAgents.Sensors;
using Unity.MLAgents.Actuators;
```
then change the base class from `MonoBehaviour` to `Agent`.
1. Delete `Update()` since we are not using it, but keep `Start()`.
So far, these are the basic steps that you would use to add ML-Agents to any
Unity project. Next, we will add the logic that will let our Agent learn to roll

the Agent (Sphere) attempts to solve the task. Each episode lasts until the
Agents solves the task (i.e. reaches the cube), fails (rolls off the platform)
or times out (takes too long to solve or fail at the task). At the start of each
episode, the `OnEpisodeBegin()` method is called to set-up the environment for a
episode, `OnEpisodeBegin()` is called to set-up the environment for a
In this example, each time the Agent (Sphere) reaches its target (Cube), its
episode ends and the method moves the target (Cube) to a new random location. In
addition, if the Agent rolls off the platform, the `OnEpisodeBegin()` method
puts it back onto the floor.
In this example, each time the Agent (Sphere) reaches its target (Cube), the
episode ends and the target (Cube) is moved to a new random location; and if
the Agent rolls off the platform, it will be put back onto the floor.
These are all handled in `OnEpisodeBegin()`.
To move the target (Cube), we need a reference to its Transform (which stores a
GameObject's position, orientation and scale in the 3D world). To get this

public Transform Target;
public override void OnEpisodeBegin()
{
// If the Agent fell, zero its momentum
// If the Agent fell, zero its momentum
this.rBody.angularVelocity = Vector3.zero;
this.rBody.velocity = Vector3.zero;
this.transform.localPosition = new Vector3( 0, 0.5f, 0);

#### Actions
To solve the task of moving towards the target, the Agent (Sphere) needs to be
able to move in the `x` and `z` directions. As such, we will provide 2 actions
to the agent. The first determines the force applied along the x-axis; the
able to move in the `x` and `z` directions. As such, the agent needs 2 actions:
the first determines the force applied along the x-axis; and the
to move in three dimensions, then we would need a third action.
to move in three dimensions, then we would need a third action.)
component, `rBody`, using the `Rigidbody.AddForce` function:
component `rBody`, using `Rigidbody.AddForce()`:
```csharp
Vector3 controlSignal = Vector3.zero;

#### Rewards
Reinforcement learning requires rewards. Assign rewards in the
`OnActionReceived()` function. The learning algorithm uses the rewards assigned
to the Agent during the simulation and learning process to determine whether it
Reinforcement learning requires rewards to signal which decisions are good and
which are bad. The learning algorithm uses the rewards to determine whether it
The RollerAgent calculates the distance to detect when it reaches the target.
When it does, the code calls the `Agent.SetReward()` method to assign a reward
of 1.0 and marks the agent as finished by calling the `EndEpisode()` method on
Rewards are assigned in `OnActionReceived()`. The RollerAgent
calculates the distance to detect when it reaches the target.
When it does, the code calls `Agent.SetReward()` to assign a reward
of 1.0 and marks the agent as finished by calling `EndEpisode()` on
the Agent.
```csharp

#### OnActionReceived()
With the action and reward logic outlined above, the final version of the
`OnActionReceived()` function looks like:
With the action and reward logic outlined above, the final version of
`OnActionReceived()` looks like:
```csharp
public float forceMultiplier = 10;

}
```
Note the `forceMultiplier` class variable is defined before the function. Since `forceMultiplier` is
public, you can set the value from the Inspector window.
Note the `forceMultiplier` class variable is defined before the method definition.
Since `forceMultiplier` is public, you can set the value from the Inspector window.
## Final Editor Setup
## Final Agent Setup in Editor
Now, that all the GameObjects and ML-Agent components are in place, it is time
to connect everything together in the Unity Editor. This involves changing some
of the Agent Component's properties so that they are compatible with our Agent
code.
Now that all the GameObjects and ML-Agent components are in place, it is time
to connect everything together in the Unity Editor. This involves adding and
setting some of the Agent Component's properties so that they are compatible
with our Agent script.
1. Add the `Decision Requester` script with the Add Component button from the
RollerAgent Inspector.
1. Change **Decision Period** to `10`. For more information on decisions, see [the Agent documentation](Learning-Environment-Design-Agents.md#decisions)
1. Add the `Behavior Parameters` script with the Add Component button from the
RollerAgent Inspector.
1. Modify the Behavior Parameters of the Agent :
- `Behavior Name` to _RollerBall_
1. Add a `Decision Requester` script with the **Add Component** button.
Set the **Decision Period** to `10`. For more information on decisions,
see [the Agent documentation](Learning-Environment-Design-Agents.md#decisions)
1. Add a `Behavior Parameters` script with the **Add Component** button.
Set the Behavior Parameters of the Agent to the following:
- `Behavior Name`: _RollerBall_
- `Vector Action` > `Space Type` = **Continuous**
- `Vector Action` > `Space Size` = 2
- `Actions` > `Continuous Actions` = 2
In the inspector, the `RollerAgent` should look like this now:
<p align="left">
<img src="images/roller-ball-agent.png"
alt="The Agent GameObject in the Inspector window"
width="400" border="5" />
</p>
Now you are ready to test the environment before training.

9
docs/Learning-Environment-Examples.md


agent is frozen and/or shot its laser (2), plus ray-based perception of
objects around agent's forward direction (49; 7 raycast angles with 7
measurements for each).
- Actions: 4 discrete action ranches:
- Forward Motion (3 possible actions: Forward, Backwards, No Action)
- Side Motion (3 possible actions: Left, Right, No Action)
- Rotation (3 possible actions: Rotate Left, Rotate Right, No Action)
- Laser (2 possible actions: Laser, No Action)
- Actions:
- 3 continuous actions correspond to Forward Motion, Side Motion and Rotation
- 1 discrete acion branch for Laser with 2 possible actions corresponding to
Shoot Laser or No Action
- Visual Observations (Optional): First-person camera per-agent, plus one vector
flag representing the frozen state of the agent. This scene uses a combination
of vector and visual observations and the training will not succeed without

255
docs/images/3dball_learning_brain.png

之前 之后
宽度: 499  |  高度: 384  |  大小: 43 KiB

999
docs/images/roller-ball-agent.png
文件差异内容过多而无法显示
查看文件

268
docs/images/team_id.png

之前 之后
宽度: 439  |  高度: 249  |  大小: 27 KiB

2
gym-unity/gym_unity/__init__.py


# Version of the library that will be used to upload to pypi
__version__ = "0.23.0.dev0"
__version__ = "0.24.0.dev0"
# Git tag that will be checked to determine whether to trigger upload to pypi
__release_tag__ = None

2
ml-agents-envs/mlagents_envs/__init__.py


# Version of the library that will be used to upload to pypi
__version__ = "0.23.0.dev0"
__version__ = "0.24.0.dev0"
# Git tag that will be checked to determine whether to trigger upload to pypi
__release_tag__ = None

15
ml-agents-envs/mlagents_envs/environment.py


elif unity_communicator_version.version[0] != api_version.version[0]:
# Major versions mismatch.
return False
elif unity_communicator_version.version[1] != api_version.version[1]:
# Non-beta minor versions mismatch. Log a warning but allow execution to continue.
logger.warning(
f"WARNING: The communication API versions between Unity and python differ at the minor version level. "
f"Python API: {python_api_version}, Unity API: {unity_communicator_version}.\n"
f"This means that some features may not work unless you upgrade the package with the lower version."
f"Please find the versions that work best together from our release page.\n"
"https://github.com/Unity-Technologies/ml-agents/releases"
)
# Major versions match, so either:
# 1) The versions are identical, in which case there's no compatibility issues
# 2) The Unity version is newer, in which case we'll warn or fail on the Unity side if trying to use
# unsupported features
# 3) The trainer version is newer, in which case new trainer features might be available but unused by C#
# In any of the cases, there's no reason to warn about mismatch here.
logger.info(
f"Connected to Unity environment with package version {unity_package_version} "
f"and communication version {unity_com_ver}"

2
ml-agents/mlagents/trainers/__init__.py


# Version of the library that will be used to upload to pypi
__version__ = "0.23.0.dev0"
__version__ = "0.24.0.dev0"
# Git tag that will be checked to determine whether to trigger upload to pypi
__release_tag__ = None

30
ml-agents/mlagents/trainers/demo_loader.py


demo_raw_buffer["rewards"].append(next_reward)
for i, obs in enumerate(current_obs):
demo_raw_buffer[ObsUtil.get_name_at(i)].append(obs)
# TODO: update the demonstraction files and read from the new proto format
if behavior_spec.action_spec.continuous_size > 0:
demo_raw_buffer["continuous_action"].append(
current_pair_info.action_info.vector_actions_deprecated
)
if behavior_spec.action_spec.discrete_size > 0:
demo_raw_buffer["discrete_action"].append(
current_pair_info.action_info.vector_actions_deprecated
)
if (
len(current_pair_info.action_info.continuous_actions) == 0
and len(current_pair_info.action_info.discrete_actions) == 0
):
if behavior_spec.action_spec.continuous_size > 0:
demo_raw_buffer["continuous_action"].append(
current_pair_info.action_info.vector_actions_deprecated
)
else:
demo_raw_buffer["discrete_action"].append(
current_pair_info.action_info.vector_actions_deprecated
)
else:
if behavior_spec.action_spec.continuous_size > 0:
demo_raw_buffer["continuous_action"].append(
current_pair_info.action_info.continuous_actions
)
if behavior_spec.action_spec.discrete_size > 0:
demo_raw_buffer["discrete_action"].append(
current_pair_info.action_info.discrete_actions
)
demo_raw_buffer["prev_action"].append(previous_action)
if next_done:
demo_raw_buffer.resequence_and_append(

4
ml-agents/mlagents/trainers/policy/policy.py


has_nan = np.isnan(d)
if has_nan:
raise RuntimeError("Continuous NaN action detected.")
d = np.sum(action.discrete)
has_nan = np.isnan(d)
if has_nan:
raise RuntimeError("Discrete NaN action detected.")
@abstractmethod
def update_normalization(self, buffer: AgentBuffer) -> None:

8
ml-agents/mlagents/trainers/tests/torch/saver/test_saver.py


decision_step, _ = mb.create_steps_from_behavior_spec(
policy1.behavior_spec, num_agents=1
)
obs = decision_step.obs
np_obs = decision_step.obs
obs = [ModelUtils.list_to_tensor(obs) for obs in obs]
tensor_obs = [ModelUtils.list_to_tensor(obs) for obs in np_obs]
obs, masks=masks, memories=memories
tensor_obs, masks=masks, memories=memories
obs, masks=masks, memories=memories
tensor_obs, masks=masks, memories=memories
)
np.testing.assert_array_equal(
log_probs1.all_discrete_tensor, log_probs2.all_discrete_tensor

12
ml-agents/mlagents/trainers/tests/torch/test_policy.py


buffer = mb.simulate_rollout(64, policy.behavior_spec, memory_size=policy.m_size)
act_masks = ModelUtils.list_to_tensor(buffer["action_mask"])
agent_action = AgentAction.from_dict(buffer)
obs = ObsUtil.from_buffer(buffer, len(policy.behavior_spec.observation_shapes))
obs = [ModelUtils.list_to_tensor(obs) for obs in obs]
np_obs = ObsUtil.from_buffer(buffer, len(policy.behavior_spec.observation_shapes))
tensor_obs = [ModelUtils.list_to_tensor(obs) for obs in np_obs]
memories = [
ModelUtils.list_to_tensor(buffer["memory"][i])

memories = torch.stack(memories).unsqueeze(0)
log_probs, entropy, values = policy.evaluate_actions(
obs,
tensor_obs,
masks=act_masks,
actions=agent_action,
memories=memories,

buffer = mb.simulate_rollout(64, policy.behavior_spec, memory_size=policy.m_size)
act_masks = ModelUtils.list_to_tensor(buffer["action_mask"])
obs = ObsUtil.from_buffer(buffer, len(policy.behavior_spec.observation_shapes))
obs = [ModelUtils.list_to_tensor(obs) for obs in obs]
np_obs = ObsUtil.from_buffer(buffer, len(policy.behavior_spec.observation_shapes))
tensor_obs = [ModelUtils.list_to_tensor(obs) for obs in np_obs]
memories = [
ModelUtils.list_to_tensor(buffer["memory"][i])

memories = torch.stack(memories).unsqueeze(0)
(sampled_actions, log_probs, entropies, memories) = policy.sample_actions(
obs, masks=act_masks, memories=memories, seq_len=policy.sequence_length
tensor_obs, masks=act_masks, memories=memories, seq_len=policy.sequence_length
)
if discrete:
assert log_probs.all_discrete_tensor.shape == (

2
ml-agents/mlagents/trainers/tests/torch/test_reward_providers/test_gail.py


init_reward_expert = gail_rp.evaluate(buffer_expert)[0]
init_reward_policy = gail_rp.evaluate(buffer_policy)[0]
for _ in range(10):
for _ in range(20):
gail_rp.update(buffer_policy)
reward_expert = gail_rp.evaluate(buffer_expert)[0]
reward_policy = gail_rp.evaluate(buffer_policy)[0]

9
ml-agents/mlagents/trainers/torch/components/bc/module.py


"""
Helper function for update_batch.
"""
obs = ObsUtil.from_buffer(
np_obs = ObsUtil.from_buffer(
obs = [ModelUtils.list_to_tensor(obs) for obs in obs]
tensor_obs = [ModelUtils.list_to_tensor(obs) for obs in np_obs]
act_masks = None
expert_actions = AgentAction.from_dict(mini_batch_demo)
if self.policy.behavior_spec.action_spec.discrete_size > 0:

memories = torch.zeros(1, self.n_sequences, self.policy.m_size)
selected_actions, log_probs, _, _ = self.policy.sample_actions(
obs, masks=act_masks, memories=memories, seq_len=self.policy.sequence_length
tensor_obs,
masks=act_masks,
memories=memories,
seq_len=self.policy.sequence_length,
)
bc_loss = self._behavioral_cloning_loss(
selected_actions, log_probs, expert_actions

10
ml-agents/mlagents/trainers/torch/components/reward_providers/curiosity_reward_provider.py


"""
Extracts the current state embedding from a mini_batch.
"""
n_obs = len(self._state_encoder.encoders)
n_obs = len(self._state_encoder.processors)
np_obs = ObsUtil.from_buffer(mini_batch, n_obs)
# Convert to tensors
tensor_obs = [ModelUtils.list_to_tensor(obs) for obs in np_obs]

"""
Extracts the next state embedding from a mini_batch.
"""
n_obs = len(self._state_encoder.encoders)
obs = ObsUtil.from_buffer_next(mini_batch, n_obs)
n_obs = len(self._state_encoder.processors)
np_obs = ObsUtil.from_buffer_next(mini_batch, n_obs)
obs = [ModelUtils.list_to_tensor(obs) for obs in obs]
tensor_obs = [ModelUtils.list_to_tensor(obs) for obs in np_obs]
hidden, _ = self._state_encoder.forward(obs)
hidden, _ = self._state_encoder.forward(tensor_obs)
return hidden
def predict_action(self, mini_batch: AgentBuffer) -> ActionPredictionTuple:

10
ml-agents/mlagents/trainers/torch/components/reward_providers/gail_reward_provider.py


)
self._estimator = torch.nn.Sequential(
linear_layer(estimator_input_size, 1), torch.nn.Sigmoid()
linear_layer(estimator_input_size, 1, kernel_gain=0.2), torch.nn.Sigmoid()
)
def get_action_input(self, mini_batch: AgentBuffer) -> torch.Tensor:

"""
Creates the observation input.
"""
n_obs = len(self.encoder.encoders)
obs = ObsUtil.from_buffer(mini_batch, n_obs)
n_obs = len(self.encoder.processors)
np_obs = ObsUtil.from_buffer(mini_batch, n_obs)
obs = [ModelUtils.list_to_tensor(obs) for obs in obs]
return obs
tensor_obs = [ModelUtils.list_to_tensor(obs) for obs in np_obs]
return tensor_obs
def compute_estimate(
self, mini_batch: AgentBuffer, use_vail_noise: bool = False

8
ml-agents/mlagents/trainers/torch/components/reward_providers/rnd_reward_provider.py


self._encoder = NetworkBody(specs.observation_shapes, state_encoder_settings)
def forward(self, mini_batch: AgentBuffer) -> torch.Tensor:
n_obs = len(self._encoder.encoders)
obs = ObsUtil.from_buffer(mini_batch, n_obs)
n_obs = len(self._encoder.processors)
np_obs = ObsUtil.from_buffer(mini_batch, n_obs)
obs = [ModelUtils.list_to_tensor(obs) for obs in obs]
tensor_obs = [ModelUtils.list_to_tensor(obs) for obs in np_obs]
hidden, _ = self._encoder.forward(obs)
hidden, _ = self._encoder.forward(tensor_obs)
self._encoder.update_normalization(mini_batch)
return hidden

8
ml-agents/mlagents/trainers/torch/distributions.py


log_sigma = torch.clamp(self.log_sigma(inputs), min=-20, max=2)
else:
# Expand so that entropy matches batch size. Note that we're using
# torch.cat here instead of torch.expand() becuase it is not supported in the
# verified version of Barracuda (1.0.2).
log_sigma = torch.cat([self.log_sigma] * inputs.shape[0], axis=0)
# mu*0 here to get the batch size implicitly since Barracuda 1.2.1
# throws error on runtime broadcasting due to unknown reason. We
# use this to replace torch.expand() becuase it is not supported in
# the verified version of Barracuda (1.0.X).
log_sigma = mu * 0 + self.log_sigma
if self.tanh_squash:
return TanhGaussianDistInstance(mu, torch.exp(log_sigma))
else:

26
ml-agents/mlagents/trainers/torch/networks.py


else 0
)
self.encoders, self.embedding_sizes = ModelUtils.create_input_processors(
self.processors, self.embedding_sizes = ModelUtils.create_input_processors(
observation_shapes,
self.h_size,
network_settings.vis_encode_type,

self.lstm = None # type: ignore
def update_normalization(self, buffer: AgentBuffer) -> None:
obs = ObsUtil.from_buffer(buffer, len(self.encoders))
for vec_input, enc in zip(obs, self.encoders):
obs = ObsUtil.from_buffer(buffer, len(self.processors))
for vec_input, enc in zip(obs, self.processors):
for n1, n2 in zip(self.encoders, other_network.encoders):
for n1, n2 in zip(self.processors, other_network.processors):
if isinstance(n1, VectorInput) and isinstance(n2, VectorInput):
n1.copy_normalization(n2)

sequence_length: int = 1,
) -> Tuple[torch.Tensor, torch.Tensor]:
encodes = []
for idx, processor in enumerate(self.encoders):
for idx, processor in enumerate(self.processors):
obs_input = inputs[idx]
processed_obs = processor(obs_input)
encodes.append(processed_obs)

):
super().__init__()
self.action_spec = action_spec
self.version_number = torch.nn.Parameter(torch.Tensor([2.0]))
self.version_number = torch.nn.Parameter(
torch.Tensor([2.0]), requires_grad=False
)
torch.Tensor([int(self.action_spec.is_continuous())])
torch.Tensor([int(self.action_spec.is_continuous())]), requires_grad=False
)
self.continuous_act_size_vector = torch.nn.Parameter(
torch.Tensor([int(self.action_spec.continuous_size)]), requires_grad=False

self.encoding_size = network_settings.memory.memory_size // 2
else:
self.encoding_size = network_settings.hidden_units
self.memory_size_vector = torch.nn.Parameter(
torch.Tensor([int(self.network_body.memory_size)]), requires_grad=False
)
self.action_model = ActionModel(
self.encoding_size,

start = 0
end = 0
vis_index = 0
for i, enc in enumerate(self.network_body.encoders):
for i, enc in enumerate(self.network_body.processors):
if isinstance(enc, VectorInput):
# This is a vec_obs
vec_size = self.network_body.embedding_sizes[i]

disc_action_out,
action_out_deprecated,
) = self.action_model.get_action_out(encoding, masks)
export_out = [
self.version_number,
torch.Tensor([self.network_body.memory_size]),
]
export_out = [self.version_number, self.memory_size_vector]
if self.action_spec.continuous_size > 0:
export_out += [cont_action_out, self.continuous_act_size_vector]
if self.action_spec.discrete_size > 0:

467
Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/FoodCollector.onnx


pytorch1.7:��
@
vector_observation23Concat_0"Concat*
axis����������
�
23
/network_body.linear_encoder.seq_layers.0.weight
-network_body.linear_encoder.seq_layers.0.bias24Gemm_1"Gemm*
alpha�?�*
beta�?�*
transB�

2425 Sigmoid_2"Sigmoid

24
2526Mul_3"Mul
�
26
/network_body.linear_encoder.seq_layers.2.weight
-network_body.linear_encoder.seq_layers.2.bias27Gemm_4"Gemm*
alpha�?�*
beta�?�*
transB�

2728 Sigmoid_5"Sigmoid

27
2829Mul_6"Mul
�
29
/action_model._continuous_distribution.mu.weight
-action_model._continuous_distribution.mu.bias30Gemm_7"Gemm*
alpha�?�*
beta�?�*
transB�

5632Exp_8"Exp
K
action_masks33Slice_9"Slice*
axes@�*
ends@�*
starts@�
�
29
5action_model._discrete_distribution.branches.0.weight
3action_model._discrete_distribution.branches.0.bias34Gemm_10"Gemm*
alpha�?�*
beta�?�*
transB�
135 Constant_11"Constant*
value*J���

33
3536Mul_12"Mul
137 Constant_13"Constant*
value*J�?�

36
3738Add_14"Add

34
3339Mul_15"Mul
140 Constant_16"Constant*
value*J ��L�

38
4041Mul_17"Mul

39
4142Sub_18"Sub
*
4243
Softmax_19"Softmax*
axis�
=
3044RandomNormalLike_20"RandomNormalLike*
dtype�

44
3245Mul_21"Mul

30
4546Add_22"Add
5
4647Clip_23"Clip*
max@@�*
min@��
)
47
57continuous_actionsDiv_24"Div
151 Constant_25"Constant*
value*J���3�

43
5152Add_26"Add

5253Log_27"Log
6
53discrete_actions Concat_28"Concat*
axis�
< memory_size Constant_29"Constant*
value*
J�torch-jit-export*B56J X����cý "н* B57J@@*AB-action_model._continuous_distribution.mu.biasJ 3=אG���*� �B/action_model._continuous_distribution.mu.weightJ� X�V:=! �����;@D��w{=�m ��F���y��Q����d=�����M<�F,=a���$���q���]��՗<@��=�����ւ�<�z= �<Q$=�$j<GE��E��=w���w=��4=�i<~9Fd�=o<�;�]5=?��=��<_Y�3�P=�滚��<�H�<�X�= ���6�������-�+�.=Q����f�
[˼�4b�M9h���ƻR����9�<H�<��9�4���@�;�`�n��=@U�C�d�����V�ѽ�? =�tA=�q�=T#��M����Cg��U�=A�#=(�l��p9<��k=�%�<�%�=��g�{�G�c ����T��L�?�<N����&8�2ĽW��=e#Ľ�MK�灗�c,��S���1o]�D�=&Iν���-J��b/k;�}�� S=��=�i�;Ds�<��4�j"��͓�DF=T����]�<+��<�G-<Y�n�X=5��fp=��k��7�<qY���<�ME�e�1�*�b=?��±ϽZ?�<�ډ��2�= |�=��H�f}B=a�ƽ��A<D�*�*a�=]�����<x����@��N��=��/���W��<�ّ�ٌ-���,�݌l��[�<¦\=����!��k�Ṭ�!<�"b<���<�����c�_��߻��=�yܼCn���E�h࠽��=8"�<����|�=;l�=L�ż��bB޼�=�ၼ��[��*/�˕��MP �l�����9}�����½_���L=��j=�l��_�|=�S������W��=�q������ټ�Ȁ=LHo�l5R��!˼�v�;��ҽ�ü��4=�C�=@�� �=$R=T0�;�`����M=��<+�Q�=��BI��/�65U=�=��o=�(��S_<��1�EIr�lǶ�̣p��i <�3����=䫜=!V�;� F�ɞ�=[s�f���Q��b�;��3�U�)=,��;��<؋=��<;;=t���%���|F=�W�=�s�=���b�e��ح���)�ٮ%=^���
M=��Ҽ�j�c]���P���Z=M�����y=�7D����<������j=��C=�c�=E᳼ 꾽�5=���=��i=�/1=�5�1V^=�n=���R������<��N=�"�=��L��x=R`�;k�%��/�<Sj7=�qY<|���G/R=tn=t�<�}�<d�C<�v��j�L=~�ʽ$�o����<�b�=�
y<�Ҋ=T�5;����o�~<t =�*=�?=�7B=S�8=_�;1�<r@S��C��a�A=�����-=�=�ڮ:v�b�kjN==�W�����p��fp=��%0=rr�<N�;�Y�;�+<��7<��V�h�3=0�K��Wq�9Gֻ�n�=����_`�<-��;:,�;$ڋ��F,=�L��K���u���i��=� �=
�"=��k<R <�C��.
:�+�=���=b���߲-=n��<0R��0��=�A���|�=��3��\9=ԎK�F2�<�$��Z��v/�����(>��4wm=���a�-��+��=\�N=<Hh=���=A��Z=�;�<*CB3action_model._discrete_distribution.branches.0.biasJ��˻���;*��B5action_model._discrete_distribution.branches.0.weightJ����4=���L���
�� �;��Ҽ{약>Ii�Vւ�Mf5=����%��<�ں<ɂ&�,+޸8�<�-b:� =�#=fb><�%=p.=~��<?�=�ǎ;�X�<y��;�x<�$=8 �< ��=�+=T��=ؖq�Nz=��<Y�7=�K=�^�M�C=k� ���^����<&�4=�X�<��K�[�� z޼�D=?�T�+�<P���jb�<�� =O``< jH����
���'��mR;/��;?� �ZO�=��;$l�r�����l�!;[=��4==���<T�@�3;�;�2N=��"=�A��.μ�G=�*ۼ`�*=����X���պ� =�p9����<��8���:=�m����<���Gt#�z</��< v�;(�_;��<9�R�ny�P��<�n��NYL<v��<J4�<tj=���
�3=1^��b�껹��<^~<��=S��<^��;SK�����;�uw�����J�!����3��q�<�-O=e�G={��V�3=�=4r�=��Y�;f�=��<'1�<�|�1��<2?|=��;<�]=��@�OSQ���м6��.�;~��;U\�!�P�� �:����������ů(��r��V�������K7��y;��
��G���06�N���±Ҽ��G���;<�+ �vE��a��9�Bht<{e)���<g�o=%� �4�%�& ���� =�Q=���<%��vP��0�;�)4<�{@�C|I���%�IR`��/;��<��=���:��<g�Y<�>��d����$o=���=�1=7ը�����W���֦����<O��:yG8�Y
(��Z=sQ=ˤ�+kj<(u����<�
=�G���p��,�:�����:��%�
��=uy"�Z��=-�{=ZhE��S��ͅd;d�+��a*�!t=���=7����<&qT����j�*��F༡��<o�*��"�<GG;�F���һ>!b��G��ƿ�JN�<�ʌ9n#�;, �<…L=�*�;.�U=�o��f 1�����"�<q����;**Bcontinuous_action_output_shapeJ@@*(Bdiscrete_action_output_shapeJ@*��B-network_body.linear_encoder.seq_layers.0.biasJ�7J7<��4=x�=���<��]=N#!=��U=�D�=硒<Iό=![�=���=I= +��h�<f&<�/p=i\�=cw=�i =K����g�<��W=�$�;/�
��&<��(���s�c�G=-3=�8O<q׀�@=�=� m��;?��=���W�A=V�=�;�=@�7��=H�<&iF=��-��g�����;To�;8�R�갣=g� =)d1=@��=�@<=��.<
缶��< V;�1�= M�
0l�`F����l=꤫=��x��E =�%&�ǀ��L�<�%�k��=� �=�8�?{�=3ɯ<>ܤ=��=�=2|7<����`һ�U�=/N�<�܂<��(�o��PO�=G��T�<�8%��y�=�y�����<蒽H4g< 쪼N8����F=��i=��=ƃ�>@==XS=I ��2 ��m=ou�<��t�~ٮ;�7J=��Ӽ�N�=%0=�F����<�Fe=�%<� ��}�x=B�=�/���Gu<IS<��q��P�=l�O<���=c�=*���5B/network_body.linear_encoder.seq_layers.0.weightJ��S����,� ^��lMJ��Ob�� $>Er�@��>��n�\"������� <���� �Hf��;�<��]�(��s��=��>d�>_T�< >�3>Os4�n&Q�}�����=.�{�V�:;-�o>Q�=���>�k =��V>9����=
�u>�n!>-�>2����%>Ph�����G�2>�f">Xw >�o�=7�P�gV�DvB��
4>V�6����<(��Ͼ�=��N>�ۃ;⃩=��L=����s��vZؽ8ʡ����>��i>�z/��g�=��>:Y%>�O�q�����A��ƫ>�?!>#��=R�=r���Q�F�>PR>�_ϽL��=�_�=>��=�����"= h�](>����R���T7C�=��=�j�>�����<>�=~�>�l>�E@>�𔼌HԼ���>�Q&���o>�ٝ>r�>�D>*�[�V���w2>e�6<��q��|r������H;��=�-@>�.�>n�=8��=�;S�>�̼����)��z���̫�&h:Ӫ��zj=�:�=
A)>�b4;�X�>�ښ>������=� ��ɸ=������ϼT�@�>)>���>����E⥽��>�o��Ė�~d=��<k�$�k<�l���Ur>� ���z����]>��h��}K>m�[=��v=���>^r)>��<��=}뽆Fu���&>>s��s#���2-��e<=E> ��������=�^����#�Oi�>’'������x�<�&�>��=�?.v>o��>�$q<�g+��u��X��;�5�?������j�<���`_��Ĵ����f=\V��b*"�4B���L<��I��s�;�e �p:)��C=!�e��j-���4>gf6>,3V=Y���s@�;"�=�"C<�L�<�#t�cB>�@���̈�w����༽���=�-�>=��>Yi>3�=��>ۓ*�SA�=�����H��/>����x8��l�<e�>��=�)�<�`>�>q �=�r��;�=/��>��c��<_>�U�=���g}�>�">�-=��Q!�#��<L��>b4�=zp��� :>E�=�[L>�(2���˽ 2�wp��w{g�>�y�!/���g&�UƸ��#���`�|l�=�6>���=�yƽ&�R=R˽+U���O>�e���v=�6N;�Ƚ�>��>�6>��#>�h>Y��;�D�V�˽��J��7N�=��s~ڼ��X>���p�wJ=�;j��B>yH/>�/����>�H>5�>�_T��&���=`�>5�=ʛZ��Mh��ui=p�z= u(���ҽv�>�[~�o�y=�hM�93�=n+>��_=�ۤ�#�i��x>�(;�>���r����C=7M���&1=.��=13E>�8>��>���_=��9�KE5>,Q =�kq�"�=�������=���u��zj=�vP>���>L��=��-��J��>k>� ����}-o=DO���D�����P
>�BR�O�0>I5�=M��=���<�����<�=�6�������=��>49M�ҝr�h :�J2����n�n�q<��>Ɯ<��� �D��>�%�=�X�>(K1>~A\>f��>��� 懼7>i>'}F>U�;>�����N����U�CG��Ž%l�>a?>}�<�vD>j2�<�p��� >�?>�ρ�R�O>�YR>�1�>>U=#\���2(�פ�=��=���w����Ɇ��`�>Ԧj�0�p>������>�7f���=2�d=5 >�<);=�I>-��J��;4�ش==�!��K_>�տ�G�>o���,���T
*�^�'>R���;^�(,����@�hS>z�L��- >6��=���>�A�X >[慨 �2��ڻ���<-C��c7��>�=>�t=��}�i-]>��=��S>�U�/Jʼ @F={��=X\��R��=Z+��>�11������<�3�>�6�� =I�=h�=�_�=��">�O�>��V>́Q>��0>� �<C�X=aF>Bɱ=zȀ>X�<.H=Tl��w^A=+2�<��ǻ��X���>��z>��>�Nș=nYU;���=��s=��<���� ���1>�}>)�v=��>�o ����<��P=��C�@�ۺ���=ă�<�YF�ı@;P�мG�<��>����Mzͽ�>#lR=L�;�&�>�G<�0ؼ�q���R[�C�4>�� >�s�=M�[=%%>Xt�[}i>��D�``�=�� >̒�<���=��t����; �+,�=�ue>����R���i�=[*����=v��=1�=[�˼R�=�����K"������H���]�,L�=�r�>�K�=� >!��;:_<XJ[�Pą=���/\s>���=��=6^>�*����<�v�vr<>��[>D�G���|���G��6���>���U�+���H�����?>���>�O�=�:S����>R���wR+��$����=�d��)D�<c�\��8 ���=�<"<���.@>���=Q��>�$��_>*�Ͻ#I<�Ȭ<�����5���L�=��=���=���=��b��� ;��;�m�=���]�W=2�#=�Mz�tk�=����D�<����[�=��q=9�O>]�H����<�.*�k�_>�����?Aw�>-����P��g������g��=ȫ|���v<�o�<ղg>%a\�I4�=�V�>I�3>+B\�b�_<"
�="��<�a����=��Y�X��=��=�O4>���<l�e��=���L"��!�K�KP �\���Ӎ�<�O����<�)�=v����d>͋�>��%�?h=K%ɾ�:f=D��=�mн�i��)�~�u<�����Y⽡���A�{]`>� Y��]������H"�H���@�;����]".�!ķ=�\�=���!�=@\��b�V��)��ee��!>>���_
]�⏆���V>NRf>�x�<hU>R+`>�=���Zc�l�<�e�<�;D���>B<�_�����P<UcJ>λ��\�H=ZU�n#`�G�����=Q��=�>����jѸ>.=Qh1���>B3=7^��-�T����`>{��=�)�*�z=@D>�y׽��:��:B��Á��a�����=� ��ބ>�C�>R�;>*Yt�����X/m���k>+\��� M���"=G �=I5�=��=: =(�;��>�C�������6�=Έp�÷�i{ >�p�J�$���)�c�ǽlX->1&�=`� �侲�n:���k>�d�>��C=����L��g�F�?�`��H�=�">A�=hc�>.�>,Ď>� ���;1I> >�&��Ԝ���ƙ=%^�=}�޽�7�p U<��>25�=�}x���E�ڀB��n�<�y����3᡽�$��:�����|\G>Y�ڽ�z�>,c?> ���H>�[G>���c܂��:>G5����L� �:�(>�$5=V�>ň�����=|��=�(�=c��>�e?�h�S=�̮��Ǿ�� � =�� Y=U3�=Y�f=b�T>�o�=;SͼG�@>oc >�7g=�ts;���8œ���;
�=%nv�wQ>&R�>�f,;����5�=�%�=W<I=��J>�M�����<*D���?#�� ��@�x��-�> H*>o���erh>�$�>)��<�jp=��C=�>ުF��+�<p�0=n7������̭��{2>����ڒ�<�>x=���>�B�=�������� >q�/=��>��F�p>� �=}>���;��<ڛk=F��<��3<}�<��p>aS�>�w�F�1<bC(�e�~=7y�=.a�=��1<H`=�71=-�>'oi=*U��.�[�)��>u�սѫ��i�"�#JнqDe=H��='���o��F��4q:>�%>�-��wq����Dk�;b�$=�K����,=O]�=�U�>D�B>��!�Rf!>�P> ���~�&>Bq����Q>�A>锼(�>��=&ό=���=�u޼!���c �?Ƚ�-�>T1�;ێ��D��<$��<��Ƽ�������ؽ��<���,2=9�����E=6�`>�q�=t�=�n��C�R�+��
�>>�f�=�����d=ɪ�=u��=c@S>�o�����H� �l>��H<��2�sߖ>��=��$�C�=�5�=�:<�.��q[==T��W�� _>��g=�V��.�(>!S�=�4�=��+=�a<_7��y��������v�=7O�N�2>@2����>�-�Jy�>@�>8Т=Bܐ�\�=�B�����el��w>#W(>��-=.�#>HM>��}=5L,=lu�e�<�م��[���V*<z��=d���U�=�kȾ$���b���_�=:�H>��_�� ��M����8���E>�Y�=8��=x���)����7"=/����3��ug=I~�=���.������#�$T�<�+��Ue=��<���<�۽׆= ��$��=ȹϽd��#U=p �f���cC���M>6З>e"&>�n�==�=KbM��v��T��[�=�埾��7>���H�N>S��=rh<�Jv<�����;���]"= \��Ž��p=A���%���i>���=]�>8C!>����fp�p��=���sB���`!� 6��ZK>�
��F�_=���<6� �����,��������\�*>����Q�o=6�=�4P<ﶇ=����� >T�����ƽa�L����=c�
�Y����_<?��>Zr�>���=�>�RƼ2�g=ݸ�<D�>e�����>�����Pt<�z�=������=�ź�(���l�>θ�=�?�u�:��̽8��>��>!{^��C�<0�L�t��;��8=��/�[q�<mU<��|>/� >:�>޺�>y�=#O�;��=��\�2��9#�;��8���
�%x�h� �t��>��o=�͉�h��>�X>Op ��ɓ=�۽�þ=��L<A�>_t@�'9>�(���+��4�/�i�au8�� -=�@(=��;Y�����+����cr=����Rki>��Ӿ��*>a/���׽����zb�.�>s���3|;0���ncO� �E>l�G��E��W�J�.+ὴ,�:������=
�R>�Ǘ�R^��-�=��<�΂��s�=�"��q#>�a[<��<M�M���n=$w>��&>�I+��F��J>���=�>Kt�=A�>>��<�yc���{>P�ټ�+e>:�'���ʽ7�K���f�%Pz����<TL<N�=�~��=�'��<AbD= ���3���7�+Є�͂�=�)1;��ѽ��'>�jA>Q.�� �b>�ݕ�\뿾-��>�'�>��)�6�=�=�eѼ�#��)y�-}��=d�=�ZN��> �\���ҽ2=Ž"� >���<h <��T�8�;���ܽ�T>|� �G��]�=,$T���!����>��+<�F�q����A�'��>��]�H=5>"�L>.p�=b�����>4&>���=���=H)������У���m��D�?�1�(=�n�= �M>�` >Ս�>����6���T=�1�>���Ļ���<G�c�S�=��i�ݒY>'�P=T�I�s��K��=R^�=�K�;n���5>+Q�=��'>�� >�qཋ��=���C�����ٽ~!�>S�_�g�ҽ́}�ܭ���1>���a<٭H�`����=��&��m���̇�z�<'IW���p�@6>��[��:���2����Y�,ƺ<5Oz�4$�=��-�����ZX� 7=�8�sݽ�s�<$H|���1���"��½�.ɽϤJ��ga>���<�� ������� ,�<��>)����`�|�{>�b=>�� �Rr��ƅ��O�>�)�<��G��]�=��>\�i>¾��9dO�����&��tD�\�r>��,�>>�箽J��<��,�����>���=޾Ͻ�H�<A�E���T�����RlS�G9������������=�ԽK '=���=�kU�ZA4=Sm\<��;�����6>g��>�y��F��=�����>�<�k(������k��������� ���Z�;)=�V��� >��V<�b�=�~>l$�<�����6,�p>m[H� �;�����d>8�=>��=�ϫ�Q g>�x>��&>J�%�I�>'N;�㘾t.[��k�`�^��i=W\�=3����$=�-��}�>@�1>g��>i��<��@=��4>W ^�Ae���T=ۅz=�r��0�y�!�Nt�>;<��=}��>���=d�<���=��R>" ->*��<��=���=����L|�#�y=�2�<� ��"BL>��J>���=�69>��%= �d�Ad~���>rp�=؏ >��9 �)�L
g>#�ٽ�|x>��==?�<�e=���<*�?��S���l����=93�8 ��˽ZC���'>�̽I>�@�{l>���#��R���-X1=3�
�1�>� A>m!��IW>��=�Ѿ��>��R�yrg>0o>𓍾kj>�).>Sڵ=Ln�<�� >�9B��g����=�݌�*'>��= O=*��=d�b�А<��=t�3>^��=���B�q=�ͻ�����s>�.�>�����>&x�>ף�>�Ŷ=�T�>j�2=�r=��ͽ��W>���=T�>���=��~>J͊�u�_�c�&�� >�"���_,<s$��R ����� ��>�:�=�[J>֟���ȷ����<aK=�ҽ�F=�{<S������3��<�{ľ���w���|��7ӽ/���_�<o.��;�=-C�<������E�t�>[��<����=��Ž��k>Ȗ]>]�m�Gg��;O5>�i=���� D���&>�n�>�(P>Wx���Dٽ��<�Q= �^=�|>��S>�}G���=֒U>�3�=���>i�>k�=�t�����<>�c��Ế$�<>)4D>�r/�d��>^�ż>9X|>�ͽ�f�>�>�`��u�:<\{������P?>�P>AP
���P>�5��"&�-�&>��c�>�x��1����`=�N�����
i=���>f�=��>��<%����=�j�;�� ��\1>��.����<a�\��=M>�f�<Q�ӽq�}�q����=W�C�d=UT5=1�>�3��ng�"���r/��x ��7/��L��X%��Xc�=['������x7�>�Rd��#Y>�������=D�::ͱ<����=b�=�_l��ݿ�v��p���+���;�E��}��}v�a���ez���<�<9=�����ֽb=�5$��OS>$��>��>qԓ<hh��DȽp���j ڽ<�,=�<��q1�I�=��_�><�L�������$<n�f>[z0=H ����=�%�=K(O=6��<E�нy.,<���<O�%>:���~`<�I�=�i}=�!L�$��;n>o+�>�����=V���t��=�n"�V��=XN�=���XJ�=i�ּ2; ><������=�������=��<*=K�=>����J�b�>2V��C��8��
.��2�=�a�=3���?�=@����>�Q��i,b�#r>�/>=��M�6����v]>�6��t�<�l���o>�4�����;��>A;Y>� �>�>��>�&�;�MR��=�>���=�Ľ�ʰ>]μ�b=�#u=�+L�i�x���d~<����q텾(+L��2��9�<�Q�>�̮;8S��o�>��i���*�ȇ=�w�=i�k���d>��8>�u�=S8A�Ɣ�>��(��R�=q*ٽ�s>� 5W=��8��WX>�>�]�t>�ؽ#k���q8����<�f$>bU+=��»�*����h=� Y� y=�eܽmL�q��<��ֽ~�=�BN�B3p>NO��e�=:�=q�#���<����->�A��iֽ�2��]�Y=�駾l��=�q�<��=/3Ž�3�=�ى>w�߽Y7R>20�3!�#~i����=S�<D̻=�>y�5�sl>� �<zS�>��6������>����<W=�J>ؽ�>B�>�8>Ke=̑R���j>� >dom��ω�a`x>�>꽠�v��M��&��=����P쳽�\��Á�<o���c�X>��>N#]=?n�=�"�<�%�$'�=�g�=�>lU�<��������BR=Z��<-ׇ>�٠��a��J4�=z݌=��S>yҥ>�M �eҬ�**"�A�?J<�4*B>�sN>��=�<�/����=<��>ٍ�<+<=v�>�W����=r�>�$F=F�[>q�>���>cgu��W��������˽���=���h�T�R>�;<���=�zýlY�>>EE<?F��y���v���Eh�=��ؼs��y�>��E=�����-�<L\Y>@�>�Cq�&(q>+oy>�:�>p�>����<ђS=�p�AB�>2IF�s�l��t>W��=�]B=k'�>�-�=;� >r��=�E.�F�߽�o�<�`'><衽g�<�䟽���=AY�=Ȧ��6x�=#�=.�H>��H>}�U=7T;��c�\��>|\>B�_=�!>nW>};&>�^������<�ʟ� 40��#>��=���=f/K�s(��gXU>��>���=�k����R=�P�Ƒ��#^�켾Yr���.>�,={��VW��(�A�
�`=Wk�=���
1U�Ke�=)�[=��h=��佚�N=m}���a�=��] >fC���>@�g>=����R���[���0�n(��5=t�3�
d[:<=����=$�7�9�>��>
:��IJ������j>��ǽ��=_'>!���M����=r"��W#� q�p�J>�S������o�;�,���W���iV���">���=�Al�/��;0���=���=&ĸ= ���X���]�;o��;��=́����=U� ;�=J���|0¼����3�`>^O�< �x�S>�y���q���W���b���S<���=�~���
׽o���=�v>d�3��,�<�ٸ=�m�=��=,�.<n2����0> �齝����<�L8�=+, >��p���R������ʼn���>�M�=���m�ܼv2���ȽG�>�#>�[=���0#N�N�>�-�����X��=q:��F�=%9S��v�=U�B>�ca>CaȾ��ܻ���-���e >��ἁ4=���=�����z�=����{�z>��=�ȕ>�Y���=���=x��=4�꼽y�=ZA�=S��=țe=���;�VN>���@ �v��\����6��Y.>��ٽ�RC���N�}�<6�&>�+>\>��3�z>+h =|��=R��=�+;
\����=vmھs���L6%>�=dV4>;���A����+��.����=l0>G�y�k�t��j�<a���� �=�>6>Ͱ�����=���<C��3�>M5�=aL���ԙ�m�X����;'^,>=^�=s�:O>��,�=�=?�>���=HtA���&=�;}�Y�o>Y>ϟ�=�M���o�<,���������;ňH�u���V�`�jzy�k��=h�����-�w��<�zt�n�W���W=�7�� ���˽�s�`|�<�ˁ�/t��'����>�>���� @�2�=�#��=%>UU> ��>,�B���<�ٻ4 �-zo� ���f�<l[=<��p����
z�5h�=��2RF=�=MP=� ��P���D��@[>��{���Q�:� = h�=F#��0���P�>��m�w�Q>6M&�'�,���ҽф?>%���F�>�/=�����w=�\>d(^�qo�� � <�>��H�vTͽ��=�� �_�/�n�
B�� ��=�Պ���9�����9H���g:�q=�9L����=�<��c/�u�뽴� >c4[��x5���}��>�:��8+3�A�*�f'>�%Q��f�=1?�= ?U>��8<Vb�<��<>J`��1>=��=>��=N���Z=~U�<�-�x>ҀN=�������F����=�]�>:<�=�t��?�;}}�o��B�9>ڐD���{=}�K>F��=�C>�b<8��>���>�н�b�=)�`��$���N�=U��>z�x��:G�5> u<��<���=y��{:+�2疽y��I8>�a��㞀��H��f=4>4���g�0��]����$��>`�<Q_�=�#>!�5��?�=�嘼�Zq>��=4i��qS>2_�=a�A=gB��i�?=���<Eꩽ����|�}�C&�l��<G�Q���#>��뽗)�>.@��k����}���e=�v��i�,>b��=��`��q��y I=�!����=>���v�;"��=K �=Wt*>�n �b��=�tٽ2 >�����ښ�2K;��m��ŝ�E�,�21>�� >� :ʦ*�]n>6� �V�
>!7<��'��~:�Y��� `��$�<eR��C/>�2�i�����>;�-=���>}d�<���;����e6��V>� �=;U��6��$o�����z�>�o?=�� ����=<��=�jX>_�mQ=���V>�k*>�?�=���#j>4�D>��N>�8�rָ����=��>��L�J>�۳����>?� �f� ><��<��><��=".�X|���Y��3�<�[¾�Sk�M�f��G�<避>����K���q����|���oZ�~@
=�g9>�����<xh<�� >X_.>�>@`->�s�>�����ὼ�>�A>��s�1v=$��́��E'�=¯�=$�������\�\���,>�0 >f��?j��q%�j�+���+=�:D<ү=�V�=r�x>�|���`�=( ]�l�#���������ep��NŽ�">�N�<Ņg=�o>Dl�)�>G�N>��˻� ��<�=��E�hW<:߫e���G�u�=���="=>�-)�>� S>���<{���Sg>��[�V �=��:��;�=�vL��S>gZ�3v$��������=��#>�!M� �}����=�o�>�UY>�Q��R=��󽨫=*�f�/��=��=�K�Y���=�����E>N�]<���>�Q���r�=7x���W�G]�-}���=�d`C���F�\����n>�hX��@�=���gR)>���;�o�Y�E��i.����� ��R�;���p;~��I'=�>>�N>�ML>�=�Z�Ѓ.��xE>�j=��=��Ľ`��<ar����E�gj >��W��#O��=н��=¸�=�7��Zqa�گ�Bگ>�����> ��=�-(=�І>Ah>D�v>�2��]��[=2hB�zH�����=A�l=� ��Z��=���7s��\�l>�Zo=Jү=��e�5M鼾� >�x=����>N�P>�$>>mj����}��=��f>U{5=��>�i<�?|�����>�U���ͽ�v>A=�=O���r�<ד��Y7��Ӊ =hߨ�`��R'x>ۯ�=�a7>�@�� �<�����ĺ�Ϭ����=<4(>�>��>��e>[�6�>����d����Y��C>�!��ߥ�>�3d�ㇽI�>�$�>�/�=�d�����e[�=��-�_�*�����_-�=�>�<�F<�a����>���=���ykV���<7[�׿B>�c�;�?y���������>�b?=�=A>�W{�|���򅾮ԍ>�J�=`�[�� �mz1�_��>�">�g���i�����=E��>kX<��>�ȩ���Z>��)�������"�D��=L��=�P>����4��� �ǽ�Dc�?&����{>g9��ĽY�~�����><��=~�>A�>y1�<�)�<q�.��������l�==,́���)<�4R�f���'*K���(��&�<k�Q��Ţ>RY��S0�;��>p���� ۻ���=�n̽��<��>];���jC��Щ�T*�<џ=Te�="��=��9>�M�=��н���<O�8���N���M��h�=�cU=�m�=3���.v��~S��%">�V$���>��`�?���t���:���h��?S���{��LûINj=���c�߻�U�� `>=�$��)�>RTJ>���<?�"p>���=�� ?xƑ���v<r�J=���=��=܁��ٞ�=����H��U�>\�r>��f=W7#��������R*R�2ʽ]�>�P�=���]�)<s�E�.���Y��<��<�8N��ǸG��_���]�<�c��2׽b>�>!|޻�|�d���Q8>��"�R!���w���<�dp�RH'=�2�=H��=}��\s������|�>2�f>w>��#>��D=ʴ>��J>�޹�Y��=kZ�����G1�މ$��WC>*o�>o�"=\�.����=E�����<��3�)ݽ��Ӽ �5�ql'�aM> �H����=�X>�&c>����`�
��3>2RA����=k����V=��=�����M���W��xŽc|!=� ?�鈗�6;�Z։=\V�@E?���Q��=�$�ʏļ��0>:��=}�y�H�����>ji�=�j��hq��B��2�>.#��d>,Cd�4&5�Sij�]�� *_��<�=7kd�+3>
x>r>Pƺ=�ʓ=��*>�ۃ>��99
bI��AA����<��߽'H��g�=�t�=R�#>;��>�;r�$>~V�=I/ֽ��6<ʅI���9� �.��>��<��=fz ���\=��#=��,��`g<z�������a"��Ս=�?��»�f"��w8>{2 >�xe���=�6�<��=FN!�^��=�ۖ�")>�s=�.>[К�c�=Π�=n�w���<w1�=X]j>�$���O�=��I���>����ڹ<~���[=!>�)�HҽT�*=��}}��ۦ=�]�=�Rw>�s��L�9�/�i��;M=`��$R�`y=���<�s�B5�=���=��?����=�Z�<W,����O>�v_��uT=��,<�>�\��j��=/���=b>E�̼�A>�XcR=��{<}g=|w��܈6=����ɼ�p����l���M>����z���#��@W= �½$���h�n*G=s��<}�h=�9��[����/�=��(>b��= ��=�B�����=��<�E=oXq;�,>3��k��P �/�c�|&�;彟��)ҽm"=����҄׼QM ���%>�4H��8+��2�;
N=�����v1=w˯<��>�N-����=����_gB=�Y��]�7����=���^S���Ž��!�g�ݻ�d�c�r>�w;>1;�=is̽���=�Q:�!|��\�/�r'Ž^� >6���mD=D� ���ɽX��VWɽS��=�\>f�����V>�_�=�<��>{9��"��=��\����=0hd>Ǯ=�c>��ʽKz+��Wl<��!}�=�)��X >t2>YxA��b��i�;;M�>���=}�>�}>n��=E�Ax�<Ȝ�K�=[d���!�=Շ�� �<=�0>��\<�:�� �����|����o�~#�=��=�r��鰴>]5=-o6=WZe=c
�>li>�R>���=],�=��=z�B=�e'>�Ғ���Y>Fr���5>4A�;T|@=���=H�C>��7=;:>�̊= f=�M�;��]>�Gw�� �=��>��!> �4=��_�[����o�;��F��\���>��<|e>��>�B�>�����<o� ;{����!�</a>��;���C�6�*�eU�=
֍��w�<bw>���=�>w4>,�ý�����&>�G��ki�X(��g^�=K��=�Մ=2|���Z�;�O�=���=q��L���Q��<�7�:�?��S���;X~���s�ZR ��N�Dr���P> q<��d:}1!>!5����^�C���Bz>6�뽊�<E����>�-�=�iB>�Xm=�2<>Bܶ��+a>�/#���< @/>��ܽ�_%���t� &�9G�n�=���=���=i[��20�����$��Ѫ���+�=%��<x �`���P�|�#���?=ko����X��:��6:��Q$��(�=)F�=��w��v���d>G&=�̙�Y��sА��tt���۽�`��M���?'��#=���=f���@k[�}c�> �>l=���V���@��X7���Jn����>"�> ���Q�>0to��t�=nK><������8���YG�2��ѳ�>��B>��>}�><I�k<��߽J̰�b��=��r�t����U��yF�D��=Ή>�|c�֔ >�/5�S%�;�~�=z�4�\��o����r���2=��I��i �C���"�����=n��<iO:>/�����U��m<��_=�������MS�=��㽸��;"u����ǽ� ���y>��T<~�<kT���2�=z�E:{r��*�=~�A���<Ў���7�X��\Ə<5���Y�z� ��=ݵ�=imԽ��<�C��T���a>-q���<%�g>L ݽQ�=^����`�=$
���U2>�{��G K=�:-��W���=��>�<��>���=Ñ���6���s��[=�iM>�~n���N���==�������>����ˑS������[<F�Ǽ+@��@r:>�Y|=���<0 M��T@=:ս)\><YM�8�0��HQ<����@�d>��#��X=��W>�4�<&��7�Q=k��>���=U��=a��=o;���a�=�'��^4)��<������=����8�=�>��O>vË<>:�>o�����E��O�="AȽ����Z̀=F�<��ѥ�:�E����>���=����Ddc>�ٶ���=����q�=1�Q���
���)>�W���
���%�=�6�=+��T6���C����}��#�4I��O��>9�W=��?�:ꚾ9;��-A\>Ĉ�=��{>��׼�b>�8�=�̐=��>��;,�0��VA�[�=����U�@�_���/=*>G[=:oX=�sh�s�k���>E0O=�>�_�����=�M����M�ڄ�=4[��_�z���@��M:"���->dZM=�1-�L�Խ���=4��<C�>m@>��i=�J4<H�3=�h=[��>�\H=�?�>�M��{>��~=���>_�!>� /�x�m>�C�=_j>=ک=M��<��(<�裼X񒽗�H�q��5#�=aB�=;36>ûL>���>��2>�66>��5>>�ؽ�Q�>9�R�[����p�C5w>տN=� >��=��q=_>��lE=;{Q;eI��@�==5�>Ϭ<>��&�����<�o1>xI1> �<i��=yS7��I�=?���&�ݽ��_<�~�=��m>�ң�!�˼���;=
>`]>�#<�lԽ{�>�i�>>�Z�C>Rp>h�=�.;yLj��MC=#�>NF>��t�_��ђ���>5Q">n��U\1<s>�B�>���=���=��ǽ ;�=��"���#��N��O�b>+}��am�=��6�o�X��m>� >X�.���=Y��>��>(e �Q�T=h1">]���+�\|ּr�{�D�W>X7e>қW�������=]u�<P�>(�=~fp�ی�=I�{�w�r�_���N_���?����B�۽T�G��Ɍ�8���`���ƾ��=�<��p� ��� �=�t�<��ҽ[��=��Y=�F�� ���,�e�C�����2���R<)��=�S6�䶗�dW��ab�$k��E�=���=P���4-f>�|u=��E>ɕQ�렋�&�=b�<V��Į-��E�=1��礌=�G˽&���U��Fܻ.�&=��K>��g���:>=����0=- >Κ'�80�|zo=~=�ҽ�K��:ټ1!J> 3{>�ԍ��3��8�<��=!�J���u=��F< a�<<��=�)>C>ы�];�<6.�=�@
= �s�EQ׼* �����=V3��=`��4����*�� ��Y�½) �<�>UQ��8�־0y���S\>B2=܀z>�j*>��x>��=V����ҽ�R ��T >�½�*>�s�=-������8V�>��= A>0E1=(� >u1^>I���>�Uh>�C<=� ̽��<2��<=L�=U)��=}�l�=�"���p�>~�W�]�X�M�m=�Hi<_�����=S%��� !=W�ǽ��~>���>�[�=c��=-��<[�=c�3���I> Z�=Y�h�r�L����;Sڊ;�(=)�r>��E>�;�Bt��=H��T� ���L>=�d�L�<�����A>� �=9��=p�"��L�>�N�=C{#����<�1>�~���)�=�w�=_�#��&Խ�s=4F9�>�N��@)=5�%�Q�ּ��R�̟[>�`T�pl�<��=� �=�)f�>G>m�Q>LڼM�>�������=�;ή�=�y��+�'>6$>\��F�n=��H� ��;64� ɤ>��<}���]�>��ٽYO2>�d��=��0>���=^$��8�<�Y��#>���fr�� >��>�v�=��@>a/�=��̽k2>UF���ͼ=��=��X�:�]<��^�*�L={�>��H�>_!5�?H�>���=߂�=��:E��=�m�iL>9j�=�P��dgo>��4��vȼ�2ż$�v>x�>܈>R��=je*=ϬK��ua<�:�=I>�nC>�_-�����jz>:����B>�j�=����SM�R4�=*��=�� <�n�=h�x��=0>�)>�_u=}��=k�=纂=���>0����p>'6��R8��S.>� �=�/c��e�<������S����<i]<�c >c�,�'��5ն<d�c>2�;>��f��m�<�bн~��������N,�ٯ��D�>�>���v�o�=��o=���=�dh=�38>�t<�2 �Ug�<�4����>�g<��;y�<ȰQ=��=ϰI>���=�
|���=ܛr�;z�>�5!���;���=���=.�">Q�Q��Ѭ<��+>�?<�'�>�����!��jC�=ܪn=�?�=l�<<-@��?N>��Z>�l�=.��=���T��=<����o>;.��^z@=�h�+쎾�><X�>� >��;��<�ԋ=�t�<0�e>yz�={Rk<�>$�_y>d8d�/�����m>2��=Pg=Tꀽ�O���4<�w�>̙����=�q6������ĭ�f�P��
�rp�>Ј��1�>fxݽ8����+��Z�<�H�=�]�:1i��젽(�ʼ��}:UI��Y�=?�M�3��<�/�=��=>�*�;����uѾ 6�ʍ?����=G�d�x!���1i���(>���oV���ZG�C�=�i��GH>MXg>?i5����>�� �d�=J=VN���Jg>0���_���ʼ=��->~y>��ǻ���:���h�H�3>5x�=��μ߁#=s:v���ڽ�o��x��O�>����p뻽מԽj�1�Z苼��߾�2�=��=��'>%��>�4��ڶq9�{����Q���<6�>�h�}���-᭽r� >��<�҂��Mv�<�����Ƚ{�}<
<���� x�=��]>�q�='g�=^�9�{Mk>/�/>eO�=YXȽt�x�?ʼn� ����:۽@�->��i=�U)>������>q�'=�F���Z=�r�=~ر��r����u���a�����o�>$ ��rK����,>En�����=t�>�6=��>ᛍ=��;>ɾl>���=��&�+������;��<̙�=X�<~�<Y����B> �>Z@���T�=���=���Fn��� l�m� ��7"�����}I���>��!�UP�<���=�K1>�o�=�^>� �84;>��<� �KnR>y<`� l �����bU��X.>�&>��<>s�>��b>NU =��A��*F=�J����� #��/�=��='�?�׬��(>4\�̠�=�����A����=C�T���Q>��x=
�= �(>�Vܽ��3���ӽ %;>I;н��P>t}>�^��v@��E������39�<6��=��!>��'�$�>���%�Rr7=_�=p���%�=�i�<�R���g<�hp���> ,�>ؽ�>�$�;3W�/c>�*�����<�0���J��b�~>d=�t�>�w>:C�>I��=���N�ݽj1=��Z=~�l���ԽUm���w >I��=']8�������׽㍓>2,;>Y��������<ԁǽ�8���L\����=�K�=�U^=�3=�샾C��O��/�f=ᵽ�Bo>ĵ>���qj�� Z�>|���3`����>0/��쁾>�=>Y�����j�N�lq�ۓ���9=v=~�b��EV��+>�ҍ>ކo>��=q�>mǷ�,񮽉B�;z�����=��L��>ߜ��9o>��D>3S��������[��g��N >��w��-�=��<����
8� �Ҽ�+����>��=���jQ��7��T�*>Sϋ>���E����޽Χ�=<.~>�;��޽�9��S��~�ż<¼O�o=U�>S[�>? ����=XXK>;2/�y�U��cR=>qE��)�>}u�>i�>���>��m_=:��O��=i]���מ>�u>�[�f� =��1��3W>��������y=И?>vc�=� ��t�:>�:Y=�p�B�<�>43>�函(MW>K�̽��ٽp�1���H=��+��.S>7��9��=��-> ���䗼�C=��=W G> �X>G�=
��>�s�=A����6>#���u�E���>޽�>��='Ӽ���=o ��m��;�L�>T#[>���#�= ����=>B9�=5�j=��q>[�2���=�)��1����W=by?��~\<k�����׬�V�d�sC�>ϲ��j��^1_=�%u��(�=Uf�cFo�`J>;�+��H`=�z>�8= �����<`΂����=��=Q�p��E�;7m�<�,%����j&K�m �N�;>�Y�),��~$W�nl���I�*q��;>�d>h��;M�Q������-���.>l�>HE��s�O�_��=���.;���Y�=�����=���<��%�
��=8�A>Ԉ[���9�N�i���O����=�L�=i�νl��=���<So>=!b�^�M��,8��g>�K���T<@�=b>�=��K>8� ��_9����=��j��F3>pYɽ]豽
�s=�u�=i��=���Q�=>�6>C� �*��=�^ �Z�=-!���,�R j�յ佹v����C��k��E���!��{ =��<�
o�@+���u��O���Wq=�8ռ:/���U>�x��;[��1~��U>���S�ǽ"(s>��<�ス�{ʽ�Ŋ=ǝ1�?��>'��<���<�P�)��^��=i=���>��c�?>���<|���������>9��>��Q���>6dM��MP>��=���=�\!>��S=P����D�
>�n��s��P�=���) ��2��<U�WJ0�}&T��8C� ᘽ��N>�q�>�&D�X�|>„X>��K=l��Ԕ�5�ĽR�D��#E>*Q>�;<ǀ*>$p6�A
���>�> �>��ө���9��y>��E>ӌ���D�>��5>���=��0>��մ1>D��=g}K=�}���=��e��$s=Q�&��?���&>W�8>���= ��'#;=��->W;>=��˽�a�����>�9�Pi���u��35�{p=��>T��=se�Cݽ}� ��� =�9�;^u/�� ��U7b>l{=�ʽO���W�e>���<%��=���B]���=������7d4>��R�oԽ�Ș< �d>�R�s �>��=3V>�����ĽL`�=�r|=���>̵���~�>�*��Nŗ�V�=��O���>�'<=A�e>�./�ڷM=���<,#J<���>Iշ�K4>��X�2D'�x�g>����~掽�-�<���=��s;��:=>
��x(>���JR^>-J=��\=��: I�=C����>�����W�l�
�h�}�������Z=�� ��~;�j�?��p�<��>]*Ƽ��.>Cļ��t> 6�?Ȇ=ܣf>���<��w�=�<9��Z#��Si>���=�Y���g>|�$>�f���ټl��>��ռ��[=�-�����s�`��k,=���<�X�=m��<)<=>�[�m`{>��)�=ɗ=�J�洃���S>��
�TG=�����o�=T�/=D"�����l�\����=�&=d�N�c��=�7��l�>��>R��=�0���ۺ�n��A �_=���=+�,>:s;���-��P>!^/>�@�>SD�>�[��(�9��.>� �9n�<+�z��q��x�=>��CF׾$>���=k >=�t�'a�<�C>jE�>��`��/�������q�=�B��R�>>g���#���Ώf��=��i>���VdD=*Uk�I �=�+>P��>ч`��/>�@�|�>;U�=[��=�����}%�?��=�o� lB>H&!���%�Ɵ�U#<�7S=�T>ė4>6>r�;�{� ���۽�Ҧ=|�8=��*�0a ���ǽ�l �w�3>Ա0�ò��'�I>�J;�Cq>Ml ���]�l���i�=�l=�rr=
{ <>���>
Y�<N����-��h��i��>,I>$n��4#��^c���>�������=����ӝ=�y>�`���b<>��6�_��ZDv>�>��:��!��"��<�N�A;V=B����d�>�ex��19>l��=]����rۼ�SE�=j�� �B>q �<�t/>�E��y��H �Ϻ5�fq.���=`c�<n��^���(�>�#K�:]K�� ��vF��w1� Y�~�<��n�=N����=}�=v��������SҼ��4>�3�x�2<��=t��< $��'���:>�q�=�2>r�$= =I<�����%�=���vב�Z�)���>u�������0;=� ����= &���׼���*8�>LU.�R�A�<��>�3�=o���<,� {����a>�b0���+>!���(>�>�t$����2�E<��>�#�={��>��=6D�=/��~ C=t�<[���;`2>��=�>>�������s>c�d��F��t=�=��>p1�r��>�h���B>�(�ܷx>���=ގԺS�<�Gl=�f=%ṽ�G��4����=_��<���=u>O�J���O>Zp�> �m>D-�=���Y=��ʽ�ų��Gg�>%>�,��d8>SN>�
I���}����>iYB=��!=���<���sP��M =���=O����½ �=՛=ކ�=W������"W<�^�<EC�=ϼB>�HN���<E�z>�b�<e\_��uB>1.�>�d���g<N4����<��=������^��z�;ӠE=^P>����䁦����> ��>�M���?�=��!��p�<w�;}��=U83�a�;��>�М=��ӽ,�4�[�l>��1>@�V����<A�;=����b�6>�=>��=�'���(��%>J�c��c�>����O��#(��Z�=1�<�2�ڽg�<w�=c�K���F�JQD>'��o=�o��GV�;��@>�⵽� ��9l>�����Q��-�p����ˠ<Q�& �"�=�� <�~���/�bՉ=&�'>4(=�c��JA�jRH�/�8=Ǖ�;��z��o��)��=pr=��=y-V��3>�V�>�D�>G�̽�z�<�0�w��>62�>Ü��.��=i��� �> F��ۯ��"��> La=I>������ܱ�< ��;��0>��<>Q�=>8�N>�� >2���K�ۼ�-<=C2�=�5I>�-�=M�)�dwo���<�����c=6A>�x�أ �t�����d������G�y�=��Ž��.A{>E>�m=v������=H����C�=��>�Ѽ�fN=��I���D����9>����y,�=�"P���=�Vd��.O�Kw�=y5�-8>���>Ւ>���>���=͡���ǔ>�݆��r�=��<<��='">ƲQ�{����l1>$���qT��`=�)�%z�=�Ϭ>|6ͼ�r(�5��!|�=���
=f���嚽#�>�� �M���M<�Hk=>��>w=V�=�U�����k�=9�s=d�.��+=/��>
��� ����>�3ʄ���׽�3�tz>���<�ɔ�����|6=:��=�J���,��u��\�>� �S,���|��Ὲ��K �;^�<�羽hj2��7R=4Nq�x��=�۲���= ��<���=*}������c�彑l>G�6��g.��lq<���<��1�����&������=]q�=�5�=/�)���:��ړ�O�o>(�s>a�=6,"���<Ƣa>T�
�5 ��Rں=��u>��̼�� �����툽`S���=��=b圽l�h>���� ��!��=ɒ��g�=�}=ԯ#=�S>�=p=� ��?9>�T�>�$V>v� >���>��ƽ�S��G��<�$>�p,:
:/�eo�<>y���V�X���t>:�s=�6w�M ��PO���7B>�P�=�}�=򐊽�:>�>k����E�J=�<�?,>y�I=sŊ=�[�=CP�2(��`��=w|��<V~�<*��rh�=pB���~��ܨ̽L�����>��=
=(z��.�
��s�����=xUZ=+u���f����=��V>��G�?�=-�>ԃ�>�1>'�(=w��=�M �#򦽵p>�U��j>���=ׯ�;�Ӗ>Σ� �l>Ȅ�<��'�(��>YP'�9
�N�<!ې�_�9��x>�5׼�i��%�=Y��=�>��=��#>q{ཆ�T�Q$i>�F>>i=*;>��>h�<璂��b�r�Ⱦ 鐾`�Լ��(;$耾z���siu>��> ���|4�J<�:� >r�)>��T<���®s= ��nz�=�ٽ���;�����0>�f�>��1������>2/��������؉&�����,=$
Q>���<��=�nS�ۋ�� �=�J�=Jt �����\���۽L n�T�u<BH:=L�꽜�3>�팾���<<��=*�!=v�<����)�8�z�w;6�_��܅=�M���LG����=�X;��ɇ�g����g��o
��D�=I5>Mc���/��:���=�E�=���=���ˍ� z�r�-����<+.��1��<�[ >��z�*� �<�'>�X<>#7D��;>�C�<>��>%w:=���<<%�< q���>��ʽf���f�=F�=i�0>��>��>(�����X<�`�=я���)r���%�n) ���U�I������>81н}�h�WS>0��<o�]�ÄG=�6��K�=-�<��* �h�2>`ɂ=F��=��4=s!�=�1>�K>�P���]�=�����Y�=P�,<�\V�#������T�=dn���o�=�?
�'�����>��R_���лv�q-g�b�p�X�>DK$�ߚ�=��=�]�=
�(���!=%-8>���=����I���n>�#�;|̽��>�TR>0���@�,�{��=�y >��0>��`��=�|G�5��D�>�_ݽ9�=�`#>�Ͻ=�e�L��՗_���}>�O��q�;�>C�B>�u>fv�� Gd>���;�Ov�!> =���>�k\=.�>�����Ľ�iоP��=�H ��w�=:a�=0�w��`v>�m��5�FQ���=B<J�o�IC�=�=�<[�S>#%�=x�;��r����潽� =�ҽ�X�=�4��MM�����`k>;\5�!��<=��=��O>i:&>���`T�� ,����q=#P켷��=Zz��)z>ލ=7�=�(%>c�=s̒�����+��]1=�\Ž!��>����\>�ƭ�B�y�!>��$>�?3=��=��,>
���)姽����Zv=��?,�Ƞ ��6B����=�M,>�҈�#�E�,+��G��i+��Y>5�>�j�[��<�d�������=`��;c&>>�����=�iѻhT���"�=���=cژ<���=�Q �И>�sb>�}>c��~u=��]�S��=M�7=��D=6I>��6�:��uM[>\�7��U�>"<ߊ���>�-=`�?��r����x>�=����o>� s���C=؟�='L���&�Ɖ\>a�7�C &>j͎=ub?=׾���Nk>�#= ұ=RW��*�>��3>�~>�En>��;,�c>�8X=m">�c�=�:7=g��޽�>�Q>��V>d�p=�`y<|YF�4F�>��D>ug�=��=:��=��j�w����;y�I>f]�>۔0>�.t<oMŻ��/������9��/=���=䀩=� �<C�*=qӁ<�5�!���Xҽh�C�4�O�-�)���I�LJH��R�>({�="b�>�ɽ�Q>-S�<Q.�������=��b�B��=�ʽ�ꔻS�(_�=�E���<�>l���kih<��&=N�����ż��Q�� >��s���-B��]=�xe>�0�S�=7j�W��=% ��Ӎ=��=�(J=Bq��~Τ=�'�>n/"<�K��5׀�n�D>�V>�2�sc��-#<��l�;�=�H =>�ؽ|D$>�.�>�H>������d��槭>�t�}q��!Q���*��3</�Z�|����z��|&����=-.6�V�Žow�<-O^��j=�Qp�� >񋉼UAս�%���*w�Z}�<E�]���>�#0>q}�SY6=闁�)�%���}<*�#=,y�<�b�=b�> EA�:�ս�" �91�>HN�>H�����s��hZ��b@���;>�����J���=?�=�〼*�?#���Ȣ��BݽOl}>����t����\U����<�:M=G$ ��O���[>R#���c��cv��֌�>@�/>�n��O"��6�=�:>~�}���v�7)�<H�;
�;����b�d��΢=�T<�Uh��\��3�<>�0>#���e�r=�d�C��<ic���=�r��%+};W:�>5�=�=0���ٻl���;ѻ�0,������?=n<ե����=ԍ��.�>���A E�3ֲ����=�4龶0��}�<>�~=>~{�<��N=@0M�(,=�JѾ��#�d��:��=����L����=���<)�K���ؽ͋=�|��R�u㟾+B=��O=�`#�|�>������=��W��9�yD����(>��۽��&>�i�=�I:>Q(0������M���!�����m
�$#>�N齈+b=�½˨t��K��^v=_�ĺj��x�=)�T��(B�i��=�h��\��>OMY>�^��z����E���ƽE� ��V�t� >i]T�0@^=m���e�O>�g����$�>Jl�~:{�A�>�1�=�3t��W>q��`=[�?>Z����=��X��s">��$�m�R�"���C�
q�>Iz�> ��<����VU����>@�-��v�M �<is�<Z(��̬=-�����=�F5>��(>��5>��h>&�o��b=����Ν<�VF� ��@0�=�b�=�9ͽNf!��,>n\�>-|}��x�=>���>�g���?�=�>JA��9�=�t�[J���S�=~u�>�=7Ѕ�� >B�����z�-�/>O��=�r>�̡=�W�����=��Q�um2���]�q/>� �=����Ͽ<"#F�Ͷ�=�+>U�2=�z�/�>��&=��>$>��ؽpJ����>�����F=1��p��"-5<��4�� ��a���0T=kN����Ͼ54h=Sހ>.P6>B˄=&4��{��bٔ=L/�;�_��}��>��<��K������:+@>D�>;k"����\>�Þ�����W>��=d��=�5�����=�4���;� a>�=��<12���qu�1Fi�3<����)l�=νڽ �>��!>Ф��G� ��>�o >��}���4��ӽc��7Iʼd�>���=�3 >z��9�*>��^=q>�i>���=|�C���"�~ټ=�<�vsv=q�r���K�|�6<
� �����+�{>��|=��[>��=���� �=h�P��V�=�=h��.=�^��-����\�wO�عu���>;��=
���A=�P�>/{��X�PL��<R���V=x���U���l��=�� ��(�=u��=7��=4�ͼ�9�=s���> q�=K�<BI��k�����=WQ�=�� ����=1��� V�=���s
�>5�z�=��^>f�>��>�U7��[6����=z6�=��w��|��tpc�Z}�������w;�I\�>W��=��>!X���H�5�>�R���1>N6>���=�Q�����
�=������=9A�;Q > �$���?>w�M���a;O���(qĽl�۽��W<Z�=��*>0�P>'L =��ĽlS�=z�p�)L|>��˽2p>׍�<�=>0=�=� @>Xb�� �=�2�WH����>\j�����<����v�<��=��=����u�M>�i=o!߾�΍�T䙼�~=�
[���߽� �;̉��l<}�n�콤��� ��/�=Z��>`�#�ּ���=����z��KR*���<�.=kM�=�%�7Wr��e�=�c=e��=I+��`�k���8��e>�+� D-�.�,���l=�dz>�1=�,�>LJ���ɉ��s>�~�<��B�/>BQ7>� 罰���%�.���^�W����ɾ��= ;>6��-�<xՍ:�������Î>�u*��=+�7=�W=&$��\ꐽ���o�>�X�=<1�>�4O�E�B>7K�;i>�>�D{�/x�<Dq���W=�暽��=��7�P=�r�=Hz�����""=��{>���=��=(�Z�,�ͽ4=�a
��Ѝ��Q��97�=�x轊㠼
����V>a�!��ɤ���=vg�=���=��k��"��*v#>��U=yA>�DO=l������<l�8��=]|��S�S;�{��Ul=�:!=\���J��=�@�2U%�0��=���>��a����=O�->"������=Å>5_�=F�#>,�lQ����2��>�=<��>�Լ���=/�����>o��=cY'�*#&>�ƽș���֣��|\>Q�|>ܵ_=�U�jg=T2w���O��9?F��=�~c��e�>ݯ=-{?�
��=��P�NC}=���<�f�w�)�&�Ѽ�T�>Z'|�kԅ�:��=U�H>?���aڊ>X��<Cr>��>i->�ǰ<#�>kF�=���<��y>�G����������oJ=<�>/A(=W}�=a�b� �$=Jf&=;��=Q��=R�%� /I>"�ƽ��V=�8���_=�
>��p;�yg>I�X�xe>��۽AV�=�����7�>�=� �=gQ ��8!�8އ>a6,�K�?<
�->O�*>3�>���=4�<\�Ѽ
X=z���**>�z;�� ��S>���=�!H<p�E>�#4>w�|<�|�=s������>Z1�>�Ů����>*��B-network_body.linear_encoder.seq_layers.2.biasJ��<gA=��\:��+==0w��#B=�×;��<�C�;��<p=Q���7�ǻ\3=@;=��d��||�S'׼b��<<��=�<�����<�P�=��P<L�U<s��<����C�=�������<h;F=�L�<��<�h=�|.=fF<����<vm>=��==�*�<��0=��S�?s=k� =O�`=9I<��&=~Z�]}
�' C=�c��v����%��T3��K�����Eh=M��:/�[���&=$�<�6=o�H�fB�=�)�:9h�<��8<RO�:�|;=o�A=
a<=�/��~�`��B��'p�=�v�<�;7��5�<��==��6=��=�X�o�<��i<�ߢ;����[�/<�� <+��;96�<po=�w�;R|=9a��>�NZ��{p�S�>=��Z=��<@����g=���\m=�F�=�Q�<B=|mۼ���;��׼� =���<���<8y=�p�<��N�hŐ=�{�<-�d=�ԭ<px=���;���<�~������=�=�o<*����B/network_body.linear_encoder.seq_layers.2.weightJ���9��%A=02�<���=C�=)2=�I^� ɟ=��p��=� �=i6���\$�w.:��/���>���=C'��O��=c�}=���=8��=e�=��s>w�D>�����t��ߢ���V�=2��=��>��=ϻ���+>$� ���7>NQ=�ޚw=�I�=ȶ=ga�=i�=B�A={��;�����������<�8�=�����ǽ�Tѽ�2>�{0< �a�y�8�\�4�{����v<�3���[�<�$�<��6��,��b=�"�������O�=V�>v�>>x���8>kY>�Q�<u�=5��(CQ��/W= ��X��=/<ļ�pq<U�::�>��<�1���*��z�==w/���Ty=��g���>�!��񨢽�x>�@x=��>�e���4��<�;<�%1<�%���V�[���>>]'x=�̀<,L�����<��Ľ���=}?��Gf6����=�.�=�=b�=�do�N��=�>k_�=��<��,=8_��!��5Q>�O�ئ�
����j>nZϽ� 0�&�>��a>%�����=��
�h�R=I�=p���@x�gl��Փ���W >\<�ᵼq�+�f�I>>�� ��O�r=�|�ƀC��햽p���X�p;v-�=Zf)�m����< c�
�B����=n�<�Cǽ�� =n�2�8YR��+������]��)#>L>H@�=�Q/=ن�=�Ȉ���<w��<w��<��\<Vv>IT��mgp��̃��]����<��<� ������N+�T�>Q(�;��?=��=�D
>$6!�$Hp=Э�<����=!�p=�/̽�A�=�-�����=N�M�cۂ����=^S��IS�=�2���)�{j=D!�;� ����I�.~<Y=COL=�4�<?�����>= H=����l�1�М^=Ul4�L����|E<.R��U��;h>����K����J={"=�� =�@��@ػ8�=��@�҂=5=<� <]��=��0>�s�<l�νn�b�Cʽ����c��=�4<pg���J�=� ���<�=�TZ=�p<d��=��5��#����2>~i<t"/�W-�<�H7����=Q�����<�A�:��ҼRL.=R=Xk >��=��=���=�k=8��=��D�5E��_^,=U�:�2~=H�ؽF�V�]Z*>��'�o �t >����xv����<v�d=.��Q���_�5����=�N>��s��\2��r`=�y����z���z��S]O��`>>"�x��=�������U]V<�� >P[�=,ۚ=�`��?Sv=�@=^-*���@>�s��#�нѮ��k�=:%�;�xe�]1p=VOy=�D��@H=L^&>p ߽T�<;�m��� �I�=��$=���;�[>�����:��<],]<a;>T�=ܯ�;�ʼn�J��=M�A=� ���R�N" ���:=d� <J=�'=x {��<�,
<#��=�V߼b�L���b=�A����&$< $���u���@<g \�G��;f�����=ү8���Խ.�̽B������<�EV;�)�c7��&7�;�; 5m;e o>&�f=����O��=�$�=톡< �>/r>���ZA=�]�� >e�Z�����`��4�=[�t=�ӏ��D8>�-1=Љ���Kf;�kc;ؗ1���=.��> �O<�N�=����i?x=�MP�J,g�o�O��&9>'B���*1>i�-�j�=gg<��H�<1��.�����R��t�=�*�=t.ʽ�[��;9�=�������^%]>��Ǽ�^�y���2c��*��U¼g���F;=N�{��H8���;�8��������/��=
8B=�p�0�)�A�x�#��>XJ�=0
<� �=�ܼ�U�����f��;L�=�
����x�>;\3=�4q=�q���d��s��=N�6>:@��R���K!B>���gr3>8׽�vj���l�f2��Pb�w�{�[;�g��O�;]M�����='�����P=F�S����;(�����]����<Y,R��z<�Y̽o��=�@���= H�?� >!����p<�d�=ܴz=f�{=�s����=�d^o=��@��\�����m �= '5��Ŭ=)Wb�����.31����=���=���}*�=���0 Q����=�1�<���=�o�����[_�=k�=h��6{�=�R H���'��E�<+�.�z@��z�<�W<�\H�:u��=�oW���ν+y�<��v�l��.1��K>iE-����� >�]��/��M%�->Q<�^���<=��=��C>��=~O���k�����8N�3_p>J�<��E�+�_�% �� ��=3�c=��[�� }>|S�=j�;��Y;�Y�<�W�=�ja= e=���=�a��+J>�GX�Lӧ=��`��^��s ���f,<}T#� � >�Rg:����ҹ�<��J�/�=�)��h޻ro��=�=��<ʺ=�ҋ=�Ĵ<D�n;e�!>*�=���=� 9��=3�8���%��=H���ŽÖ<[�����=�?�=�w=>�)=6����G�;�78=:�)=��j�|k�YE�=�L{�e/U�Nc�;����$=E����kK<AD$>uu=l��̃'�۴>0�Ƚ�J��ή�=#�=�{m���콆!(��`�=�yO=*g�����=a��=�D�&F}��‚�tT��M�����=�� <p�=,�Ҽ���=�C9<�t����
=!�>rځ=����8!<h��=ߥ_� U�=�*�r�P��M ���+��V=����'�=l =X�+�>� �&� ��w�=p��=�h�=QM�=����=fUl=���=Ȓ�� F=5�F���R>k%>���=�;��¥g����=�I��s_)�<���8`��ռz� ��n�<j4=�9y>���=�a�t���Ȣ�<��=Ե=E� >m�>��>�&��u�����c>��ܽj�=V�=��2=�#)������Ȓ�ߞ�<l����v=U�8� �=^D'>��F�����
�k=�p�=��
��;s=�L=}����d��O�=��=V�\��B�=�C�=�˵�p�0=||5<���U-4���ҽ N�<�6ؽr�ǽ6q!����m�2<9 Q�T�1���=��K<�@��?��#��=���i��;��1�e�5�R�M����% �=ۡ�<�� >��+�3(=���֊��h�����f�=W��=$�����Լk���v=r ��d���c�=�ٝ������>%uнά=�L_=%��=
>Ͼ��Y�=ޫ��.8<Q0��2�<���BbA>˨��N8��a�=���=�ڽ��޽An.=�=���<t)�<e_=$%>�.�<?#=�|X��<?=����T
½�e=�N;��O�=:"4<�`B>�ջ�ǒ�Y17>X������>ӧ.�FK+<���*2��x�= _>Q=����s<���=(ϼ�aG>R}�:��<����a�|���=TA>%��`�>i=>������<8�3>G�_=�%�BM�= E��$���/༩�>X5����(�+ߕ;du=�ͽD��<pw8>���8tP=�������6� �,j��珽�z��l�F<�t>�mh�I@<>�>&=��ѽ������&�c��=�g���<���O���Rҧ=4,�#���$�<�������f���s��Jp����l�(�3�Ki��8A>ȋp=���=# �=����}�<_Z�:����T������.S=�v>:�\>.>�<u�A>l�>%{F�),��6<�>>�?�=Yj,=�c���a��0�D�
Iv����x _<� ���p>5��J˼" �=Y��=��>�᳼R�?킽�>=p��$�>&�R�>g���臽��=�:�=,;�<&���� ������=w>p����<T����6�<���<�^�jN�=L�E�>�%���=v��꣞=f�Z=5a��1�=��/>�:��{
#��K�����=���=H=O�����<X(��+�=��Z�p#=?����=S��=�Ll<
�(�Ii���ʼd~�<�w��ۮ<�Q�<��<�Q>�nb>�ぽ�/x�VeV��V>�����m<I������jC��R5>>����P��X]�=Ё"�E�=d�%��J)���ܼ �T���<�Ǩ���=�'\=@�]��j>?�Z=9tm=��>�`̽���=������>��=&F>��!�K�>�b�Z�
��`��6p:�=�ؘ���!>@"�;�ힽ�֕>��a>S��=?��=6'�=� �=&;>e%F=+�l3�>v��Rϐ�j�Ͻ���=+�]�^ϧ���X=�x��!2�i#��{N<r���I.=�`�=v�A��b�=�/=���=�\x;j1D= ����=�������;�mǻ�0ڽXW<\l����/<��^�}�,�TP�=d
> ����=���?> Ȼzt�=&�=D2>�{=sT==҂��ʧ<���[?i��e�������?�I�V������>P�5=˭�<\�>`^8>i�0�h�z=�f��߬=�]�="0>�)�=���=��=�d�<��F�+���� (="mP��O>[�Y�S4F>��[��QX=Nj]�-Lʼ-\X���Ž��G>�"��m���$�� ��=|Y��<J$��+�= V�=� b���o=��v��c`>���=L{�<ά=�f}���h$Ľ/�=��h=��ݽ[��L~�=�#>�EI>r/�=�� >��=2�r=k�Խ @o=3L�'�=G|�<eY��< >>� >�~=v}ƽ�@~>��$=��=��=4 �=��ݽ�
>����;�V��<�X �'�s�0���T���i3�3����=����]��;��3=�X��ۊ��Hʔ��U�=6󸽤�">�~��B��=���=�"=̎��e�C�==���=�3�="�>w;M=��q=^�;�L��q������|h�<����r�k=]T�������u=-�<�a�=�N�lF{=}6����=]욽���=Ɍ(<�r �b�
>^8>4�G=1k=xQ������͛=S.޼ /����|��=ۯ\�-��;��G�`W����=h��\��=J3���i(�%�B>��W����<p� �i>b:��Ѽ�}�[bw��<�Q�-��F�=V"�4��=���|&���ߜ=T膼��.�j�U����<~��-i����>�g�<�)�"a<̍e����<uf���ǽ�>s���7��=���;�
�;���]�/��<��[��=�Ƚ�Խ���=?��e���=sT��6c����l=J�_=`�B=&����= .<��3>�#>��Ƽ�:
�J>Ԫ� �=H�\�A�H=6�'�����O��<nT-�Gw*��i����=�N�=*�8ʠZ��W>���J=k[v�3D�������=�s���׽���=�;�<�<��&�L&<��=?>��G>�>�=o�=x�=���:wʉ�_�;_ґ�����i>a�/�9��;�g��9<;���É>�[B<𣻂�l��|��ݗ<���=(5�=��F>�VJ>g���Ϸ=�_u3>s� ��!��~�{��r�<Y�s��t~����;�+�V�<��=��m=���=��="�1��)��㓾Q�!<��/�M��=��=2H�=���<��}�uJb>7��=?ag�H���튚����J������Q���V&=]D�K�?=��`��_�<n�O�� ����=0���q�J=��켸��=���<5��=�G;=P��= ��=EGg��ͧ��$>��=BȀ�����f^x��B>��Hg<& ;�|<�S�=�u��a<P�&�Q�J=}]2=(�N��ʕ=+dѽ��<Q�q=9�>�K�O�=z�G�h��=��=�ڈ��A�<��*=�>��><���&(�;C|O��ܰ=3'&�nJ������)>�=��;�%dI=����Kzn=��
>ap�<t�;�7>��8<�۽�)>S%A=4:���
�saR=�Wh= �x�+^g��P�_B�=FD�=�!�=���=��_1#�VP���c�<�)�=]F%>8� >T>��Ua��^g=���ҷ=[�6>���;4�%�SC�\5@�%��=�&�=��c<�9�<�"��I�<��>~\�=h�>��W<���r˗=�����T��X\���x�<���=7�����=��=�jj��|f�D>��HF:��F#F�����2��=F���c���[(���:�*� >�߮=�
Y�̻F�j�˽@_�=�#�=[I��F��<#_ٺ�J��Q'�Y�^�s�ɽ��=���+<��=:��f>���=H��<�2��y>,<����P>B&�;#'�<��<mR��'3��d�=�ȼ�߼F�bR�<Qyֽ�u�Y�<�3Q�r�3>���=��(=���:\���~k =�<��݋=n�s<�BN�n���<���ĸ<�����ּ}4�=��Խh;�=���2|�= y=�T�,� ��m�=_��=�#5>�O:���Ѽ��3>xM����-���9K5����=l|�=웞>�r�<y+��E�뽵c�=W �=�L=�� >W�>�����"�=�)e=�ƀ����=Ƿ�=#�=)9�=]w�<�=�>w0�={��<8?�0®=A�V>$d�=ۿ�=�u`�Ͻr�:��=X3 ��]'>��!>y��=�7>�/�=�s�<��-��f=iME�ӫ`=vW�^t.��X�<[?g����=h�M>�C>�>�������K�#z[=��=ean=l9�=C����`��=U��~�<}<>�]S�����Q�̽�'�+\�<��>�M�=���=����Xz�7�=�r.>q\�<�޼<�%ʽ�/f<r�"�l@��L;��,=|��=�����ƽT鲹Sx=^T���{�=��<=���m����R�� 3��ɭ�
��(��=@��=kY�=����x��308��$���7�=����� �ꐩ<����Z;˽˽��;'��=֓c=���= L+=^:=�;P;��=f�D=/���a��C�ܽ?�w=QG � e-�� ͼ�5k=`:��-_)��: �>�=]X �\ �J�;��i<>C��=sS&>7*����">_ ��lo��-��+ۼ"�k<�8߽�
��З�=�"O������4��;�彌��� w]=6Zλ!Z=m���D�;���=�ζ<J�ɽ�Q=��=�3�<C{���������<.J%=6�Y=W��<b�ʽ!ƕ��K>�W���3Y<���>�r��Z8S���=�MS����=�*��߽-�)��=�`?���<=���=T-=��=>VH=��9����{T�����=����h2��?>���=��˽"R�������]>M-1���=9���e���H��b��<��\=��������,�T=γ潐>½BO�ln'>�8���O=0$������=�=��>���<�!�=m`"����=��M��^+>0e��|>�8<��-��젽cPj>K���C>H�@�r���D=�p���� ��9r��E&�=��U=�"> ����=C�!=%��: �<f��[K=�*���eB>ꠉ�' �=��8��"�����=�ϒ��Bh� �=��q�+ż�� ���=<�>��r��2�=;м �;��ӽ���=h�R=[��<6��Ge%�ũ��6Xٽ�.>
����L=���=�*��� ½T�)�\6=�
&�i��;p��=���<�2o�59�=��L�Ʒ;=$�=��Ӽ -���w�;N��<z��6��<�@;�0����n��.A���.A����o�<��-ڻXyv��/���=6���!�½���;m!��W�=�1�\3 �ㅬ<�U���{�2����+�����v�tg��akI���`<ec^����=��h<���Dz��}& ��>�轼j?�=�1�$j�W��=؀>^� ���9��g��9� =$+�=�/�=ݽ��$��>�I6�ldk=�/ܽZ��=��>{�>�V٪�.�=h}
��� ��.�=?�=gJ<�5�<���;���=
6��&1 >R�;�U�q�>��>(7;���=�T=�Ε���=_l�� \���M=�g=T��<� ^�����4�=���B�=��d��=g1g=h��<0�K=0ƽ�����\>B���|�=ލ>m�O���)>�M�<f< q����=Z�=LHὩj��W��=.��7.=Qv�=����>�=���=�u*=��=q�=m�����T>}٠�Z����U;X�=\n�֖�<)�����ټ�<��ø=mr��N�<)�=daU��F�<[�D;(�n>c��=��?=�D��JM��a��=1�8���]�gߞ<��ȼ���؇+> X�=C�������� ���A�e�=�@�=�9��Չ{��<<b��=�=
��=��=�U�=�S#==1 ���,<���=�݅=;���Z����=3V����R=��;��>�H=�ܻ4}�=R-=Z�����=:���L4��;&<25��^�)>l��=x/�4�<��t=�츽bx�9$S��韽�̓=S�%� ��H]=X��=*.C���ݽs�:=/f=��|�ۦ�<��W=(���RR�=��ɽ@�=�e7>�G�<�����]��#�=��u>�l�=P~ѻ'�9��� >ߨ�=�9m=���&�=Fu=�>�탽�W#>W<����#�p��=>et>Q־�{�J�Zg�xĦ�/ =���=�gi>�Å�+fJ��4=>Y��=�m>���=ډy<�;˼'�Ǽ�B��ƿ��W�˽����f�=~L2>p��BCg=���=`.콠_�=F3�m]��-F�m���0ʼ� ��e�=X>�����}=�
�7���y����=H��}��=�}ڼ40���f�h��<%"�=���=y,�=�?I<@�����W<A�=!';�w==v�;��˽n� >7��=��R���=uս����ֽ`U�����=a�=Vߞ<w�ֽѯ��p�(���p��4�G6O>���'��-[/>"���O=��$>?t�=l��=�%=S���3<��a<�q)��"K�cF;.:?>D���kgϽ��`;�-�=���:��.�.����a�=�� �3N��<q�W=�3;=� 4=�
�<�k��hqĻL M=�d�=U�
��-J>�f��c7=v ���E�I3�Ƥ<d+޽�읽xZ �}��: ��=�< 2�����>-�<?A����½T��=9I��o� ��e�6��<$�<۔>�E]=A��=�>!=���G��=��Y��B��� =�����ٽ���������J>[}�����V<c�S�l�?>u�=��7>�H�;���ɔ8>߆�=?�Ͻl|=�pZ���_���� �`=��2>�&�<3zj�|�>Ƃ��1>�ㄽuV�<���=~��<u�P���T�B�X=w��]2��>���Rg�S�k'=���X�i���=/8ƽ�&���C>�/�=���} =�K=l<s�J���+s<D�=�F�)Py��3�=B��2;*@>=������TE>$�H=i�W�i�<e��;���������/��VQ�>� �=�!S�|�����R;��>F�Խ.q�=�z���d�I!<��2��=>��K�W`[������K=I��<��=I����s��o:4<�%<W�#>bpg>��<CK�<Z4i�uM�=�P>^�=,�3���1����k�=a뉽�4�<_ �=)}�=}`�=�~�+>����1TW=�a���=�C�=�B>�=.�4�͠=�ɩϼؚ>(��͙�=��$=þ�=�_Q=�� >��d�KU�mV�>�t�IK�<Ow=>�Yp>O��= KE��\>6g3����=�\��"�3> �;�� �� ���<e�۽Z�%�60=�4�C=J�ȼ5�0������=[��=}V>q}:�������"= ��^�]>17���+t�G�'��R5�^Έ�x6[�`>&����HDv=�*��_�ܼr �<>S,>�R>o���~gH=e����ݶ��)��zK=v%=��=G-*��^ �����$�����x��j�=\��em�a�=�޺<]�w�iq�^
��R�=�|=�ÿ=�H;Sm5>�+*�Qj��PΜ��d�k�h� Ȝ=(l���_����:=ƥ�\w�cZ/��3żx�-��� >% ����y"��$W��B�8�
>���=��J����5������R�<``>@| �� =B�=�MQ��Uj���=���;'���Ƚ� ���+�{�=v��=��ټaR��6q��_D�O�����������=�&>U��=t-(>�{�=��J=�����4T>���=|�<3�D����<�_4=��8���>�EQ�~\�=�-�=�{;=�� >U8���W�r%= �潛���>��>&|��ŷ�=���=j�<�N.����=����K������+K>06�j�=6L;=����`+���8;��Q(��=�=�C#=�4ٽ0��<\:>sݏ<�)�=������6>r� <�vA������<9X�=�1�<K�8�5�>���=�=A���=�n5>�$5�oq�:π
>k^�<��B�L�� >fY=5��:��%�}�����=�A'��+=E���{5�;��0=#k�1�&��Ҽz��= ��=���(����u�����@TȽ�����ν�s �˺�`��<�j=u�<֎b=�1J>7��� V��4�B=MLS=�F����=+qM�� �=2f�=��<޴�����=�8k=f�H=�K���Ͻ<��= �5>����������=��g��}v=}лp��=oR�=�Z�>pUY��ZҼ���<˚ �,�>�9=r�C��"�����<6o=]���'/= �����u�;/� ��c�;�y�=�����=_�=�2�=M4����=� 7��Sy� =< �=�/�=��=6�=����N�]=�� <o�M>2�;ǣ>��p= �G<�2��������>�.�l:��>�<�����>f=�d����Z[>r{��}=��6>"^='疾G���9�=q/8><��=;�]��xY�}|f��P�D�8=�X=��>�)�__.�Wj�=k+�=�":��(��)�=���x�;�,E=�'�=(#=�OZ��>�o �����=�g��x|���ֱ�3��=�5�=���=]�<�1�;鼬�����`����Ľ3�4��>����=���< ��<OZ�=�">ַ�=�M>��4��劽?����>�=G����ͼ☼;0O=������e���=?'<Y���u�=Ꭷ����=7.=��
=A&�:�=��>�I�=u<�=\O�=�m��r^=�zҼNJ����>�x�=-�὆�>W��Eo>}�$>�,Q>(�
=������c�½�7k>�1㽈0'>|6�=���������=-�G����=������$=X �L���G=�=� ���%��v�6>拴��B��ڥ> OM��>��=i���X� �V/x�O�ӽAü�͊�'�Ž��\��f{=�%�= �>u�<�=֕�<7��=,<�J=�~�=� *�I�p�S�ǽ�2e��
�xǾ=��>*�;_\�<�<��Z1
�0pH>��|�C��=��#=�f����#�ӹ[=�ǎ=3*+>��<=i�>���H%�z�[>G@�=��<"��=�����<=`j��@K�Q�����OT~��A�=l�;�/& = �P���N���Q>��N=��(>Q��;|H_>�୽�̈́<���<FK$=��5�6���+�[�=DG>������=i��<�ż�̩h=Ҋ���/����=�<�=l��=1�F��$�<5Z>�E���=�o�=�c����=������9<&tH�L�'>2%�==�=�o&����<�0e>�<,�=�� =jXʽ�1�=��&>=�N;|PK>4�<;T<�.�<��ܼV҈�K~�=��ϼ�e={>d����z=W��={a
>���<�i�=�a>��������}���HK>�`�=���=Tx�;�a��V�h?�ђ}�E�]���=��/=��K���>����� =$x��t>�2B��=��=c�=>� ^=��=X5t��Q��_>�>!> YR=�a�=�@��eEo=n=�_9>�,��h��T�ͽ��9�K��O���A�R���� �=1M��WB�n���][?��a2> 2�պS&��9�;�{4���:Y0�`����{����h�=�e��,���ؐH������(}�К��Q��=i�������{^r=���>��=$�=���=�S=��=����D��=�㮽�� �w�#>�>�.� ���89}�>�gݽ2��=��L��{ϼ�����;ؽ�w�=`J=�FV=ո��O�>�AA���<���<`
�G��c�R=
���^��#���7z=�3>�����=�̉��Q�W�V=��Q�K��=K-4�ԭ��0�=ǜZ����=՞(=PN�����<���<� ��W��?>�e�=�6(=�� >�>�=��K�����F =��n/ͻ� �$ +=�V�<�9�Tw�<��/�i��=������>�
<1������ 5>�PԽh� �F԰�̔>�v6>ͽ}��<��<����v*�Ԏ�~μ�����Wнmwz<��=�\�)���x������A/�x0����<c\�=��� �;�V �g>�F�,�UI�83�[ �>��<w+�=�3���@�w@D�Я�� L�)��=����C���b�=��=G>���S��汈<a�0=�N5<�����[n�4�)<�����J�={�<�?4>i�=-Wb=�Y`�R<t5==�9'>AƤ=���8bf�<�uU��j=>^%��@�+����v=��X�\��>W�Z>��<��m>�=&�>��=>����� T>���"
M=�L���B =.�)k�����)>�ry=��O=R��M��=��!>9��=TC��B�=BY���tc<ю�=�r��v6=ψ
=�𾽏��=|��=Fy�=���=�Dt=�Р�=9��;���=n��=8������y0����=|b�=�)�Qu ��`�=��<�H��p.>��\=�u>����n�@>ԅ:����=�
>��6<j��;�Nv�n_C=
��s�=�jy=�������=`>���������j!����=�b��g�\���g<ӺY���=.K�=N��=f|�=Ё��փ:��K��?k4=���;�놽�)�:�\����ҽg��=�;8�� Ȼ�����< <��=�׍���>��=\G��Q�=�uo>����g��Y�1�4� >���=)��B��}�OA{��N��}�%=1 >�ӽH%;� �=1�^=�U��S$��=��P����������=����d
�=�]>Nf^=Y-�=JQ��&P �r�(�j�= ��� M!�Ɍ �4!(=KK�$æ�[�.��Q=� "�.?꼓7H=�K4=��%�i��<��9�7���v*��'>by;Ua>�V:�j� ����= �=�6ո��h=�>U=������<��6��Bv�\��=o�<�>��
��cT�C�=����&V=7<=�h����<��=ճ=Mi���\=*�ͽ�͇�:`�=�H����=� �==q�=e��b�>wĤ���ԽLl�<-t�#��=@��E>QO˽�%���<�=M9>�N��`v��aK<�k����=���=Y�<�)��xv,��D�����Cʽ� �Ƕ����,��w=7�*>K�������p���%p>;*M<�f<����� �P{Z=#ߎ<~�9�"��O�p�!6���� >�:ɽ��A� {�= u:�dBg�x�q��GU�m��T "��>쳉�?~��]� � �8<{'��p�b=0B<N�P�ȑ:<ec�=��<� +>��=q��L�> 2>W��=��s��"P��ȏ=�����=M�<@˃�T�=�L]�m��=�\�=�S2>��=�� =w��;�ҷ�LwI<|��<׊���F�=EB}�Y�^�#�>�ަ<�>1��uV=����򢽫�ֻ�G�=K��=�O���<3=F㽁,�=��';wC���>4(�=@�=�����<�dX��ܤ=�i�\�X��5>�r���:��#�=k�[�U�3���C�T׽|@������鍾D?�=��=�V��B����̽d� =}����9�o<�<�C�'�����Q�W,���>�ڷ=z���]��� �f�=�j����[>�����9������H��=C��'F
>�j ���=�I=�u���N%�9��"8G>X1�=�Z�GF����=b�½J]�=�� =s���=��>�7G>^G�� ����)��|j����=�࿽��Y<gw=�U���o�>��c=PS��e>=�M׼�tr�N]^=2�H>�ń������,����;�gؽ^�Q��p=+��=�ro�����@*=�$��!r��7Y�=e9���
�Yu��Lc=am�=�:�|��=�ڛ�pW5>�Pf<C�=��ȧ��";�FD��Q��Nޛ=�3�=��,�>2���} �=4��=�*��6�u]'��H)�d@��`l=�c �ᒽt����/��c����=�����o=���="F��f�<|Î��I=G<=9�*=�h����(�|������;(V=W(�sѶ=sV��Y0w���̼h������SIe=��S�#�����T@�=�l����ϺY�^=Z�.���=��<����5�=�?�= �~����<6�g=��R=�@w; Y =)Z<�+����>=�ս�Uýa��<D���(�W�����=��_�t�=T��b潭 �
�=�sR<�h��n�+��#H���=����ܘ<�}�=Jٻ{�N=�$�<���<(�F=<l`�H
4=;׮=�t���G=2c^=��6��I�<�-N=\�޽����>P=���W�=��e�$D��!�@=Ф����`<#%=�=��P�`oA<E���+����]�т�<z/����<y:�=6�=�'����K����= ]G=����C�=�#���8�;�8��5�$��L�=w�=#��=�н��3q�;�o�=�F�cϸ=3��;_��=� ��8�j��"���}]�@�]=��>[�ܽ ��������q�=M,��Uཔ*�=�o=$K�<]kY<���vw*>B;׬C>��������;��H�`�$W� ߼�j=f>��ƽ��!>/�9=R��b�=2=+Ī=O �~�x��c��?>��� �f=��&=v�=��>�� ��E��N������@ q�����e�'�_:=�rS� q=�
>��|�)}�{��#S��1������#<�c��n��3�=Qe ��Ѥ=�4�� Q�oI��ל;�)=����u���
;L�=c���o�=iz-9 �$>��G�E ��/-����j=�n�=���=V�=�}�p�!�AF>�*���C>V��=b������4�=Yh�=�'�<"e�=k\>�Ð<�J>�+��An#��`�� <��!0��R�<񖕽/ϸ=@Eb>dT�<�0=4�=�23��4�=&6�<��q=�r���]=����F<=8�y��Ļ���ϽU�(���>��z�m5M�?����$����?>�=�G�TH1��*ѽ|)��T�=>��;s�����=� '=d���=V�r=��=p=D:*=D�=Č'��Խ|J ��� =��0�k����su��g=Y2��+n�R=aY:�rL��sRj��JB=��=�`�<+�(=��<�a���m�=�s>��:>��ټ$�m=�F��F >NA!��A=�3ɽ���=�>d��=� ߽����~��]�=�R=^��=i�������~&�v��D����A=��=^��=�n�����w{�q���2��=`b>�EQ��jn��" ����>��<��Lx=���=�uĽIB��I��*N���o<Ŧ���{�:&�=�9�\zI�Di���w�=�X_<��k��xB���x=�e���(1��� ;܂=�A/>(ǵ�ն���r�E�����>��3�X��;IW�=X��<|�p>�>]��;^�)���� ���`=�=�>��w2��O%�u>H��L|�<�*C�v�
>��>�@�=���=�.l��N[= �>T�="��Z����>���=����7:�ƖY>-�ϼ�,�=��=y���ܰ*=�fv;�d�=����ۧ=7��=�B�=�{3�fB�T��� g��w�T='��=H+;~�0;%�<!�ڽ$�=c��` >hݽrE���D=Ԓ=��7>��=v��� ���m�=�7�=1|;/d�<�N=����.�ü��B>�/�;j,v:�<���*w�w�1�_:�=F�W��}Y����<8�C=�3 >�Y�=V�&>����=* >��
=PО<��üʍ��S_:
��Z�J;۷<x�>�{k�aU�=��;�@H�]3�<R��=�:=���;���<�w��]=/��;d�������,߯<�����)>�F=E���p�=|͆=��=��=���=� O� `��.�>eнY,�<ֆݼM�W��a>�����ԼM��;8FL<�Ƚ! =r4�=+5���A>TF]=O�J> Ї�Գ��Ϋ�<uE{�Z�"=�^ý`�/=���� =�΍�Ͻ�����<'��%~�<��<��<�<=uC�=� N=�>{=_>�2>z�G��p���"�<3=�>�G>���=�Ž�̃>*�^������">��񽍉�<K����d=��� ��.>=��ѽ(>R�߽����V� ��=� ����$�[Č<Db =4�M>�L>̚��D �!Ab���=B|9���{<���X�>�Q��;�q=�������=�ܠ=�C�<��t=$j5����=*�,�~LT>*H����=��>�� >T�=��=�1�����=?↽���G�%>T����>=�e>С��%�>��.�jh��Y=�n��"�=r�Ի�,�=񩥽����.��<v���h?>�m��d��=�>[D���q�|�=������=�_��qY�=�=�>ڮ�=m;�=ng>��~�= U>��K>Z�=?�y=���=c���&�.��=����U�)=Hy��䐟�?��AH>=#�=��~=��'=���=,�B�U,�<a�=��L����=R��:t�=n�Q�Fv"�l�=\2�
�ӽ�X�5\N=j��� �x>��P�X���Hb�=�*�<�j��Sm�QV4<��Y;��!�Ki�<������蚐�mґ���^�7 ͼ�gd��s��sմ=��o�>u�b����/ � <�;�j�=ṇ=��/>���\�<����_�r�=K�Ƽ\��=�6ʽy�ǽ�ˏ����������PW<>q����< �.�O�:��]5=��=��ν�K=B T>�߯���->v��=>w���}ҽ�CZ<��ݽìJ��(�=�:=>G��= L$=�8ǽE@1���>��=����*����Aٔ:���<^���GJ�=� �<K�X$L���=>w�O>�=\Vs>�q=r��=��=�4ۼƤ���@=�0�!k[>�Ί��JK>�J��� ��y4�'&�=v�>�P*�����X=O��gwý���=r��.�.��)d<+)=����U
��O=K�����'�,>.$=
Y������<ga>􉼽 �'>J)��G�=�=d�-���E<�sg=vE<�[�=�`�yR��",��)°=N�'��C=_e�>'kѽ��θ/G7�ҽD/Ѽ$�=��[>SS�<���=���he=�J~�
s��feۼQ
���ڻ��>�,2>��1��;=>ҍ�=�J�r�E�,n��Қ�<����� =�5�=k���|Ѳ=�����+>#�?;������d��
��NjQ=����:=����-m�=?gn�_�ͽ3.��q%��J���� ���t<~�������#��y�;���=�8#>��;@w\���=�x�c�������j�V`����%�t��;��o=�YսF�C=t����;��V�<kQ"<6�ü�n<H����!�=)-���������@��UV���
�4Q=�� ܽ����F#�=T�;=�]<0��=Pe���@=��5�˃!=�fҼ9׷s+=�m/�}5>p��:� ������%���E<�{���4=� <=o��k���}��=�O+��#�����J��� �e�=�
�e-�<�� =��=�+�=f>L�|�3�����=q:�=��!����= ��;s>@=��=g~�����d�=�o>�
=V=A��9�=Zᄽ�>��(�>�S >4R*�Rg�=0Bd��d�<�Zi�~�¹K%���Ӽ��T���o=w��Ow� ��=�i'��ݿ�m��~��p˞��\�=U�żyDe���=�[.=���<�r�=T�<��[��J8=���=C���W�\=o�=c;����
/��F<J��]�p��==�=�r >T�:�Y�M�]ڽ6g��\��>8���5�<�3x= +<�<M��V{<@#Y<%������������I��� ����V���<��E="�Q�(�=A��:�.�=��><�A1<�>=���<�ڽ��=�� >�N@�=��=놽���� �;NY!�h@g;�p�<IJ=Դw��o5�.w���p���:;l &�ET�=M��P?�>��.�w�?<�w>T�Խ'm轀�H��B�=_�����=��=(-=�5q�ݽq�=�^��O>�l�:��=<"���D�<,�:>v57>��ͽ���=Ԡ:>
����3>�'�=����⪽ܴ��?jA��#�=[�{��?�=?�ƽ�.�=>h�;�V���>���<����l�.�g=��;?��J=m_z=ė�<_o�=�䅽.0<>ɭc��|�����F���Vj>-u���]��,ޔ� ����o=
�<�Oz=�$�=~���}
=�>���4=c<8�
�M>��>��>=�w;>KK>��y=��[���;�ԋ>&�r����� ʀ��� V�=7�]�0~�=�"» �'>��[�FR����w�g� ;�ڀ��2>Y»��L>�F>Y!�����=J>�=
�n>&����\U����6=���={�<3#> #k�qww�1�ٽ�-`�%��=����1�=_�
<VG�QYּ�H�>������R�?æ=��b�^�-=�1��:V�����'�!>�ѷ=������=̂��xFW�S�d=�X[�E����<">�[�=}�۽/�¾�G��͠���9�[�y�ӥ����׽�b���罽V�=uC;h�'>�ٍ=��6>�W =dtG>�F��ؙ&<��ͼ�����*��Ŗ<����y���j=M>ļ�ۀ�Q��M �% *>�y==�����lC��>1��<@�/=��Y=Rtֽ�i��b�=>O[�= ��<����S�>�-u=��=-;\�9u�=
LM=&��1=�߽����Uμ7��<���=�l*������n5<Y�k=4J`�����1�+����������=.���x̜����8�f���H�<�(:>�ٽ� �(�=L���m4>ރ�<������=&��;(@���3��!=�,=ԯQ>O�q���S��P��h‰�.��=�Ɍ=, � ����=�����>�U#��)v=�eC=ޘ��fv�=��> rF>Z��fhP���]���/:T��#�����p�<){;-��=��̽ ���V'��#=7 �B4]>���D�`=�w�����= �9<�ü )�=�=�2���d�_1�>[���������>m!,���ƙŽ���=#�����Q<Q+r<������=���;ˉp=���;�iƽ�
>X�w=�= ��<6�*<����L��ܨ��3�=�zA�%|�<�~E���%>S8 >V\���} �6�׼�}���;(��;�ˠ�S�U�x� ����=�a<�U@�çb��V��e��N��<K�V����u�>g�F��>Ė�=s�h>6�=�:5���<�����HԽ�Y{�.AT���!<Vu�=g=ڙ���,>�ǽ�y>Ѯ�c&��+1H�T��=e-�:�_>���7p�6T���%�ӵ>�F���ZG��[�<7׽����36���=2=9����R�K�j=n{��%=��=�bY�+ف=Q��Q�=�^A=pu=����^i;DF��֣��C�e#.=L�\����uu�=� �Tif=���=l��Ԉ���r�=ׅ~>%��=�Y�=��.>�)�<=N@=��=e'!��O׽Li:�� D>��S��T/>`�G=���=@�"=p�>�� �s������tb<�<�fO=�`���F=z6���D<7c � k�=�? ����=۔�=t����=�P���@!��-�=`�Ὥ���BZ=�H˼�,�9�L���(��,X�;�=��=`���K��+9��H����������<�N@= n��p��=�!��8z�: �۽�'����L>����է>������=B�%��n�=�Q��u�8�k2'��9 =��J=���=[Ϸ<��`�WĐ��Լ��</�u�v�f� �$��>=/��<H��=�>���=�HB<c-?��ѽ���=�V������*w;@2�=�{(�2�E���<r�P>oV<l��ς5>;��(A��$i>�cýl�P�9�Խ�0r=n��<;8M�S�=`�ͽ.1�="��<��s��/��[6_�7��<01=��;������W�;N =��<����� �m=���㍽,
޽:�U=8J=KT4�U+��8��v�����G=�T?��r�j߽=vl=ބ�=���������d�=I�6���B���-=�>�_�翶=�̇=��&>�bb�(��=Z��IC��ȱ=�~>"�^>��,>���cp7����<3-����s<0��<�C#�������L��%�<���=���=4,5>p7\=Ma�=���:/cz=��>�,&�#�=��>�Z�=2��RHN='��=�;;��">�%<�0�-���ձ�=��n=wVn<��=�5�<K,�<�Ē��C�<����t�f�����z�T>[T>e��<�H>�H��������F>=���� �=�(1=�հ�q����g?�>}�< ?=�̒�l/���X=4j�<���=�����/��j=4���\�>���=�$�<���=�t=�j� �1�xZ<>L�>���=��S�'�� \���<������>t�m=#�<��(�* =/�)���>�]>
 �n�=��M���#�~R�=���=�>�=�%�<YQ�=�b=���?��M7�=��W��G\=K��<�{�=�rU�1i��-�ƽ�4=��ƽ��C>%�W��!=�ͽ�,�=�^�=lg���(�;�&)��iX�
g=���<Dg-�Mِ��,E��9���r<�z��k�<�=q?�� =�p�=d��=R>IU�;gC<�������Pդ�L� �gsq��A������ ]S<��%��hI>2C�_8�=O���pK>���Y>�YT<{:�=�Q�<.{�<��ݼ5�= I�=,2�=K <�b=��|=�<�<�9��i�=�5�=���G\�=�����?�<Q[�:KE��ͽӬ��Ͼ��F5��#�<����� 4= |5>X��< �=_�=Լ=V ��~lW��<�)���j�=��.>5HƼ =Ri�=���<��u=غC>���=%����J�C�7���>�׊>�ƚ�`8A;6J=���}�a��_<Lѭ����=p"�<�lR���
=����� �?�> +�O U>�B�=( �=7���7�>o-=u���/��}�����&�Y=�=��x:��#b�<7�M��ܩ���=L"�<Q�/=1o�=�id>�:���lq>�����=�Y`�x#��?�J���"=R��W=� �=��ֽ����IR+��O�=�G���kP>�2=���=ꛊ=�wֽ� ���\%��V�=Wv>ٸ��&�=�O���a�cE�< >������p=��l��1���
�=5uݽ^��=$����9�=6J��U,�=Sǃ�fJɽ)G=�A�=#_��Q��=�,=3�,�T�\���i=��=ّ;���=�U�<T�=��M=�a�g��������|�B�< �-)�&��=ݶ|=b�R>���lW>��ƽ�G���Ƈ=����y@�:�x<�='����=�gX=�5�=ֱ*�M�୆="�=>�}۽����ܪ>k�J�X�)���J>��[=��=8K�<�D���S=�3��쑽����t��nʛ<� >�-�=5�c=���#{�=B*��n]��%�%>��g�$8#���,�`��!��<H�#��%>J����ΐ�L�=�����#�إ�;�]A����<4���{`>�$�i�<���P<�= >�<�d7�.��<��H�=���=-���$(>8W�=�. =�[z=U1��?>���=�����>6�8�;>���<���<�>�<3�#=E�G�qä=YJ�;��9=��=��;4�M>Y�,>W~;��S�Bo��2 s>�B��� ]����=���;_�^=�����9>�S��%I��W�=��\<��E�a;��\���8t��52����<�V�i]��rTE;:L>��0�0����9=��x���^=�����,��W��E�>�8�=��� G���g
>�`Ƚ��޼���>vx���t�=&�+<���q�|<F���)��~E=�NJ�7��=����:�=(��=~a5���!=;��=�I>��=��:@c�=�{�<̶�=!�d�S���J%�;��B�JѦ�q�@�Cq�oe]=�r%>�OB��[v�����7M���_����=>V�=A����
�=��>��>b��;� ����=
��<۫s�� \�G�I>�A�W+<X�2>���=+桼=[�K�?>&˸�;�=�)�=ɖP<wcx=9��؀�=Z;' F=_�C>�� X0�>��u%�?>(��s�>�XG���2�7ug���=�w5> *s�_�ӽӨ�=��9���;�� ��=�������0��M"<<�k�����!����`�<*�=&�=�.�HB+����-���7(��/6,>�a=�TC<T!�<��2=d���Z���dG�|��=ɽ��[=b��=���<Ά>t{h�*6r=�^>>��7>klN�q)��4��r@�;C_ݽ���������������,�w#H>w3s=�VS>���^=0EV���'�|$"=̬�j�E=Gg��(��p'���V����=���X���G�t=񆴽�� >��t�8%>��<)>DA���v�<Sir��q0<O�E���9���=U�<����p�>ȼ��x�ջ����=�>5}>֦�=�":��85=��J=�m >-�ٻ��=|@ɼ� ��J�;�l2��>�JC���A�ڽ�?>���iP�UUI=Os�<BA�=�D���!>��,A$=���<ꍀ=�+��u��'3��;}��<���=a�˼̉�=rD�AM�=ɚ�=�#���üh/���s=� �A��f>�a���=%�$�#��c�=S����P뼫��=s)O=F>�f�=3��,=��U�idO=N��=Ox;���=Ϩi�m�+=�|�;Y�+>�TT��@H>
� �x��=��A�h���Wl�;��U>Z�����=�=�P��Ӡ<��:�����_Q�=�h(>�����=����Z��9R>�&����G�J=��Ľ�(r�+�=H�*����=���d�U>�a��t�r����E��:V<�k�����=B&�=�&�=���=��C>.&{=\�0>�Vڼ���=d�>�xO>M�=$�Y�w�P� ���+�=!q�)�#=]O>0�����J=��>���y&k�d%�R<%�K>w&>��>z��:�ꌼ��=9Ak�:� ��(f����=�Aؽ1�=8:h�ь���͟����=���<��͖�b0ѼQt=��������>ag����k=�?h=��\=��X=#�;={� �,�/�P�=�\��������������=���=��5��~Ľ�I>�=1���P��<3Q���R>��=B�7�<���O�=XW >��ѽ���=%S��d���r���ķ��^����<����C?񻌓{��@%=簼�=>\kμP 3���"�������j�#Q�=��y=�����������=
���f_ӽ���g������M���
��&���ą=��'��|==��������'?=��.���
>�Y�=��C�)�������쏼��=H�=�.�=a�Y=}}>��>�Y6�^N�=���=� ���?=C+��lO*��@��� >h?�=��=x���So�� ���L��F�=V0 ��ۡ>2e=�)�s��=p��fWt=w������sf*<�>����=D> ���w�@���>[]Z=*����c%��#��� �XN`=��=���6�<=
>O���������=�%>vC�����=ش���ͼ��`[�=&�q=���=��,���j=u��=�����;f=w-<f+�<��q�.o�;k#a<� �:��ҽ*<�����ZȮ;Ps�;�r!=c���MRμcc�=���=���=�n_�5j=�Q�<J��=�,=&�'=�Q>��=4�;>(4>�K��g�ּ�Q漹/]��}༶8C=*9�cRR<�78>���=�>=+�=m�v=� �=<iؽR)齕��(. =�,3=C@/��0�<���<��|� �A<Pc��E��<��<N�<US^�� '�9Ɯ�w�a�SL= O�K��<h�<+��=E��:A<iL�� `�z� <y�#<�A���˥=fN\<x���V�=}ڼ��
> /�=�k�;@i���@'=�㘻�Y=�B<�,<nyڽk����㥽����:�1>�!�����<��I>�w=��s>
wF=�5�<�Z�Q`�X��=
�iw��N�=�l$����ʼP����=>|�V�=ؗ=b���J�� bټ9�U= ��=�{�<㛣;�%�� �Q>5Cս�r�=����2�;a��=��=[iE>
�>���<>�<-yW��Z;��:���֢{<���<"%�<�-�<�ŝ=�Ţ=�a=�8D�C�>�g�<ls˽�x
��I>}��9�h=�o�i�^=D��=[9����>:��hR�Bo2>���=���v��}�|����=C�=&� �󬒼Qf+�&�3�ʄ�=|����S<(�-�<�m�U��"�2������=�Լ�vI=@=��=��S;{Q=���]�b��ܼ�ཕ�9 ���A�;b��<^���KX>��H�=��Y���*��u�<Q��<��B=��_=$uh>��Ky�=-)4��෽az�= %�����:�o=ĵ��q�g�/��=ᔎ�ո��� �=s�<�]����G�G�z��򃾄%��J>�"�����<�\��� ��4��=�p½�]���8>r�ɽg�^��G>��=ؿ �B�1=��=�Vi��,�=C�s�>Ԧ�=$X����@=1�Y��t�=��<�μ��d=]E�<h��A5�h̑�_S�=K��d戾�F����<^q�<�h]=���=�ɓ=��v=��T=��=+��=�`��{㴽TBս��>F�<����̹�;�
=���=q����>5�����<i4���̼:��>�F_==���L�����<h��LjF��K���?<(�>��O�!Z�<C۽�T=!N<=��=<]F����=#����6���������!�:�>������<� <� >imo>�Y>U�&�L�6���>vN,=�Ω<x� �ޠ�=LXϽ�^'=�Ѽ���N��̽M�/��,��W��<T(%�Yp���f>+��=VA�n-><��B���S���߽<EF�W�F>�����s�<�MF��,����<A�J@�>&z>=��=)��=�����
�C52<q�Ƽ7@d�|��=1a�=�S;��㚽K���P�<{<���猽y��t'���P�.�;�0��n2;ޟ�=�E�<
���:D�/����3>K�W�=�� >�%޼�坼�P%����=/>���x=��=Vk#>3gR;ZR�=$Y)�� ������c�����8>��8=�۳�y��=�j =�u�=��<R�D���<��=���< "�=��'>t�D��A�<%��=kwQ��! �U��<�ޏ=̷G��$=�ϼ��b�kt=hq�=\�ڽ�&�<b��;J�?=�I;�~����2���׽)����0��j>� �'XI��v������=np�=���<������<>5�Ͱ�=`����&=S-6���?�Xn
�4��=���#�I��}�=ɭ���]��mY����'�~�컂N)���M>Ls�`/%�X����Mм� =�Yj�*91�b6�<�O�<0��=lC�<,n=��^>�!�_B=�`�<�+�<k�>㾅=�@ػ+P߽�� �x�:�*=�4C>���=�+���2A���=�̽�{0������m�t��=��=2i��PG~�w�N��!�s,��S0�=��>�����μkO�=��>ӝ��� _�R������=UV��4y=V�ɽfME�۔1�T��=��V>��N�s2.=-�Y��u=I��� �=�9�=6[޼��a=R{C��Z���BӽZ��=�K ;҇�=�g�8�$�=絁��k��}'��>��⟽U���l<xL�<��>�!> ��=RU=c>]�~=^��=^�W�?֨;>�3���g��r�<O=4=[�0=���=���<�k��M�/�;��=��:���'>�����������=�)�=�=ڷ%���]��=�:c�v6�=+'P�P�d=^��=�>��0��)�;W�=,DE=��:r�=|�R=;=>��1=�H۽�ͽ=|= �>�*�=
�<�s��ͳ/�(�>\:�x< >,�üt�?=�'˽0��=Ǵۻ��P���C� ��=�>�=�! >��2<t�py�=B6=���υ����=ǽ�*�p��s>��)=�ý'x�;I��=p'��Ȍ���>]�Ľ�-�=��</�,� ���N㓼=�2>S�D;1D>�]ܼ<B�=��=&��� �h=EQ���w�>����Ce�=CM[=����7�>O��<�쑽u?׽�z�� >¡������M���,�-;e=�?���սV�:=�|�=�%!>!'*� ,0>����5>ꆐ=[��<Jb��tf��ɶ=�c�=.���\���� $=3�d��~�s��ݹ�=y'4� �<@ F=}�u3W<� Z=�!>:�����=�#�=}�=���� ���۽?�y<�q7��{�=194=�[�= �>|+�?�*��� > ���)ʽ��2���=R�s=����I܅�{�õa=����U��=-z���q�; ۤ��� �8�b=�J>���;`��<�ْ>V�;�\��o8��+�=I�|�
!ѽ�&��cu˻��=&�=����󻁸 �L��=�n*��6�=F�����t=`��=�V>�KL>]��=OJ���(>;#@�>J==��<�rD>?����w<�F[�Yd��mb=�َ=�P!���3�[�;>���\ �< �2=D����<���=;e�=�Y �wۖ=xd{>�O�=���;f_�<Zd =�~�����E+
����j�:�/n=� �=� �=��l�筂�q�8���=��̽QB�=%��� =��������kH����(�=6�V==Ԯ=F��4��=�G�!<F>�I"��P%>{޽G@�=�^=��r=w��q��<[Qb�U���]�*=�]�9��8=�� >�o�<���<R��=@���\%=3B�����<��R����=��;��h��̦��em=���=jٙ=V�r��M���:���d< �;v ��g�Ƽ���+��L`ټ���!�>�2\<�6��G��R�==�;�rW=)�U��w�=���=�����s=d�@>T�s>� ��E7 ��==� ���=>��=��e=e� �#X1��>�r��3 &�oߐ�Q��<t|�=&3=b�/<�����}=��=�M�=^Xҽ�L ��[�=� ��:�_�޼}5�>�=ɴ`��l�=�@���B��A��ǘ<6����d=\ >�MM=��=�Mػ��= �<>����f��P$>1��<�a�=��W����<�ܽ[�S=�c=��;> �۽J?<�\0�=og�=�l�<.M�=��j<>�<�#�=� >��<��������!��=�r=�a)>��νY�'��1�}]>K�o�k�;�fg���#�&BB�9[N��R���;��ف�=��Y�о��Ο���J;��?�o�1=9��=���<�9���<�� ��G= �7>��.=�K =S4���i=��<"P>kC����=�;��6�=i��=I�*��ӗ=�6<v4>�����}�=�ǔ:�\�<S��=&�6�+�!>��>x�[=ˠ�=6� >�ݽ�,>3�G>@f���'=�/�=�߾<d>�G>��ɻG�`��3>o�>����v�=&�=蕌=�j���ǽ�~7��JZ��+^���6��q�=b��<�ȼ=��}<�z:xZ>��Y�3�3�(>�:oL��L>S+C=6u�={�<=xY�=c��=��=��Ž��L>xK*�;��p�k=������Nb
>,o.=�����R9=-��J�Ž:�=Ұ#�'������=����c�h�+�;0�>�-����<����=�����wM���&>�l =�Ƿ=�3�=�b*<��I��4I>pj�=��^=���=����� �C��=ї�=2����h>EFμw��=Y�2�!���UŴ;1$��̚��y=�Y�=\�.��W>�!�=��]<~U7�
l�=��㽟{[=��=�*�(\1�D}����=P��=���=__=�{(������KV=a‼�f=�
����!���*1�=&�+�!�B=����:=sza���=6��="������D�I�eG�<�h|���>����ҫ�g1��i�$>��=�R��Nn6>].<tM<�J�=���<lV�=�>�:�S)��e��̯_=��<n86��H=m9>��[=Bh)�tB>:�>A�̼lʆ>��=D1ػ���=5�F��m��������^�����>~����(����8<��X=f >��ͽ&>�:��:�+[�<��f=�߽��:=����I��Nm;;���=��=b-�<x�3��=*^��u�=7��=m6<L@��c.���=o�� (�q�,>O�� ���ҽcx�;��<�n���=��0=FiӼ`x�=s�=��m>c�*��4=�~��̻�7�=ː=*��
<$��m�=㷹��3�<������)>ڭ�d�ͽͅ޼�M�=ld�����ul=Л={�����=Ņ�=��O<��P>�V~���=�o�<v2U�뱁>��s�Y����G�=qr�=b��<��>u/�=�ȸ= 7=��gK�=0�f=����E><��<ē
�%�����<�����<�������eH�N�=1���k �=��W=�SW;���@lX>s�=s.s<�hO=1h�dUd=z����{����=��E=���=~Vf=�V=�7�=<5�=0��=g:}<t�i=����z��=G=3=ŹûS��څ<�i���ӻ������=A��t��=�WνV{*��8ݽ��=�����g/�<��t=_H󽔿=�����.�=�1:bO�Q�<��O� A!��7@;����`�=��ν.���ZY:ٝν�ݽ�Ln=�Fѽ3 ���=b���ᯗ=Uq,=�[���t=ٸǽ9)!=��Q>���>��%��ǚ<�lH=,ǽ;�Uj=�h����|�cm)��n<�<��=�נ���!��Ɏ�{:�;P�K> ��|����U��6��'���!d�<)-1=�&W=�2=�#�<fx�=s�@<�|�����~�=��<ƞ=������<�!�ƒ�>x�=�M=�6> ,�!^>�FK���߽�yI�Ξ����=�=��=)�>%�=>���:�� >�6�= ���S6Y;lJ���X�����_ت�g�>F�=`�a�=��>Z���/�:��$=ފ��>��k=�,[=5��=��>֓F�h=� ��=$q�Q����{�<��`��B@=н9W� ��ʛ=�)ɻ�:鼝P�<� S<����GH���|��鴽����Eɶ<Qxu�H{�<s >*=Ὄ<��T�d����=k�1�}�\=Ô����h���w>j7��4-�=1ٽPwd=�L=}�&>�� >B�E=T���A�=B�輝1�=��<���<:�>�<�=`�f<�F��g�<�x��� "��������=ĭ��#&�=U���ݰ{=ս��нyb��r'=�D�=��_�P����oK=�iI�A�½�h�=�7�<�G��� =�=�ֽ��<!2����;�u=32%=�i)=d��=:(Y��r��$# >��h=%]º�� =�o�=2�@>����9́==����-M�ed�<�E���"�ᚑ=c*�<V}q<|�l���>[��=M��;�*Z�&S =V�U�pؽ��ý�>.>�L���.3��a?>�F9=궘< n�Q��=$�A=å:���+>�Be�r��`�����h�9���kF�ش����=(�}�k��=Paܺ���=~55����=;Iǽs�Ľ�^=Eϝ�'��`�=cݻ[�=Q0b=�& �.� =(�f��I=�����'�}��<3=���<�j�=���=?�<R��=�x=>0��ZԽ0x>��={����ی������=P,C�G��=*E>gIJ=3�`�.��=�~U>S�޼04N>>@Z���M�Φ�=����(|��_��^�>��#�$T�Oj��M>7m�= �>+��=�����|=�V�=`��Lֲ�<�����
��u�=늇�>) �͑����>�D=Zr���x8��A���P<˾�<��^=�ڹ��y��������슽\ :>����F-��s۽��=|(�=~Zd< ���U����s�=u F�\��Ԡ�=Y���<�<k؞=���=� >�����dv<mˢ=�A=׼==�6��PE�P�\=n\}<�/�;'< >�=�A�;�><��.�׃J��甼������>��#��=�@7�+�$��ە��<&>,#���8 >X�w�Z �{eO����>�?}��|�=�2���V�=� ޽[�;�V��<dž�=��;�=���<� >�g�<Uq�=ɾ��J��>���<*A��ڪ�=�x =fx�=��*=���<�"s�7��<��S�a��=z����i�;y㔽�!=���<cm<��h8=~���,3`;������ݽa�ʼ��=9TT�����_�_�%���>���<d�I�������>��"=�*�< X=�Ӣ����=b�����,����=�{=_��<P�=�Z���>�><|4=g�s����.[��g�ʽ`��=<�=˺:>L��V��< ?Z=7L�[�>_ G��Y�<��>�ʘ�����`�=�Q�=��H=j�=5F>�� ��R��;ۓ����>S*t=�ꕽr�-=��s�=n�=W�Z>e����e��͍)>����d���=�O�l=����{����p�>oF��$^ѽ �<Y$ ���{>���S��=\������=뮋�����4�ɛ$<Q��h���q��=���=C����;�=�S�=�XH�G�|� �r����5��ՔT�q=��<`d�=c������=䵮=$x?<��m��<' >�������=!��>�K >֘9=����#7�5��=W�=C�L=rI��h=�W��=O�ڼ~����=���=L�>��>>("y����=� >��j=�<��̨=\ڢ��-��n �� 
����b��+�)�En��"��jѻ���<������&p���=�ә=����ɼn���|4�|>,�����x;��&a>A-=DE}<�F��f��=|��=�q7�8|>ְ�<��>�X*�N���w�:�Խ��.�k� >�5���<����X�����p=�'����= u=E�<R�=�3�<��U>�4�=<|�=�KA=�7>����ˡ<,��=���t�=�i�=5} ��wc�6>[�=��;i��;��H���r�� F>���F��Yz� ��=� =�G =*s�=4y:/I>y��=��ü������-��=�ǃ��9}�KC=�Y��$�=���=J����>�<����}m�=�
�׍�u�b< �=R��=z��<�K�Y ���l=` =��:w&=�<�<
5y����<G�=�ss�pٽ �n��pR=��:؜ؽ�>|N��)�=�|�vü�� \= ��<[�����ɼ�?��C�<!��=�#{=E��=�噼� >�V����=���ָ��|+�>20>=�z=�ٚ�޿ ���<+���e<U�b�����B�<-.+�H���k��=˷����<IԱ�ᆘ=��ʽ��=F��* �N��=1�ż�
�����; �<�h%>�0����I>�r=��;>�]O���= c>����s�J>�U�μ|y�=#��Z�4>��J=����b
�鈽��d��4�<J6 ��_/=��<�F���}�=��E=7�<Q�=� ���;��K>��;:��9���=�:��R;��nr��3�������=e壽�@g���k=?�� �2����=-��<��������*w<����T潰��=fY>�#%>g�&��ޟ<�CN=j�&���=E�S�M������=���)��=v����=-m�z༽d���t����=<��=% >vCA�~iN=Po�=
E�>㡆��(F=���5�WG=V�B�rM��h��� �<�-z����w�w��?�l�E<$p���[��/������>�������������Q=@����L�mG�=��y�$3��� ��y���ek=Y� >:L�y��=���=w���ƴ/�с�!��<� ����{|;� �<o��<[N`���>J?=� ��"�*�!m=��:�:��=L�ƽ�����ф��=z��"J:�wI�l��=YD�=�՞<���a=<珉<��0=��>����u{�֗=�Z*=0�?8��y��}4;��-=����\Uǽ��=���i2�=����(��?�;���<�>i��<�?��m�K�nr����� �=��>=t(N�H%�=��g_�:q>��=,��=�v�r]+��X�=ܠ�Ȓ��3�!=(-��r=nM�=�'=a�>���=pD�61�=>�+>{�=6�>X��= �(>|��ph<C>HYc<��=Y��=(��үB>{�,=o� = == =��$!=an=���=�Ӽ�� �j�U>%���
����d>��غ�ӛ�<�b�\->>[�>��&>��u��)���>��>�0�=4�b��!�=ϲ=����C��=� ���=׻=���=d >�h�</��=>,�=Y�<���<e����K>kF4>��4��Q��=k>�͔=�P
�X�C�N���f��߁5��`ݼ�;�=w�n��;f�V��=���=5/ ��fѼ$g<>��5���Z� Q߽��j��=8=�[¼�*��x2�=�t>��>d�{>Q\=�<�=F ���V:p�� �N=�|/;�� ����^�\�V������qC;��B�;�~=���<�~̼j� ��ک�����Oý�Q��!:��v8��[k�h7��*�=o�=İ����ûf,:>��ڽ�(��8��� ���=�V�<��j>k:D=�TB�� ��9���(R =y��=��۽���=�:�F����+�� >y�=>7yY=/z;P�5=�:>���<J�/=�Q�=s:\Χ=��"�Ѡ>�X4={ժ=��Ѽ��=m�=���=Q�=�m�|�=�Z޼��2>5�<�@��8�i�ճ�=סa<����A��4ý̇W�����@����û������<EG��m!=OD��31���)��-�=��=D >�V����=�� �ҫ�=-4���?b��4�Hx��9�*=I��B���1� >��ٽ:eɽJ�޽���<����\��>��9���L=m:�����g�=r���_� ��zG�=�VZ>腮<l�v��%�=#�=;��<�x >A0=���1*<�Ƶ�=���7�d��=N=�Ԧ����=���=I��b�G=s�4�} ��I꽄� =�^�<n=t=�[�=�vE=k%�=�/�=„n<��>�4a=:��=B�Vߕ���Ǽ�iu��"�<��s�R-�<DQ ������S��˂=M{ >�P�;��p�� 8=��*<�ok�g9�%�=kC`��h4�6Ö��c�S��<�����2�'d� ڼ� >W"M��96<�> =Ό�=n�
>Rd�d+���= ��<aR�����p�e�q��� �<$��=ʄ=�hq=�=��u�0U�=��'>-U{�m� �G�H=��G>� ��3��=�$X��0�?�1�@��<��<��=<��=O�Ҽ�����%r�L{�=��<Ĉ<0��=�>� C=%=<Ĕ�xMd��k��L$�����d3!=xVe>���=j�u�k�����+>�=z�Z��Q��;^$r:�Ņ=�,=.Լq���?�.�h����6�����cY�=P0>����2��=�!>�H8>���e^0�T�ý�r�=��=v���s�νi� >����VS�=FqG>�<@��[2�
J�=�s-����:u�X��}�� |��yC�, (>�%��������H�v��k���F�< ���̺�?˲=��<T��<���<$�=.���c(>i]�����v������<�ۅ���g��#�=���=�v�= ��o��~c�>�Đ�bI�;���<)ýiW=i��=� >tM�=Aޏ��+�<�\����=~"��K�v�[��k��2�x=bׂ<Bҭ=���<�������pȼ^�<�}� �k���o�����9�=d�_z��a�<�p����>����/������~K��4��<d� =Œ{�N�<�A�=,���r%R;|#�;�>:}�Mjk��� >���O:B=��ʼ;��<��$> �|�#���1"`�H����lv�q�>�齽�&ѽ�3���~�Ms���g=��� (&>������p>�P(=�f'���F��yr�܄������ �����7>Dk1>����[ m>��H=y �=��w��1����>�I~=u��=��h�͟t�a�Z>��纺�I�-ɑ<�>��p���HΖ=��>�VǽFp1�t_��Q���{%�1m=�b=h&>1{����W��W�H4%�������g>A��=ȗ`�[͗=lAG>7a��]%�=��=��=w}/���^���w��Le��gɼA6>V���%�=��#=�(�=��>������LF>� H=�W"=��?=��83�=fm�=��6;"J#=��<��l�)Ǽ]�:�Ns�%�H<k���,=�W�=�X�;�y���z���uݺ����TՋ=�27=�� ���,��󴼭�c��o)>�� � >ҲT����=��=F�h�����<x=Qۻg���?Q�B%V�#�߽^- >}v��}{���>�<=���Շ>r���Y��=J�m=�a�<.k˽� �<S&5�h"b>���=�F�>X9 >�;��"J� I�=|�=x8���*���c�=�ԗ�3�_���K=��ؽ���A=༶h�O�I<�꾼,�����A�K�>��ҽ�==;����c��i���� =�����o���0�G�(S½�[��9� �����b��rI��P ���l>>�D>`�>�F����&��ʼ�<|<�ǧ����;���_J�=����,XW�iɽТ-� u�����3�4D�<�T�̎<>��K��N �!����=�m)=�Q� <��<��Yo=����K5�"n^<r%=]��=�?�=���` �=�������>�𼰿|�9$�]o�=ĉ�=Y��<�J���y<ܕd<;��K�����U���d�X�<�����v���P��ؿ+=v��<��6� ��<�L =�#��,i>�����<ce;
��=T��<���:;�=�gf>[=�g�=�/�<xMH�M9<=׼���c�u–�
^��%p;[���IU�=���=�U����%>�T3>"^8���>�����d�ʠ��Z��=���=;0�=z��=2��棽��~��N�<�Od<�m��`����0=R����1=A������@p�=4]W���=h �<t��-�&=�-%>�O3;��_� z�F�׽����G���~ؼ��\=�7�k��=P>;��=NT��yY�<B5�`u1�]u�U"�� {=�]>8h�=�;����̪T�Y*��³�Rb�ŗ�s�л��\<o9�<�c�<Յ�=m�#���>?����%�=�<3��<�q�W�ڽ-�%=��㼥+�<���<��,���"�9~�=���ֽ8V+�_v�=,f��T�����,���$��[�<����?��;g��<�Q������u��9����w�c��+�F��r����r\��?Q=��л~}��q>�Y�<�A�=��������=b�̽�!.�m
D>J��� >˨=�bD����=~*��{�;xȽ�d+��&�=E��=��<=�����<�=AMu���佊���b4x<�
��p8!=���L^!���$�񿉽��k=�����E��T�=���7�D>0E���>�&��g���"��~5���Ӽ);��N��<?<�<�Q ��K�=6� ��Z���=eeA=�8>�-��=��ʽ�'��l����">sqʽ��8�=١a����=���<'R���+f��->,\�<Q�@�4�ν�G�����=)��=[��J��<���d�=�<�>�C=�=�>lM�=� �=�f;�>da��ˀ��ȼ��̞<b<��3������= }�=��)�H`=<��<d�����<u�t=R=�Y5=ԛ�<�NG�41#=�6���*>=j�ͽ����l�>ɾ����_<qK������?���$��UM=_.=�&>8S�=�2'>�H�<�_�=g
�,���J���� _:Rm罥v=�*@,�x�0D�%�b=�O�=��=M��=mQh��������⼙j<\���X&=�a�� Gֻ����P���l�H�Zc= �'� �Y�)��P=�~<��A��zm��~?��H={���|ҁ���>����IT���B=��H>_1��{��<��T=�ػ��^�=���=������:��R��
>�z���
>/X�<z`��%O�u�/>0��<w�= 6�<���=����X=~C�=�u�=���=��;]��=u��;q�����mG�=�E=׽�i̕��!=��=���=�k�=Kk������� >��u�7l�=�Iv>��W>u��T���_�=�2�Β�=q�<[ѧ=7���[�Խ`�+>�a�7�>�n��4�ĽH a=�{T�i[�=~��:$K>B�%<3ܕ�!a��@���)=��>yG>>��T=�~��v�x�vi��q��<]V�=�=��=M�4=��>_S��G�=Pz4>���=�b,<"6�;���!�u������|=�:��v%���<��$=&�=��K=�M�=W�=),�=�"==���ط�=Ѓ=#���D򼅽��B 9>� � �w=�<�EԽ+载������ g=>����W'=���=:8:=����2rG��ۜ<}S��o�5==W���U>X�=�3���|>ot�>[�r���u=�d�<�Y��N
=`Kz��
��@)<=vͽ�i=�!U��\��|+>���n�
>@���=GK;�ı=#�<��������N����=ؖ2<t#���y!=�$<���:��=��Y�OK�<%�<x�X)��� �=���=;?Ȼ�)�� �z=���=ܦ ����Y����y~>���jнBā�aSh��%�O�+>����d���gk:>\�Q=JY��S$=�\=i�9>����*���Gw��=��� b=��[=�ﹼ���=3�s=��z=X%��=����>^���ľ�BB�]�<�yd������<d)&=�y�<����S�^(�=W�{<��=1"=PG!>�Me�'�S�ü:=��=�� ����x8���M&=1�ڼ�=�#��*{=�<�b>a�3=���=��e=��'>B�=�:]�&ͧ<��=�\�����=E�<_B>����Q��=���>܍�=^��on�#aH�摋=1�Y���q���pgB>(��<{���{=*7��ƹ��<��5j����c�H��fT��#:��'�&>����<���=��d=�ŽS޽oE$��?%�Xxӽ8S~�r�=���<��'�jM�¤�=UWS�Q�ƽ��=@/� C>w�0��v>���;�˽Ae>��d���n:v��<�� �z�=���~?�<��L����`�A<lD�=.�(=A��
��;�����C�t*q=~.e>�^���@<@_�� �)e�=W|�<�L0��Q�=��>����񫃼�@o��sM�#�?<��<�k��{��=���>���=�-�������f=����;�Y�j�=_�g�����8$.�=�j�[�1�>@���7����۽Y��������s�=��W=A_>&�!���v=�1#>���<-�>yf$>�ē<>e˽�hx��d�<K}�0�a��)�=�Յ���[��M�=��y<�Ƚ�mD=����b��=���=��/���9>���=�r)�Ž���8w��I���(=C� ��BQ�o�_=�9��;�=�_�=8V=����w�=U/_=3f���Z���E=�l�=!� =��R� ��3VȽ�І�B�R��A��Y��=��==�����<C=��=�� >�8>hn=u�=��� ӽ ���Ao=h�%�s‰���-�>f�=�̵=��>�2�j����������z���6}G=�f�`�]����=z��<��>�~�=6Xe=X��<�=>h�='���q���>G����V�<cd �5����q`�h�=?���U�9�G's;����@�����P�����=>~C>E==H�>=��D�կ � -N������m���p.���`��A>��*��c�=㼰'(�
�g=�ݹ={���vν-��;�U_=K �����0�V%6=>]Ƚ�����t�=J�(=�F`���(=�������_~< ��=��
>�#�;�>0�Q�3Ǻ<b��Ev������2���ܧ꽊T}=]3��Y{����<��>��|=�㽡�P=��=؁�=�=�=��@��Oּ�$�"���٦Ƽ��ͽ���=h�=ph��b�=�e����=�i��9 =v0>ȃ==k4E��q�=3�|<����D�E�8�3=�@��e=�@ý�(�=P�=R�ջNԉ�!��<��⼬���Y��<�,�=�<b>��d�g�ٽ�=�����ɽ�ە�{#�=�>>��ƼM�� �5=7>&�D����������=P4I�=5x��X��e|�O�r�<�=I�j=��>>s*
�Z��%�l>Y
e=�������i���f�<6��=���1��=��#�`x�=�c��:=�����4=Y��=�E�=�`G=�z2=D�5=���=i~>Xq��g�����y=�=�=7�����μ$�$=>ֆ<�����L�=����>%K���">� .��|=s�V=ۀp�Z��<�:�;z��+"$<�彏s��.�ڼ�G*<��=��<�7�=���=H�Z>(���'J�/��N.����=;���Z-����=ͷN���-��)L��ᙼ/|�=I���6� �3����h��r�<��|��}�>b��=�t�=� o=��ར��=l�~�V#�=���<�~��vZ�*����p����]�͈z<��=��������=�vm��|�=o#=��x={ �_��C��=.ᐽ6�#�T��;O�/=}lm=�� <���=�^�ej��>>�aR���3d<q��su�=���;yn=�6)���;�0<�s�=�����>�n~=tf��4��=��$>D������<�r�={�C=�����F����=�& =����_<���=9�E<�,3�qܽ�'��#e̽Q�#>C
�����.,��=����:k��딮<�����D�='����&��p�=�λ��u�<N�B=K�|<��<��>�S,���N=�
��-���Ae�@W�@�F>�r��#�m�%�+�Q����0o; u5>&��M�j=g�=�դ=�s߽�Ž;�C@��~'�����8�����=���q�+=vS�=%2w��啽CB���Y<"���^�d��@�;7��ߎ��;�ӽ�6>���=m2�=^�<�mi���S��ff=��<��V�P��<`D=*=���^�½���=�>`Ӧ�j��HI���b������H�>p��(�t=@!=���=�)F� ���3���ߛ�=zC8>���Բ6=�3d��֝< A��� ��3�=7Z½>�|����C�ք�>���[S���1��k�=�c)�^�y==���=�����g�����:�G�=��=6o4��6 >l��=���=��O�z�<.9����=c#%�C`��k��=���<��>מ�=� H>�7=�:A��=�����s`;��U>f�v���!>P��;Z��c��=����:�=f��9�{=^��\6��J �%<�F�=�2=�U���c�c>t7>Q<-��5%�2�#������9�>c�v<|�>����� ;j >����P��=#��<K��=e=�#8���&=¼=<��=5�Խڻ�[߽C��$�1�u>I92�n�uT> �F*�<N(8=�6��w⽼(�=Wp=��z�U/�>��=�ut�� ���(�nS�;�@ν\�X��<5_�Vr��{ >}&��%>3iҽ�N��ϛk=��˼ob=L�y>�$��t��� �<A:�Y����>�#��9>��>�G���������f=���;x|ٽ�΄;��=��=��D�<"E��޵�<7G�=b��<.�&=v6J��)x=&7�II=|E�<���u�>���9�=�P=�q�.��lc>��;i�˽���:�=�5�=�J��m: �3a�K�U��;�� =�a񽽎���=->?�;]��<����1u=�0/=U��=̃�;o�ǽ�W9���t�g- �ˍ
>(�<��=^�<����!��䊧=����w��u��<�������=f�>��l=2�8=e&�<ݦY=^=�c�=�Q�<O<hC?>��=�D<�D< �>��}����:��D�<jS���>�<�=�<ēC�)ʧ���&=�n�������L�:�8���㼄���4n�=��X�;� ����=A�J#�=���~�>�c��=Ⓝ=��,�1Hd��?(�
��=����a4�>X�:���9g<�5�<jes��k�=B=j=G��=;=�U�<q���L=
��;Ƞ� 4(>�^��� j>�k�<e�1�R(U=#1Ƽ%�F�0j���������/Ux>����_��0����>>^��=pf
=S��=��W���;A��;�����B<;J���8�=�+�=�|&='�������0&>�
J�ɑ~=Ž���=g7���A��i=��'����<������=N���<� �J݇<k[2�j�8�Dž>z�=��½V�R�jl>ҭy=E���o�9<]�Z�s����>���<W�1�qr�v�$:�p���n�<w��<_νD�)��w'�4;=
&J��k]=�|ǽ��P�Jه=��=�X*>��=,4\��[9��ýh=='5D�5N�=�O���=俖���D����=�$���5>5y>w�=��s=��=·==U�G=9l=�5>U1���*�=^�t>�œ<�-��$�<vK�FX��.>+5(�P� >�O��O�'��I.>�R|={��IN��|�<�����!�=���<u �����;JN�=)�C=��=�)�<��#>�.�=�l���:�������=u;��;���=���>H�=|�v�x#M�NVX>x�A���<#�����y;�畽���=�K���P>�`����I=N#�<�":>y^c=�X(=�J�=t�s<c'�=ƶͼ1�C��$ =΀�<��=̢A=$y�=���=m��;��=��K=q��;���<����BR��Ը�=�A=�d�<(=<������=�CP�ʖ�:���<J�Խ��i=� ����<7qA=���=ꫧ��b���d�<r#�x#����=��
=�8лy6���-�����Nh���νi��8� *>�>����� ��=�ׅ=�S�=��4>H�<���v(�r�}<L���+�:Kv������P��B�=�|ν�M�=K��=b|�=�^9>`_ýۯ�= 6����=p��caX=� �[��<��Ľ�K2=OAQ�6-v�/*!�K�*>��E�����Ub�%W >�Ӌ�|��� )1<����\�=�,��Q�E<ј߽`�O:lU�=|�<x�P>SB�?�`==i�<�Tڼ�n�=�&�����=3 �m��(����>���$<�;�r=BB�M���^wj=�K�����<?���`�=�������2��=S���}=���2� ���; y�|O��N�Q�"<��=X۫=�.���1�Ia���:=����J>��>=i���r�=�z =`Fɽ��tm;�ƽ[�&��!4��3�9�=j���\I>�b =�JR�`k�9W3>��-�v몽��m���D<��ʽ�7H=5'=�<>넺=y�>���hp>4#�=��^���=���=��_�
�=e�f=龥�ҟ<�q>gD ��i�=_C��v�=:|�;8]O��3�=bW�<����I~���.h=Y̼��#�2Du����=���� X<�͂� {�=�_��9�����=�*�@���X�=�$�����6��<}n���ٽ�K��hd<��'<k�={Rν�(�>�*�=4=���3������a���sA���K�|��=��<v�h�2{M����_{=q&p��.�=g��=c!<��v�7�=5�B��F.=�3=�zn���>2�?>�h���D-�������79�e���!| >ż�<a�=�,@=I�>7H>�)�����]�<���=e�9>#1�=���:�{�ܐ�=-:!>l-�=��=�TH�羷�� 뻊�;p���Hz�;�<!=c鬼�I��u���e�L�>�0ͽb�?=ز[�e����������A,׽!��=@F=/�<Y�=�p˽�?r>�C�����<�dz=��=���=�Gm=�N=4����<�v���=�`���k��' ��� e=y�߽����LZ�=|�=�߽_:�#s�=9!��c[��MY��������<��e��� ���<���z�����$����o=���<*���=A�=�Ƭ:�v+>�X�=l���#>-���OW�= h����1=�]�<b�p=�������=�6�<�ƞ�c��=bYj=����l<ӓn<�9��� �=��Q��ȝ=�F���=���գ<J��/~U���V=�G�Z��>�Iּ������=���<4`=3�=�)Z>O\�=uؽ�T彬���A?t�s
�<�;��>�L`�e�3>���S�=#P��3vk�`N���>��;��g���
=����q�=B�=p��=�v��ؽ�:*)�� A=��l�k+���t��U�~<v�=�u��f�Q=ǿ�����T
���-��
:���=xYG������zz=vc�ޫ�=�'���g�=r@>�(���$s�<�e�Lb�̥��ȇ���(>���=k�������^�v8�>�(��7�;=�����߼V���*>NO=+��8�=6x�=�n��y�mz�����=�c�<ȧٽ���=�x2�G�=����
��=�� �R^��FJ>J�>�n�/s�<�-޽��ս7T>� ]=��<��<�(>GVQ=�˵����=�����<=MAc�+��<��5>��=�2����F�1���/={2=��=v���<Խ�I�{��;����L�� ��;ǐ�N���憽Ҏ=���N���#P>�"��w��B��=֭��/h�=���=�!��������Q �=� ������=�R�=d ���
��"G2=�DE=!
�o����6�[��=(L��k�<���<%nR=��=��ּ����{�������;�lS=;/>��=z��=�?����]<�^�=F >W�Ļ�!>�hԽN?����<%zS=���< �z��O-=�tI>� �`�>|��v�>��d<V=���=�Nż ����v>^�=�e=�7����=!�;=M
��qڽ� >a>g�zn=�j�;��=�/<�̾�%���� t����=��ɻ���=D���L��j)Žĉ=�PR=p�(>� ��O�>��<��^�Vv6>�8<���a=�p��;����c�=�T"�^X=�o��4���` =N���(����fC��f���<9�=F�=7�=�*�=$ �=��<G��ɫ<5�4=A�= Q�=q 4�G����Lp<_vf==�ý`@��� �=��"�5�B= ս�l�=7� ��3�}��WBӽ� =>��e=0��B$=b�=.8�<=|V�=H�g�������*�޽#�j��#�L�;Ut<-�C��CM>�R�aŽ'̶���e=ܷ=����f>\�=��=^ƽ�@�;& �:[Iֽ- ���U�l7�7?��� =��o>�^`<j�7>a\-=ָ�ИP�{e=�7�=C~G��'�;�E���jo��c��4�=��{���>�Y3=;e�='���`��y߼��b>PB(�4�H>D�=7�5�Ml,�p ��͐=�o��
�B����u�=�>>��<���=������ѽهE>au��߳=��żx�=i�>c=n� >d<�������=
���O�!<��y=��0�m��=�;�<���=WfD�6�뽷��lq�=�A�<:`�9� 7=[F5>�Y���a�=\m�=9�㽒M=�~�=)���;���⚽�_�=>(����޽�P=_�0��e"�v>��K���;�?��p������>"*�<kFc;��
>��̻�TC�@Z9�M�
����ͽݼ����ػº ># >C��1��{C۽���=��=�7��hRQ>��Q��H�;�,��ƽu�+�g���d<�͗=�t<�T"<d��=f㗼�N��U����\����=�Uݼ �N<�ǹ��ϣ�w ýIGK=HG=b��@i=!v�;hU�=�Mo���<��F� �=�h����;ϙ� ��=���<���=�ͽ��׽���<����qd�=��u=�*�����-�$��˽s�罃"C<�-7=��=�*�=c�<�Y�
Z�=�]%>VZ�<�~=9#ѽ�o��9 ��= �= ����{y��v=��r�`��=�a������ �sõ=�f!=8숽3飽r���2?���,=p���b�>g��������=^ z=�vI=o�_=��w=,�H=�?�<�J���ܺ��^��ș�;4�.8�=&>=�b�e�>e]�=��>�Q��(!�=�c=�t�ǼiU[=)��=O��;��,�(q��_��=������<ϣ'�蠤=!8�=(��=X5d=xԅ=�H��CN��pK�����4�B��=�޽$'ܼ =��5����<�?¼�J�=�4��t�=��ƽ+=�i޼+6\=��$>����\
� �L=��=Y�<>�.�=@���D��=g�p�>P���<�;v\�<�.�=⊃�)�����;���=�3нI@+>p���g�+=���=���<Wn~�8O�>��=����}���2��$�s<���= *�<����H�/>���<��5�����#>����HZ�={��=�����=6B�������ZW=?�X�Os�=���=�P�>�u��x��,��<��=����T"�pxd�Hn��l�<��"�ym��?��^3X>�U=�����a>��J���R��=�T�<��n=IYŽ�=�_�<��t=Z��=I�'���=�ㇾK�<[= �6�f? 9�=�t3>���'�>��=?B���v6=E��=�U�=rm�����=)�9>�Sn<^aD=�$�w5?>K�⽒#>�5<�{���>= n(����=��Խ𖞼�Խ=�1=�bB=[Dv=����!A��?�= ��$�����?��>Y�ٽ�_`�2�;�.�z�U> �=˯>.Q�=,�������Z�<��<:�-�x��<�B��AP~�E�+�[ؽp��<"�w<}e>��j��_�=@v�<)o^=u>:��a�=�1��G�<���L▽�9=�����=w4<��
���@���y��=û�%x�����W��I6W;)9�=?/����>Hڼ� =2�=�>��Z�
<n�}<�o���-�=���=�Z�=;9�7�<>���9�r��iY>F1<�ƽ�2���恽�#l�l��=�`W>)���N��|�K��7��^h��X�=�W�{%�=�Wc=ߟ���x��b'r����;(3�=�&�<��Y��i<S~M�Т'>t�
>���=(���c=�=$��)<=5jy;�`n>��p=�L�=6{ɽ���=DJ{�(_5<���� (j��;7�����a ������o��<V`;�@!���@��!����Y=����7=Š�=�>r�/>�{>�&O>w.�=����B��#i�<���G�j�$/u��f�-Bq=b,c=��z��U��q���ƾ<��C��R>�4;F����J��o�=_~;=�y >��9>��ѽ��� ���Q��=D���H*�?MR=�uս��ν͑S=��� #{�;B
=ӸT>Y�#�5t������4�8%s= 0\��V,>g�`=B�=���=-�Ҽ���?�ڽ���6�=G�=r>�t�<�K1�<��ɣ���MQ�s�M=�48��e��>+�v½���R<��>��= ��=H ;>��P>~�3>I��A�����]�*��<<j�=%,���FϽ�;���� ���<�>�B��t�}��({��쉼�,>����y�P'=��x�ߑm=��>F��=5���T&��>2=%���.�=�f�=ϓ��^��=󙵻@h{<����e;b�p�9>��>MD����<�#�� ���wd�=������6>�2���Ѿ��z�=ww�=�1�=��2��6��1d�Y���`>Ej8����;��<[�-=V�B����q=U=�=�u>��!=�=���=y2>}o��.���w�=���<�P�<�>5��Rى<��̽ic=�=R>���=r�=N�ͽI=��6�#�<�;=l������=ʑo�����;нX@�=͋�;ltW>X���! =�^=o[K�Չ =����}=�9��uns<z��O� �n(>W���' �u@>f�;����i������h��<����O�>��[����-=N�ͼ0�r��ɽ'm�=���=:g�=,���TQ�E]�=Qh˽������ý��üBԳ<�����<�6��t�9���8����Y&� �/>U���a���Q�N��=�� ���<>�EJ>�-������� <4�d�\� �-�!>���=$�Ĺi��2<�=��۽V�$<h\>*j �sp>�G>;�W=�1����V��N��m����=`�� tJ�P������=���=�d(��)>�O��y����{f�Z벽1�>|�=��ڽ��2=��=����e$��he��%�=��ʁ=� M=3r��h^v<���=��L�s @>���f�g;������>�P�=2
0��8<O%>W�~= � ̇�Y=��^�
� >1���r���Jv��Ჴ��H>?&���oo=��U��aU=�9���B�����+��:���\�T=k� �<}�<>��;�:/�(�k`� ι=�7��]h��n��=ʺ��l|=FGH=���:eʽ�l�����I掼� ��x�>��vgD�Nu���/�=��Y=�\���Q>1�>�$�=�&Y�`��=� �=�9s����=�(=]}�=��=����9�
=������s�E�=�1�<\��=Cji=2ǁ=�3S=�ܯ��*�=�Q!�߶�=PD=M�d�@"�;�h�=���"�潖5�KG��dG>x>�����½2�Y�hμǀ�;h�+��F�=�5�2v&�B�<�{�����=?�
=��)=X�|:�<�|�<¶�����,������=4��=��g���3=��=K>�=�1��t�ʽ�<����<��8�����_P�=�)�==���м�6=g,d=A& =S]�o�d����9]�H��<]�~#㼹��x�>ޛ��>�=�<��׽ L��Op��#���]c�kN;�<�=g1��^o����x<d?=���p�u>��N���=��<i�>�7��fKG�跊�>{e������)X��y�;�o�����l�B=7콒06���V��]^<f�����=��Ѽ�s»��=�)e�q3�>X>��<�f=/ߓ=��F�0��<�'��~�������,>��=m>�i��
>��<���=�dB=�Aѽ��=�x��7���R�L�c�=���<|�,>���<H|��XvB�4��=O��=~b�=��Y>�H�<*� �g��"_=�33�K2<,== �=���<r��=���=��𽙵P�<��=-P;=~��<��>�'�=:"���3=�z��,��[���I-�=�<��L�&=I��:S�$<�S �
��>�}����U> �6��%��[������6WX>��+�RX���>�s*��%>��=>�@�=G{���\>{lE>P��=���=.E�={�E=!��=l�=�Yƻ�Vz��n���N>�Z���Ff;@�=C1��@"<j[��{��l��=V���m�$����=���P��e۽ȴ������N>�>�fl>
&I>(��3L �D.��7�������o��׶=)�S��}�� ��<��H�`a��R�;;<>��=��m=���=P,��jW$>D9=%_����=b�`>�:�<e�j�Z4>�I���nS���������������=Ej=QҼ�>:B�=u����=+���=� K�ʐ�=�6={Z����=`]�=v�O>���=��=�km>�eK��ʼ'Z�<�T;>�P>���(=Վ�=�C|>��-=$�V�䛽�C��<n<�����zr=!��=s6��P4���=7��=Ԧ�>Kƚ�Mw���<�<>�۰<wn �z��=�!_�ק=S>\�O>+w$���< bB�u@�=@�h=��4=*��=�E�=�w�>��O >��*���=Q�2��ː<\�нC@�;se�<|�8��j�FK�D;��2�X<P�<f��=������~<�t�<P� �0B߽,Ii���?���>�ֻ龫���������'��^@���p>Lܾ�����k�=Hz��yF��F��=�A>E>�X�=�q�=:8#������%=��=��g=Nv4<$ =�R�:�����-���T�Oa �U=:��Q>s���h.E=կ�<�g<�Ï<T&<<V�=�{�����<��b�ؽ湴�������L������7e>=h�4>�͋��7���ui�>�<�0�=1�<>����VJ=XZ:>�=��'#�`.�=�u�:�����=oנ>P#ϻctb��X�<R���}��=-l=~�Ž��a�=�ŽLL<u���Q =�FI=3[`�/����K>֬ȼ�#l<� ���(��)
�σW<sNM�� a=[�0�)��f`O=z3�=�4�<Gv�?2�9ղ=�� =㌁��]��_�C=�G��)�=�gȼ��m��3�$����=���=<�=/w޽�ܫ=b�l�W��
04���<�~�<g �'��=�^���=�0�����<��
�d�=�tp=��1=X(��������O�>������Ja_������6�=�J��T�>czE�%!:�/�=%&��/H�<�7>��ä��Az.=A���}>�����{�<]�{��7��N��'�<��=gռ=�p>gb�=a���v��=i7��g�^�S��Q0�p������k-};��򝈼��:���=l����2>[>=����~ヽ�M=��P�=e�v�E�Ľ�������۾*<)v�;k73�2�$�ХͽI�v=pDY>�D+>�k�����=�=��
>0����D�L���1��>5|��+M�>Y>6���C;�=�����¼�����[;���ν��=�p�=p����w�-7�������m=dZ<=o�Խ�#=������l��:=�=�漇��� Bս��=d�:>�����ƽ��Ӽk��EP���c~��W9����<��>�6!�A��=��\=�7&�1�ϽHs���x=����z���� ��|��8F> ��=�ι��ς<���=Ct��=� /�G�`���`�SD�<J�8>S�<J��>ᚩ���=�����=(LX>�
����7��
=��#�^�����=�<m��7�x��=5��=m��Ԡ��da�<]�D�����hu��E/ �M��=Ң����=-}�<s���䎼�Uۻ�W���ɻ��[=��<��B=��<��.>c���(r=��>���=�� >,�a=�J � 2�q5޽<��=D�>K%;=\,�=�6A�H�О�=5p �����B����8���=�m�=�����yC=�ج�}'��)�cd=M���!�*�&y�=���= ���.�5���="7N�M�=��=Gޑ=齐ǜ=��̽�8;�`@>�:���
= ��=Diܽ�o=Y��=vQ4�0눾��=ň�4=<�A>�n�=�v>��=zf���ZD=0�>��=��B> �g<�x����=�}���ޖ=��l<�Fb= �ɽ��<�<����m;N��� �$ٌ��2= U�ՙԽ��E��Xt���潂����6�c
����$>/�ν��G>v>=<�,��Zm$=H��Y�{=����lZ���O����=O ��۞��8ҽ����bo�����+��K=�t齳��
��=%J�<�J��pu��,Z=�\�;j-�<9���M�3�,5ӼGS@�_�>i4>w�W�������h-��
� �;�=�6�=����\�=��=n��{&�=R_�� 8>���2�>Ob��:
>j��=���������=j_�a+�<���= �����f��"����%>��� �L�b�=ޞ��y�!=W�n���=nȭ=�7->�y�;б>�_�;
� ����~1I���=V��;�9+���h�>��<���=~N;��ҽ������<V��<$_l�r�>=�Ğ�Կ���?�����`pc�]">�,Q=Z�l���B����I=��Ƚ�O2�c`e��/.<��=O \>lr>R@�=-�н���=��#;#�B��?/��d�=�̇=��)=�@��E-�<yso=�;&� 3�=�ɽ X:� �ؽ�Y��8 �cTǼ�
U;,��<�D���#�����V"���w���T=*g��o��;¬�=X��=U���-��3���� @=�=�2��3*�:�@=���=�����K9��z�9r��=v =J�u�~u�=]�3>\�߼F:"�@{=�����V~>V���s=�Z�����=L�������$�=�1�b��= ��=Y �<�m���<��o�H�B�S`�/���U���̽����
>˟�xy���������'�=� >��b=����9=�>���>�"���I>�������=�|k���=me/>74�<��>@��;Y:�a~=�^߼
�����'>� �=Qe�<�� �1����>,h�����=��<�|I�=$P�=�:���J=�
;��=��o�=:�Ƽ�]�x��߅�=����N�=ހ�=#�<���=㝼* �r#�V�2�񂲻rԽid��t6�A�b��_�<a˼��<n���o< �#�C���!�<͢��t����(7>�<��QmH=�jѽp���!����� >W+�=!77��S ���������~?��c�<���֦u���>y�D=�Z� X=b����8=��b=�f�<5@�i��2�ゥX��[y�=fĽ&�;�������d��:��?>XY�`�x�> Lj�������=!=��_�{s���)>����S=u�Լ�,>ƿ�=�P=+��;��@���@�V����=�r\<�T$� �>5l�<N�����ۥF> [!>�������< �D<�������w��=�׵�����h�� �<��<ˡ���;Nf潥�C=k~�� j��'��=���=�=���2F �Z�=M�r}(;�(�=�Վ��ェ�������=��J��#�=�$= ��<���d鯽=s�=ns&>�W��Ԣ�=�Ą=-���\E��0M,>�H���\"��$�;�iԼ�� �g�������H ��V���;+<)L�=N��=s]���]=�vf=��/�(^��}�(��'���˽�#>��/�O>�����<�4�A�H���>Қ�=,���ɉ=P}�=�c�=�Ù�e<�= ⽧}�<�/����g=
1����<�|��E��Y��w�^=����7( �f��`\��)�޽2��=m����r�!����>k�3>�I3>:tz=܊���ٽ1xg�m����=�a_�,i.>�������=鞎�Js���(��by=�&���ӽH��=�1 >1��=~��< :=`jݼ� ���[�ԝA�&�=E@���S<���rr]�H�>��=�=��N=p����ٳ�/�޼F���N =�W�����=a��<CH�=o~�����%�����<�����:">�&z;�����@>!���G�Ż`�<5�d�e�C��w�1E#= +C;d�=�� =鸚=]X =H�=<y�<]M�=PT�=�����ˋ=�@�<!='��>���=?_=#e�=�%3=��>�L����=��ҥ<�< >����"�;����=�v��4�Jl�=����k޳�շV= �ϻ��>i{�=���
���������I���i%������9n`=���$�4���1�k��=2��=��r�M>V�>5��<ͩ >+b>�ș=#n+=�ۑ��æ=ǀ\�v-�;�m����`�a�,���`��/��5,��cf��6�. >��E����=�>�? ��|�=p>F�A�n���`&>n��>Q�X�GR7=Ou��ҕ��yj=�l��(�����<" ͽ1_�<!��>@��=@�˼�y==b�G=E� �����e�=���=�ċ=C��=1o�< T�=������=��T�����/(=��������V=�&�>�˽ݎ=����D�j=��#<'�0����=B�6��Ÿ��9+��;���<D"��$�t�+�*�L���2�=,<����$����l��=e?p��D9<��̼*$,=��U=�0�=u�>��ν
�h�k�P>d�]>!E�����bAټ�À�镽=��<E]���=x���։c<[Qc=yo�;,�Y����:]����#��y? �7�3�N�G�Ev=-�������1�~>��L=Kuѽ���=��=���=3�=�e�=c�'�D<�=�ͽXDZ=�)�=�0�= 4>A�i��MY���`� >c<�=,�8C�<T>���lk�z����㻨���G�<�ė��������<�[��v���e�=c�>w�@��J���k>Y�l���>'B=04�;�G�D�z�2���DŽ���+����[��1`�dPS=Լ >,>��}�<�� =�LO=Wf�<���<B����d�<�ָ=($¼�=�:�栘=��4>%�=���Kk�=R#��`��<S =+��3�=�K�>S� >K�ս\�!��%�<�7=��=ɇ�=�����2=��>����=�Gݽ�j=�^,�S��� >1ל���>� =<���cX� ��< 5��̽m�_���K�{Z>�>J=6��������ך����;<����1�O���c$�q5=����H��<��=�K���qo=�W�:No�
r��!��=��1>�.G�6 ���Z_>�kI�����VE�;���<>�\��6=��.�mEҼ� �JI���K�<��>�o��{�����;�A4E�i; �|cU>%�-=�D�<}�O>rp���_>�R�=��=2i�/��<d�.�^m��΋|��4@=$�=#�<p@=��6O��2>����o:�`�;4��W��=,ђ��s���{����=�G��.P�;$_��-&<e�v� ȼ�a\�&^;W>�*L��iZ�j��=��0<f���H~�=d�0=E$�='ʑ��o�=���|��=���ʅ�O/ >;Y��S��0�+�V��=���=�V�>��+�(w������j�=�͋��g>���=����=ze���C>��������nB=2u��A>i <j�H=����`�.��=�w�=���=�彵:4�v4�>˅���ջ=��Ľ��:=P@�u'>��Z� Z���>,l=��ϼ1{=��,��h�=s ?=���
]�=wμ6Ii=�������a{�<x���N��8L���>Bu9$�1����=��==�wؽ��n���ū=�h!<[�<��ǽB�;�B� >��S=-��=���c�3���=�N��/��8(v���W@;�� =)�>�=�B��9
�_�����!��W���=��Ͻ�������<� �o�=�3�<y �<��ݼ�ļ�⺽;���Z���&�=�d���b� �:�B��<i=���������!D�:�2�=F��=��=V9��̆=:�>7NȽ������=�H��l��G�=�"��9�=YX�=�ċ�//�9'L����<,H��X�ڽ~4+��@�=�⓽���:�������y�7=#��<���� X�=с�=���=IJ����A�
7��>���>ͽ/���xt;�t���ɳ<�"=I�����P=VN.�����CֽMW��Yh��������=��=�#~<���=h" <V/=:�#�j|�<`G�6p/=��н��ƽR&�: fD>o�$�p2��5��Ro3��3��=����)���s� ����~���=�_��`.:+���������=����^���ʰ�n^��&�o��s��P�=T���E�����q�F��ߊ�=�3Ľ��=�Oe���:Y�-����=�^�=�G9�6.;RA=>��=�z@<n�J=.��<$&�K.�
خ<)OS=Y������=��Žx0j<32��{���[����� ��u�<��+�^"=�+>D�.>�[Y���.�J�Ӻ& ��)o�= �>�����n1$>R<��G��=S�����=���h]G��d�=�6J=����\�����s�ƽȭ`;�t-�0�ü��D="!�����=��<�)q���1=N�!��-��nZ��a�ܽ���<�X�=-tL���U�m�:�8�=�h��ϒ3=�("��ah�t��=^�=�i�=l�o�,�;��e)�ߎO��0=f2��=���>ٽk����d�-i���߼E�=zd�=S��=�7����>����" >��Ҽ���<��%��v*��k�J��<G����(-�>O���T%=�m�;f��⽫<z�=��Žmhs=T��NJ�=kΕ=|c��Eڨ<�b+>�#ƽr����4<%
Z> ɵ�%.a=չ�=�_��\z#^=�X�b^��A��=nL#>��7��=���=/m=;��=~ ��oj�<��>K��g�����=��<eE= �ɼ�܇����<g��=���= �'=H��=�G����̼kK���{=?ʸ�x�&�=&�<�"�=������;�QC���Q=�6ҽ��Q=����6�=�[޼X)<��H=�5��*<c3�=`/=W���aڿ�L�Ľ7i�=E~�=�[�<堛=�|�=�{�=HM=.�%<@^�=sC>
�=h���������Ë���Ʈ�4-f<��=ݿ�=����a��=���=�ə�s�l>��);i�ռ�~�-l^<' ��1���^Ƚ�𼽍�3=��g=��㽽��=������<�F�AC">���;LC�*2��>�j�>�;i=N�=��W y� ���A�j�Ʉ,>��!>�׼J3�=>Y=>�y�=�?=(�T=l��$n�=�K<L���U��;]7;<��=�F<��=f
Z=Z��<9�<�C���>��ջ@/��ij#=����oE==5q|��,O>~�<QÌ�.���
=!>@�e=9�=���q�n�U��=�V�m>�W= <�>(̽�/}=���=��93����l���X=��p����N�~q��X$�)����K >R��<1I=4Ղ=ΰ}�"��<����Z\�= �� >�� =̍�=�m�<#��<���<i��m�+>e�4>mxj��[�<����>$�=� �R���4�<:gҽD�������6��=�E(<�:�='�]���=�L =ˠ=�{'=�]���2t�T�jgϼXY>;p�?��0=w�=(ߺ��J�$��=]�Z=��'=f�3>&{�=���=�U����>s5=6��=�0�=iq>>��<T��� =Onk�lvb�M���}��Q�7܄����%=Z��=�O޼�]=��=�I�=���=��ͽ��:{I�<�>a+6>�>N�9=�
=�֤='�>. �<w�)���="[��H���$>N�{<�m�>�ּQ��<K��>�[�=!^<cf�>& [�6Q>�>�~ߏ=:��^iT��ϒ���(>g�:=��;��b�.2��b��;L2�=]M�a�J=�l=��a�3y���8v��<�cGd=g��=�W����Z�v����׼�љ�E��Ӽ�A���3%=HD��<�ɽ!_�=��4=w5м����1�<�
L���w�O����4��#
=7��=F�o�E���A ���i��j�<����Fy��U�R6b;��>=K�2=�5!���R�Rh����~<��5=�=�qf=��,�@����ޕ=���=QԮ=[��<�����iT�����G�:(<��xy=������m�M>��=T>���h'�U+>b��}���P>ռ*���M���=U��=��Z=e8n��q,>���=��8=�$� 0ɼ\IF=F�ؽ��+�L�D= ս���=d=�Er=sa���f��͵=(�ٽ��c����*�4^�<�-��8A���ഽ��C=1��=ҫ2��;��#�;����P<�;��a=���<�[�
Q�m['�V�����O=�,"�wv>�ڧ=6�s>���=y#��4�=��d�F��=�\�=jr!>�~=X��=U[�<z�<ׂ�=5�=�[t��e���=�;�����nM>��T=́�=��>\ϕ=\����%��Y��F��=kk7���>�b�߽��A��j��Ha@�Wu> �=�=� {;r�� x�:(Ʒ�z�)������n5:7�=�U|�R���=�F���.¼"S=�=�=B�q=^�=���;X�����f(�zU|��_��0'�9��;L�d>��ս�;�<���C����MI5��M׽rD���!>r�)=��=��=�½t�i���;�>��3D=��=�M;y&�?C/��>�sA����=�P�T��;��l���"��s���j=���=�9��e��̰ս��̽rɽ�>�_�=�Ѹ�[�t��0�=tfr<+�j�_���9;��)>�9����>1��=_�8>�}`=? >��m<����^>��=�� �=�̼[�=%�_=qJ���D>R����������=��H��{��%�����U��]�����XǼ���=� �J >���=���˄��Lz^=y�i�xK��2�<X >����,��Fս�w�Q�4=Ŭ;f������=����K#�ca�=�˽oF>=n���(�1�x�֡�;���;��l=,�(�#T�<
>μ��=�h�=>?���e=�����pLT�E�=� _=��S>΢="m�(V<��=��9> �= z;ڠ��$=�@=�$�=���=�1�<%>�?<<��=��<�)��=��=G�<���B;Q= ��=�ΐ�,k|���B�k."��� ��=�Q ��7g��8 <�F <�n���>��5>�v(=G��Xa�=n]���&<=yqǼo�"fi�%�>�*�=y6��D�=�y�<�-��!=��H=V�r<������<�@�=�G���p>o�=(<�޳��s5->~��� �" �=:��>�72=;(B��W���н���=΅���7>g�<�M���a����=��a���Y� j[=bć=���=�è�d�]=�<b�ý;Z>?²�|����B߽���1� �����$Q>z9S�A/�A�ɽ��*��]�<UA�.�&�6�(��� =s2���;z�=�6�</9(�@_�=����:> �^����𽠫����V�Ā >�E��&��=�8���J7>��� �*��< pͽ1�=-:>�����=�\B��K>�\>���= �=�B��)��A@=�%�=kȻ_����=�����'�=% �����*>�c꼮�>����T�=
5.�2+-�%[�=y�������s0��������Y�wüc�L�iZ��t�F<������̼�����>��=�,��|��#��j����<��Z� ���F$?=�T�֓=�-C���g�@ =��\�9[>�p&��ټ��K=�0ȽĚ�=KG>���<�AT<�/�<��C>�㼮�A>&��3d��� �=_�w�M��<�ⲽ�ˣ=�=��Y6=*P��~��z���E��M��<v�Z=��J<� ߼fX�=�>�)7����=���[)l=�k)��ʧ<���=J���N81���ҽ$Ο=����Wd�0��=]|#�v=L�N 3>��=@~�7�t=��R=��D=�R�t��;ঽ�!n=o�j�*b�;8�E=
|;��r�=���=#���ñ�< ܼ��ǽ�_F>-�ʼ���=��!>K�=��꼃Pb=�a�=
��:>�N���">��f=-|�<5B�0:H�5r��"���J;<E�<WT�=���"�!=0���d~���=鳽������<[�G��%��=U���j����ޮ��=X�D���.=��ѽ�=���=-��=9&�=��R=6D����X>k��=�����<��)����=��=(��>���<����*�=����*�p�n���쳄=CTM��m�=)M<xF�����&Y�=�"�=p?�=�����^�<���=2R�<�Q�=�.�\��=��սƦ�;���<�������v@��ce >ݚ>�c�=�Wx�*v�4�=�W��¸��R���U�=�,���]���=#>�`H���j=���=��=`\���=bV:<�#`��ၽ���-�e=�ऻ,C=W��=Π<uf,�]N�;&�=Ԉ��߽=(�A>��=�����-�RIT>u.l=�M�=�=�)��X����r����������>)>V�=5�=�9>5 ��������=�2>Â���E���=�&�=&��=�S>Ϛ��ew{��l�=B��=���=f(>�@>W�-=T�^=�{h>un7<P}�=��=B������<wf��r�޽\Yl�&RR�`���t�>�E-� �<�v1=�C��+�0>& _��� �h��� )�;P�<|�[�B��<d�񽇃i=�=���=��=�䕽�LB>�E->(����������˫�Q�H=�~����>������=�Ͻ��f��i�=Y:w��a�>[����x�>�H��#�=Y1=��4=��m=���=�%`���=��!��IE�x*�=�l=-�⽹U�=1�a��>�9��C2=�?�=��~�c�-=���)�==۸<���}��j¡=q��:�Y��^ཪ�7>>� >s�޽�%Z;Ow�=}|J��U~='�^=�ƽc��=B���>�%��X��������=]�=7މ>�����Xļ�^@�z>�l�� ��&�+��n�=nx��s#I���=m">w�l��<3$���㜽>2=7:��{
=�i_��ݽ<%��� >��el=y�=^ᙽ��=J &= ����=.9�^ +>o��=^��=Q2���Q �G̈́��A�=�%S����E�z<?���E<��=LY�=����>�<�5l�G�t<k�4����=��
=3x=}��=@{�<zqӽd��=�I�;ƽ��M���~=HN��C�K�W�F���K���">ң����Y>a'�=G��=�� =$с=5�\�F�����/A�%�\=3�=���=�h�::3=���=6������<5|<\چ��=B��=ˡ����O��%�/$�vh�=�NҼX����v<�
1��p������G >�>1l==��O<����D���i9h����LG�6ܛ<���=�>b�@�=n��=/�7�<!ſ=#���z&�;�7;>�Y=$j��%@�=6�>��ɾ���<K<�=�>�I�tw(�8�ĻZ+�=��<����Ž�D�=��ν3Z��B�<��뽸��=Pi�0>�[��F=o���#�,�Ͷ<>�����L<�np�$|s�7漽���mV޼�X,=ހ��I޽6����0!<V�=����jWn���`�%�������Й��]z=��>�^�<5`k� �]�2>9
=��=�
��->�5E�~PǼt&g�:����=9̹= �A>�5�<�>�[�����.����n�<���� >���=YI�=����c�=���=A.ͽ��y���(z��i���7 >�o�=$���^a�=��$=���=3+��� �>v*=I�'���/=��q��>��-t���� ����L��oi>M=��ɽY<8=�瑽����ݽ�m�˖~�����P�>����ݬ��.�=�����tm=��=�䄼�?V���x��=m<b��a��-��k�l��`��>$�<�c��,:>�Aؽ9��wh�k��>[�=FS��x
=:U=�k ��X<s�B����<p�'=��x�"N�=����׽?��;_�3X>��<�/���8>���G�0<�K0=��;��=Q��<���Jf�=��=�v�=��x<[S<ZpW=�i;>�f&=�쎾��=����'��=bV#�\A�=!P=A��� *�VڽZ��<<#"�<9b��"��N�=D�RG2��/��o���aY0>ѽͻ�W����;����о���^9�,G(�L��a� >�S��Ǒ%> ��8J�=�ࡾ���z�=�=��ȼ��<�i��T>w�,>ϻ�=���=�e]< }ν�D>kq�=>��=+���8��B��9f�z=��D=*�l�̩N��vj�'F���X>W ��]Z>���=�B��\��<���<����0`ؽ��;8�=N]!�-&e>�b<p�����.�g�
���������<oI��K@�=����^8�<$��=��D�R���������,>bC�i�ؽT�=���=����N[����< ��=��&�����e���֊=��>�?4��b�=T����&T<\���q\�=�t� ҽK&��D!�j��<C�k;b�i�X���+��<H�B�ʚ�;Y�۽���Q0�=.��ݎ)>W��V�)<�^^>W�=\��|H��6�<mb=F?�=�S��=c5>ue?�j��=ҝ�=P)�=��G�|��>*��p3��K>�� �^��w�]�`�D>J9罊f�<�9n��9U; ��������I=T�
��P�=(Ã=��O=;�8�L���>�\›=Ô$�=Z磼%n�=�E�=�>j"f=�?����%>��=���� ����<�+�%zJ>���=��A�~)��@Qǽ?���PBi=�]4=#�=(�b��ҹ�$�&>�GV> �f< ͽ9�
>����F�JeI��ˑ��F�=_|?�+V<>z/�kM
�$���\��4z=΍R�+/>�����@���0ܽ�#�;(4���{>ku"=��L=d�C=�q/�M}e�� �=�Po�F� �� >i՘<?��zYQ����<��=�+׽�.�=5c(=`>>�y�<��t�.�ov��gώ�.��?� #>��
�� ��Z��-=��>XW>E�"���#�� �<��p=7>(cZ=���@����R=� �:�6�=����< B�<F�>��=V�<>ٴ�K�$����=
S9�WD]=t�ս-�_>%�n��"[<l=. #;y[��{���B]�=�gi>w����>�=1d=�HN����r �����4E=ZQd=�g��z�����<;�N<� ��}O���Ľ�Jt���(>*s`��#�=�GY��CC=�����ں��<�zp�7�>2�a^��sX�R���6 ��W(>uMw=����<Uy=��=x �=�[�=XJ�>�&}��`
>�i�= ^]=b$h=�_����U���P=��.=d�<Ԑ2=���=+���|��=�m>� ޼�/�;, >� ��;l���X�<o�'>�uܼ75ѽ�f
=Ȅ��$��<-�=X:��z��2�ܽ��>��,�x��u J� ��=���=����4�)=c�6>k�_��5��W�� `�<:x=�; 徽yrC>�#]=wR��nX�;�Y�=Ʋ?����;Cgҽd��=�M�T=�mc>�z<�~��bL��Mnͽg��5+;��(�T��=:�;V �ș�<#�N=�/�Ń<���<]��<#1����y<��={Uֽm >֯���������e�ܻ�E��*�=��
�>��<���� ����=��=��L�`P�<0��� k<�P�E� 5ƽ��+=.�:<Sb>i���`�>�������e���N�<鐫=>�<�<�]H>��p=ѭ;i� �rQx=��ӽod����>P����=+ԭ;>տ�xe�=sɆ=�诼�n=Vq=�`t��2�=�w��I�
#==C���J�>yr��Lin=���=�K1��A�*2�<�)�;N�n<l ��\�)>��;=��>�.��k�>�\3=n�:h�J����1�Fl��
�=�! >�����2�+��=s�O�lV�=.����s<ݷ=u.~��u�<�C�=��W�LT�:�ݤ<�7�<�4���_%��~=|�>B�L=����Y!>�`�=�\V=Y����5~� ��=Y`=�7a>1���̾I�<@<�IB<�mM��`�=�K >q���j�Խ�M��UK��g���)�=���;&�^�z�u٥������(W>7=������=MD�;ŽfΈ=d,+�׎�=_�f<�6q��Q�=%F��+`:>4��<>��=�I�=��->0J=qC�<��<1>C��X���,���e>�=.>L$�= �,�,����J6V�Yh���_=u5T;��;����S%=' 4� ���9��t�{��s�+�D<�ҋ��d>}�IQ�=�.�=+�V=c����N�;�"��D�ɽG�:</��=KH�vq�,Ю��U�;&ּ��
�*�>%�� ���i�/��ﻱ�@>���fo�=���=!������sf���=��<�W�<H6�<�QT>�T=�?^��P��nW�˿���g=��=8o�<>�4��)�-؝�v�ֽ��{=zE�="m����=�sS$ �9�'=g�=ɪ��=�:_7>�i��1�=�-��P�=29 ���<��G1=!��=ś�=�=[�">�?{��# ��|>�J>iRb� �P��UP>Lq;����=��=�4�<��r<\oa=d�<���ͧ=�9C��4��L=�=l������W^�����G1>,��G��=2��<��J��*��������<�>��J=��A=��
� � �
��#\;2�=Tp5>�!��b|�́b�֖��N�����(=pm����u<A���;��=��=P�Ľ.�y���7�����c�0岽�"=��� ��&�ٽ é=kY����ƽ��~=N쫼,��=:;����˽M�=�n=T��=���;(�����q��=%'��O�tc�==����q�;U���E��T�滟}���.i=�փ�U��=k
���K>|�Լ��|�Tˋ=����� �<��o<�O=���;G/V<�b ����=�;��|�=�ö=2o�<�|,��R0�I.�=�wl;"�<0>~a�M���V^ʼ8ܧ<�߰�����ɽ�� >�U��N)�,A�<�=u=���=l��;�p��8p<$;�=��T=η�<3L�\U�������=}���}�=�i��$D<kD޻hV>0�;=��.��ޭ������6>��*=B�5tؽ�=�Z=���=�1:�v�W=��4�Sw���5�N�>>�)=��l=܄,��*+���>xwb�ZQ+�D[�=�,�<����'��k(��<c��=�����O��rH\��أ=�=E���A�(q��L�=UFi=���<��m��%�>�_��ʛ��_f=<4���=l�s�%ϼ�'=�:; =�� ��K=85=�%�=�?ǻ���1�d=~�8>�ϽM$A�:��=�.)�d�<�q>�}E��j+>&:0=&I[���ý�,�[�R��)=ҌF<�æ��B ��;>w�=h�=�A�;��c=_ )�ň�=%Cռȓ> y�� ���_]=a�z<�<+�y�0�O6����<��H�8`ʽ�gE��W�����B
�8⥽\å��t�A��*�=�l��8��9]>@���C^<�_i�=�r�=ryn>&�Ҽtw ������=��t���V��[�=���r�=��>X��=�ꪽ�}Ƽ�B[=���;hV�=���=y涽� �܌�����
�=������<,!>f����D>vu>�>�5;ཬ�e> ��<1��+�qF�L!�<%��b9�:���=�.�7������=��2>���=G�=�r}�k�=����O>p�H�_=KD<*>m��扑=��h=m<� ��<K-:>��<��< �=g���"������H�弉�ゥ*��pq�vD�=� ��T�2���E��q�=����y`J=���Ľ��*��]>D!<kE)��}��+� <o���v��l�!�~�@<;:�=e��Q
;<��齠@�:` S=�i�<߯׽��;<��UP=4g��Pf�;R6���=��D���� >�)ֺ����2���Q����G�=^$=��M����<��Z=^�?<] >y#�=dM��d?��+��D:������6i�<�Q����d� d����=���=���<֖�<I_���ӎ��]�����o����� �y\Y�� �<��<��Po�����g>c�5>���=���=�N>@\<.�OU���>���m�Ļێ�=yk��!�<v@�=Ωy=啪=�/s>~����=�l;%��=|[��o==k�;�F�"�>��Ƽխ>T<$������ս�e>�Z�=�b�<��-��ý=}�=�½�ӝ�d3�� ]"������(�=��=�;,m���J]=�W�N� >p�ܺ�a�<�d�:�z'��=��+�DY<?Gs����a5<�3�=������%>)ݿ�����?Rk�E~��E�=�u>��B>�: �Cc�=�o ;4� >���R��=-��=��2�pе�>6���
=I����;����_��<� �Ƴ�=f�=���=+ =��p��p��(Fx����˷[�?%�<q�0�<�>ld�ӂ =+����Ls�=�z
��<��=#e<<\5�>�!C=E��=�ƽߕP<�X|���>�����S<� �=�.��7����0=�v�;�gM�B�>\TM<�x�9c�9��'�|�c�f��:�����'��M�<rr =Kl���/-<<qO>Aȱ�����S���m<Lz���f@�C�a;V�E=�z��\=PT,> �����网�r�Aڻ`�B>�B�<�->-A= ֢=*Bversion_numberJ@Z)
vector_observation

batch
5Z#
action_masks

batch
b
version_number

b
memory_size

b)
continuous_actions

batch
b,
continuous_action_output_shape

b'
discrete_actions

batch
b*
discrete_action_output_shape

B

14
Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/FoodCollector.onnx.meta


fileFormatVersion: 2
guid: 3210b528a2bc44a86bd6bd1d571070f8
ScriptedImporter:
fileIDToRecycleName:
11400000: main obj
11400002: model data
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 683b6cb6d0a474744822c888b46772c9, type: 3}
optimizeModel: 1
forceArbitraryBatchSize: 1
treatErrorsAsWarnings: 0

1001
Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/GridFoodCollector.onnx
文件差异内容过多而无法显示
查看文件

14
Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/GridFoodCollector.onnx.meta


fileFormatVersion: 2
guid: 75910f45f20be49b18e2b95879a217b2
ScriptedImporter:
fileIDToRecycleName:
11400000: main obj
11400002: model data
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 683b6cb6d0a474744822c888b46772c9, type: 3}
optimizeModel: 1
forceArbitraryBatchSize: 1
treatErrorsAsWarnings: 0

1001
Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/VisualFoodCollector.onnx
文件差异内容过多而无法显示
查看文件

14
Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/VisualFoodCollector.onnx.meta


fileFormatVersion: 2
guid: ec4b31b5d66ca4e51ae3ac41945facb2
ScriptedImporter:
fileIDToRecycleName:
11400000: main obj
11400002: model data
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 683b6cb6d0a474744822c888b46772c9, type: 3}
optimizeModel: 1
forceArbitraryBatchSize: 1
treatErrorsAsWarnings: 0

3
com.unity.ml-agents/Runtime/Analytics.meta


fileFormatVersion: 2
guid: 8b12ac54c5224758af88c67e2af4a01e
timeCreated: 1604359666

3
com.unity.ml-agents/Tests/Editor/Analytics.meta


fileFormatVersion: 2
guid: adbf291ff40848a296523d69a5be65a5
timeCreated: 1607379470

89
com.unity.ml-agents/Runtime/Analytics/Events.cs


using System;
using System.Collections.Generic;
using Unity.MLAgents.Actuators;
using Unity.MLAgents.Sensors;
namespace Unity.MLAgents.Analytics
{
internal struct InferenceEvent
{
/// <summary>
/// Hash of the BehaviorName.
/// </summary>
public string BehaviorName;
public string BarracudaModelSource;
public string BarracudaModelVersion;
public string BarracudaModelProducer;
public string BarracudaPackageVersion;
/// <summary>
/// Whether inference is performed on CPU (0) or GPU (1).
/// </summary>
public int InferenceDevice;
public List<EventObservationSpec> ObservationSpecs;
public EventActionSpec ActionSpec;
public int MemorySize;
public long TotalWeightSizeBytes;
public string ModelHash;
}
/// <summary>
/// Simplified version of ActionSpec struct for use in analytics
/// </summary>
[Serializable]
internal struct EventActionSpec
{
public int NumContinuousActions;
public int NumDiscreteActions;
public int[] BranchSizes;
public static EventActionSpec FromActionSpec(ActionSpec actionSpec)
{
var branchSizes = actionSpec.BranchSizes ?? Array.Empty<int>();
return new EventActionSpec
{
NumContinuousActions = actionSpec.NumContinuousActions,
NumDiscreteActions = actionSpec.NumDiscreteActions,
BranchSizes = branchSizes,
};
}
}
/// <summary>
/// Information about one dimension of an observation.
/// </summary>
[Serializable]
internal struct EventObservationDimensionInfo
{
public int Size;
public int Flags;
}
/// <summary>
/// Simplified summary of Agent observations for use in analytics
/// </summary>
[Serializable]
internal struct EventObservationSpec
{
public string SensorName;
public string CompressionType;
public EventObservationDimensionInfo[] DimensionInfos;
public static EventObservationSpec FromSensor(ISensor sensor)
{
var shape = sensor.GetObservationShape();
var dimInfos = new EventObservationDimensionInfo[shape.Length];
for (var i = 0; i < shape.Length; i++)
{
dimInfos[i].Size = shape[i];
// TODO copy flags when we have them
}
return new EventObservationSpec
{
SensorName = sensor.GetName(),
CompressionType = sensor.GetCompressionType().ToString(),
DimensionInfos = dimInfos,
};
}
}
}

3
com.unity.ml-agents/Runtime/Analytics/Events.cs.meta


fileFormatVersion: 2
guid: 0a0d7cda6d74425a80775769a9283ba6
timeCreated: 1604359798

263
com.unity.ml-agents/Runtime/Analytics/InferenceAnalytics.cs


using System;
using System.Collections.Generic;
using Unity.Barracuda;
using Unity.MLAgents.Actuators;
using Unity.MLAgents.Inference;
using Unity.MLAgents.Policies;
using Unity.MLAgents.Sensors;
using UnityEngine;
using UnityEngine.Analytics;
#if UNITY_EDITOR
using UnityEditor;
using UnityEditor.Analytics;
#endif
namespace Unity.MLAgents.Analytics
{
internal class InferenceAnalytics
{
const string k_VendorKey = "unity.ml-agents";
const string k_EventName = "ml_agents_inferencemodelset";
/// <summary>
/// Whether or not we've registered this particular event yet
/// </summary>
static bool s_EventRegistered = false;
/// <summary>
/// Hourly limit for this event name
/// </summary>
const int k_MaxEventsPerHour = 1000;
/// <summary>
/// Maximum number of items in this event.
/// </summary>
const int k_MaxNumberOfElements = 1000;
/// <summary>
/// Models that we've already sent events for.
/// </summary>
private static HashSet<NNModel> s_SentModels;
static bool EnableAnalytics()
{
if (s_EventRegistered)
{
return true;
}
#if UNITY_EDITOR
AnalyticsResult result = EditorAnalytics.RegisterEventWithLimit(k_EventName, k_MaxEventsPerHour, k_MaxNumberOfElements, k_VendorKey);
#else
AnalyticsResult result = AnalyticsResult.UnsupportedPlatform;
#endif
if (result == AnalyticsResult.Ok)
{
s_EventRegistered = true;
}
if (s_EventRegistered && s_SentModels == null)
{
s_SentModels = new HashSet<NNModel>();
}
return s_EventRegistered;
}
public static bool IsAnalyticsEnabled()
{
#if UNITY_EDITOR
return EditorAnalytics.enabled;
#else
return false;
#endif
}
/// <summary>
/// Send an analytics event for the NNModel when it is set up for inference.
/// No events will be sent if analytics are disabled, and at most one event
/// will be sent per model instance.
/// </summary>
/// <param name="nnModel">The NNModel being used for inference.</param>
/// <param name="behaviorName">The BehaviorName of the Agent using the model</param>
/// <param name="inferenceDevice">Whether inference is being performed on the CPU or GPU</param>
/// <param name="sensors">List of ISensors for the Agent. Used to generate information about the observation space.</param>
/// <param name="actionSpec">ActionSpec for the Agent. Used to generate information about the action space.</param>
/// <returns></returns>
public static void InferenceModelSet(
NNModel nnModel,
string behaviorName,
InferenceDevice inferenceDevice,
IList<ISensor> sensors,
ActionSpec actionSpec
)
{
// The event shouldn't be able to report if this is disabled but if we know we're not going to report
// Lets early out and not waste time gathering all the data
if (!IsAnalyticsEnabled())
return;
if (!EnableAnalytics())
return;
var added = s_SentModels.Add(nnModel);
if (!added)
{
// We previously added this model. Exit so we don't resend.
return;
}
var data = GetEventForModel(nnModel, behaviorName, inferenceDevice, sensors, actionSpec);
// Note - to debug, use JsonUtility.ToJson on the event.
// Debug.Log(JsonUtility.ToJson(data, true));
#if UNITY_EDITOR
EditorAnalytics.SendEventWithLimit(k_EventName, data);
#else
return;
#endif
}
/// <summary>
/// Generate an InferenceEvent for the model.
/// </summary>
/// <param name="nnModel"></param>
/// <param name="behaviorName"></param>
/// <param name="inferenceDevice"></param>
/// <param name="sensors"></param>
/// <param name="actionSpec"></param>
/// <returns></returns>
internal static InferenceEvent GetEventForModel(
NNModel nnModel,
string behaviorName,
InferenceDevice inferenceDevice,
IList<ISensor> sensors,
ActionSpec actionSpec
)
{
var barracudaModel = ModelLoader.Load(nnModel);
var inferenceEvent = new InferenceEvent();
// Hash the behavior name so that there's no concern about PII or "secret" data being leaked.
var behaviorNameHash = Hash128.Compute(behaviorName);
inferenceEvent.BehaviorName = behaviorNameHash.ToString();
inferenceEvent.BarracudaModelSource = barracudaModel.IrSource;
inferenceEvent.BarracudaModelVersion = barracudaModel.IrVersion;
inferenceEvent.BarracudaModelProducer = barracudaModel.ProducerName;
inferenceEvent.MemorySize = (int)barracudaModel.GetTensorByName(TensorNames.MemorySize)[0];
inferenceEvent.InferenceDevice = (int)inferenceDevice;
if (barracudaModel.ProducerName == "Script")
{
// .nn files don't have these fields set correctly. Assign some placeholder values.
inferenceEvent.BarracudaModelSource = "NN";
inferenceEvent.BarracudaModelProducer = "tensorflow_to_barracuda.py";
}
#if UNITY_2019_3_OR_NEWER && UNITY_EDITOR
var barracudaPackageInfo = UnityEditor.PackageManager.PackageInfo.FindForAssembly(typeof(Tensor).Assembly);
inferenceEvent.BarracudaPackageVersion = barracudaPackageInfo.version;
#else
inferenceEvent.BarracudaPackageVersion = null;
#endif
inferenceEvent.ActionSpec = EventActionSpec.FromActionSpec(actionSpec);
inferenceEvent.ObservationSpecs = new List<EventObservationSpec>(sensors.Count);
foreach (var sensor in sensors)
{
inferenceEvent.ObservationSpecs.Add(EventObservationSpec.FromSensor(sensor));
}
inferenceEvent.TotalWeightSizeBytes = GetModelWeightSize(barracudaModel);
inferenceEvent.ModelHash = GetModelHash(barracudaModel);
return inferenceEvent;
}
/// <summary>
/// Compute the total model weight size in bytes.
/// This corresponds to the "Total weight size" display in the Barracuda inspector,
/// and the calculations are the same.
/// </summary>
/// <param name="barracudaModel"></param>
/// <returns></returns>
static long GetModelWeightSize(Model barracudaModel)
{
long totalWeightsSizeInBytes = 0;
for (var l = 0; l < barracudaModel.layers.Count; ++l)
{
for (var d = 0; d < barracudaModel.layers[l].datasets.Length; ++d)
{
totalWeightsSizeInBytes += barracudaModel.layers[l].datasets[d].length;
}
}
return totalWeightsSizeInBytes;
}
/// <summary>
/// Wrapper around Hash128 that supports Append(float[], int, int)
/// </summary>
struct MLAgentsHash128
{
private Hash128 m_Hash;
public void Append(float[] values, int count)
{
if (values == null)
{
return;
}
// Pre-2020 versions of Unity don't have Hash128.Append() (can only hash strings and scalars)
// For these versions, we'll hash element by element.
#if UNITY_2020_1_OR_NEWER
m_Hash.Append(values, 0, count);
#else
for (var i = 0; i < count; i++)
{
var tempHash = new Hash128();
HashUtilities.ComputeHash128(ref values[i], ref tempHash);
HashUtilities.AppendHash(ref tempHash, ref m_Hash);
}
#endif
}
public void Append(string value)
{
var tempHash = Hash128.Compute(value);
HashUtilities.AppendHash(ref tempHash, ref m_Hash);
}
public override string ToString()
{
return m_Hash.ToString();
}
}
/// <summary>
/// Compute a hash of the model's layer data and return it as a string.
/// A subset of the layer weights are used for performance.
/// This increases the chance of a collision, but this should still be extremely rare.
/// </summary>
/// <param name="barracudaModel"></param>
/// <returns></returns>
static string GetModelHash(Model barracudaModel)
{
var hash = new MLAgentsHash128();
// Limit the max number of float bytes that we hash for performance.
const int kMaxFloats = 256;
foreach (var layer in barracudaModel.layers)
{
hash.Append(layer.name);
var numFloatsToHash = Mathf.Min(layer.weights.Length, kMaxFloats);
hash.Append(layer.weights, numFloatsToHash);
}
return hash.ToString();
}
}
}

3
com.unity.ml-agents/Runtime/Analytics/InferenceAnalytics.cs.meta


fileFormatVersion: 2
guid: ac4c40c2394d481ebf602caa600a32f3
timeCreated: 1604359787

68
com.unity.ml-agents/Tests/Editor/Analytics/InferenceAnalyticsTests.cs


using System.Collections.Generic;
using NUnit.Framework;
using Unity.MLAgents.Sensors;
using UnityEngine;
using Unity.Barracuda;
using Unity.MLAgents.Actuators;
using Unity.MLAgents.Analytics;
using Unity.MLAgents.Policies;
using UnityEditor;
namespace Unity.MLAgents.Tests.Analytics
{
[TestFixture]
public class InferenceAnalyticsTests
{
const string k_continuousONNXPath = "Packages/com.unity.ml-agents/Tests/Editor/TestModels/continuous2vis8vec2action.onnx";
NNModel continuousONNXModel;
Test3DSensorComponent sensor_21_20_3;
Test3DSensorComponent sensor_20_22_3;
ActionSpec GetContinuous2vis8vec2actionActionSpec()
{
return ActionSpec.MakeContinuous(2);
}
[SetUp]
public void SetUp()
{
continuousONNXModel = (NNModel)AssetDatabase.LoadAssetAtPath(k_continuousONNXPath, typeof(NNModel));
var go = new GameObject("SensorA");
sensor_21_20_3 = go.AddComponent<Test3DSensorComponent>();
sensor_21_20_3.Sensor = new Test3DSensor("SensorA", 21, 20, 3);
sensor_20_22_3 = go.AddComponent<Test3DSensorComponent>();
sensor_20_22_3.Sensor = new Test3DSensor("SensorB", 20, 22, 3);
}
[Test]
public void TestModelEvent()
{
var sensors = new List<ISensor> { sensor_21_20_3.Sensor, sensor_20_22_3.Sensor };
var behaviorName = "continuousModel";
var continuousEvent = InferenceAnalytics.GetEventForModel(
continuousONNXModel, behaviorName,
InferenceDevice.CPU, sensors, GetContinuous2vis8vec2actionActionSpec()
);
// The behavior name should be hashed, not pass-through.
Assert.AreNotEqual(behaviorName, continuousEvent.BehaviorName);
Assert.AreEqual(2, continuousEvent.ActionSpec.NumContinuousActions);
Assert.AreEqual(0, continuousEvent.ActionSpec.NumDiscreteActions);
Assert.AreEqual(2, continuousEvent.ObservationSpecs.Count);
Assert.AreEqual(3, continuousEvent.ObservationSpecs[0].DimensionInfos.Length);
Assert.AreEqual(20, continuousEvent.ObservationSpecs[0].DimensionInfos[0].Size);
Assert.AreEqual("None", continuousEvent.ObservationSpecs[0].CompressionType);
Assert.AreNotEqual(null, continuousEvent.ModelHash);
// Make sure nested fields get serialized
var jsonString = JsonUtility.ToJson(continuousEvent, true);
Assert.IsTrue(jsonString.Contains("ObservationSpecs"));
Assert.IsTrue(jsonString.Contains("ActionSpec"));
Assert.IsTrue(jsonString.Contains("NumDiscreteActions"));
Assert.IsTrue(jsonString.Contains("SensorName"));
Assert.IsTrue(jsonString.Contains("Flags"));
}
}
}

3
com.unity.ml-agents/Tests/Editor/Analytics/InferenceAnalyticsTests.cs.meta


fileFormatVersion: 2
guid: 9f054f620b8b468bbd8ccf7d2cc14ccd
timeCreated: 1607379491

11
Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/FoodCollector.nn.meta


fileFormatVersion: 2
guid: 36ab3e93020504f48858d0856f939685
ScriptedImporter:
fileIDToRecycleName:
11400000: main obj
11400002: model data
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 19ed1486aa27d4903b34839f37b8f69f, type: 3}

305
Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/FoodCollector.nn
文件差异内容过多而无法显示
查看文件

1001
Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/GridFoodCollector.nn
文件差异内容过多而无法显示
查看文件

11
Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/GridFoodCollector.nn.meta


fileFormatVersion: 2
guid: 699f852e79b5ba642871514fb1fb9843
ScriptedImporter:
fileIDToRecycleName:
11400000: main obj
11400002: model data
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 19ed1486aa27d4903b34839f37b8f69f, type: 3}

1001
Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/VisualFoodCollector.nn
文件差异内容过多而无法显示
查看文件

11
Project/Assets/ML-Agents/Examples/FoodCollector/TFModels/VisualFoodCollector.nn.meta


fileFormatVersion: 2
guid: c3b1eb0bcf06b4c0488599c7ab806de7
ScriptedImporter:
fileIDToRecycleName:
11400000: main obj
11400002: model data
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 19ed1486aa27d4903b34839f37b8f69f, type: 3}
正在加载...
取消
保存