比较提交

...
此合并请求有变更与目标分支冲突。
/protobuf-definitions/proto/mlagents_envs/communicator_objects/agent_info.proto
/config/ppo/PushBlock.yaml
/Project/Packages/manifest.json
/Project/ProjectSettings/TagManager.asset
/Project/ProjectSettings/GraphicsSettings.asset
/Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallJumpAgent.cs
/Project/Assets/ML-Agents/Examples/Crawler/Scripts/CrawlerAgent.cs
/Project/Assets/ML-Agents/Examples/Hallway/Scripts/HallwayAgent.cs
/Project/Assets/ML-Agents/Examples/Hallway/Prefabs/SymbolFinderArea.prefab
/Project/Assets/ML-Agents/Examples/Soccer/Scenes/SoccerTwos.unity
/Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerFieldTwos.prefab
/com.unity.ml-agents/Runtime/Communicator/GrpcExtensions.cs
/com.unity.ml-agents/Runtime/Agent.cs
/com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/AgentInfo.cs
/com.unity.ml-agents/Runtime/Policies/BehaviorParameters.cs
/ml-agents-envs/mlagents_envs/rpc_utils.py
/ml-agents-envs/mlagents_envs/communicator_objects/agent_info_pb2.py
/ml-agents-envs/mlagents_envs/communicator_objects/agent_info_pb2.pyi
/ml-agents-envs/mlagents_envs/base_env.py
/ml-agents/mlagents/trainers/ghost/trainer.py
/ml-agents/mlagents/trainers/optimizer/torch_optimizer.py
/ml-agents/mlagents/trainers/agent_processor.py
/ml-agents/mlagents/trainers/behavior_id_utils.py
/ml-agents/mlagents/trainers/policy/torch_policy.py
/ml-agents/mlagents/trainers/ppo/optimizer_torch.py
/ml-agents/mlagents/trainers/ppo/trainer.py
/ml-agents/mlagents/trainers/tests/test_buffer.py
/ml-agents/mlagents/trainers/buffer.py
/ml-agents/mlagents/trainers/torch/layers.py
/ml-agents/mlagents/trainers/torch/attention.py
/ml-agents/mlagents/trainers/torch/components/bc/module.py
/ml-agents/mlagents/trainers/torch/utils.py
/ml-agents/mlagents/trainers/torch/networks.py
/ml-agents/mlagents/trainers/torch/encoders.py
/ml-agents/mlagents/trainers/trajectory.py
/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/CollisionCallbacks.cs
/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/GoalDetectTrigger.cs
/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/SimpleNPC.cs
/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/SimpleNPC.cs.meta
/Project/Assets/ML-Agents/Examples/CubeWars/Meshes/ArenaWalls.fbx
/Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/CollisionCallbacks.cs.meta
/Project/Assets/ML-Agents/Examples/PushBlock/TFModels/PushBlockCollab.onnx
/Project/Assets/ML-Agents/Examples/PushBlock/Scenes/PushBlockCollab.unity
/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushBlockEnvController.cs
/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushAgentCollab.cs
/Project/Assets/ML-Agents/Examples/PushBlock/TFModels/PushBlockCollab.onnx.meta

1 次代码提交

作者 SHA1 备注 提交日期
Andrew Cohen 722befc2 remove tank, make movements of heal/dps equal 4 年前
共有 167 个文件被更改,包括 16362 次插入171 次删除
  1. 42
      com.unity.ml-agents/Runtime/Agent.cs
  2. 5
      com.unity.ml-agents/Runtime/Communicator/GrpcExtensions.cs
  3. 39
      com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/AgentInfo.cs
  4. 1
      com.unity.ml-agents/Runtime/Policies/BehaviorParameters.cs
  5. 18
      ml-agents-envs/mlagents_envs/base_env.py
  6. 11
      ml-agents-envs/mlagents_envs/communicator_objects/agent_info_pb2.py
  7. 7
      ml-agents-envs/mlagents_envs/communicator_objects/agent_info_pb2.pyi
  8. 29
      ml-agents-envs/mlagents_envs/rpc_utils.py
  9. 35
      ml-agents/mlagents/trainers/behavior_id_utils.py
  10. 5
      ml-agents/mlagents/trainers/policy/torch_policy.py
  11. 29
      ml-agents/mlagents/trainers/tests/test_buffer.py
  12. 71
      ml-agents/mlagents/trainers/buffer.py
  13. 30
      ml-agents/mlagents/trainers/optimizer/torch_optimizer.py
  14. 7
      ml-agents/mlagents/trainers/ppo/trainer.py
  15. 9
      ml-agents/mlagents/trainers/ppo/optimizer_torch.py
  16. 14
      ml-agents/mlagents/trainers/ghost/trainer.py
  17. 69
      ml-agents/mlagents/trainers/agent_processor.py
  18. 12
      ml-agents/mlagents/trainers/torch/utils.py
  19. 2
      ml-agents/mlagents/trainers/torch/components/bc/module.py
  20. 25
      ml-agents/mlagents/trainers/torch/encoders.py
  21. 17
      ml-agents/mlagents/trainers/torch/layers.py
  22. 8
      ml-agents/mlagents/trainers/torch/attention.py
  23. 177
      ml-agents/mlagents/trainers/torch/networks.py
  24. 75
      ml-agents/mlagents/trainers/trajectory.py
  25. 1
      protobuf-definitions/proto/mlagents_envs/communicator_objects/agent_info.proto
  26. 2
      config/ppo/PushBlock.yaml
  27. 1
      Project/ProjectSettings/GraphicsSettings.asset
  28. 2
      Project/ProjectSettings/UnityConnectSettings.asset
  29. 11
      Project/ProjectSettings/TagManager.asset
  30. 1
      Project/Packages/manifest.json
  31. 13
      Project/Assets/ML-Agents/Examples/Crawler/Scripts/CrawlerAgent.cs
  32. 8
      Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerFieldTwos.prefab
  33. 146
      Project/Assets/ML-Agents/Examples/Soccer/Scenes/SoccerTwos.unity
  34. 22
      Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallJumpAgent.cs
  35. 2
      Project/Assets/ML-Agents/Examples/Hallway/Scenes/Hallway.unity.meta
  36. 932
      Project/Assets/ML-Agents/Examples/Hallway/Prefabs/SymbolFinderArea.prefab
  37. 22
      Project/Assets/ML-Agents/Examples/Hallway/Scripts/HallwayAgent.cs
  38. 3
      com.unity.ml-agents.extensions/Runtime/Teams.meta
  39. 14
      com.unity.ml-agents/Runtime/ITeamManager.cs
  40. 3
      com.unity.ml-agents/Runtime/ITeamManager.cs.meta
  41. 63
      config/ppo/WallJumpCollab.yaml
  42. 26
      config/ppo/HallwayCollab.yaml
  43. 28
      config/ppo/PushBlockZombie.yaml
  44. 65
      config/ppo/CubeWars.yaml
  45. 50
      Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallAreaScoring.cs
  46. 11
      Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallAreaScoring.cs.meta
  47. 11
      Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallJumpCollabAgent.cs.meta
  48. 67
      Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallJumpCollabAgent.cs
  49. 7
      Project/Assets/ML-Agents/Examples/WallJump/Scenes/WallJumpCollab.unity.meta
  50. 1001
      Project/Assets/ML-Agents/Examples/WallJump/Scenes/WallJumpCollab.unity
  51. 7
      Project/Assets/ML-Agents/Examples/WallJump/Prefabs/WallJumpCollabArea.prefab.meta
  52. 1001
      Project/Assets/ML-Agents/Examples/WallJump/Prefabs/WallJumpCollabArea.prefab
  53. 11
      Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/CollisionCallbacks.cs.meta
  54. 143
      Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/CollisionCallbacks.cs
  55. 7
      Project/Assets/ML-Agents/Examples/PushBlock/Prefabs/PushBlockCollabArea.prefab.meta
  56. 1001
      Project/Assets/ML-Agents/Examples/PushBlock/Prefabs/PushBlockCollabArea.prefab
  57. 7
      Project/Assets/ML-Agents/Examples/PushBlock/Prefabs/ZombiePushBlockCollabArea.prefab.meta
  58. 1001
      Project/Assets/ML-Agents/Examples/PushBlock/Prefabs/ZombiePushBlockCollabArea.prefab
  59. 1001
      Project/Assets/ML-Agents/Examples/PushBlock/TFModels/PushBlockCollab.onnx
  60. 14
      Project/Assets/ML-Agents/Examples/PushBlock/TFModels/PushBlockCollab.onnx.meta
  61. 1001
      Project/Assets/ML-Agents/Examples/PushBlock/TFModels/PushBlockCC.onnx
  62. 14
      Project/Assets/ML-Agents/Examples/PushBlock/TFModels/PushBlockCC.onnx.meta
  63. 1001
      Project/Assets/ML-Agents/Examples/PushBlock/TFModels/PushBlockMaster.onnx
  64. 14
      Project/Assets/ML-Agents/Examples/PushBlock/TFModels/PushBlockMaster.onnx.meta
  65. 9
      Project/Assets/ML-Agents/Examples/PushBlock/Scenes/PushBlockCollab.unity.meta
  66. 969
      Project/Assets/ML-Agents/Examples/PushBlock/Scenes/PushBlockCollab.unity
  67. 997
      Project/Assets/ML-Agents/Examples/PushBlock/Scenes/ZombiePushBlock.unity
  68. 9
      Project/Assets/ML-Agents/Examples/PushBlock/Scenes/ZombiePushBlock.unity.meta
  69. 1001
      Project/Assets/ML-Agents/Examples/PushBlock/Scenes/1ZombieVs2AgentsPushBlock.unity
  70. 1001
      Project/Assets/ML-Agents/Examples/PushBlock/Scenes/2ZombieVs3AgentsPushBlock.unity
  71. 9
      Project/Assets/ML-Agents/Examples/PushBlock/Scenes/2ZombieVs3AgentsPushBlock.unity.meta
  72. 9
      Project/Assets/ML-Agents/Examples/PushBlock/Scenes/1ZombieVs2AgentsPushBlock.unity.meta
  73. 12
      Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushAgentCollab.cs.meta
  74. 11
      Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushBlockEnvController.cs.meta
  75. 60
      Project/Assets/ML-Agents/Examples/PushBlock/Scripts/GoalDetectTrigger.cs
  76. 11
      Project/Assets/ML-Agents/Examples/PushBlock/Scripts/GoalDetectTrigger.cs.meta
  77. 241
      Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushBlockEnvController.cs
  78. 116
      Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushAgentCollab.cs
  79. 289
      Project/Assets/ML-Agents/Examples/PushBlock/Scripts/ZombiePushBlockEnvController.cs
  80. 11
      Project/Assets/ML-Agents/Examples/PushBlock/Scripts/ZombiePushBlockEnvController.cs.meta
  81. 45
      Project/Assets/ML-Agents/Examples/PushBlock/Scripts/SimpleNPC.cs
  82. 11
      Project/Assets/ML-Agents/Examples/PushBlock/Scripts/SimpleNPC.cs.meta
  83. 11
      Project/Assets/ML-Agents/Examples/PushBlock/Scripts/ZombiePushBlockDeathEnvController.cs.meta
  84. 15
      Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushBlockTeamManager.cs
  85. 11
      Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushBlockTeamManager.cs.meta
  86. 321
      Project/Assets/ML-Agents/Examples/PushBlock/Scripts/ZombiePushBlockDeathEnvController.cs
  87. 7
      Project/Assets/ML-Agents/Examples/Hallway/Scenes/HallwayCollab.unity.meta
  88. 1001
      Project/Assets/ML-Agents/Examples/Hallway/Scenes/HallwayCollab.unity
  89. 566
      Project/Assets/ML-Agents/Examples/Hallway/TFModels/HallwayCollab.onnx
  90. 15
      Project/Assets/ML-Agents/Examples/Hallway/TFModels/HallwayCollab.onnx.meta
  91. 11
      Project/Assets/ML-Agents/Examples/Hallway/Scripts/HallwayCollabAgent.cs.meta
  92. 11
      Project/Assets/ML-Agents/Examples/Hallway/Scripts/HallwayTeamManager.cs.meta
  93. 204
      Project/Assets/ML-Agents/Examples/Hallway/Scripts/HallwayCollabAgent.cs
  94. 24
      Project/Assets/ML-Agents/Examples/Hallway/Scripts/HallwayTeamManager.cs
  95. 8
      Project/Assets/ML-Agents/Examples/CubeWars.meta
  96. 3
      com.unity.ml-agents.extensions/Runtime/Teams/BaseTeamManager.cs.meta
  97. 34
      com.unity.ml-agents.extensions/Runtime/Teams/BaseTeamManager.cs
  98. 8
      Project/Assets/ML-Agents/Examples/CubeWars/Materials.meta

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


/// </summary>
public int episodeId;
/// <summary>
/// Team Manager identifier.
/// </summary>
public string teamManagerId;
public void ClearActions()
{
storedActions.Clear();

/// </summary>
float[] m_LegacyActionCache;
private ITeamManager m_TeamManager;
/// <summary>
/// Called when the attached [GameObject] becomes enabled and active.
/// [GameObject]: https://docs.unity3d.com/Manual/GameObjects.html

new int[m_ActuatorManager.NumDiscreteActions]
);
if (m_TeamManager != null)
{
m_Info.teamManagerId = m_TeamManager.GetId();
}
// The first time the Academy resets, all Agents in the scene will be
// forced to reset through the <see cref="AgentForceReset"/> event.
// To avoid the Agent resetting twice, the Agents will not begin their

/// <summary>
/// The reason that the Agent has been set to "done".
/// </summary>
enum DoneReason
public enum DoneReason
{
/// <summary>
/// The episode was ended manually by calling <see cref="EndEpisode"/>.

}
}
// Request the last decision with no callbacks
// We request a decision so Python knows the Agent is done immediately
m_Brain?.RequestDecision(m_Info, sensors);
ResetSensors();
if (m_TeamManager != null)
{
// Send final observations to TeamManager if it exists.
// The TeamManager is responsible to keeping track of the Agent after it's
// done, including propagating any "posthumous" rewards.
m_TeamManager.OnAgentDone(this, doneReason, sensors);
}
else
{
SendDoneToTrainer();
}
// We also have to write any to any DemonstationStores so that they get the "done" flag.
foreach (var demoWriter in DemonstrationWriters)

m_RequestAction = false;
m_RequestDecision = false;
m_Info.storedActions.Clear();
}
public void SendDoneToTrainer()
{
// We request a decision so Python knows the Agent is done immediately
m_Brain?.RequestDecision(m_Info, sensors);
ResetSensors();
}
/// <summary>

var actions = m_Brain?.DecideAction() ?? new ActionBuffers();
m_Info.CopyActions(actions);
m_ActuatorManager.UpdateActions(actions);
}
public void SetTeamManager(ITeamManager teamManager)
{
m_TeamManager = teamManager;
m_Info.teamManagerId = teamManager?.GetId();
teamManager?.RegisterAgent(this);
}
}
}

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


agentInfoProto.ActionMask.AddRange(ai.discreteActionMasks);
}
if (ai.teamManagerId != null)
{
agentInfoProto.TeamManagerId = ai.teamManagerId;
}
return agentInfoProto;
}

39
com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/AgentInfo.cs


string.Concat(
"CjNtbGFnZW50c19lbnZzL2NvbW11bmljYXRvcl9vYmplY3RzL2FnZW50X2lu",
"Zm8ucHJvdG8SFGNvbW11bmljYXRvcl9vYmplY3RzGjRtbGFnZW50c19lbnZz",
"L2NvbW11bmljYXRvcl9vYmplY3RzL29ic2VydmF0aW9uLnByb3RvItEBCg5B",
"L2NvbW11bmljYXRvcl9vYmplY3RzL29ic2VydmF0aW9uLnByb3RvIuoBCg5B",
"YXRvcl9vYmplY3RzLk9ic2VydmF0aW9uUHJvdG9KBAgBEAJKBAgCEANKBAgD",
"EARKBAgEEAVKBAgFEAZKBAgGEAdKBAgMEA1CJaoCIlVuaXR5Lk1MQWdlbnRz",
"LkNvbW11bmljYXRvck9iamVjdHNiBnByb3RvMw=="));
"YXRvcl9vYmplY3RzLk9ic2VydmF0aW9uUHJvdG8SFwoPdGVhbV9tYW5hZ2Vy",
"X2lkGA4gASgJSgQIARACSgQIAhADSgQIAxAESgQIBBAFSgQIBRAGSgQIBhAH",
"SgQIDBANQiWqAiJVbml0eS5NTEFnZW50cy5Db21tdW5pY2F0b3JPYmplY3Rz",
"YgZwcm90bzM="));
new pbr::GeneratedClrTypeInfo(typeof(global::Unity.MLAgents.CommunicatorObjects.AgentInfoProto), global::Unity.MLAgents.CommunicatorObjects.AgentInfoProto.Parser, new[]{ "Reward", "Done", "MaxStepReached", "Id", "ActionMask", "Observations" }, null, null, null)
new pbr::GeneratedClrTypeInfo(typeof(global::Unity.MLAgents.CommunicatorObjects.AgentInfoProto), global::Unity.MLAgents.CommunicatorObjects.AgentInfoProto.Parser, new[]{ "Reward", "Done", "MaxStepReached", "Id", "ActionMask", "Observations", "TeamManagerId" }, null, null, null)
}));
}
#endregion

id_ = other.id_;
actionMask_ = other.actionMask_.Clone();
observations_ = other.observations_.Clone();
teamManagerId_ = other.teamManagerId_;
_unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
}

get { return observations_; }
}
/// <summary>Field number for the "team_manager_id" field.</summary>
public const int TeamManagerIdFieldNumber = 14;
private string teamManagerId_ = "";
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public string TeamManagerId {
get { return teamManagerId_; }
set {
teamManagerId_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
}
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public override bool Equals(object other) {
return Equals(other as AgentInfoProto);

if (Id != other.Id) return false;
if(!actionMask_.Equals(other.actionMask_)) return false;
if(!observations_.Equals(other.observations_)) return false;
if (TeamManagerId != other.TeamManagerId) return false;
return Equals(_unknownFields, other._unknownFields);
}

if (Id != 0) hash ^= Id.GetHashCode();
hash ^= actionMask_.GetHashCode();
hash ^= observations_.GetHashCode();
if (TeamManagerId.Length != 0) hash ^= TeamManagerId.GetHashCode();
if (_unknownFields != null) {
hash ^= _unknownFields.GetHashCode();
}

}
actionMask_.WriteTo(output, _repeated_actionMask_codec);
observations_.WriteTo(output, _repeated_observations_codec);
if (TeamManagerId.Length != 0) {
output.WriteRawTag(114);
output.WriteString(TeamManagerId);
}
if (_unknownFields != null) {
_unknownFields.WriteTo(output);
}

}
size += actionMask_.CalculateSize(_repeated_actionMask_codec);
size += observations_.CalculateSize(_repeated_observations_codec);
if (TeamManagerId.Length != 0) {
size += 1 + pb::CodedOutputStream.ComputeStringSize(TeamManagerId);
}
if (_unknownFields != null) {
size += _unknownFields.CalculateSize();
}

}
actionMask_.Add(other.actionMask_);
observations_.Add(other.observations_);
if (other.TeamManagerId.Length != 0) {
TeamManagerId = other.TeamManagerId;
}
_unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
}

}
case 106: {
observations_.AddEntriesFrom(input, _repeated_observations_codec);
break;
}
case 114: {
TeamManagerId = input.ReadString();
break;
}
}

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


/// </summary>
[HideInInspector, SerializeField, FormerlySerializedAs("m_TeamID")]
public int TeamId;
// TODO properties here instead of Agent
[FormerlySerializedAs("m_useChildSensors")]

18
ml-agents-envs/mlagents_envs/base_env.py


reward: float
agent_id: AgentId
action_mask: Optional[List[np.ndarray]]
team_manager_id: Optional[str]
class DecisionSteps(Mapping):

this simulation step.
"""
def __init__(self, obs, reward, agent_id, action_mask):
def __init__(self, obs, reward, agent_id, action_mask, team_manager_id=None):
self.team_manager_id: Optional[List[str]] = team_manager_id
self.action_mask: Optional[List[np.ndarray]] = action_mask
self._agent_id_to_index: Optional[Dict[AgentId, int]] = None

agent_mask = []
for mask in self.action_mask:
agent_mask.append(mask[agent_index])
team_manager_id = None
if self.team_manager_id is not None and self.team_manager_id != "":
team_manager_id = self.team_manager_id[agent_index]
team_manager_id=team_manager_id,
)
def __iter__(self) -> Iterator[Any]:

reward=np.zeros(0, dtype=np.float32),
agent_id=np.zeros(0, dtype=np.int32),
action_mask=None,
team_manager_id=None,
)

reward: float
interrupted: bool
agent_id: AgentId
team_manager_id: Optional[str]
class TerminalSteps(Mapping):

across simulation steps.
"""
def __init__(self, obs, reward, interrupted, agent_id):
def __init__(self, obs, reward, interrupted, agent_id, team_manager_id=None):
self.team_manager_id: Optional[List[str]] = team_manager_id
@property
def agent_id_to_index(self) -> Dict[AgentId, int]:

agent_obs = []
for batched_obs in self.obs:
agent_obs.append(batched_obs[agent_index])
team_manager_id = None
if self.team_manager_id is not None and self.team_manager_id != "":
team_manager_id = self.team_manager_id[agent_index]
team_manager_id=team_manager_id,
)
def __iter__(self) -> Iterator[Any]:

reward=np.zeros(0, dtype=np.float32),
interrupted=np.zeros(0, dtype=np.bool),
agent_id=np.zeros(0, dtype=np.int32),
team_manager_id=None,
)

11
ml-agents-envs/mlagents_envs/communicator_objects/agent_info_pb2.py


name='mlagents_envs/communicator_objects/agent_info.proto',
package='communicator_objects',
syntax='proto3',
serialized_pb=_b('\n3mlagents_envs/communicator_objects/agent_info.proto\x12\x14\x63ommunicator_objects\x1a\x34mlagents_envs/communicator_objects/observation.proto\"\xd1\x01\n\x0e\x41gentInfoProto\x12\x0e\n\x06reward\x18\x07 \x01(\x02\x12\x0c\n\x04\x64one\x18\x08 \x01(\x08\x12\x18\n\x10max_step_reached\x18\t \x01(\x08\x12\n\n\x02id\x18\n \x01(\x05\x12\x13\n\x0b\x61\x63tion_mask\x18\x0b \x03(\x08\x12<\n\x0cobservations\x18\r \x03(\x0b\x32&.communicator_objects.ObservationProtoJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x04\x10\x05J\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07J\x04\x08\x0c\x10\rB%\xaa\x02\"Unity.MLAgents.CommunicatorObjectsb\x06proto3')
serialized_pb=_b('\n3mlagents_envs/communicator_objects/agent_info.proto\x12\x14\x63ommunicator_objects\x1a\x34mlagents_envs/communicator_objects/observation.proto\"\xea\x01\n\x0e\x41gentInfoProto\x12\x0e\n\x06reward\x18\x07 \x01(\x02\x12\x0c\n\x04\x64one\x18\x08 \x01(\x08\x12\x18\n\x10max_step_reached\x18\t \x01(\x08\x12\n\n\x02id\x18\n \x01(\x05\x12\x13\n\x0b\x61\x63tion_mask\x18\x0b \x03(\x08\x12<\n\x0cobservations\x18\r \x03(\x0b\x32&.communicator_objects.ObservationProto\x12\x17\n\x0fteam_manager_id\x18\x0e \x01(\tJ\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x04\x10\x05J\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07J\x04\x08\x0c\x10\rB%\xaa\x02\"Unity.MLAgents.CommunicatorObjectsb\x06proto3')
,
dependencies=[mlagents__envs_dot_communicator__objects_dot_observation__pb2.DESCRIPTOR,])

message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='team_manager_id', full_name='communicator_objects.AgentInfoProto.team_manager_id', index=6,
number=14, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
],
extensions=[
],

oneofs=[
],
serialized_start=132,
serialized_end=341,
serialized_end=366,
)
_AGENTINFOPROTO.fields_by_name['observations'].message_type = mlagents__envs_dot_communicator__objects_dot_observation__pb2._OBSERVATIONPROTO

7
ml-agents-envs/mlagents_envs/communicator_objects/agent_info_pb2.pyi


from typing import (
Iterable as typing___Iterable,
Optional as typing___Optional,
Text as typing___Text,
)
from typing_extensions import (

max_step_reached = ... # type: builtin___bool
id = ... # type: builtin___int
action_mask = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[builtin___bool]
team_manager_id = ... # type: typing___Text
@property
def observations(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[mlagents_envs___communicator_objects___observation_pb2___ObservationProto]: ...

id : typing___Optional[builtin___int] = None,
action_mask : typing___Optional[typing___Iterable[builtin___bool]] = None,
observations : typing___Optional[typing___Iterable[mlagents_envs___communicator_objects___observation_pb2___ObservationProto]] = None,
team_manager_id : typing___Optional[typing___Text] = None,
) -> None: ...
@classmethod
def FromString(cls, s: builtin___bytes) -> AgentInfoProto: ...

def ClearField(self, field_name: typing_extensions___Literal[u"action_mask",u"done",u"id",u"max_step_reached",u"observations",u"reward"]) -> None: ...
def ClearField(self, field_name: typing_extensions___Literal[u"action_mask",u"done",u"id",u"max_step_reached",u"observations",u"reward",u"team_manager_id"]) -> None: ...
def ClearField(self, field_name: typing_extensions___Literal[u"action_mask",b"action_mask",u"done",b"done",u"id",b"id",u"max_step_reached",b"max_step_reached",u"observations",b"observations",u"reward",b"reward"]) -> None: ...
def ClearField(self, field_name: typing_extensions___Literal[u"action_mask",b"action_mask",u"done",b"done",u"id",b"id",u"max_step_reached",b"max_step_reached",u"observations",b"observations",u"reward",b"reward",u"team_manager_id",b"team_manager_id"]) -> None: ...

29
ml-agents-envs/mlagents_envs/rpc_utils.py


decision_rewards = np.array(
[agent_info.reward for agent_info in decision_agent_info_list], dtype=np.float32
)
decision_team_manager = [
agent_info.team_manager_id
for agent_info in decision_agent_info_list
if agent_info.team_manager_id is not None
]
if len(decision_team_manager) == 0:
decision_team_manager = None
terminal_team_manager = [
agent_info.team_manager_id
for agent_info in terminal_agent_info_list
if agent_info.team_manager_id is not None
]
if len(terminal_team_manager) == 0:
terminal_team_manager = None
_raise_on_nan_and_inf(decision_rewards, "rewards")
_raise_on_nan_and_inf(terminal_rewards, "rewards")

action_mask = np.split(action_mask, indices, axis=1)
return (
DecisionSteps(
decision_obs_list, decision_rewards, decision_agent_id, action_mask
decision_obs_list,
decision_rewards,
decision_agent_id,
action_mask,
decision_team_manager,
TerminalSteps(terminal_obs_list, terminal_rewards, max_step, terminal_agent_id),
TerminalSteps(
terminal_obs_list,
terminal_rewards,
max_step,
terminal_agent_id,
terminal_team_manager,
),
)

35
ml-agents/mlagents/trainers/behavior_id_utils.py


from typing import NamedTuple
from typing import NamedTuple, Optional
from urllib.parse import urlparse, parse_qs

behavior_id: str
brain_name: str
team_id: int
group_id: int
Parses a name_behavior_id of the form name?team=0
Parses a name_behavior_id of the form name?team=0&group=0
group_id: int = 0
if "group" in ids:
group_id = int(ids["group"][0])
behavior_id=name_behavior_id, brain_name=name, team_id=team_id
behavior_id=name_behavior_id,
brain_name=name,
team_id=team_id,
group_id=group_id,
def create_name_behavior_id(name: str, team_id: int) -> str:
def create_name_behavior_id(
name: str, team_id: Optional[int] = None, group_id: Optional[int] = None
) -> str:
"""
Reconstructs fully qualified behavior name from name and team_id
:param name: brain name
:param team_id: team ID
:return: name_behavior_id
Reconstructs fully qualified behavior name from name and team_id
:param name: brain name
:param team_id: team ID
:return: name_behavior_id
"""
return name + "?team=" + str(team_id)
final_name = name
if team_id is not None:
final_name += f"?team={team_id}"
if group_id is not None:
final_name += f"&group={group_id}"
return final_name
def get_global_agent_id(worker_id: int, agent_id: int) -> str:

5
ml-agents/mlagents/trainers/policy/torch_policy.py


masks: Optional[torch.Tensor] = None,
memories: Optional[torch.Tensor] = None,
seq_len: int = 1,
critic_obs: Optional[List[List[torch.Tensor]]] = None,
) -> Tuple[AgentAction, ActionLogProbs, torch.Tensor, torch.Tensor]:
"""
:param obs: List of observations.

masks: Optional[torch.Tensor] = None,
memories: Optional[torch.Tensor] = None,
seq_len: int = 1,
critic_obs: Optional[List[List[torch.Tensor]]] = None,
obs, actions, masks, memories, seq_len
obs, actions, masks, memories, seq_len, critic_obs
)
return log_probs, entropies, value_heads

memories = torch.as_tensor(self.retrieve_memories(global_agent_ids)).unsqueeze(
0
)
run_out = {}
with torch.no_grad():
action, log_probs, entropy, memories = self.sample_actions(

29
ml-agents/mlagents/trainers/tests/test_buffer.py


b = AgentBuffer()
for step in range(9):
b["vector_observation"].append(
[
100 * fake_agent_id + 10 * step + 1,
100 * fake_agent_id + 10 * step + 2,
100 * fake_agent_id + 10 * step + 3,
]
np.array(
[
100 * fake_agent_id + 10 * step + 1,
100 * fake_agent_id + 10 * step + 2,
100 * fake_agent_id + 10 * step + 3,
],
dtype=np.float32,
)
[100 * fake_agent_id + 10 * step + 4, 100 * fake_agent_id + 10 * step + 5]
np.array(
[
100 * fake_agent_id + 10 * step + 4,
100 * fake_agent_id + 10 * step + 5,
],
dtype=np.float32,
)
)
return b

a = agent_1_buffer["vector_observation"].get_batch(
batch_size=2, training_length=1, sequential=True
)
assert_array(np.array(a), np.array([[171, 172, 173], [181, 182, 183]]))
assert len(a) == 2
assert_array(
np.array(a), np.array([[171, 172, 173], [181, 182, 183]], dtype=np.float32)
)
a = agent_2_buffer["vector_observation"].get_batch(
batch_size=2, training_length=3, sequential=True
)

[261, 262, 263],
[271, 272, 273],
[281, 282, 283],
]
],
dtype=np.float32,
),
)
a = agent_2_buffer["vector_observation"].get_batch(

71
ml-agents/mlagents/trainers/buffer.py


import numpy as np
import h5py
from typing import List, BinaryIO
from typing import List, BinaryIO, Any
import itertools
from mlagents_envs.exception import UnityException

class AgentBufferField(list):
"""
AgentBufferField is a list of numpy arrays. When an agent collects a field, you can add it to its
AgentBufferField with the append method.
AgentBufferField is a list of data, usually numpy arrays. When an agent collects a field,
you can add it to its AgentBufferField with the append method.
"""
def __init__(self):

def __str__(self):
return str(np.array(self).shape)
def append(self, element: np.ndarray, padding_value: float = 0.0) -> None:
def append(self, element: Any, padding_value: Any = 0.0) -> None:
Adds an element to this list. Also lets you change the padding
Adds an element to this AgentBuffer. Also lets you change the padding
type, so that it can be set on append (e.g. action_masks should
be padded with 1.)
:param element: The element to append to the list.

self.padding_value = padding_value
def extend(self, data: np.ndarray) -> None:
"""
Adds a list of np.arrays to the end of the list of np.arrays.
:param data: The np.array list to append.
def set(self, data: List[Any]) -> None:
self += list(np.array(data, dtype=np.float32))
def set(self, data):
"""
Sets the list of np.array to the input data
:param data: The np.array list to be set.
Sets the AgentBuffer to the provided list
:param data: The list to be set.
dtype = None
if data is not None and len(data) and isinstance(data[0], float):
dtype = np.float32
self[:] = list(np.array(data, dtype=dtype))
self[:] = data
def get_batch(
self,

) -> np.ndarray:
) -> List[Any]:
from the list of np.array
from the AgentBuffer.
:param batch_size: The number of elements to retrieve. If None:
All elements will be retrieved.
:param training_length: The length of the sequence to be retrieved. If

)
if batch_size * training_length > len(self):
padding = np.array(self[-1], dtype=np.float32) * self.padding_value
return np.array(
[padding] * (training_length - leftover) + self[:],
dtype=np.float32,
)
return [padding] * (training_length - leftover) + self[:]
return np.array(
self[len(self) - batch_size * training_length :],
dtype=np.float32,
)
return self[len(self) - batch_size * training_length :]
else:
# The sequences will have overlapping elements
if batch_size is None:

tmp_list: List[np.ndarray] = []
for end in range(len(self) - batch_size + 1, len(self) + 1):
tmp_list += self[end - training_length : end]
return np.array(tmp_list, dtype=np.float32)
return tmp_list
def reset_field(self) -> None:
"""

return len(next(iter(self.values())))
else:
return 0
@staticmethod
def obs_list_to_obs_batch(obs_list: List[List[np.ndarray]]) -> List[np.ndarray]:
"""
Converts a List of obs (an obs itself consinsting of a List of np.ndarray) to
a List of np.ndarray, with the observations batchwise.
"""
# Transpose and convert List of Lists
new_list = list(map(lambda x: np.asanyarray(list(x)), zip(*obs_list)))
return new_list
@staticmethod
def obs_list_list_to_obs_batch(
obs_list_list: List[List[List[np.ndarray]]]
) -> List[List[np.ndarray]]:
"""
Convert a List of List of obs, where one of the dimension is time and the other is number (e.g. in the
case of a variable number of critic observations) to a List of obs, where time is in the batch dimension
of the obs, and the List is the variable number of agents.
"""
new_list = list(
map(
lambda x: AgentBuffer.obs_list_to_obs_batch(list(x)),
zip(*obs_list_list),
)
)
return new_list

30
ml-agents/mlagents/trainers/optimizer/torch_optimizer.py


import numpy as np
from mlagents.trainers.buffer import AgentBuffer
from mlagents.trainers.trajectory import ObsUtil
from mlagents.trainers.trajectory import ObsUtil, TeamObsUtil
from mlagents.trainers.torch.components.bc.module import BCModule
from mlagents.trainers.torch.components.reward_providers import create_reward_provider

)
def get_trajectory_value_estimates(
self, batch: AgentBuffer, next_obs: List[np.ndarray], done: bool
self,
batch: AgentBuffer,
next_obs: List[np.ndarray],
next_critic_obs: List[List[np.ndarray]],
done: bool,
) -> Tuple[Dict[str, np.ndarray], Dict[str, float]]:
n_obs = len(self.policy.behavior_spec.sensor_specs)
current_obs = ObsUtil.from_buffer(batch, n_obs)

next_obs = [obs.unsqueeze(0) for obs in next_obs]
critic_obs = TeamObsUtil.from_buffer(batch, n_obs)
critic_obs = [
[ModelUtils.list_to_tensor(obs) for obs in _teammate_obs]
for _teammate_obs in critic_obs
]
next_critic_obs = [
ModelUtils.list_to_tensor_list(_list_obs) for _list_obs in next_critic_obs
]
# Expand dimensions of next critic obs
next_critic_obs = [
[_obs.unsqueeze(0) for _obs in _list_obs] for _list_obs in next_critic_obs
]
memory = torch.zeros([1, 1, self.policy.m_size])
current_obs, memory, sequence_length=batch.num_experiences
current_obs,
memory,
sequence_length=batch.num_experiences,
critic_obs=critic_obs,
next_obs, next_memory, sequence_length=1
next_obs, next_memory, sequence_length=1, critic_obs=next_critic_obs
)
for name, estimate in value_estimates.items():

7
ml-agents/mlagents/trainers/ppo/trainer.py


value_estimates, value_next = self.optimizer.get_trajectory_value_estimates(
agent_buffer_trajectory,
trajectory.next_obs,
trajectory.next_collab_obs,
trajectory.done_reached and not trajectory.interrupted,
)

n_sequences = max(
int(self.hyperparameters.batch_size / self.policy.sequence_length), 1
)
advantages = self.update_buffer["advantages"].get_batch()
# Normalize advantages
advantages = np.array(self.update_buffer["advantages"].get_batch())
(advantages - advantages.mean()) / (advantages.std() + 1e-10)
list((advantages - advantages.mean()) / (advantages.std() + 1e-10))
)
num_epoch = self.hyperparameters.num_epoch
batch_update_stats = defaultdict(list)

9
ml-agents/mlagents/trainers/ppo/optimizer_torch.py


from mlagents.trainers.torch.agent_action import AgentAction
from mlagents.trainers.torch.action_log_probs import ActionLogProbs
from mlagents.trainers.torch.utils import ModelUtils
from mlagents.trainers.trajectory import ObsUtil
from mlagents.trainers.trajectory import ObsUtil, TeamObsUtil
class TorchPPOOptimizer(TorchOptimizer):

# Convert to tensors
current_obs = [ModelUtils.list_to_tensor(obs) for obs in current_obs]
critic_obs = TeamObsUtil.from_buffer(batch, n_obs)
critic_obs = [
[ModelUtils.list_to_tensor(obs) for obs in _teammate_obs]
for _teammate_obs in critic_obs
]
act_masks = ModelUtils.list_to_tensor(batch["action_mask"])
actions = AgentAction.from_dict(batch)

masks=act_masks,
actions=actions,
memories=memories,
critic_obs=critic_obs,
seq_len=self.policy.sequence_length,
)
old_log_probs = ActionLogProbs.from_dict(batch).flatten()

14
ml-agents/mlagents/trainers/ghost/trainer.py


:param parsed_behavior_id: Behavior ID that the policy should belong to.
:param policy: Policy to associate with name_behavior_id.
"""
name_behavior_id = parsed_behavior_id.behavior_id
self._name_to_parsed_behavior_id[name_behavior_id] = parsed_behavior_id
name_behavior_id = create_name_behavior_id(
parsed_behavior_id.brain_name, team_id=parsed_behavior_id.team_id
)
# Add policy only based on the team id, not the group id
self._name_to_parsed_behavior_id[
parsed_behavior_id.behavior_id
] = parsed_behavior_id
self.policies[name_behavior_id] = policy
def get_policy(self, name_behavior_id: str) -> Policy:

:return: Policy associated with name_behavior_id
"""
# Get policy based on team id, but not group id
parsed_behavior_id = BehaviorIdentifiers.from_name_behavior_id(name_behavior_id)
name_behavior_id = create_name_behavior_id(
parsed_behavior_id.brain_name, team_id=parsed_behavior_id.team_id
)
return self.policies[name_behavior_id]
def _save_snapshot(self) -> None:

69
ml-agents/mlagents/trainers/agent_processor.py


import sys
import numpy as np
from typing import List, Dict, TypeVar, Generic, Tuple, Any, Union
from collections import defaultdict, Counter
import queue

"""
self.experience_buffers: Dict[str, List[AgentExperience]] = defaultdict(list)
self.last_step_result: Dict[str, Tuple[DecisionStep, int]] = {}
# current_group_obs is used to collect the last seen obs of all the agents in the same group,
# and assemble the next_collab_obs.
self.current_group_obs: Dict[str, Dict[str, List[np.ndarray]]] = defaultdict(
lambda: defaultdict(list)
)
# last_group_obs is used to collect the last seen obs of all the agents in the same group,
# and assemble the collab_obs.
self.last_group_obs: Dict[str, Dict[str, List[np.ndarray]]] = defaultdict(
lambda: defaultdict(list)
)
# last_take_action_outputs stores the action a_t taken before the current observation s_(t+1), while
# grabbing previous_action from the policy grabs the action PRIOR to that, a_(t-1).
self.last_take_action_outputs: Dict[str, ActionInfoOutputs] = {}

if global_id in self.last_step_result: # Don't store if agent just reset
self.last_take_action_outputs[global_id] = take_action_outputs
# Iterate over all the terminal steps
# Iterate over all the terminal steps, first gather all the teammate obs
# and then create the AgentExperiences/Trajectories
for terminal_step in terminal_steps.values():
local_id = terminal_step.agent_id
global_id = get_global_agent_id(worker_id, local_id)
self._gather_teammate_obs(terminal_step, global_id)
for terminal_step in terminal_steps.values():
local_id = terminal_step.agent_id
global_id = get_global_agent_id(worker_id, local_id)

# Iterate over all the decision steps
# Clear the last seen group obs when agents die.
self._clear_teammate_obs(global_id)
# Clean the last experience dictionary for terminal steps
for terminal_step in terminal_steps.values():
local_id = terminal_step.agent_id
global_id = get_global_agent_id(worker_id, local_id)
# Iterate over all the decision steps, first gather all the teammate obs
# and then create the trajectories
for ongoing_step in decision_steps.values():
local_id = ongoing_step.agent_id
global_id = get_global_agent_id(worker_id, local_id)
self._gather_teammate_obs(ongoing_step, global_id)
for ongoing_step in decision_steps.values():
local_id = ongoing_step.agent_id
global_id = get_global_agent_id(worker_id, local_id)

[_gid], take_action_outputs["action"]
)
def _gather_teammate_obs(
self, step: Union[TerminalStep, DecisionStep], global_id: str
) -> None:
stored_decision_step, idx = self.last_step_result.get(global_id, (None, None))
if stored_decision_step is not None:
if step.team_manager_id is not None:
self.last_group_obs[step.team_manager_id][
global_id
] = stored_decision_step.obs
self.current_group_obs[step.team_manager_id][global_id] = step.obs
def _clear_teammate_obs(self, global_id: str) -> None:
for _manager_id, _team_group in self.current_group_obs.items():
self._safe_delete(_team_group, global_id)
if not _team_group: # if dict is empty
self._safe_delete(_team_group, _manager_id)
for _manager_id, _team_group in self.last_group_obs.items():
self._safe_delete(_team_group, global_id)
if not _team_group: # if dict is empty
self._safe_delete(_team_group, _manager_id)
def _process_step(
self, step: Union[TerminalStep, DecisionStep], global_id: str, index: int
) -> None:

)
action_mask = stored_decision_step.action_mask
prev_action = self.policy.retrieve_previous_action([global_id])[0, :]
# Assemble teammate_obs. If none saved, then it will be an empty list.
collab_obs = []
for _id, _obs in self.last_group_obs[step.team_manager_id].items():
if _id != global_id:
collab_obs.append(_obs)
collab_obs=collab_obs,
reward=step.reward,
done=done,
action=action_tuple,

len(self.experience_buffers[global_id]) >= self.max_trajectory_length
or terminated
):
# Make next AgentExperience
next_collab_obs = []
for _id, _exp in self.current_group_obs[step.team_manager_id].items():
if _id != global_id:
next_collab_obs.append(_exp)
next_collab_obs=next_collab_obs,
behavior_id=self.behavior_id,
)
for traj_queue in self.trajectory_queues:

12
ml-agents/mlagents/trainers/torch/utils.py


return torch.as_tensor(np.asanyarray(ndarray_list), dtype=dtype)
@staticmethod
def list_to_tensor_list(
ndarray_list: List[np.ndarray], dtype: Optional[torch.dtype] = torch.float32
) -> torch.Tensor:
"""
Converts a list of numpy arrays into a list of tensors. MUCH faster than
calling as_tensor on the list directly.
"""
return [
torch.as_tensor(np.asanyarray(_arr), dtype=dtype) for _arr in ndarray_list
]
@staticmethod
def to_numpy(tensor: torch.Tensor) -> np.ndarray:
"""
Converts a Torch Tensor to a numpy array. If the Tensor is on the GPU, it will

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


from mlagents.trainers.policy.torch_policy import TorchPolicy
from mlagents.trainers.demo_loader import demo_to_buffer
from mlagents.trainers.buffer import AgentBuffer
from mlagents.trainers.buffer import AgentBuffer
class BCModule:

25
ml-agents/mlagents/trainers/torch/encoders.py


return height, width
class VectorInput(nn.Module):
class InputProcessor:
def copy_normalization(self, other_input: "InputProcessor") -> None:
pass
def update_normalization(self, inputs: torch.Tensor) -> None:
pass
class VectorInput(nn.Module, InputProcessor):
def __init__(self, input_size: int, normalize: bool = False):
super().__init__()
self.normalizer: Optional[Normalizer] = None

inputs = self.normalizer(inputs)
return inputs
def copy_normalization(self, other_input: "VectorInput") -> None:
if self.normalizer is not None and other_input.normalizer is not None:
self.normalizer.copy_from(other_input.normalizer)
def copy_normalization(self, other_input: "InputProcessor") -> None:
if isinstance(other_input, VectorInput):
if self.normalizer is not None and other_input.normalizer is not None:
self.normalizer.copy_from(other_input.normalizer)
def update_normalization(self, inputs: torch.Tensor) -> None:
if self.normalizer is not None:

class SmallVisualEncoder(nn.Module):
class SmallVisualEncoder(nn.Module, InputProcessor):
"""
CNN architecture used by King in their Candy Crush predictor
https://www.researchgate.net/publication/328307928_Human-Like_Playtesting_with_Deep_Learning

return self.dense(hidden)
class SimpleVisualEncoder(nn.Module):
class SimpleVisualEncoder(nn.Module, InputProcessor):
def __init__(
self, height: int, width: int, initial_channels: int, output_size: int
):

return self.dense(hidden)
class NatureVisualEncoder(nn.Module):
class NatureVisualEncoder(nn.Module, InputProcessor):
def __init__(
self, height: int, width: int, initial_channels: int, output_size: int
):

return input_tensor + self.layers(input_tensor)
class ResNetVisualEncoder(nn.Module):
class ResNetVisualEncoder(nn.Module, InputProcessor):
def __init__(
self, height: int, width: int, initial_channels: int, output_size: int
):

17
ml-agents/mlagents/trainers/torch/layers.py


Linear layers.
"""
def __init__(self, input_size: int, num_layers: int, hidden_size: int):
def __init__(
self,
input_size: int,
num_layers: int,
hidden_size: int,
kernel_init: Initialization = Initialization.KaimingHeNormal,
kernel_gain: float = 1.0,
):
kernel_init=Initialization.KaimingHeNormal,
kernel_gain=1.0,
kernel_init=kernel_init,
kernel_gain=kernel_gain,
)
]
self.layers.append(Swish())

hidden_size,
hidden_size,
kernel_init=Initialization.KaimingHeNormal,
kernel_gain=1.0,
kernel_init=kernel_init,
kernel_gain=kernel_gain,
)
)
self.layers.append(Swish())

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


self.self_size = 0
self.ent_encoders = torch.nn.ModuleList(
[
LinearEncoder(self.self_size + ent_size, 1, embedding_size)
LinearEncoder(
self.self_size + ent_size,
1,
embedding_size,
kernel_init=Initialization.Normal,
kernel_gain=(0.125 / embedding_size) ** 0.5,
)
for ent_size in self.entity_sizes
]
)

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


from mlagents.trainers.torch.encoders import VectorInput
from mlagents.trainers.buffer import AgentBuffer
from mlagents.trainers.trajectory import ObsUtil
from mlagents.trainers.torch.attention import ResidualSelfAttention, EntityEmbeddings
ActivationFunction = Callable[[torch.Tensor], torch.Tensor]

return encoding, memories
# NOTE: this class will be replaced with a multi-head attention when the time comes
class MultiInputNetworkBody(nn.Module):
def __init__(
self,
sensor_specs: List[SensorSpec],
network_settings: NetworkSettings,
encoded_act_size: int = 0,
num_obs_heads: int = 1,
):
super().__init__()
self.normalize = network_settings.normalize
self.use_lstm = network_settings.memory is not None
# Scale network depending on num agents
self.h_size = network_settings.hidden_units
self.m_size = (
network_settings.memory.memory_size
if network_settings.memory is not None
else 0
)
self.processors, _input_size = ModelUtils.create_input_processors(
sensor_specs,
self.h_size,
network_settings.vis_encode_type,
normalize=self.normalize,
)
# Modules for self-attention
self.entity_encoder = EntityEmbeddings(
sum(_input_size), [sum(_input_size)], self.h_size
)
self.self_attn = ResidualSelfAttention(self.h_size)
encoder_input_size = self.h_size
total_enc_size = encoder_input_size + encoded_act_size
self.linear_encoder = LinearEncoder(
total_enc_size, network_settings.num_layers, self.h_size
)
if self.use_lstm:
self.lstm = LSTM(self.h_size, self.m_size)
else:
self.lstm = None # type: ignore
@property
def memory_size(self) -> int:
return self.lstm.memory_size if self.use_lstm else 0
def update_normalization(self, buffer: AgentBuffer) -> None:
obs = ObsUtil.from_buffer(buffer, len(self.processors))
for vec_input, enc in zip(obs, self.processors):
if isinstance(enc, VectorInput):
enc.update_normalization(torch.as_tensor(vec_input))
def copy_normalization(self, other_network: "NetworkBody") -> None:
if self.normalize:
for n1, n2 in zip(self.processors, other_network.processors):
if isinstance(n1, VectorInput) and isinstance(n2, VectorInput):
n1.copy_normalization(n2)
def forward(
self,
all_net_inputs: List[List[torch.Tensor]],
actions: Optional[torch.Tensor] = None,
memories: Optional[torch.Tensor] = None,
sequence_length: int = 1,
) -> Tuple[torch.Tensor, torch.Tensor]:
concat_encoded_obs = []
x_self = None
self_encodes = []
inputs = all_net_inputs[0]
for idx, processor in enumerate(self.processors):
obs_input = inputs[idx]
processed_obs = processor(obs_input)
self_encodes.append(processed_obs)
x_self = torch.cat(self_encodes, dim=-1)
# Get attention masks by grabbing an arbitrary obs across all the agents
# Since these are raw obs, the padded values are still NaN
only_first_obs = [_all_obs[0] for _all_obs in all_net_inputs]
obs_for_mask = torch.stack(only_first_obs, dim=1)
# Get the mask from nans
attn_mask = torch.any(obs_for_mask.isnan(), dim=2).type(torch.FloatTensor)
# Get the self encoding separately, but keep it in the entities
concat_encoded_obs = [x_self]
for inputs in all_net_inputs[1:]:
encodes = []
for idx, processor in enumerate(self.processors):
obs_input = inputs[idx]
obs_input[obs_input.isnan()] = 0.0 # Remove NaNs
processed_obs = processor(obs_input)
encodes.append(processed_obs)
concat_encoded_obs.append(torch.cat(encodes, dim=-1))
concat_entites = torch.stack(concat_encoded_obs, dim=1)
encoded_entity = self.entity_encoder(x_self, [concat_entites])
encoded_state = self.self_attn(encoded_entity, [attn_mask])
if len(concat_encoded_obs) == 0:
raise Exception("No valid inputs to network.")
# Constants don't work in Barracuda
if actions is not None:
inputs = torch.cat([encoded_state, actions], dim=-1)
else:
inputs = encoded_state
encoding = self.linear_encoder(inputs)
if self.use_lstm:
# Resize to (batch, sequence length, encoding size)
encoding = encoding.reshape([-1, sequence_length, self.h_size])
encoding, memories = self.lstm(encoding, memories)
encoding = encoding.reshape([-1, self.m_size // 2])
return encoding, memories
class ValueNetwork(nn.Module):
def __init__(
self,

return output, memories
class CentralizedValueNetwork(ValueNetwork):
def __init__(
self,
stream_names: List[str],
observation_shapes: List[Tuple[int, ...]],
network_settings: NetworkSettings,
encoded_act_size: int = 0,
outputs_per_stream: int = 1,
):
# This is not a typo, we want to call __init__ of nn.Module
nn.Module.__init__(self)
self.network_body = MultiInputNetworkBody(
observation_shapes, network_settings, encoded_act_size=encoded_act_size
)
if network_settings.memory is not None:
encoding_size = network_settings.memory.memory_size // 2
else:
encoding_size = network_settings.hidden_units
self.value_heads = ValueHeads(stream_names, encoding_size, outputs_per_stream)
def forward(
self,
inputs: List[List[torch.Tensor]],
actions: Optional[torch.Tensor] = None,
memories: Optional[torch.Tensor] = None,
sequence_length: int = 1,
) -> Tuple[Dict[str, torch.Tensor], torch.Tensor]:
encoding, memories = self.network_body(
inputs, actions, memories, sequence_length
)
output = self.value_heads(encoding)
return output, memories
class Actor(abc.ABC):
@abc.abstractmethod
def update_normalization(self, buffer: AgentBuffer) -> None:

masks: Optional[torch.Tensor] = None,
memories: Optional[torch.Tensor] = None,
sequence_length: int = 1,
critic_obs: Optional[List[List[torch.Tensor]]] = None,
) -> Tuple[
AgentAction, ActionLogProbs, torch.Tensor, Dict[str, torch.Tensor], torch.Tensor
]:

masks: Optional[torch.Tensor] = None,
memories: Optional[torch.Tensor] = None,
sequence_length: int = 1,
critic_obs: Optional[List[List[torch.Tensor]]] = None,
) -> Tuple[ActionLogProbs, torch.Tensor, Dict[str, torch.Tensor]]:
encoding, memories = self.network_body(
inputs, memories=memories, sequence_length=sequence_length

sensor_specs, network_settings, action_spec, conditional_sigma, tanh_squash
)
self.stream_names = stream_names
self.critic = ValueNetwork(stream_names, sensor_specs, network_settings)
self.critic = CentralizedValueNetwork(
stream_names, sensor_specs, network_settings
)
@property
def memory_size(self) -> int:

inputs: List[torch.Tensor],
memories: Optional[torch.Tensor] = None,
sequence_length: int = 1,
critic_obs: List[List[torch.Tensor]] = None,
all_net_inputs = [inputs]
if critic_obs is not None:
all_net_inputs.extend(critic_obs)
inputs, memories=critic_mem, sequence_length=sequence_length
all_net_inputs, memories=critic_mem, sequence_length=sequence_length
)
if actor_mem is not None:
# Make memories with the actor mem unchanged

masks: Optional[torch.Tensor] = None,
memories: Optional[torch.Tensor] = None,
sequence_length: int = 1,
critic_obs: Optional[List[List[torch.Tensor]]] = None,
) -> Tuple[ActionLogProbs, torch.Tensor, Dict[str, torch.Tensor]]:
actor_mem, critic_mem = self._get_actor_critic_mem(memories)
encoding, actor_mem_outs = self.network_body(

all_net_inputs = [inputs]
if critic_obs is not None:
all_net_inputs.extend(critic_obs)
inputs, memories=critic_mem, sequence_length=sequence_length
all_net_inputs, memories=critic_mem, sequence_length=sequence_length
)
return log_probs, entropies, value_outputs

masks: Optional[torch.Tensor] = None,
memories: Optional[torch.Tensor] = None,
sequence_length: int = 1,
critic_obs: Optional[List[List[torch.Tensor]]] = None,
) -> Tuple[
AgentAction, ActionLogProbs, torch.Tensor, Dict[str, torch.Tensor], torch.Tensor
]:

)
action, log_probs, entropies = self.action_model(encoding, masks)
all_net_inputs = [inputs]
if critic_obs is not None:
all_net_inputs.extend(critic_obs)
inputs, memories=critic_mem, sequence_length=sequence_length
all_net_inputs, memories=critic_mem, sequence_length=sequence_length
)
if self.use_lstm:
mem_out = torch.cat([actor_mem_outs, critic_mem_outs], dim=-1)

75
ml-agents/mlagents/trainers/trajectory.py


from typing import List, NamedTuple
import itertools
import attr
import numpy as np
from mlagents.trainers.buffer import AgentBuffer

class AgentExperience(NamedTuple):
@attr.s(auto_attribs=True)
class AgentExperience:
collab_obs: List[List[np.ndarray]]
reward: float
done: bool
action: ActionTuple

return result
class TeamObsUtil:
@staticmethod
def get_name_at(index: int) -> str:
"""
returns the name of the observation given the index of the observation
"""
return f"team_obs_{index}"
@staticmethod
def _padded_time_to_batch(
agent_buffer_field: AgentBuffer.AgentBufferField,
) -> List[np.ndarray]:
"""
Convert an AgentBufferField of List of obs, where one of the dimension is time and the other is number (e.g.
in the case of a variable number of critic observations) to a List of obs, where time is in the batch dimension
of the obs, and the List is the variable number of agents. For cases where there are varying number of agents,
pad the non-existent agents with NaN.
"""
# Find the first observation. This should be USUALLY O(1)
obs_shape = None
for _team_obs in agent_buffer_field:
if _team_obs:
obs_shape = _team_obs[0].shape
break
# If there were no critic obs at all
if obs_shape is None:
return []
new_list = list(
map(
lambda x: np.asanyarray(x),
itertools.zip_longest(
*agent_buffer_field, fillvalue=np.full(obs_shape, np.nan)
),
)
)
return new_list
@staticmethod
def _transpose_list_of_lists(
list_list: List[List[np.ndarray]],
) -> List[List[np.ndarray]]:
return list(map(list, zip(*list_list)))
@staticmethod
def from_buffer(batch: AgentBuffer, num_obs: int) -> List[np.array]:
"""
Creates the list of observations from an AgentBuffer
"""
separated_obs: List[np.array] = []
for i in range(num_obs):
separated_obs.append(
TeamObsUtil._padded_time_to_batch(batch[TeamObsUtil.get_name_at(i)])
)
# separated_obs contains a List(num_obs) of Lists(num_agents), we want to flip
# that and get a List(num_agents) of Lists(num_obs)
result = TeamObsUtil._transpose_list_of_lists(separated_obs)
return result
next_collab_obs: List[List[np.ndarray]]
agent_id: str
behavior_id: str

for i in range(num_obs):
agent_buffer_trajectory[ObsUtil.get_name_at(i)].append(obs[i])
agent_buffer_trajectory[ObsUtil.get_name_at_next(i)].append(next_obs[i])
for i in range(num_obs):
ith_team_obs = []
for _team_obs in exp.collab_obs:
# Assume teammates have same obs space
ith_team_obs.append(_team_obs[i])
agent_buffer_trajectory[TeamObsUtil.get_name_at(i)].append(ith_team_obs)
if exp.memory is not None:
agent_buffer_trajectory["memory"].append(exp.memory)

1
protobuf-definitions/proto/mlagents_envs/communicator_objects/agent_info.proto


repeated bool action_mask = 11;
reserved 12; // deprecated CustomObservationProto custom_observation = 12;
repeated ObservationProto observations = 13;
string team_manager_id = 14;
}

2
config/ppo/PushBlock.yaml


gamma: 0.99
strength: 1.0
keep_checkpoints: 5
max_steps: 2000000
max_steps: 6000000 #2000000
time_horizon: 64
summary_freq: 60000
threaded: true

1
Project/ProjectSettings/GraphicsSettings.asset


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

2
Project/ProjectSettings/UnityConnectSettings.asset


UnityConnectSettings:
m_ObjectHideFlags: 0
serializedVersion: 1
m_Enabled: 1
m_Enabled: 0
m_TestMode: 0
m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events
m_EventUrl: https://cdp.cloud.unity3d.com/v1/events

11
Project/ProjectSettings/TagManager.asset


- symbol_O_Goal
- purpleAgent
- purpleGoal
- blockLarge
- blockSmall
- zombie
- StrongSmallAgent
- StrongLargeAgent
- symbol_S_Goal
- symbol_S
- WeakSmallAgent
- WeakLargeAgent
- DeadSmallAgent
- DeadLargeAgent
layers:
- Default
- TransparentFX

1
Project/Packages/manifest.json


"dependencies": {
"com.unity.ads": "2.0.8",
"com.unity.analytics": "3.2.3",
"com.unity.barracuda": "1.2.1-preview",
"com.unity.collab-proxy": "1.2.15",
"com.unity.ml-agents": "file:../../com.unity.ml-agents",
"com.unity.ml-agents.extensions": "file:../../com.unity.ml-agents.extensions",

13
Project/Assets/ML-Agents/Examples/Crawler/Scripts/CrawlerAgent.cs


CrawlerDynamic,
CrawlerDynamicVariableSpeed,
CrawlerStatic,
CrawlerStaticVariableSpeed
CrawlerStaticVariableSpeed,
CrawlerDynamicVariableSpeedCustomTarget
}
[Tooltip(

//The direction an agent will walk during training.
[Header("Target To Walk Towards")] public Transform dynamicTargetPrefab; //Target prefab to use in Dynamic envs
public Transform staticTargetPrefab; //Target prefab to use in Static envs
private Transform m_Target; //Target the agent will walk towards during training.
public Transform m_Target; //Target the agent will walk towards during training.
[Header("Body Parts")] [Space(10)] public Transform body;
public Transform leg0Upper;

var behaviorParams = GetComponent<Unity.MLAgents.Policies.BehaviorParameters>();
switch (typeOfCrawler)
{
case CrawlerAgentBehaviorType.CrawlerDynamicVariableSpeedCustomTarget:
{
behaviorParams.BehaviorName = "CrawlerDynamicVariableSpeed"; //set behavior name
if (crawlerDyVSModel)
behaviorParams.Model = crawlerDyVSModel; //assign the model
m_RandomizeWalkSpeedEachEpisode = true; //randomize m_TargetWalkingSpeed during training
break;
}
case CrawlerAgentBehaviorType.CrawlerDynamic:
{
behaviorParams.BehaviorName = "CrawlerDynamic"; //set behavior name

8
Project/Assets/ML-Agents/Examples/Soccer/Prefabs/SoccerFieldTwos.prefab


m_BehaviorType: 0
m_BehaviorName: SoccerTwos
TeamId: 1
GroupId: 0
m_UseChildActuators: 1
m_ObservableAttributeHandling: 0
--- !u!114 &114492261207303438
MonoBehaviour:

m_BehaviorType: 0
m_BehaviorName: SoccerTwos
TeamId: 0
GroupId: 0
m_UseChildActuators: 1
m_ObservableAttributeHandling: 0
--- !u!114 &114850431417842684
MonoBehaviour:

m_BehaviorType: 0
m_BehaviorName: SoccerTwos
TeamId: 1
GroupId: 0
m_UseChildActuators: 1
m_ObservableAttributeHandling: 0
--- !u!114 &5320024511406682322
MonoBehaviour:

m_BehaviorType: 0
m_BehaviorName: SoccerTwos
TeamId: 0
GroupId: 0
m_UseChildActuators: 1
m_ObservableAttributeHandling: 0
--- !u!114 &5379409612883756837
MonoBehaviour:

146
Project/Assets/ML-Agents/Examples/Soccer/Scenes/SoccerTwos.unity


propertyPath: m_RootOrder
value: 8
objectReference: {fileID: 0}
- target: {fileID: 114387866097048300, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 4
objectReference: {fileID: 0}
- target: {fileID: 114734187185382186, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 4
objectReference: {fileID: 0}
- target: {fileID: 3316085536305919483, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 4
objectReference: {fileID: 0}
- target: {fileID: 8577361778124631730, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 4
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3}
--- !u!1001 &774084574

propertyPath: m_RootOrder
value: 11
objectReference: {fileID: 0}
- target: {fileID: 114387866097048300, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 7
objectReference: {fileID: 0}
- target: {fileID: 114734187185382186, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 7
objectReference: {fileID: 0}
- target: {fileID: 3316085536305919483, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 7
objectReference: {fileID: 0}
- target: {fileID: 8577361778124631730, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 7
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3}
--- !u!1001 &1177695920

propertyPath: m_RootOrder
value: 5
objectReference: {fileID: 0}
- target: {fileID: 114387866097048300, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 1
objectReference: {fileID: 0}
- target: {fileID: 114734187185382186, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 1
objectReference: {fileID: 0}
- target: {fileID: 3316085536305919483, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 1
objectReference: {fileID: 0}
- target: {fileID: 8577361778124631730, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 1
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3}
--- !u!1001 &1325062279

propertyPath: m_RootOrder
value: 7
objectReference: {fileID: 0}
- target: {fileID: 114387866097048300, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 3
objectReference: {fileID: 0}
- target: {fileID: 114734187185382186, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 3
objectReference: {fileID: 0}
- target: {fileID: 3316085536305919483, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 3
objectReference: {fileID: 0}
- target: {fileID: 8577361778124631730, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 3
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3}
--- !u!1001 &1348885204

m_Name:
m_EditorClassIdentifier:
gravityMultiplier: 1
monitorVerticalOffset: 0
reuseCollisionCallbacks: 1
--- !u!114 &1574236051
MonoBehaviour:
m_ObjectHideFlags: 0

blueMaterial: {fileID: 2100000, guid: c9fa44c2c3f8ce74ca39a3355ea42631, type: 2}
randomizePlayersTeamForTraining: 0
agentRunSpeed: 2
strikerPunish: -0.1
strikerReward: 1
goaliePunish: -1
goalieReward: 0.1
--- !u!1001 &1606160104
PrefabInstance:
m_ObjectHideFlags: 0

propertyPath: m_RootOrder
value: 9
objectReference: {fileID: 0}
- target: {fileID: 114387866097048300, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 5
objectReference: {fileID: 0}
- target: {fileID: 114734187185382186, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 5
objectReference: {fileID: 0}
- target: {fileID: 3316085536305919483, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 5
objectReference: {fileID: 0}
- target: {fileID: 8577361778124631730, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 5
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3}
--- !u!1001 &1748755984

propertyPath: m_RootOrder
value: 10
objectReference: {fileID: 0}
- target: {fileID: 114387866097048300, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 6
objectReference: {fileID: 0}
- target: {fileID: 114734187185382186, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 6
objectReference: {fileID: 0}
- target: {fileID: 3316085536305919483, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 6
objectReference: {fileID: 0}
- target: {fileID: 8577361778124631730, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 6
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3}
--- !u!1001 &2043067438

- target: {fileID: 4558743310993102, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3}
propertyPath: m_RootOrder
value: 6
objectReference: {fileID: 0}
- target: {fileID: 114387866097048300, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 2
objectReference: {fileID: 0}
- target: {fileID: 114734187185382186, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 2
objectReference: {fileID: 0}
- target: {fileID: 3316085536305919483, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 2
objectReference: {fileID: 0}
- target: {fileID: 8577361778124631730, guid: 54f3340298537426e96a6cc530e2d5d8,
type: 3}
propertyPath: GroupId
value: 2
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 54f3340298537426e96a6cc530e2d5d8, type: 3}

22
Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallJumpAgent.cs


public class WallJumpAgent : Agent
{
// Depending on this value, the wall will have different height
int m_Configuration;
protected int m_Configuration;
// Brain to use when no wall is present
public NNModel noWallBrain;
// Brain to use when a jumpable wall is present

public GameObject ground;
public GameObject spawnArea;
Bounds m_SpawnAreaBounds;
protected Bounds m_SpawnAreaBounds;
Rigidbody m_ShortBlockRb;
Rigidbody m_AgentRb;
Material m_GroundMaterial;
Renderer m_GroundRenderer;
WallJumpSettings m_WallJumpSettings;
protected Rigidbody m_ShortBlockRb;
protected Rigidbody m_AgentRb;
protected Material m_GroundMaterial;
protected Renderer m_GroundRenderer;
protected WallJumpSettings m_WallJumpSettings;
public float jumpingTime;
public float jumpTime;

string m_SmallWallBehaviorName = "SmallWallJump";
string m_BigWallBehaviorName = "BigWallJump";
EnvironmentParameters m_ResetParams;
protected EnvironmentParameters m_ResetParams;
public override void Initialize()
{

/// <returns>The Enumerator to be used in a Coroutine.</returns>
/// <param name="mat">The material to be swapped.</param>
/// <param name="time">The time the material will remain.</param>
IEnumerator GoalScoredSwapGroundMaterial(Material mat, float time)
protected IEnumerator GoalScoredSwapGroundMaterial(Material mat, float time)
{
m_GroundRenderer.material = mat;
yield return new WaitForSeconds(time); //wait for 2 sec

}
// Detect when the agent hits the goal
void OnTriggerStay(Collider col)
protected virtual void OnTriggerStay(Collider col)
{
if (col.gameObject.CompareTag("goal") && DoGroundCheck(true))
{

/// If 1: Small wall and smallWallBrain.
/// Other : Tall wall and BigWallBrain.
/// </param>
void ConfigureAgent(int config)
protected virtual void ConfigureAgent(int config)
{
var localScale = wall.transform.localScale;
if (config == 0)

2
Project/Assets/ML-Agents/Examples/Hallway/Scenes/Hallway.unity.meta


fileFormatVersion: 2
guid: d6d6a33ed0e18459a8d61817d600978a
guid: 71d1487c63f604ff6985cc2f23c7afbf
DefaultImporter:
externalObjects: {}
userData:

932
Project/Assets/ML-Agents/Examples/Hallway/Prefabs/SymbolFinderArea.prefab
文件差异内容过多而无法显示
查看文件

22
Project/Assets/ML-Agents/Examples/Hallway/Scripts/HallwayAgent.cs


public GameObject symbolO;
public GameObject symbolX;
public bool useVectorObs;
Rigidbody m_AgentRb;
Material m_GroundMaterial;
Renderer m_GroundRenderer;
HallwaySettings m_HallwaySettings;
int m_Selection;
protected Rigidbody m_AgentRb;
protected Material m_GroundMaterial;
protected Renderer m_GroundRenderer;
protected HallwaySettings m_HallwaySettings;
protected int m_Selection;
StatsRecorder m_statsRecorder;
public override void Initialize()

m_GroundRenderer = ground.GetComponent<Renderer>();
m_GroundMaterial = m_GroundRenderer.material;
m_statsRecorder = Academy.Instance.StatsRecorder;
// m_statsRecorder = Academy.Instance.StatsRecorder;
}
public override void CollectObservations(VectorSensor sensor)

}
}
IEnumerator GoalScoredSwapGroundMaterial(Material mat, float time)
protected IEnumerator GoalScoredSwapGroundMaterial(Material mat, float time)
{
m_GroundRenderer.material = mat;
yield return new WaitForSeconds(time);

{
SetReward(1f);
StartCoroutine(GoalScoredSwapGroundMaterial(m_HallwaySettings.goalScoredMaterial, 0.5f));
m_statsRecorder.Add("Goal/Correct", 1, StatAggregationMethod.Sum);
// m_statsRecorder.Add("Goal/Correct", 1, StatAggregationMethod.Sum);
m_statsRecorder.Add("Goal/Wrong", 1, StatAggregationMethod.Sum);
// m_statsRecorder.Add("Goal/Wrong", 1, StatAggregationMethod.Sum);
}
EndEpisode();
}

symbolXGoal.transform.position = new Vector3(7f, 0.5f, 22.29f) + area.transform.position;
symbolOGoal.transform.position = new Vector3(-7f, 0.5f, 22.29f) + area.transform.position;
}
m_statsRecorder.Add("Goal/Correct", 0, StatAggregationMethod.Sum);
m_statsRecorder.Add("Goal/Wrong", 0, StatAggregationMethod.Sum);
// m_statsRecorder.Add("Goal/Correct", 0, StatAggregationMethod.Sum);
// m_statsRecorder.Add("Goal/Wrong", 0, StatAggregationMethod.Sum);
}
}

3
com.unity.ml-agents.extensions/Runtime/Teams.meta


fileFormatVersion: 2
guid: 77124df6c18c4f669052016b3116147e
timeCreated: 1610064454

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


using System.Collections.Generic;
using Unity.MLAgents.Sensors;
namespace Unity.MLAgents
{
public interface ITeamManager
{
string GetId();
void RegisterAgent(Agent agent);
// TODO not sure this is all the info we need, maybe pass a class/struct instead.
void OnAgentDone(Agent agent, Agent.DoneReason doneReason, List<ISensor> sensors);
}
}

3
com.unity.ml-agents/Runtime/ITeamManager.cs.meta


fileFormatVersion: 2
guid: 75810d91665e4477977eb78c9b15aeb3
timeCreated: 1610057818

63
config/ppo/WallJumpCollab.yaml


behaviors:
SmallWallJump:
trainer_type: ppo
hyperparameters:
batch_size: 128
buffer_size: 2048
learning_rate: 0.0003
beta: 0.005
epsilon: 0.2
lambd: 0.95
num_epoch: 3
learning_rate_schedule: linear
network_settings:
normalize: false
hidden_units: 256
num_layers: 2
vis_encode_type: simple
reward_signals:
extrinsic:
gamma: 0.99
strength: 1.0
keep_checkpoints: 5
max_steps: 15000000
time_horizon: 128
summary_freq: 20000
threaded: true
environment_parameters:
big_wall_height:
curriculum:
- name: Lesson0
completion_criteria:
measure: progress
behavior: SmallWallJump
signal_smoothing: true
min_lesson_length: 100
threshold: 0.1
value: 3
- name: Lesson1
completion_criteria:
measure: progress
behavior: SmallWallJump
signal_smoothing: true
min_lesson_length: 100
threshold: 0.3
value: 5
- name: Lesson2
completion_criteria:
measure: progress
behavior: SmallWallJump
signal_smoothing: true
min_lesson_length: 100
threshold: 0.5
value: 8
- name: Lesson3
completion_criteria:
measure: progress
behavior: SmallWallJump
signal_smoothing: true
min_lesson_length: 100
threshold: 0.7
value: 9
- name: Lesson4
value: 9

26
config/ppo/HallwayCollab.yaml


behaviors:
HallwayCollab:
trainer_type: ppo
hyperparameters:
batch_size: 128
buffer_size: 1024
learning_rate: 0.0003
beta: 0.01
epsilon: 0.2
lambd: 0.95
num_epoch: 3
learning_rate_schedule: linear
network_settings:
normalize: false
hidden_units: 128
num_layers: 2
vis_encode_type: simple
reward_signals:
extrinsic:
gamma: 0.99
strength: 1.0
keep_checkpoints: 5
max_steps: 10000000
time_horizon: 64
summary_freq: 10000
threaded: true

28
config/ppo/PushBlockZombie.yaml


behaviors:
PushBlock:
trainer_type: ppo
hyperparameters:
batch_size: 128
buffer_size: 2048
learning_rate: 0.0003
beta: 0.01
epsilon: 0.2
lambd: 0.95
num_epoch: 3
learning_rate_schedule: linear
network_settings:
normalize: false
hidden_units: 256
num_layers: 2
vis_encode_type: simple
reward_signals:
extrinsic:
gamma: 0.99
strength: 1.0
keep_checkpoints: 5
max_steps: 6000000 #2000000
time_horizon: 64
summary_freq: 60000
threaded: true
env_settings:
num_envs: 3

65
config/ppo/CubeWars.yaml


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

50
Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallAreaScoring.cs


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class WallAreaScoring : MonoBehaviour
{
public GameObject[] agents;
WallJumpSettings m_WallJumpSettings;
Renderer m_GroundRenderer;
Material m_GroundMaterial;
protected IEnumerator GoalScoredSwapGroundMaterial(Material mat, float time)
{
m_GroundRenderer.material = mat;
yield return new WaitForSeconds(time); //wait for 2 sec
m_GroundRenderer.material = m_GroundMaterial;
}
public void Start()
{
m_WallJumpSettings = FindObjectOfType<WallJumpSettings>();
m_GroundRenderer = GetComponent<Renderer>();
m_GroundMaterial = m_GroundRenderer.material;
}
public void WinCondition()
{
foreach (var agent in agents)
{
WallJumpCollabAgent agentScript = agent.GetComponent<WallJumpCollabAgent>();
agentScript.SetReward(1f);
agentScript.EndEpisode();
}
StartCoroutine(
GoalScoredSwapGroundMaterial(m_WallJumpSettings.goalScoredMaterial, 1f));
}
public void LoseCondition()
{
foreach (var agent in agents)
{
WallJumpCollabAgent agentScript = agent.GetComponent<WallJumpCollabAgent>();
agentScript.SetReward(-1f);
agentScript.EndEpisode();
}
StartCoroutine(
GoalScoredSwapGroundMaterial(m_WallJumpSettings.failMaterial, .2f));
}
}

11
Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallAreaScoring.cs.meta


fileFormatVersion: 2
guid: ad7213222795741f5b6ca2b332f16da9
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

11
Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallJumpCollabAgent.cs.meta


fileFormatVersion: 2
guid: 2cdbc0d9a64fe4b12a3ed4b81a151117
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

67
Project/Assets/ML-Agents/Examples/WallJump/Scripts/WallJumpCollabAgent.cs


//Put this script on your blue cube.
using System.Collections;
using UnityEngine;
using Unity.MLAgents;
using Unity.Barracuda;
using Unity.MLAgents.Actuators;
using Unity.MLAgents.Sensors;
using Unity.MLAgentsExamples;
public class WallJumpCollabAgent : WallJumpAgent
{
Vector3 m_InitialPosition;
WallAreaScoring m_Scoring;
public override void Initialize()
{
m_WallJumpSettings = FindObjectOfType<WallJumpSettings>();
m_Scoring = ground.GetComponent<WallAreaScoring>();
m_Configuration = 5;
m_AgentRb = GetComponent<Rigidbody>();
// m_ShortBlockRb = shortBlock.GetComponent<Rigidbody>();
m_SpawnAreaBounds = spawnArea.GetComponent<Collider>().bounds;
m_GroundRenderer = ground.GetComponent<Renderer>();
m_GroundMaterial = m_GroundRenderer.material;
m_InitialPosition = transform.localPosition;
spawnArea.SetActive(false);
m_ResetParams = Academy.Instance.EnvironmentParameters;
}
public override void OnEpisodeBegin()
{
transform.localPosition = m_InitialPosition;
m_Configuration = 5;
m_AgentRb.velocity = default(Vector3);
}
public override void OnActionReceived(ActionBuffers actionBuffers)
{
MoveAgent(actionBuffers.DiscreteActions);
if (!Physics.Raycast(m_AgentRb.position, Vector3.down, 20))
{
m_Scoring.LoseCondition();
}
}
protected override void ConfigureAgent(int config)
{
var localScale = wall.transform.localScale;
var height = m_ResetParams.GetWithDefault("big_wall_height", 9);
localScale = new Vector3(
localScale.x,
height,
localScale.z);
wall.transform.localScale = localScale;
}
// Detect when the agent hits the goal
protected override void OnTriggerStay(Collider col)
{
if (col.gameObject.CompareTag("goal") && DoGroundCheck(true))
{
m_Scoring.WinCondition();
}
}
}

7
Project/Assets/ML-Agents/Examples/WallJump/Scenes/WallJumpCollab.unity.meta


fileFormatVersion: 2
guid: 136090e065a8f48bfb97ea3083893d8a
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

1001
Project/Assets/ML-Agents/Examples/WallJump/Scenes/WallJumpCollab.unity
文件差异内容过多而无法显示
查看文件

7
Project/Assets/ML-Agents/Examples/WallJump/Prefabs/WallJumpCollabArea.prefab.meta


fileFormatVersion: 2
guid: ff1a5743be49d43f08378dcd76451821
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

1001
Project/Assets/ML-Agents/Examples/WallJump/Prefabs/WallJumpCollabArea.prefab
文件差异内容过多而无法显示
查看文件

11
Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/CollisionCallbacks.cs.meta


fileFormatVersion: 2
guid: 506de7b261f374159a5cdfdb0ff48c0c
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

143
Project/Assets/ML-Agents/Examples/SharedAssets/Scripts/CollisionCallbacks.cs


using UnityEngine;
using Random = UnityEngine.Random;
using Unity.MLAgents;
using UnityEngine.Events;
namespace Unity.MLAgentsExamples
{
/// <summary>
/// Utility class to allow target placement and collision detection with an agent
/// Add this script to the target you want the agent to touch.
/// Callbacks will be triggered any time the target is touched with a collider tagged as 'tagToDetect'
/// </summary>
public class CollisionCallbacks : MonoBehaviour
{
// [System.Serializable] public class BoolEvent : UnityEvent<bool> { }
// [SerializeField] BoolEvent boolEvent = new BoolEvent();
// public void OnBoolEvent(bool value)
// {
// Debug.Log($"OnBoolEvent {value}");
// }
[Header("Collider Tag To Detect")]
public string tagToDetect = "agent"; //collider tag to detect
// [Header("Target Placement")]
// public float spawnRadius; //The radius in which a target can be randomly spawned.
// public bool respawnIfTouched; //Should the target respawn to a different position when touched
//
// [Header("Target Fell Protection")]
// public bool respawnIfFallsOffPlatform = true; //If the target falls off the platform, reset the position.
// public float fallDistance = 5; //distance below the starting height that will trigger a respawn
//
//
// private Vector3 m_startingPos; //the starting position of the target
// private Agent m_agentTouching; //the agent currently touching the target
[System.Serializable]
// public class TriggerEvent : UnityEvent<string>
public class TriggerEvent : UnityEvent<Collider>
{
}
[Header("Trigger Callbacks")]
public TriggerEvent onTriggerEnterEvent = new TriggerEvent();
public TriggerEvent onTriggerStayEvent = new TriggerEvent();
public TriggerEvent onTriggerExitEvent = new TriggerEvent();
[System.Serializable]
public class CollisionEvent : UnityEvent<Collision, Transform>
{
}
[Header("Collision Callbacks")]
public CollisionEvent onCollisionEnterEvent = new CollisionEvent();
public CollisionEvent onCollisionStayEvent = new CollisionEvent();
public CollisionEvent onCollisionExitEvent = new CollisionEvent();
// // Start is called before the first frame update
// void OnEnable()
// {
// m_startingPos = transform.position;
// if (respawnIfTouched)
// {
// MoveTargetToRandomPosition();
// }
// }
// void Update()
// {
// if (respawnIfFallsOffPlatform)
// {
// if (transform.position.y < m_startingPos.y - fallDistance)
// {
// Debug.Log($"{transform.name} Fell Off Platform");
// MoveTargetToRandomPosition();
// }
// }
// }
// /// <summary>
// /// Moves target to a random position within specified radius.
// /// </summary>
// public void MoveTargetToRandomPosition()
// {
// var newTargetPos = m_startingPos + (Random.insideUnitSphere * spawnRadius);
// newTargetPos.y = m_startingPos.y;
// transform.position = newTargetPos;
// }
private void OnCollisionEnter(Collision col)
{
if (col.transform.CompareTag(tagToDetect))
{
onCollisionEnterEvent.Invoke(col, transform);
// if (respawnIfTouched)
// {
// MoveTargetToRandomPosition();
// }
}
}
private void OnCollisionStay(Collision col)
{
if (col.transform.CompareTag(tagToDetect))
{
onCollisionStayEvent.Invoke(col, transform);
}
}
private void OnCollisionExit(Collision col)
{
if (col.transform.CompareTag(tagToDetect))
{
onCollisionExitEvent.Invoke(col, transform);
}
}
private void OnTriggerEnter(Collider col)
{
if (col.CompareTag(tagToDetect))
{
onTriggerEnterEvent.Invoke(col);
}
}
private void OnTriggerStay(Collider col)
{
if (col.CompareTag(tagToDetect))
{
onTriggerStayEvent.Invoke(col);
}
}
private void OnTriggerExit(Collider col)
{
if (col.CompareTag(tagToDetect))
{
onTriggerExitEvent.Invoke(col);
}
}
}
}

7
Project/Assets/ML-Agents/Examples/PushBlock/Prefabs/PushBlockCollabArea.prefab.meta


fileFormatVersion: 2
guid: 8689a8cfb0ac742bfa27214909ebb1e8
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

1001
Project/Assets/ML-Agents/Examples/PushBlock/Prefabs/PushBlockCollabArea.prefab
文件差异内容过多而无法显示
查看文件

7
Project/Assets/ML-Agents/Examples/PushBlock/Prefabs/ZombiePushBlockCollabArea.prefab.meta


fileFormatVersion: 2
guid: 4efb4d72c7b94469ca38276842875f65
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

1001
Project/Assets/ML-Agents/Examples/PushBlock/Prefabs/ZombiePushBlockCollabArea.prefab
文件差异内容过多而无法显示
查看文件

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

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


fileFormatVersion: 2
guid: a051c5abff78d40c586086c42e713e18
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/PushBlock/TFModels/PushBlockCC.onnx
文件差异内容过多而无法显示
查看文件

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


fileFormatVersion: 2
guid: 9a4ea4894b7fb49859cfa9c16652b207
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/PushBlock/TFModels/PushBlockMaster.onnx
文件差异内容过多而无法显示
查看文件

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


fileFormatVersion: 2
guid: 76af036f6a9b94e3c988951e6315dab4
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

9
Project/Assets/ML-Agents/Examples/PushBlock/Scenes/PushBlockCollab.unity.meta


fileFormatVersion: 2
guid: b9c81cbb0f0ac40649eddfef0971e81b
timeCreated: 1506808980
licenseType: Pro
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

969
Project/Assets/ML-Agents/Examples/PushBlock/Scenes/PushBlockCollab.unity


%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!29 &1
OcclusionCullingSettings:
m_ObjectHideFlags: 0
serializedVersion: 2
m_OcclusionBakeSettings:
smallestOccluder: 5
smallestHole: 0.25
backfaceThreshold: 100
m_SceneGUID: 00000000000000000000000000000000
m_OcclusionCullingData: {fileID: 0}
--- !u!104 &2
RenderSettings:
m_ObjectHideFlags: 0
serializedVersion: 9
m_Fog: 0
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
m_FogMode: 3
m_FogDensity: 0.01
m_LinearFogStart: 0
m_LinearFogEnd: 300
m_AmbientSkyColor: {r: 0.8, g: 0.8, b: 0.8, a: 1}
m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
m_AmbientIntensity: 1
m_AmbientMode: 3
m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
m_SkyboxMaterial: {fileID: 0}
m_HaloStrength: 0.5
m_FlareStrength: 1
m_FlareFadeSpeed: 3
m_HaloTexture: {fileID: 0}
m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
m_DefaultReflectionMode: 0
m_DefaultReflectionResolution: 128
m_ReflectionBounces: 1
m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 0}
m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1}
m_UseRadianceAmbientProbe: 0
--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0
serializedVersion: 11
m_GIWorkflowMode: 0
m_GISettings:
serializedVersion: 2
m_BounceScale: 1
m_IndirectOutputScale: 1
m_AlbedoBoost: 1
m_EnvironmentLightingMode: 0
m_EnableBakedLightmaps: 1
m_EnableRealtimeLightmaps: 1
m_LightmapEditorSettings:
serializedVersion: 10
m_Resolution: 2
m_BakeResolution: 40
m_AtlasSize: 1024
m_AO: 0
m_AOMaxDistance: 1
m_CompAOExponent: 1
m_CompAOExponentDirect: 0
m_Padding: 2
m_LightmapParameters: {fileID: 0}
m_LightmapsBakeMode: 1
m_TextureCompression: 1
m_FinalGather: 0
m_FinalGatherFiltering: 1
m_FinalGatherRayCount: 256
m_ReflectionCompression: 2
m_MixedBakeMode: 2
m_BakeBackend: 0
m_PVRSampling: 1
m_PVRDirectSampleCount: 32
m_PVRSampleCount: 500
m_PVRBounces: 2
m_PVRFilterTypeDirect: 0
m_PVRFilterTypeIndirect: 0
m_PVRFilterTypeAO: 0
m_PVRFilteringMode: 1
m_PVRCulling: 1
m_PVRFilteringGaussRadiusDirect: 1
m_PVRFilteringGaussRadiusIndirect: 5
m_PVRFilteringGaussRadiusAO: 2
m_PVRFilteringAtrousPositionSigmaDirect: 0.5
m_PVRFilteringAtrousPositionSigmaIndirect: 2
m_PVRFilteringAtrousPositionSigmaAO: 1
m_ShowResolutionOverlay: 1
m_LightingDataAsset: {fileID: 112000002, guid: 03723c7f910c3423aa1974f1b9ce8392,
type: 2}
m_UseShadowmask: 1
--- !u!196 &4
NavMeshSettings:
serializedVersion: 2
m_ObjectHideFlags: 0
m_BuildSettings:
serializedVersion: 2
agentTypeID: 0
agentRadius: 0.5
agentHeight: 2
agentSlope: 45
agentClimb: 0.4
ledgeDropHeight: 0
maxJumpAcrossDistance: 0
minRegionArea: 2
manualCellSize: 0
cellSize: 0.16666667
manualTileSize: 0
tileSize: 256
accuratePlacement: 0
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
--- !u!1 &255077123
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 255077126}
- component: {fileID: 255077125}
- component: {fileID: 255077124}
m_Layer: 0
m_Name: EventSystem
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &255077124
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 255077123}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 1077351063, guid: f70555f144d8491a825f0804e09c671c, type: 3}
m_Name:
m_EditorClassIdentifier:
m_HorizontalAxis: Horizontal
m_VerticalAxis: Vertical
m_SubmitButton: Submit
m_CancelButton: Cancel
m_InputActionsPerSecond: 10
m_RepeatDelay: 0.5
m_ForceModuleActive: 0
--- !u!114 &255077125
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 255077123}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: -619905303, guid: f70555f144d8491a825f0804e09c671c, type: 3}
m_Name:
m_EditorClassIdentifier:
m_FirstSelected: {fileID: 0}
m_sendNavigationEvents: 1
m_DragThreshold: 5
--- !u!4 &255077126
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 255077123}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &318490716
GameObject:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 318490717}
m_Layer: 0
m_Name: UnityEngine-Recorder
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &318490717
Transform:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 318490716}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 365376271}
- {fileID: 1265651286}
m_Father: {fileID: 0}
m_RootOrder: 6
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &365376270
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 365376271}
m_Layer: 0
m_Name: Settings
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &365376271
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 365376270}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 1257687049}
m_Father: {fileID: 318490717}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1001 &502449554
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3}
propertyPath: m_LocalPosition.x
value: 106.38621
objectReference: {fileID: 0}
- target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3}
propertyPath: m_LocalPosition.y
value: 38.840767
objectReference: {fileID: 0}
- target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3}
propertyPath: m_LocalPosition.z
value: 34.72934
objectReference: {fileID: 0}
- target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3}
propertyPath: m_LocalRotation.x
value: 0.31598538
objectReference: {fileID: 0}
- target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3}
propertyPath: m_LocalRotation.y
value: -0.3596048
objectReference: {fileID: 0}
- target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3}
propertyPath: m_LocalRotation.z
value: 0.13088542
objectReference: {fileID: 0}
- target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3}
propertyPath: m_LocalRotation.w
value: 0.8681629
objectReference: {fileID: 0}
- target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3}
propertyPath: m_RootOrder
value: 4
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3}
--- !u!1001 &687199677
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 2313762877161590336, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: GroupId
value: 1
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalPosition.x
value: 50
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalRotation.x
value: -0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalRotation.y
value: -0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalRotation.z
value: -0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_RootOrder
value: 7
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2416678558414254088, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_Name
value: PushBlockCollabArea (1)
objectReference: {fileID: 0}
- target: {fileID: 2416809913911815199, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: GroupId
value: 1
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 8689a8cfb0ac742bfa27214909ebb1e8, type: 3}
--- !u!1001 &768746187
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 2313762877161590336, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: GroupId
value: 3
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalPosition.x
value: 150
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalRotation.x
value: -0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalRotation.y
value: -0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalRotation.z
value: -0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_RootOrder
value: 9
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2416678558414254088, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_Name
value: PushBlockCollabArea (3)
objectReference: {fileID: 0}
- target: {fileID: 2416809913911815199, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: GroupId
value: 3
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 8689a8cfb0ac742bfa27214909ebb1e8, type: 3}
--- !u!1 &1009000883
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1009000884}
- component: {fileID: 1009000887}
m_Layer: 0
m_Name: SingleCam
m_TagString: MainCamera
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1009000884
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1009000883}
m_LocalRotation: {x: 0.5, y: 0, z: 0, w: 0.8660254}
m_LocalPosition: {x: 0, y: 20, z: -15}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 60, y: 0, z: 0}
--- !u!20 &1009000887
Camera:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1009000883}
m_Enabled: 1
serializedVersion: 2
m_ClearFlags: 2
m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1}
m_projectionMatrixMode: 1
m_SensorSize: {x: 36, y: 24}
m_LensShift: {x: 0, y: 0}
m_GateFitMode: 2
m_FocalLength: 50
m_NormalizedViewPortRect:
serializedVersion: 2
x: 0
y: 0
width: 1
height: 1
near clip plane: 0.3
far clip plane: 1000
field of view: 56.2
orthographic: 0
orthographic size: 6.98
m_Depth: 2
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingPath: -1
m_TargetTexture: {fileID: 0}
m_TargetDisplay: 0
m_TargetEye: 3
m_HDR: 1
m_AllowMSAA: 1
m_AllowDynamicResolution: 0
m_ForceIntoRT: 0
m_OcclusionCulling: 1
m_StereoConvergence: 10
m_StereoSeparation: 0.022
--- !u!1001 &1219049691
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 2313762877161590336, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: GroupId
value: 4
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalPosition.x
value: 200
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalRotation.x
value: -0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalRotation.y
value: -0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalRotation.z
value: -0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_RootOrder
value: 10
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2416678558414254088, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_Name
value: PushBlockCollabArea (4)
objectReference: {fileID: 0}
- target: {fileID: 2416809913911815199, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: GroupId
value: 4
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 8689a8cfb0ac742bfa27214909ebb1e8, type: 3}
--- !u!1 &1257687048
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1257687049}
m_Layer: 0
m_Name: 50bfc0f4c3d6f46df98d3c66ceb89209
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1257687049
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1257687048}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 365376271}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1265651285
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1265651286}
m_Layer: 0
m_Name: RecordingSessions
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1265651286
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1265651285}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 318490717}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1001 &1558468742
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 2313762877161590336, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: GroupId
value: 2
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalPosition.x
value: 100
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalRotation.x
value: -0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalRotation.y
value: -0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalRotation.z
value: -0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_RootOrder
value: 8
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2416678558414254088, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_Name
value: PushBlockCollabArea (2)
objectReference: {fileID: 0}
- target: {fileID: 2416809913911815199, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: GroupId
value: 2
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 8689a8cfb0ac742bfa27214909ebb1e8, type: 3}
--- !u!1 &1574236047
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1574236049}
- component: {fileID: 1574236050}
- component: {fileID: 1574236048}
m_Layer: 0
m_Name: PushBlockSettings
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &1574236048
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1574236047}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: ec51f47c5ed0478080c449c74fd9c154, type: 3}
m_Name:
m_EditorClassIdentifier:
gravityMultiplier: 1.5
fixedDeltaTime: 0.02
maximumDeltaTime: 0.33333334
solverIterations: 6
solverVelocityIterations: 1
reuseCollisionCallbacks: 1
--- !u!4 &1574236049
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1574236047}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1574236050
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1574236047}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: e5ed63dbfa25542ecb8bc013adfba183, type: 3}
m_Name:
m_EditorClassIdentifier:
agentRunSpeed: 3
agentRotationSpeed: 15
spawnAreaMarginMultiplier: 0.5
goalScoredMaterial: {fileID: 2100000, guid: df32cc593804f42df97464dc455057b8, type: 2}
failMaterial: {fileID: 2100000, guid: a1daf31cdf41e484ca9ac33a5c6f524a, type: 2}
--- !u!1001 &1900462655
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_RootOrder
value: 3
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_AnchoredPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_AnchoredPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_SizeDelta.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_SizeDelta.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_AnchorMin.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_AnchorMin.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_AnchorMax.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_AnchorMax.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_Pivot.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_Pivot.y
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 3ce107b4a79bc4eef83afde434932a68, type: 3}
--- !u!1001 &2416809913901764614
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalRotation.x
value: -0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalRotation.y
value: -0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalRotation.z
value: -0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_RootOrder
value: 5
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2415063656827223864, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2416678558414254088, guid: 8689a8cfb0ac742bfa27214909ebb1e8,
type: 3}
propertyPath: m_Name
value: PushBlockCollabArea
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 8689a8cfb0ac742bfa27214909ebb1e8, type: 3}

997
Project/Assets/ML-Agents/Examples/PushBlock/Scenes/ZombiePushBlock.unity


%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!29 &1
OcclusionCullingSettings:
m_ObjectHideFlags: 0
serializedVersion: 2
m_OcclusionBakeSettings:
smallestOccluder: 5
smallestHole: 0.25
backfaceThreshold: 100
m_SceneGUID: 00000000000000000000000000000000
m_OcclusionCullingData: {fileID: 0}
--- !u!104 &2
RenderSettings:
m_ObjectHideFlags: 0
serializedVersion: 9
m_Fog: 0
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
m_FogMode: 3
m_FogDensity: 0.01
m_LinearFogStart: 0
m_LinearFogEnd: 300
m_AmbientSkyColor: {r: 0.8, g: 0.8, b: 0.8, a: 1}
m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
m_AmbientIntensity: 1
m_AmbientMode: 3
m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
m_SkyboxMaterial: {fileID: 0}
m_HaloStrength: 0.5
m_FlareStrength: 1
m_FlareFadeSpeed: 3
m_HaloTexture: {fileID: 0}
m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
m_DefaultReflectionMode: 0
m_DefaultReflectionResolution: 128
m_ReflectionBounces: 1
m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 0}
m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1}
m_UseRadianceAmbientProbe: 0
--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0
serializedVersion: 11
m_GIWorkflowMode: 0
m_GISettings:
serializedVersion: 2
m_BounceScale: 1
m_IndirectOutputScale: 1
m_AlbedoBoost: 1
m_EnvironmentLightingMode: 0
m_EnableBakedLightmaps: 1
m_EnableRealtimeLightmaps: 1
m_LightmapEditorSettings:
serializedVersion: 10
m_Resolution: 2
m_BakeResolution: 40
m_AtlasSize: 1024
m_AO: 0
m_AOMaxDistance: 1
m_CompAOExponent: 1
m_CompAOExponentDirect: 0
m_Padding: 2
m_LightmapParameters: {fileID: 0}
m_LightmapsBakeMode: 1
m_TextureCompression: 1
m_FinalGather: 0
m_FinalGatherFiltering: 1
m_FinalGatherRayCount: 256
m_ReflectionCompression: 2
m_MixedBakeMode: 2
m_BakeBackend: 0
m_PVRSampling: 1
m_PVRDirectSampleCount: 32
m_PVRSampleCount: 500
m_PVRBounces: 2
m_PVRFilterTypeDirect: 0
m_PVRFilterTypeIndirect: 0
m_PVRFilterTypeAO: 0
m_PVRFilteringMode: 1
m_PVRCulling: 1
m_PVRFilteringGaussRadiusDirect: 1
m_PVRFilteringGaussRadiusIndirect: 5
m_PVRFilteringGaussRadiusAO: 2
m_PVRFilteringAtrousPositionSigmaDirect: 0.5
m_PVRFilteringAtrousPositionSigmaIndirect: 2
m_PVRFilteringAtrousPositionSigmaAO: 1
m_ShowResolutionOverlay: 1
m_LightingDataAsset: {fileID: 112000002, guid: 03723c7f910c3423aa1974f1b9ce8392,
type: 2}
m_UseShadowmask: 1
--- !u!196 &4
NavMeshSettings:
serializedVersion: 2
m_ObjectHideFlags: 0
m_BuildSettings:
serializedVersion: 2
agentTypeID: 0
agentRadius: 0.5
agentHeight: 2
agentSlope: 45
agentClimb: 0.4
ledgeDropHeight: 0
maxJumpAcrossDistance: 0
minRegionArea: 2
manualCellSize: 0
cellSize: 0.16666667
manualTileSize: 0
tileSize: 256
accuratePlacement: 0
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
--- !u!1001 &185397489
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 7252038608842613995, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: GroupId
value: 2
objectReference: {fileID: 0}
- target: {fileID: 7252038610261898582, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: GroupId
value: 2
objectReference: {fileID: 0}
- target: {fileID: 7252929719452920129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_Name
value: ZombiePushBlockCollabArea (2)
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_LocalPosition.x
value: 50
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_LocalRotation.x
value: -0
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_LocalRotation.y
value: -0
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_LocalRotation.z
value: -0
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_RootOrder
value: 9
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7292016560317339401, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: GroupId
value: 2
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 4efb4d72c7b94469ca38276842875f65, type: 3}
--- !u!1 &255077123
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 255077126}
- component: {fileID: 255077125}
- component: {fileID: 255077124}
m_Layer: 0
m_Name: EventSystem
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &255077124
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 255077123}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 1077351063, guid: f70555f144d8491a825f0804e09c671c, type: 3}
m_Name:
m_EditorClassIdentifier:
m_HorizontalAxis: Horizontal
m_VerticalAxis: Vertical
m_SubmitButton: Submit
m_CancelButton: Cancel
m_InputActionsPerSecond: 10
m_RepeatDelay: 0.5
m_ForceModuleActive: 0
--- !u!114 &255077125
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 255077123}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: -619905303, guid: f70555f144d8491a825f0804e09c671c, type: 3}
m_Name:
m_EditorClassIdentifier:
m_FirstSelected: {fileID: 0}
m_sendNavigationEvents: 1
m_DragThreshold: 5
--- !u!4 &255077126
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 255077123}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &318490716
GameObject:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 318490717}
m_Layer: 0
m_Name: UnityEngine-Recorder
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &318490717
Transform:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 318490716}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 365376271}
- {fileID: 1265651286}
m_Father: {fileID: 0}
m_RootOrder: 7
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1001 &323272729
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 7252038608842613995, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: GroupId
value: 1
objectReference: {fileID: 0}
- target: {fileID: 7252038608842613995, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_Model
value:
objectReference: {fileID: 11400000, guid: 9a4ea4894b7fb49859cfa9c16652b207,
type: 3}
- target: {fileID: 7252038610261898582, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: GroupId
value: 1
objectReference: {fileID: 0}
- target: {fileID: 7252038610261898582, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_Model
value:
objectReference: {fileID: 11400000, guid: 9a4ea4894b7fb49859cfa9c16652b207,
type: 3}
- target: {fileID: 7252929719452920129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_Name
value: ZombiePushBlockCollabArea (1)
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_LocalPosition.x
value: -50
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_LocalRotation.x
value: -0
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_LocalRotation.y
value: -0
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_LocalRotation.z
value: -0
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_RootOrder
value: 8
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7292016560317339401, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: GroupId
value: 1
objectReference: {fileID: 0}
- target: {fileID: 7292016560317339401, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_Model
value:
objectReference: {fileID: 11400000, guid: 9a4ea4894b7fb49859cfa9c16652b207,
type: 3}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 4efb4d72c7b94469ca38276842875f65, type: 3}
--- !u!1 &365376270
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 365376271}
m_Layer: 0
m_Name: Settings
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &365376271
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 365376270}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 1257687049}
m_Father: {fileID: 318490717}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1001 &394216286
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 7430253518223459950, guid: ff2999c8614d848f8a7e55e3a6fb9282,
type: 3}
propertyPath: m_Name
value: WormBasePrefab
objectReference: {fileID: 0}
- target: {fileID: 7430253518223459950, guid: ff2999c8614d848f8a7e55e3a6fb9282,
type: 3}
propertyPath: m_IsActive
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7430253518223459951, guid: ff2999c8614d848f8a7e55e3a6fb9282,
type: 3}
propertyPath: m_LocalPosition.x
value: -9.25
objectReference: {fileID: 0}
- target: {fileID: 7430253518223459951, guid: ff2999c8614d848f8a7e55e3a6fb9282,
type: 3}
propertyPath: m_LocalPosition.y
value: 1.1849128
objectReference: {fileID: 0}
- target: {fileID: 7430253518223459951, guid: ff2999c8614d848f8a7e55e3a6fb9282,
type: 3}
propertyPath: m_LocalPosition.z
value: 0.6859223
objectReference: {fileID: 0}
- target: {fileID: 7430253518223459951, guid: ff2999c8614d848f8a7e55e3a6fb9282,
type: 3}
propertyPath: m_LocalRotation.x
value: -0
objectReference: {fileID: 0}
- target: {fileID: 7430253518223459951, guid: ff2999c8614d848f8a7e55e3a6fb9282,
type: 3}
propertyPath: m_LocalRotation.y
value: -0
objectReference: {fileID: 0}
- target: {fileID: 7430253518223459951, guid: ff2999c8614d848f8a7e55e3a6fb9282,
type: 3}
propertyPath: m_LocalRotation.z
value: -0
objectReference: {fileID: 0}
- target: {fileID: 7430253518223459951, guid: ff2999c8614d848f8a7e55e3a6fb9282,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 7430253518223459951, guid: ff2999c8614d848f8a7e55e3a6fb9282,
type: 3}
propertyPath: m_RootOrder
value: 1
objectReference: {fileID: 0}
- target: {fileID: 7430253518223459951, guid: ff2999c8614d848f8a7e55e3a6fb9282,
type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7430253518223459951, guid: ff2999c8614d848f8a7e55e3a6fb9282,
type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7430253518223459951, guid: ff2999c8614d848f8a7e55e3a6fb9282,
type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: ff2999c8614d848f8a7e55e3a6fb9282, type: 3}
--- !u!1001 &502449554
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3}
propertyPath: m_LocalPosition.x
value: 106.38621
objectReference: {fileID: 0}
- target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3}
propertyPath: m_LocalPosition.y
value: 38.840767
objectReference: {fileID: 0}
- target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3}
propertyPath: m_LocalPosition.z
value: 34.72934
objectReference: {fileID: 0}
- target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3}
propertyPath: m_LocalRotation.x
value: 0.31598538
objectReference: {fileID: 0}
- target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3}
propertyPath: m_LocalRotation.y
value: -0.3596048
objectReference: {fileID: 0}
- target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3}
propertyPath: m_LocalRotation.z
value: 0.13088542
objectReference: {fileID: 0}
- target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3}
propertyPath: m_LocalRotation.w
value: 0.8681629
objectReference: {fileID: 0}
- target: {fileID: 4943719350691982, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3}
propertyPath: m_RootOrder
value: 4
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 5889392e3f05b448a8a06c5def6c2dec, type: 3}
--- !u!1001 &714209662
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 7252038608842613995, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: GroupId
value: 3
objectReference: {fileID: 0}
- target: {fileID: 7252038610261898582, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: GroupId
value: 3
objectReference: {fileID: 0}
- target: {fileID: 7252929719452920129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_Name
value: ZombiePushBlockCollabArea (3)
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_LocalPosition.x
value: 100
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_LocalRotation.x
value: -0
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_LocalRotation.y
value: -0
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_LocalRotation.z
value: -0
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_RootOrder
value: 10
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7292016560317339401, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: GroupId
value: 3
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 4efb4d72c7b94469ca38276842875f65, type: 3}
--- !u!1 &1009000883
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1009000884}
- component: {fileID: 1009000887}
m_Layer: 0
m_Name: SingleCam
m_TagString: MainCamera
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1009000884
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1009000883}
m_LocalRotation: {x: 0.5, y: 0, z: 0, w: 0.8660254}
m_LocalPosition: {x: 0, y: 20, z: -15}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 60, y: 0, z: 0}
--- !u!20 &1009000887
Camera:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1009000883}
m_Enabled: 1
serializedVersion: 2
m_ClearFlags: 2
m_BackGroundColor: {r: 0.46666667, g: 0.5647059, b: 0.60784316, a: 1}
m_projectionMatrixMode: 1
m_SensorSize: {x: 36, y: 24}
m_LensShift: {x: 0, y: 0}
m_GateFitMode: 2
m_FocalLength: 50
m_NormalizedViewPortRect:
serializedVersion: 2
x: 0
y: 0
width: 1
height: 1
near clip plane: 0.3
far clip plane: 1000
field of view: 56.2
orthographic: 0
orthographic size: 6.98
m_Depth: 2
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingPath: -1
m_TargetTexture: {fileID: 0}
m_TargetDisplay: 0
m_TargetEye: 3
m_HDR: 1
m_AllowMSAA: 1
m_AllowDynamicResolution: 0
m_ForceIntoRT: 0
m_OcclusionCulling: 1
m_StereoConvergence: 10
m_StereoSeparation: 0.022
--- !u!1 &1257687048
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1257687049}
m_Layer: 0
m_Name: 50bfc0f4c3d6f46df98d3c66ceb89209
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1257687049
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1257687048}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 365376271}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1265651285
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1265651286}
m_Layer: 0
m_Name: RecordingSessions
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1265651286
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1265651285}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 318490717}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1574236047
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1574236049}
- component: {fileID: 1574236050}
- component: {fileID: 1574236048}
m_Layer: 0
m_Name: PushBlockSettings
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &1574236048
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1574236047}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: ec51f47c5ed0478080c449c74fd9c154, type: 3}
m_Name:
m_EditorClassIdentifier:
gravityMultiplier: 1.5
fixedDeltaTime: 0.01333
maximumDeltaTime: 0.33333334
solverIterations: 12
solverVelocityIterations: 12
reuseCollisionCallbacks: 1
--- !u!4 &1574236049
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1574236047}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1574236050
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1574236047}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: e5ed63dbfa25542ecb8bc013adfba183, type: 3}
m_Name:
m_EditorClassIdentifier:
agentRunSpeed: 3
agentRotationSpeed: 15
spawnAreaMarginMultiplier: 0.5
goalScoredMaterial: {fileID: 2100000, guid: df32cc593804f42df97464dc455057b8, type: 2}
failMaterial: {fileID: 2100000, guid: a1daf31cdf41e484ca9ac33a5c6f524a, type: 2}
--- !u!1001 &1900462655
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_RootOrder
value: 2
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_AnchoredPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_AnchoredPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_SizeDelta.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_SizeDelta.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_AnchorMin.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_AnchorMin.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_AnchorMax.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_AnchorMax.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_Pivot.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 224194346362733190, guid: 3ce107b4a79bc4eef83afde434932a68,
type: 3}
propertyPath: m_Pivot.y
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 3ce107b4a79bc4eef83afde434932a68, type: 3}
--- !u!1001 &7252038610051467599
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 7252929719452920129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_Name
value: ZombiePushBlockCollabArea
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_LocalRotation.x
value: -0
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_LocalRotation.y
value: -0
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_LocalRotation.z
value: -0
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_RootOrder
value: 6
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7253705700397590129, guid: 4efb4d72c7b94469ca38276842875f65,
type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 4efb4d72c7b94469ca38276842875f65, type: 3}

9
Project/Assets/ML-Agents/Examples/PushBlock/Scenes/ZombiePushBlock.unity.meta


fileFormatVersion: 2
guid: be1201eb6253541c38e8258fceae65cb
timeCreated: 1506808980
licenseType: Pro
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

1001
Project/Assets/ML-Agents/Examples/PushBlock/Scenes/1ZombieVs2AgentsPushBlock.unity
文件差异内容过多而无法显示
查看文件

1001
Project/Assets/ML-Agents/Examples/PushBlock/Scenes/2ZombieVs3AgentsPushBlock.unity
文件差异内容过多而无法显示
查看文件

9
Project/Assets/ML-Agents/Examples/PushBlock/Scenes/2ZombieVs3AgentsPushBlock.unity.meta


fileFormatVersion: 2
guid: 473dc7cfdb610468983d530a0fb29bdc
timeCreated: 1506808980
licenseType: Pro
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

9
Project/Assets/ML-Agents/Examples/PushBlock/Scenes/1ZombieVs2AgentsPushBlock.unity.meta


fileFormatVersion: 2
guid: bd81f203c716d4c88af4b47f450907b2
timeCreated: 1506808980
licenseType: Pro
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

12
Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushAgentCollab.cs.meta


fileFormatVersion: 2
guid: d94a85eca2e074578943301959c555ba
timeCreated: 1506829537
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

11
Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushBlockEnvController.cs.meta


fileFormatVersion: 2
guid: 4bb2bb36bb51d452ab58d30a868dfab3
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

60
Project/Assets/ML-Agents/Examples/PushBlock/Scripts/GoalDetectTrigger.cs


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
public class GoalDetectTrigger : MonoBehaviour
{
[Header("Trigger Collider Tag To Detect")]
public string tagToDetect = "goal"; //collider tag to detect
[Header("Goal Value")]
public float GoalValue = 1;
private Collider m_col;
[System.Serializable]
public class TriggerEvent : UnityEvent<Collider, float>
{
}
[Header("Trigger Callbacks")]
public TriggerEvent onTriggerEnterEvent = new TriggerEvent();
public TriggerEvent onTriggerStayEvent = new TriggerEvent();
public TriggerEvent onTriggerExitEvent = new TriggerEvent();
private void OnTriggerEnter(Collider col)
{
if (col.CompareTag(tagToDetect))
{
onTriggerEnterEvent.Invoke(m_col, GoalValue);
}
}
private void OnTriggerStay(Collider col)
{
if (col.CompareTag(tagToDetect))
{
onTriggerStayEvent.Invoke(m_col, GoalValue);
}
}
private void OnTriggerExit(Collider col)
{
if (col.CompareTag(tagToDetect))
{
onTriggerExitEvent.Invoke(m_col, GoalValue);
}
}
// Start is called before the first frame update
void Awake()
{
m_col = GetComponent<Collider>();
}
// Update is called once per frame
void Update()
{
}
}

11
Project/Assets/ML-Agents/Examples/PushBlock/Scripts/GoalDetectTrigger.cs.meta


fileFormatVersion: 2
guid: 9dcea692df32b46b4a884cfcc150aef7
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

241
Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushBlockEnvController.cs


using System.Collections;
using System.Collections.Generic;
using Unity.MLAgents;
using UnityEngine;
public class PushBlockEnvController : MonoBehaviour
{
[System.Serializable]
public class AgentInfo
{
public PushAgentCollab Agent;
[HideInInspector]
public Vector3 StartingPos;
[HideInInspector]
public Quaternion StartingRot;
[HideInInspector]
public Rigidbody Rb;
}
[System.Serializable]
public class BlockInfo
{
public Transform T;
[HideInInspector]
public Vector3 StartingPos;
[HideInInspector]
public Quaternion StartingRot;
[HideInInspector]
public Rigidbody Rb;
}
/// <summary>
/// Max Academy steps before this platform resets
/// </summary>
/// <returns></returns>
[Header("Max Environment Steps")] public int MaxEnvironmentSteps = 25000;
private int m_ResetTimer;
/// <summary>
/// The area bounds.
/// </summary>
[HideInInspector]
public Bounds areaBounds;
/// <summary>
/// The ground. The bounds are used to spawn the elements.
/// </summary>
public GameObject ground;
public GameObject area;
Material m_GroundMaterial; //cached on Awake()
/// <summary>
/// We will be changing the ground material based on success/failue
/// </summary>
Renderer m_GroundRenderer;
public List<AgentInfo> AgentsList = new List<AgentInfo>();
public List<BlockInfo> BlocksList = new List<BlockInfo>();
public bool UseRandomAgentRotation = true;
public bool UseRandomAgentPosition = true;
public bool UseRandomBlockRotation = true;
public bool UseRandomBlockPosition = true;
PushBlockSettings m_PushBlockSettings;
private int m_NumberOfRemainingBlocks;
private PushBlockTeamManager m_TeamManager;
void Start()
{
// Get the ground's bounds
areaBounds = ground.GetComponent<Collider>().bounds;
// Get the ground renderer so we can change the material when a goal is scored
m_GroundRenderer = ground.GetComponent<Renderer>();
// Starting material
m_GroundMaterial = m_GroundRenderer.material;
m_PushBlockSettings = FindObjectOfType<PushBlockSettings>();
foreach (var item in BlocksList)
{
item.StartingPos = item.T.transform.position;
item.StartingRot = item.T.transform.rotation;
item.Rb = item.T.GetComponent<Rigidbody>();
}
// Initialize TeamManager
m_TeamManager = new PushBlockTeamManager();
foreach (var item in AgentsList)
{
item.StartingPos = item.Agent.transform.position;
item.StartingRot = item.Agent.transform.rotation;
item.Rb = item.Agent.GetComponent<Rigidbody>();
item.Agent.SetTeamManager(m_TeamManager);
}
ResetScene();
}
// Update is called once per frame
void FixedUpdate()
{
m_ResetTimer += 1;
if (m_ResetTimer > MaxEnvironmentSteps)
{
ResetScene();
}
}
/// <summary>
/// Use the ground's bounds to pick a random spawn position.
/// </summary>
public Vector3 GetRandomSpawnPos()
{
var foundNewSpawnLocation = false;
var randomSpawnPos = Vector3.zero;
while (foundNewSpawnLocation == false)
{
var randomPosX = Random.Range(-areaBounds.extents.x * m_PushBlockSettings.spawnAreaMarginMultiplier,
areaBounds.extents.x * m_PushBlockSettings.spawnAreaMarginMultiplier);
var randomPosZ = Random.Range(-areaBounds.extents.z * m_PushBlockSettings.spawnAreaMarginMultiplier,
areaBounds.extents.z * m_PushBlockSettings.spawnAreaMarginMultiplier);
randomSpawnPos = ground.transform.position + new Vector3(randomPosX, 1f, randomPosZ);
if (Physics.CheckBox(randomSpawnPos, new Vector3(2.5f, 0.01f, 2.5f)) == false)
{
foundNewSpawnLocation = true;
}
}
return randomSpawnPos;
}
/// <summary>
/// Resets the block position and velocities.
/// </summary>
void ResetBlock(BlockInfo block)
{
// Get a random position for the block.
block.T.position = GetRandomSpawnPos();
// Reset block velocity back to zero.
block.Rb.velocity = Vector3.zero;
// Reset block angularVelocity back to zero.
block.Rb.angularVelocity = Vector3.zero;
}
/// <summary>
/// Swap ground material, wait time seconds, then swap back to the regular material.
/// </summary>
IEnumerator GoalScoredSwapGroundMaterial(Material mat, float time)
{
m_GroundRenderer.material = mat;
yield return new WaitForSeconds(time); // Wait for 2 sec
m_GroundRenderer.material = m_GroundMaterial;
}
/// <summary>
/// Called when the agent moves the block into the goal.
/// </summary>
public void ScoredAGoal(Collider col, float score)
{
//Decrement the counter
m_NumberOfRemainingBlocks--;
//Are we done?
bool done = m_NumberOfRemainingBlocks == 0;
//Disable the block
col.gameObject.SetActive(false);
//Give Agent Rewards
foreach (var item in AgentsList)
{
item.Agent.AddReward(score);
}
// Swap ground material for a bit to indicate we scored.
StartCoroutine(GoalScoredSwapGroundMaterial(m_PushBlockSettings.goalScoredMaterial, 0.5f));
if (done)
{
//Reset assets
ResetScene();
}
}
Quaternion GetRandomRot()
{
return Quaternion.Euler(0, Random.Range(0.0f, 360.0f), 0);
}
void ResetScene()
{
m_ResetTimer = 0;
//Random platform rot
var rotation = Random.Range(0, 4);
var rotationAngle = rotation * 90f;
area.transform.Rotate(new Vector3(0f, rotationAngle, 0f));
//End Episode
foreach (var item in AgentsList)
{
if (!item.Agent)
{
return;
}
item.Agent.EndEpisode();
}
//Reset Agents
foreach (var item in AgentsList)
{
var pos = UseRandomAgentPosition ? GetRandomSpawnPos() : item.StartingPos;
var rot = UseRandomAgentRotation ? GetRandomRot() : item.StartingRot;
item.Agent.transform.SetPositionAndRotation(pos, rot);
item.Rb.velocity = Vector3.zero;
item.Rb.angularVelocity = Vector3.zero;
}
//Reset Blocks
foreach (var item in BlocksList)
{
var pos = UseRandomBlockPosition ? GetRandomSpawnPos() : item.StartingPos;
var rot = UseRandomBlockRotation ? GetRandomRot() : item.StartingRot;
item.T.transform.SetPositionAndRotation(pos, rot);
item.Rb.velocity = Vector3.zero;
item.Rb.angularVelocity = Vector3.zero;
item.T.gameObject.SetActive(true);
}
//Reset counter
m_NumberOfRemainingBlocks = BlocksList.Count;
// m_NumberOfRemainingBlocks = 2;
}
}

116
Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushAgentCollab.cs


//Put this script on your blue cube.
using System.Collections;
using UnityEngine;
using Unity.MLAgents;
using Unity.MLAgents.Actuators;
using Unity.MLAgents.Sensors;
public class PushAgentCollab : Agent
{
PushBlockSettings m_PushBlockSettings;
// Rigidbody m_BlockRb; //cached on initialization
Rigidbody m_AgentRb; //cached on initialization
public bool useVectorObs = true;
void Awake()
{
m_PushBlockSettings = FindObjectOfType<PushBlockSettings>();
}
public override void Initialize()
{
// Cache the agent rigidbody
m_AgentRb = GetComponent<Rigidbody>();
}
/// <summary>
/// Moves the agent according to the selected action.
/// </summary>
public void MoveAgent(ActionSegment<int> act)
{
var dirToGo = Vector3.zero;
var rotateDir = Vector3.zero;
var action = act[0];
switch (action)
{
case 1:
dirToGo = transform.forward * 1f;
break;
case 2:
dirToGo = transform.forward * -1f;
break;
case 3:
rotateDir = transform.up * 1f;
break;
case 4:
rotateDir = transform.up * -1f;
break;
case 5:
dirToGo = transform.right * -0.75f;
break;
case 6:
dirToGo = transform.right * 0.75f;
break;
}
transform.Rotate(rotateDir, Time.fixedDeltaTime * 200f);
m_AgentRb.AddForce(dirToGo * m_PushBlockSettings.agentRunSpeed,
ForceMode.VelocityChange);
}
public override void CollectObservations(VectorSensor sensor)
{
if (useVectorObs)
{
sensor.AddObservation(StepCount / (float)MaxStep);
}
}
/// <summary>
/// Called every step of the engine. Here the agent takes an action.
/// </summary>
public override void OnActionReceived(ActionBuffers actionBuffers)
{
// Move the agent using the action.
MoveAgent(actionBuffers.DiscreteActions);
// Penalty given each step to encourage agent to finish task quickly.
AddReward(-1f / MaxStep);
}
public override void Heuristic(in ActionBuffers actionsOut)
{
var discreteActionsOut = actionsOut.DiscreteActions;
discreteActionsOut[0] = 0;
if (Input.GetKey(KeyCode.D))
{
discreteActionsOut[0] = 3;
}
else if (Input.GetKey(KeyCode.W))
{
discreteActionsOut[0] = 1;
}
else if (Input.GetKey(KeyCode.A))
{
discreteActionsOut[0] = 4;
}
else if (Input.GetKey(KeyCode.S))
{
discreteActionsOut[0] = 2;
}
}
/// <summary>
/// In the editor, if "Reset On Done" is checked then AgentReset() will be
/// called automatically anytime we mark done = true in an agent script.
/// </summary>
public override void OnEpisodeBegin()
{
}
}

289
Project/Assets/ML-Agents/Examples/PushBlock/Scripts/ZombiePushBlockEnvController.cs


using System.Collections;
using System.Collections.Generic;
using Unity.MLAgents;
using UnityEngine;
public class ZombiePushBlockEnvController : MonoBehaviour
{
[System.Serializable]
public class AgentInfo
{
public PushAgentCollab Agent;
[HideInInspector]
public Vector3 StartingPos;
[HideInInspector]
public Quaternion StartingRot;
[HideInInspector]
public Rigidbody Rb;
public Collider Col;
}
[System.Serializable]
public class ZombieInfo
{
public SimpleNPC Agent;
[HideInInspector]
public Vector3 StartingPos;
[HideInInspector]
public Quaternion StartingRot;
[HideInInspector]
public Rigidbody Rb;
public Collider Col;
}
[System.Serializable]
public class BlockInfo
{
public Transform T;
[HideInInspector]
public Vector3 StartingPos;
[HideInInspector]
public Quaternion StartingRot;
[HideInInspector]
public Rigidbody Rb;
}
/// <summary>
/// Max Academy steps before this platform resets
/// </summary>
/// <returns></returns>
[Header("Max Environment Steps")] public int MaxEnvironmentSteps = 25000;
private int m_ResetTimer;
/// <summary>
/// The area bounds.
/// </summary>
[HideInInspector]
public Bounds areaBounds;
/// <summary>
/// The ground. The bounds are used to spawn the elements.
/// </summary>
public GameObject ground;
public GameObject area;
Material m_GroundMaterial; //cached on Awake()
/// <summary>
/// We will be changing the ground material based on success/failue
/// </summary>
Renderer m_GroundRenderer;
public List<AgentInfo> AgentsList = new List<AgentInfo>();
public List<ZombieInfo> ZombiesList = new List<ZombieInfo>();
public List<BlockInfo> BlocksList = new List<BlockInfo>();
public bool UseRandomAgentRotation = true;
public bool UseRandomAgentPosition = true;
public bool UseRandomBlockRotation = true;
public bool UseRandomBlockPosition = true;
PushBlockSettings m_PushBlockSettings;
private int m_NumberOfRemainingBlocks;
void Start()
{
// Get the ground's bounds
areaBounds = ground.GetComponent<Collider>().bounds;
// Get the ground renderer so we can change the material when a goal is scored
m_GroundRenderer = ground.GetComponent<Renderer>();
// Starting material
m_GroundMaterial = m_GroundRenderer.material;
m_PushBlockSettings = FindObjectOfType<PushBlockSettings>();
foreach (var item in BlocksList)
{
item.StartingPos = item.T.transform.position;
item.StartingRot = item.T.transform.rotation;
item.Rb = item.T.GetComponent<Rigidbody>();
}
foreach (var item in AgentsList)
{
item.StartingPos = item.Agent.transform.position;
item.StartingRot = item.Agent.transform.rotation;
item.Rb = item.Agent.GetComponent<Rigidbody>();
item.Col = item.Agent.GetComponent<Collider>();
}
foreach (var item in ZombiesList)
{
item.StartingPos = item.Agent.transform.position;
item.StartingRot = item.Agent.transform.rotation;
item.Col = item.Agent.GetComponent<Collider>();
}
ResetScene();
}
// Update is called once per frame
void FixedUpdate()
{
m_ResetTimer += 1;
if (m_ResetTimer > MaxEnvironmentSteps)
{
ResetScene();
}
}
//Kill/disable an agent
public void KillAgent(Collider col)
{
}
/// <summary>
/// Use the ground's bounds to pick a random spawn position.
/// </summary>
public Vector3 GetRandomSpawnPos()
{
var foundNewSpawnLocation = false;
var randomSpawnPos = Vector3.zero;
while (foundNewSpawnLocation == false)
{
var randomPosX = Random.Range(-areaBounds.extents.x * m_PushBlockSettings.spawnAreaMarginMultiplier,
areaBounds.extents.x * m_PushBlockSettings.spawnAreaMarginMultiplier);
var randomPosZ = Random.Range(-areaBounds.extents.z * m_PushBlockSettings.spawnAreaMarginMultiplier,
areaBounds.extents.z * m_PushBlockSettings.spawnAreaMarginMultiplier);
randomSpawnPos = ground.transform.position + new Vector3(randomPosX, 1f, randomPosZ);
if (Physics.CheckBox(randomSpawnPos, new Vector3(2.5f, 0.01f, 2.5f)) == false)
{
foundNewSpawnLocation = true;
}
}
return randomSpawnPos;
}
/// <summary>
/// Resets the block position and velocities.
/// </summary>
void ResetBlock(BlockInfo block)
{
// Get a random position for the block.
block.T.position = GetRandomSpawnPos();
// Reset block velocity back to zero.
block.Rb.velocity = Vector3.zero;
// Reset block angularVelocity back to zero.
block.Rb.angularVelocity = Vector3.zero;
}
/// <summary>
/// Swap ground material, wait time seconds, then swap back to the regular material.
/// </summary>
IEnumerator GoalScoredSwapGroundMaterial(Material mat, float time)
{
m_GroundRenderer.material = mat;
yield return new WaitForSeconds(time); // Wait for 2 sec
m_GroundRenderer.material = m_GroundMaterial;
}
/// <summary>
/// Called when the agent moves the block into the goal.
/// </summary>
public void ScoredAGoal(Collider col, float score)
{
// //Decrement the counter
// m_NumberOfRemainingBlocks--;
//
// //Are we done?
// bool done = m_NumberOfRemainingBlocks == 0;
//
// //Disable the block
// col.gameObject.SetActive(false);
//Give Agent Rewards
foreach (var item in AgentsList)
{
item.Agent.AddReward(score);
}
// Swap ground material for a bit to indicate we scored.
StartCoroutine(GoalScoredSwapGroundMaterial(m_PushBlockSettings.goalScoredMaterial, 0.5f));
// if (done)
// {
//Reset assets
ResetScene();
// }
}
public void ZombieTouchedBlock()
{
//Give Agent Rewards
foreach (var item in AgentsList)
{
item.Agent.AddReward(-1);
}
// Swap ground material for a bit to indicate we scored.
StartCoroutine(GoalScoredSwapGroundMaterial(m_PushBlockSettings.failMaterial, 0.5f));
ResetScene();
}
Quaternion GetRandomRot()
{
return Quaternion.Euler(0, Random.Range(0.0f, 360.0f), 0);
}
void ResetScene()
{
m_ResetTimer = 0;
//Random platform rot
var rotation = Random.Range(0, 4);
var rotationAngle = rotation * 90f;
area.transform.Rotate(new Vector3(0f, rotationAngle, 0f));
//End Episode
foreach (var item in AgentsList)
{
if (!item.Agent)
{
return;
}
item.Agent.EndEpisode();
}
//Reset Agents
foreach (var item in AgentsList)
{
var pos = UseRandomAgentPosition ? GetRandomSpawnPos() : item.StartingPos;
var rot = UseRandomAgentRotation ? GetRandomRot() : item.StartingRot;
item.Agent.transform.SetPositionAndRotation(pos, rot);
item.Rb.velocity = Vector3.zero;
item.Rb.angularVelocity = Vector3.zero;
}
//Reset Blocks
foreach (var item in BlocksList)
{
var pos = UseRandomBlockPosition ? GetRandomSpawnPos() : item.StartingPos;
var rot = UseRandomBlockRotation ? GetRandomRot() : item.StartingRot;
item.T.transform.SetPositionAndRotation(pos, rot);
item.Rb.velocity = Vector3.zero;
item.Rb.angularVelocity = Vector3.zero;
item.T.gameObject.SetActive(true);
}
//End Episode
foreach (var item in ZombiesList)
{
if (!item.Agent)
{
return;
}
// item.Agent.EndEpisode();
item.Agent.transform.SetPositionAndRotation(item.StartingPos, item.StartingRot);
item.Agent.SetRandomWalkSpeed();
}
//Reset counter
m_NumberOfRemainingBlocks = BlocksList.Count;
// m_NumberOfRemainingBlocks = 2;
}
}

11
Project/Assets/ML-Agents/Examples/PushBlock/Scripts/ZombiePushBlockEnvController.cs.meta


fileFormatVersion: 2
guid: 5e113b4a4dbb24eea8d143f2b168e161
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

45
Project/Assets/ML-Agents/Examples/PushBlock/Scripts/SimpleNPC.cs


// using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SimpleNPC : MonoBehaviour
{
public Transform target;
private Rigidbody rb;
public float walkSpeed = 1;
// public ForceMode walkForceMode;
private Vector3 dirToGo;
// private Vector3 m_StartingPos;
// Start is called before the first frame update
void Awake()
{
rb = GetComponent<Rigidbody>();
// m_StartingPos = transform.position;
}
// Update is called once per frame
void Update()
{
}
void FixedUpdate()
{
dirToGo = target.position - transform.position;
dirToGo.y = 0;
rb.rotation = Quaternion.LookRotation(dirToGo);
// rb.AddForce(dirToGo.normalized * walkSpeed * Time.fixedDeltaTime, walkForceMode);
// rb.MovePosition(rb.transform.TransformDirection(Vector3.forward * walkSpeed * Time.deltaTime));
// rb.MovePosition(rb.transform.TransformVector() (Vector3.forward * walkSpeed * Time.deltaTime));
rb.MovePosition(transform.position + transform.forward * walkSpeed * Time.deltaTime);
}
public void SetRandomWalkSpeed()
{
walkSpeed = Random.Range(1f, 7f);
}
}

11
Project/Assets/ML-Agents/Examples/PushBlock/Scripts/SimpleNPC.cs.meta


fileFormatVersion: 2
guid: 9685bac759362440ea71765cdece3305
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

11
Project/Assets/ML-Agents/Examples/PushBlock/Scripts/ZombiePushBlockDeathEnvController.cs.meta


fileFormatVersion: 2
guid: 7df9fa4d08b7d4d198d5165b07ddd47e
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

15
Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushBlockTeamManager.cs


using System.Collections.Generic;
using Unity.MLAgents;
using Unity.MLAgents.Extensions.Teams;
using Unity.MLAgents.Sensors;
public class PushBlockTeamManager : BaseTeamManager
{
List<Agent> m_AgentList = new List<Agent> { };
public override void RegisterAgent(Agent agent)
{
m_AgentList.Add(agent);
}
}

11
Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushBlockTeamManager.cs.meta


fileFormatVersion: 2
guid: f6ff089e647ef48ffbb569d14d170662
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

321
Project/Assets/ML-Agents/Examples/PushBlock/Scripts/ZombiePushBlockDeathEnvController.cs


using System.Collections;
using System.Collections.Generic;
using Unity.MLAgents;
using UnityEngine;
public class ZombiePushBlockDeathEnvController : MonoBehaviour
{
[System.Serializable]
public class AgentInfo
{
public PushAgentCollab Agent;
[HideInInspector]
public Vector3 StartingPos;
[HideInInspector]
public Quaternion StartingRot;
[HideInInspector]
public Rigidbody Rb;
[HideInInspector]
public Collider Col;
}
[System.Serializable]
public class ZombieInfo
{
public SimpleNPC Agent;
[HideInInspector]
public Vector3 StartingPos;
[HideInInspector]
public Quaternion StartingRot;
[HideInInspector]
public Rigidbody Rb;
[HideInInspector]
public Collider Col;
}
[System.Serializable]
public class BlockInfo
{
public Transform T;
[HideInInspector]
public Vector3 StartingPos;
[HideInInspector]
public Quaternion StartingRot;
[HideInInspector]
public Rigidbody Rb;
}
/// <summary>
/// Max Academy steps before this platform resets
/// </summary>
/// <returns></returns>
[Header("Max Environment Steps")] public int MaxEnvironmentSteps = 25000;
private int m_ResetTimer;
/// <summary>
/// The area bounds.
/// </summary>
[HideInInspector]
public Bounds areaBounds;
/// <summary>
/// The ground. The bounds are used to spawn the elements.
/// </summary>
public GameObject ground;
public GameObject area;
Material m_GroundMaterial; //cached on Awake()
/// <summary>
/// We will be changing the ground material based on success/failue
/// </summary>
Renderer m_GroundRenderer;
public List<AgentInfo> AgentsList = new List<AgentInfo>();
public List<ZombieInfo> ZombiesList = new List<ZombieInfo>();
public List<BlockInfo> BlocksList = new List<BlockInfo>();
public bool UseRandomAgentRotation = true;
public bool UseRandomAgentPosition = true;
public bool UseRandomBlockRotation = true;
public bool UseRandomBlockPosition = true;
PushBlockSettings m_PushBlockSettings;
private int m_NumberOfRemainingBlocks;
private PushBlockTeamManager m_TeamManager;
void Start()
{
// Get the ground's bounds
areaBounds = ground.GetComponent<Collider>().bounds;
// Get the ground renderer so we can change the material when a goal is scored
m_GroundRenderer = ground.GetComponent<Renderer>();
// Starting material
m_GroundMaterial = m_GroundRenderer.material;
m_PushBlockSettings = FindObjectOfType<PushBlockSettings>();
foreach (var item in BlocksList)
{
item.StartingPos = item.T.transform.position;
item.StartingRot = item.T.transform.rotation;
item.Rb = item.T.GetComponent<Rigidbody>();
}
// Initialize TeamManager
m_TeamManager = new PushBlockTeamManager();
foreach (var item in AgentsList)
{
item.StartingPos = item.Agent.transform.position;
item.StartingRot = item.Agent.transform.rotation;
item.Rb = item.Agent.GetComponent<Rigidbody>();
item.Col = item.Agent.GetComponent<Collider>();
// Add to team manager
item.Agent.SetTeamManager(m_TeamManager);
}
foreach (var item in ZombiesList)
{
item.StartingPos = item.Agent.transform.position;
item.StartingRot = item.Agent.transform.rotation;
item.Col = item.Agent.GetComponent<Collider>();
}
ResetScene();
}
// Update is called once per frame
void FixedUpdate()
{
m_ResetTimer += 1;
if (m_ResetTimer > MaxEnvironmentSteps)
{
ResetScene();
}
}
//Kill/disable an agent
public void KillAgent(Collision col, Transform t)
{
print($"zombie {t.name} ate {col.collider.name}");
//Disable killed Agent
foreach (var item in AgentsList)
{
if (item.Col == col.collider)
{
item.Agent.EndEpisode();
item.Col.gameObject.SetActive(false);
break;
}
}
//End Episode
foreach (var item in ZombiesList)
{
if (item.Agent.transform == t)
{
item.Agent.gameObject.SetActive(false);
break;
}
}
}
/// <summary>
/// Use the ground's bounds to pick a random spawn position.
/// </summary>
public Vector3 GetRandomSpawnPos()
{
var foundNewSpawnLocation = false;
var randomSpawnPos = Vector3.zero;
while (foundNewSpawnLocation == false)
{
var randomPosX = Random.Range(-areaBounds.extents.x * m_PushBlockSettings.spawnAreaMarginMultiplier,
areaBounds.extents.x * m_PushBlockSettings.spawnAreaMarginMultiplier);
var randomPosZ = Random.Range(-areaBounds.extents.z * m_PushBlockSettings.spawnAreaMarginMultiplier,
areaBounds.extents.z * m_PushBlockSettings.spawnAreaMarginMultiplier);
randomSpawnPos = ground.transform.position + new Vector3(randomPosX, 1f, randomPosZ);
if (Physics.CheckBox(randomSpawnPos, new Vector3(2.5f, 0.01f, 2.5f)) == false)
{
foundNewSpawnLocation = true;
}
}
return randomSpawnPos;
}
/// <summary>
/// Resets the block position and velocities.
/// </summary>
void ResetBlock(BlockInfo block)
{
// Get a random position for the block.
block.T.position = GetRandomSpawnPos();
// Reset block velocity back to zero.
block.Rb.velocity = Vector3.zero;
// Reset block angularVelocity back to zero.
block.Rb.angularVelocity = Vector3.zero;
}
/// <summary>
/// Swap ground material, wait time seconds, then swap back to the regular material.
/// </summary>
IEnumerator GoalScoredSwapGroundMaterial(Material mat, float time)
{
m_GroundRenderer.material = mat;
yield return new WaitForSeconds(time); // Wait for 2 sec
m_GroundRenderer.material = m_GroundMaterial;
}
/// <summary>
/// Called when the agent moves the block into the goal.
/// </summary>
public void ScoredAGoal(Collider col, float score)
{
// //Decrement the counter
// m_NumberOfRemainingBlocks--;
//
// //Are we done?
// bool done = m_NumberOfRemainingBlocks == 0;
//
// //Disable the block
// col.gameObject.SetActive(false);
//Give Agent Rewards
foreach (var item in AgentsList)
{
if (item.Agent.gameObject.activeInHierarchy)
{
print($"{item.Agent.name} scored");
item.Agent.AddReward(score);
}
}
// Swap ground material for a bit to indicate we scored.
StartCoroutine(GoalScoredSwapGroundMaterial(m_PushBlockSettings.goalScoredMaterial, 0.5f));
// if (done)
// {
//Reset assets
ResetScene();
// }
}
public void ZombieTouchedBlock()
{
//Give Agent Rewards
foreach (var item in AgentsList)
{
item.Agent.AddReward(-1);
}
// Swap ground material for a bit to indicate we scored.
StartCoroutine(GoalScoredSwapGroundMaterial(m_PushBlockSettings.failMaterial, 0.5f));
ResetScene();
}
Quaternion GetRandomRot()
{
return Quaternion.Euler(0, Random.Range(0.0f, 360.0f), 0);
}
void ResetScene()
{
m_ResetTimer = 0;
//Random platform rot
var rotation = Random.Range(0, 4);
var rotationAngle = rotation * 90f;
area.transform.Rotate(new Vector3(0f, rotationAngle, 0f));
//End Episode
foreach (var item in AgentsList)
{
if (!item.Agent)
{
return;
}
item.Agent.EndEpisode();
}
//Reset Agents
foreach (var item in AgentsList)
{
var pos = UseRandomAgentPosition ? GetRandomSpawnPos() : item.StartingPos;
var rot = UseRandomAgentRotation ? GetRandomRot() : item.StartingRot;
item.Agent.transform.SetPositionAndRotation(pos, rot);
item.Rb.velocity = Vector3.zero;
item.Rb.angularVelocity = Vector3.zero;
item.Agent.gameObject.SetActive(true);
}
//Reset Blocks
foreach (var item in BlocksList)
{
var pos = UseRandomBlockPosition ? GetRandomSpawnPos() : item.StartingPos;
var rot = UseRandomBlockRotation ? GetRandomRot() : item.StartingRot;
item.T.transform.SetPositionAndRotation(pos, rot);
item.Rb.velocity = Vector3.zero;
item.Rb.angularVelocity = Vector3.zero;
item.T.gameObject.SetActive(true);
}
//End Episode
foreach (var item in ZombiesList)
{
if (!item.Agent)
{
return;
}
// item.Agent.EndEpisode();
item.Agent.transform.SetPositionAndRotation(item.StartingPos, item.StartingRot);
item.Agent.SetRandomWalkSpeed();
item.Agent.gameObject.SetActive(true);
}
//Reset counter
m_NumberOfRemainingBlocks = BlocksList.Count;
// m_NumberOfRemainingBlocks = 2;
}
}

7
Project/Assets/ML-Agents/Examples/Hallway/Scenes/HallwayCollab.unity.meta


fileFormatVersion: 2
guid: d6d6a33ed0e18459a8d61817d600978a
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

1001
Project/Assets/ML-Agents/Examples/Hallway/Scenes/HallwayCollab.unity
文件差异内容过多而无法显示
查看文件

566
Project/Assets/ML-Agents/Examples/Hallway/TFModels/HallwayCollab.onnx


pytorch1.7:��
Q
vector_observation22Slice_0"Slice*
axes@�*
ends@i�*
starts@�
Q
vector_observation23Slice_1"Slice*
axes@�*
ends@o�*
starts@i�
4
22
2324Concat_2"Concat*
axis����������
�
24
/network_body.linear_encoder.seq_layers.0.weight
-network_body.linear_encoder.seq_layers.0.bias25Gemm_3"Gemm*
alpha�?�*
beta�?�*
transB�

2526 Sigmoid_4"Sigmoid

25
2627Mul_5"Mul
�
27
/network_body.linear_encoder.seq_layers.2.weight
-network_body.linear_encoder.seq_layers.2.bias28Gemm_6"Gemm*
alpha�?�*
beta�?�*
transB�

2829 Sigmoid_7"Sigmoid

28
2930Mul_8"Mul
K
action_masks31Slice_9"Slice*
axes@�*
ends@�*
starts@�
L
action_masks32Slice_10"Slice*
axes@�*
ends@�*
starts@�
�
30
5action_model._discrete_distribution.branches.0.weight
3action_model._discrete_distribution.branches.0.bias33Gemm_11"Gemm*
alpha�?�*
beta�?�*
transB�
134 Constant_12"Constant*
value*J���

31
3435Mul_13"Mul
136 Constant_14"Constant*
value*J�?�

35
3637Add_15"Add

33
3138Mul_16"Mul
139 Constant_17"Constant*
value*J ��L�

37
3940Mul_18"Mul

38
4041Sub_19"Sub
*
4142
Softmax_20"Softmax*
axis�
�
30
5action_model._discrete_distribution.branches.1.weight
3action_model._discrete_distribution.branches.1.bias43Gemm_21"Gemm*
alpha�?�*
beta�?�*
transB�
144 Constant_22"Constant*
value*J���

32
4445Mul_23"Mul
146 Constant_24"Constant*
value*J�?�

45
4647Add_25"Add

43
3248Mul_26"Mul
149 Constant_27"Constant*
value*J ��L�

47
4950Mul_28"Mul

48
5051Sub_29"Sub
*
5152
Softmax_30"Softmax*
axis�
153 Constant_31"Constant*
value*J���3�

42
5354Add_32"Add

5455Log_33"Log
156 Constant_34"Constant*
value*J���3�

52
5657Add_35"Add

5758Log_36"Log
:
55
58discrete_actions Concat_37"Concat*
axis�
0
55
58action Concat_38"Concat*
axis�
< memory_size Constant_39"Constant*
value*
J�torch-jit-export*OB3action_model._discrete_distribution.branches.0.biasJ��� ��;ۺ���#�;�U<*��B5action_model._discrete_distribution.branches.0.weightJ�`�����=�}{<�'0���_];�{�:��*�����鼦G <>�ջ���� �ܗ��P��C�_<Yj����ֺǟ����;��w���ʼr�O��y�<���e��;��케X�<Bhļ8d�;�+<����滯����d���V�ê�<Vp��s ����;�^6�"X�|��G;D<��4�����kB�;�5k���$=����
e<�V��<�D;<�[^;d=*��r����m<13�]m߼}5[�v������� ��֝<��ϼ�Jռ��<�]�����<����C)�eж��R�n��3G<̲X�Lz׼$uǻ���<�5n��;λ5�;����q��T��������94׼&�����t!�<Y��==F���;B>���6���x��{�:��뺁S���%�뼛�=�,�<�༘�ۼ&��$����v�;@�:��D<:c��ŗ��?Ĝ<� ���� �::AԼW_*���6�>��o��:V�߼��������<�%�hD����=<+-�=�ۄ��G=ͣ<| =��=��= �����v�<� �=���==Ͻ�Wy�݆ʼ�׻��=UbI=���=`)�<�Ѡ��5���{�<�҉=��J=��(�I�E=�of���=OK=��q;��p���g�t��=��?=�8o��K�<[k�;fs �RT��]�׉c<s���R��]����=����> =����y1 ���м�`D=��
=vU��A(=AQ�=ԚJ= ���!��� >h�ἐlۼEॽ�a)=ڒ�����<wؘ=����f�p0�<��5=� h��Ț�K�������� =|�<�!�=�
&�~6�=mO����j<|Tg�#f|=��(�4�=�.�#<�7[>���D�<#낽:�����˼ӭ<qq��}�����=����+Դ�6:��i7�f$5=(P;�S< �K�{�=�w���h�W]����=_jg�%y=�V=L+<���<�Ӏ=�������<z=迼=+�=�<�k�����=�R��d˃�MRu��y�T��<����k�;<罻���<^ͼg2<�q���:t�;����&�<{��<C2?�����m��^�Sc��*���H��������<2�U���k��R�'\3<Q�H=B;��伓�H��b<U��P���`��,�<�)
�if��o"�<��Ҽr3�:��ֻ��f<���:���=<?�=�R���9�;p*�<]Y.���������4d�3r�G������۬���`��\�0<����>=#��;= �|<��K�X�Ir4�sd¼�*<��'c=�)�<G<7��<�>���o=�,���=jo'�po�<#��^v< ��;;��<�
6��`e�l�<oJ�?��<%��<c���pIo=g���>���m�<���;������<�/�eG+�D�J=d
<�.{<�z¼�ؼ���`�<~��<$'����^� ���;�5�������̼���<rT`�D�|;r\<R2��@A$���>��0ͻځ���1�,��;�B=�F<��
�;��=�#���굼��;ת=z|`= �=��»�U����F=�ʊ��m�=�$�<C�H�2�p���M=��qC��}���i��Bک<֣?�DH<�S���r6���o�H��=v�׽^����(m�B
�=�Pټꧽ�^�{��=���1�[=O��=�+�=�O�=��e<'(6�2��;����m�<j��=H��<Yf�=���=�i^=J=� ω���9:��l�<�d�=�-�=Jwr��K����=Xy����}=����A�=(�p=�"��J꒽���<����HЍ��҄=r�>��=���=���=M�=�M���=(���8s=�;��=E�����=)���2Ľ�]e=T�
��|=G��=}���C�<�<�=�懽�\ >�%=X ��gAN=�}��]��Ǡa=�?<��S<��<)'f<}�x<r�'=s ==�ɺ�@l��0X�#���ׄ4��W���á=ө�����=��n<r�N=�S0����_=����r,�$w�=߹�; �_��j��ܛ��7�^=[�-<d���A{ǽI8��[�P�][�=V=�<�Ґ�)�A��~���/�V@>=�ʪ=< �,3o=��:����,�=Be�=��׼-V��>H=��)= � ��H�#z�;�U<ӌ=c���QҦ=��*�p�h=`i*�Q�=�փ<?+���ݎ��Ô<%�<t�4=*Uq=`,�=ߢ������nR��t�<96�<{���U@�:i0"=��=���=� `�*ڽ����i�q=�Ƽ��Q�;o�=�!��C6=����A������`X�=�H=��=2D�=6:���u�d���YF̼�,��)VŽ�!ǽHI1�`Nz�z�I��~:=f��z��n�"�e>:���=v���ܑ�
��􎔽|%�=8�=[ap���x=��|��� =TZ���̠�ͱ�=��=��8�J|��?�]�<))k="T��0o��/���q�=$=N�=��C=�E�=�f=���T=Uj>�� ���ཐ&��� μsb����==rk��J��*CB3action_model._discrete_distribution.branches.1.biasJЕ?�Е?<*��B5action_model._discrete_distribution.branches.1.weightJ����f�<�m����;øP<��<��;�x����;�#����<��<1�� �軝
���Ԗ<�4<�� ��( ����;�V��"}{<j�~��ze���A=s���,<C ��G"=��?�mu<Q~�<NU�<a���\�� (?<���;��޹Q?;��ڼ��/<Y7N;��~��|�����<bE�;4E��$D���D��ɰ<�6��j�����;�������!�;o*<=��������3k�<䍖;ӑ;��v<{����~<������#;F�������":��+5;�/&��<� <W�x<�^Y<Y��FOm<�J�<�� �~�=�ą��nѻWoϹ6xl:%�<��<�꼻=��<+��<�Z����_<1����0&߼L�G��_��(�l��Q�<<1'���!��+�����<�oǼ\�;ל�;�!�f_�����;Vx<��;�L�:9)�<%Z�;�&��Ѡ<D�r;D[漨�F<���#~�<�r�;��$<?���Mژ�-*���.�;[�?��;���<���5)�T`Ѽ]�<Jd< ��;e�ü������W<m��;&2+�K����,�8��`ѱ� X�;�\߻Ӱ�;[�;�J�<�<���*�9s7�� ������L�s��A�ټ/AѼ���<���;���˷�L��P�;�ܫ<��Z�<O��:$<�.W;����z�<����e�A�;��� R��c6z<��X<�����"; �!<)/�0>1<������x<��<�/���޻j�:�+����;�懼�z/=_<Z�<p+Լ��]<������$>�:����a��+�<�B�;,���Q�W�@<f��0��;�X��҄���w�򻥼ɯ�� �<����kn��^X��{��E�<�==�^�<@x�<v��9r����P����U<�5�<Rސ<G��� =�ja;b ���.<�O�<� ;������U�;���8򰼘6 =�k��i���y�<[?���;8J��]j����`�<���<U�<*Baction_output_shapeJ�@*(Bdiscrete_action_output_shapeJ�@*!Bis_continuous_controlJ*��B-network_body.linear_encoder.seq_layers.0.biasJ�B�#=ŌE=��<�$c=�U=g�1<��V=C�=��9=h�=Űn��N <C� =�r=B.K=g袺~G)=t–<�!�;_z%;T < �Y��G=���<��*�cf;���<�S:<�["=�Z�<�N�<��$=`��<ɷ�<; �<�#t<���;�k�� %#=!A=��H<^b�<l�ݻ�=�a%<�R�<��<�����3=(�<R@�Y�*<ɨ1<tDH;e[�< �< >�<�'�<��=�'�;�hM<��&=��Z<I��<ٳ� �=��;� #=�&�<� �<�����x�k�>=��<=�>�<�~Q<.�<���:Nj�<�j<� �<>��<���<c�=oC=�˻��=E\�@2.<��;97=�&J��W1<PÕ<���;��<_j�;+!=U��<��<�8�<>�=���<7�<1<Z2+<��C<|�=<�}}<�6���m�<��};#��<9��<l ;�=��;i�=��q<9�$<�&=���<O�H<G�=&�p<�_=>�;=���;*���oB/network_body.linear_encoder.seq_layers.0.weightJ��s5>�J)�I��@G&=c��=1��=�] �Y��=�����5;�3/���A=�����h�<H�=���#tܼ��,�S�]�����ٮ<IM<�ݜ=E��_L�<�ཽ�y���?>Kis�\h7<������T>q�����=��}<�yg>B��<��=.�dž��W#����= &�=� �<��̽=8��9c�<R�T>�y�=�\h>��[���p�P��=�(H>X�,>�ܑ=�=�M4>� >��;T��� ��> �J�x��=dX>I�����=<� >�����=_0�>�2m�{f�@
P�I��đ���o=.�;;?#=��?����=�.�=��.= ��<�(�<с/�gOļ#* ��e�=���ĺY=����mtE>��]=A��=%�e==��<}ξ��Ž��C>�M>��ȼ�ɽx��� 4>H6&>��r��2>��ʼ��h�<�f>1��;>�AF>~cͼ-8,>�����<'@S�(��!��<�<=@�ۼ��=�hN<Cԗ�Wx㼭�;=�A=���= ˍ����>�*�=�8P�t��F�=�s����=�ގ�F���C��<W�(=�k�=2��z�>ʁ�<�
/���4=�y>�*�T���4w=��>Pd�g�W��-���!��B�">��=�k۽�Q�=(�l��6�=������=��ݽ-�(>�†����=k*��������нj�b�D!�'Ƨ���=%�%�l񘽮�/>o㜼YS��q#=�F�=&c<��\=���0`�=6�>B�#�SX<>ؽ�s��0/>�zV=�Ǒ�WJ�=���=+�R=��=yuʽ���={S�>L,��$[4�jy;�+�5����>��1���5>D��:�\�<CBZ=����R��)����8>w���q��?k�=����l ��!e��n�0A=h{�N�>5I=��[=�
�8/�=@�w=]VY=[Q;Oo�=r>n=0���$�='Љ�Jp��e�߽��˼�q�<���Ch>#��/>�jL<�2׽�����0>sC�=�?�=�̽KK�<�� �A5>�����E>@�;a��;e��<j�=�6�<���=�`V=_��*%�<�ټ=�=��%=��}=��l>�;d= �E��=��&�ས8>0��=2� �����t�]=� ��������=������>�v���\y=�>��Y>��/��<h=L� ��3�;�x=:MC=ޥF>k ����d>����� �Ѥ{<��=��H� �+��o:>���=ޝ���{��
�<;�R>����cV>�
�=�vV=�2z<�Wi��?��">�0���e>=� ��@�=_��<t�We �ݑ�=F5��i��[' >:�G����<;F>����=˯e<#�!�ʊ,N�"r�>�ev��'�=� ����8١<T��=���>�����[=5�|����=��=+-��T �΢V��?�=��b�.p<wm>�|W>F�6=M�L�c>���:���=R���?/f>DE�=m�E����=�L=��=gظ����=������L>0D�=�q[��{��'>�%^>xX����@=w)�f�]�($>�=ֽr;�=D���n>2}=˒�����=��P<�nV>@2�(�W����<��4� J<��ľS@�=���;�Ӈ>�I>���<��=B�&�7�F>
�����6�=�_������N8�=� �>�ԗ=����\�>H�;=�Z���h�=V>������6��=%�<���>)��=6X�ge�=�7��Z��=�<=���=0XE��"�_�
�����_I��w~+;���N��>w��*/���/�&�� �=�$>���=�f*������n\���Ͻ�Y'>D�9>��>/�������wb�=lW�= lj��y�< %+>?eA=��>Դ=�0M�~��<��->;^ջ4�����2�q9w�>�g���c��OR�'�>�Gӽ��=���=m���8 �b���`>�f:�g�!=j,Q���;;Q3=��>
��`^�`́<e�>ޕ�<�<�PK��P�< p�=��; �����(�J����=̭�'�=8��<�9住0����>�����s�铂��!�=�t�=9��=&~˽�(���0>����?�6< ��=�$����/��=b�������4n= lY������W>t "�J(�=�F�=>7Q�Ā=Hot��R��?(>KD�=��=6���!���7�>+<���yR�5�<t�=��E>Q�i=�i�;}���1�y=�ɘ�H�=��=ʈ�<��O>���Zz�=JW�M��q�P>sٝ=��;��B=S!b>�_(�Y�Z= G�=8�]=�Qa�q ���H<}�ڼ��K=l��=�N�=�`m;���=t��=���� �@=�;�=KQ��u/���9>-֍>���=�����&G=#Ҡ�f(�~}O<���=�8�����;h>����:5H�<>�=������I�������覽���:���r�=>��=��*>����>l�>���=I�8=��Z�bw����V�k�����X������<4菽T�X�Y��=���= ��;��𽗳�=e��Ĥw=�䅽h'��1��<�;��h`+��4��� J��N����=����A��<���=�=$cq9rkże�:>#�E=�D>�Є=���<��;=�ٮ<Ͼ����'=� �=w�9����=�}�<ĭf=�U>�-1��~�=���="�������ż��.>X�׽;2_��É;�7�;ߍ�=���<�v�<�=rΚ<x
�=�Q�=Ԍ��my=��A<�蛽OI�;tni=ˉR>�թ�<��<ϖ�<d��0[˻-�[=�}����м�D6>��G�7�S=�b�<�����I��=VJ>�q�=��l�α>{c�������=C�$��%���>j�d���˼�^=R�q=;3=��k���<�fK=��ڽG�&=���:߭����=8�轡��=S��=�I���F�=`��>T�>�G;��ZY;>��=U ѽE����[>a ��6T=�y@��0���M;&73>Z֏=�'� ���9ގ=_r^>7J�]d�=?yt>�?>>O��>F;�H_)��C�;x��r�Ǽ/��=?��<p�=�!ǻ�� �q��<��=� >�4=��;Kec=�bq>.b>:���?���6E=��P<O�I=�������=��^=9�=p暽���=��>�#��>>�� �{>Ws\�Ok�������=�?= �>Ҥo<<�=�-�<��=YlȽ��U=�>D�'�>@�>��ӽ�����[>?������W���\J���E�h�m=昝=�J�<��a<h�l�5��=A�n=MD�pn�="���0'Ӽ�)I=��?={P�=q�Ƚ>�+=>�=r\�=E&>;>s�S>�k�=�V�,���V8���W>�߽��; R�>�F2�$:=6���L����"t�MЊ�o� ��i">�r�<��=�ok���X>���=��O>WH ��W��厼�L�=܇���l�=�Q�R{)>j{��V�z����'8�=��O�� �=WV9>��(= ]J�_==>�zE=i,�=���=��~��>�V0>���=ړU�D%>d-f���>^�����;�Hl��ߚ<����s�A;F�Ǽ����`Z�@�b��B<�Z����=��G;)w>N����>>���� Y��[X����=z��=d^�<�wB>K�=ph� =轋��8��=. z==T����=�v�=�́>S 6=��W���z���f=�G��$F�Z1�=�� =$y�<��%�)�ν�ȍ>�د���=�d=������=�� >�غ��� ����>z�����W��:=���<���=yW/�[�d�ƒR���F����Fƒ�Q4�= 2=�B>���=�ʳ�`�=n> ���b3:>a�d����=€!>��"������J<bF<�ţ=|B���fҽ�<�*�=��]�J.�=]E�=Ґ �E,<�u^���M�?�=��7���e��� ���#=n����e��>D��=��;a,�=���r0�<��=Y䣽H���ӏ=��==p^�]礽Ko/>��ĽO�=1�>Gg���$��|�<���=Z� >7<׎<� �����=�6s�� �<�H��D'�<Ӯ�=�<�r���pZv=7Ĝ=�����1���:� =۱�����="߆=�C�<y����e�=����W�y<�p���b.>]�нC�&>޴z=lk����=�1>^��>Z�p���'���=��:=1~߽ԁ��]� >��4=Ɋ��qFa>�Ž�����Y� ��:�e� ����=��鼀�"����~x޼�}ڽҸ�=ڹ'>�+= �ӽj.���R�=�Z˽TW�{@e=y�|V$���=��>�c��o^����=r�G���2AV��W=G���ǰ<)�Q>�Ҧ=�^�=M�'>t����N=򶩸$�3>��q���=3ei�x�-�1 >�A�<su併 ;=mUٽ���<4�:�e��:(�<>׿ڼ�`9��~����v�,�:,��1ҽbC��2P�������=i���m"�x >�a�9��x���N5�)X�<%>n�<�'�ny��N>��=Z%���Ƚ�>�S=����%29=���=K�2�f{�Ƽ�=s)�=)�
��̑��.�=+ =y8p�n-#>�d������$ʠ={ >fi>�.=����$�S=~I)���սp��=��-��"������E�B�#@t=V��}F��>}杼�����<��w���m� �<B��=u�ݻ�#;Δ'=M���*¼N�=���<H��O'�=����y� ��>��-%�=��:���`����=�H*�ײ�<����Q22=�p����=�i���7_�J�i�8Zi=���1̽}b��_��=�妼o�2>t��<P�f=2�û.를��c<��4�V%���>Z�Z>-�<��%=�V��u(D>�+�<[��[6�]�\�� *�,�y=Ѡ�F����T�k�&��ʥ=�����=��<�>v�X�8�<�2H��0�q�=�޺=:z-�'����=pn�=�+�=�\8�/�p=x�ȼq�����=v��=M ���&>���<kn�=ac:��`$=�D=š黎u>ܺ#�(���� >��> Qм"g��}��< �H�x�i=xn.�\�=�L�C����>��@ܽЃ���޽�hy=#^b=�NN=��l=9>��l��a޻�)=��]=���<��ٽ�`=> �=��Ľ��>L��<'�½�����jv=|(Q��c>:���)>�.��`���E�<kϸ=�q��L,�󏙽���=���{ə=�$Ͻ��9�4��� M=k�=��<f*��3@��4>�O)��1r��`�<7�=r���� >ن�<*&=�=4pY>�9@�J����>���n鼟��=�=j�<j��''=/��`[��γ'>�@���X>�)�԰�=BH�<y,��4q=V >:fg�M���F�>G�<s7=�5����=�~����������ID=���<Si(>�Y>���M_.>z�>.|���>x���t =��ĽϜO���t�
}=�>#>$>���|�=��3>||�=��{�ь�<HP���݀<6���轎>;=N5���������=�G=��=C⧾n�>��|=!�.>���=n/����=I�5> ����m��q���g<��C�Y��=ݑy�Gq,=�lν8S����=>2ơ� �=�÷= �ڽgi�ˎ�=�짽1kh=�O2>�z��-�< ��=�=�Q�>�e�==�q�m۽�s����8����<�r���,=f�޽1@ >S���Ƙ�<rf=l#����=�Y7��(�ಧ=� /=�Y=�O=}�q<�[�9w��=�K�=^6$�IY,= �<ɟ&>�`���3ܽ�������=�}r=�0=��ѽ������ս^' >�:= ��;�쇽�ǽǕԽ��=V��<�vL>��:k��=P"f>��� L=��?= �=o*�=F�E��O���>̟����%>�#��by3>�<�=��>Cݸ�a���od���F��\�����>A�=��X>D�=�]����0�e R�A�仩�K�X�(�cS=-S��]G�=X�ս��]� �>DVͽ�[���ּ#g9��qR>ھ?>o������<.� ����%=Dݻ=z�J�V�8>s:�������=�Zm����=�$�=�Zľy����#�c�=U9�=S��=��=_p9<�{D;d ��ν�I��t�=/Kr>c6�=y��=���=ɡ��:�%��<[�>>���<�o���R$��=P��jݪ;V�U>�9
����<�Xp���U=U��
}����琐=BO�=�+�:$K�<�V>�ܼ��}>?�<b$�<��3=�O=��ͼ%Џ;[��=�h�o_c�����CgI=� ׽7��=��=��=�%<�1�=@�=o=
��;�ݔ>/�G=ɛ�"&>�m]�3w?<�5>��p��5<\�|=���=H�>�ͳ�
�F�2�)>|�>4��=��E<��'>N�ڽv��=g)>�l[=��F<�8"���#=!�>DY�=�� =>��=W��;� μ�8�<�����н� �=����-i'�n����N � �>��;��D��Iǻd�<>3og�+"]=�늽vY�b��=K� <��G=��&�νv��=�h����>��<ˑ�=�v9��RM>�i��K�ȼ���<�3A��Bt��a�T|�88_���ܼf*�=�ځ��/:���;B1ܽn��=A�*�� �<����o
F<�P���]=OY�=cC>!+8�������2>���<��߼��U�������6��Pۼ�Լ/=�g���=yf��O��<G(�=
�{=��T;��)�ZD5�a����M=o=���=3\Ͻ����\z��x��9
2:>ʨ@=h��<R��=P޽���4��>�(�/�f�If�=/�n��½Z���������t ���e8�i�E=��̽f����v���%=�d>��<z>.����T��k�ֽ[���&�>Q��6�ý�>܃�<�{<7�Z<��e=RS=���<�|<>w�=��>1,������h�=q,��6�w���=B���~�>Β�.�7��̄�^����Ī���뽎<E��L5��y�=.����=�_պJ^6<!>��b<ܕ�=S�O����=g�Q>���PvѽO�=`��u�>Ub�=�H_=��<UW�9g�꽳@>Z�>:��y\>��7$U�(:=)�<X�=uN�=��=lOa��8=���=��{Z��Wi�>s�=�r�����6�<w��=�Ў=�Y�=~Fu�L��3���H<)�����X��!�I�y=Αu=�����
>sy> 2�=��a>ٖ=Q�:?a=s���gi=x��<����9�=-F��>b��==����ɼd��=����q�V��`��=��=���>��<X1�;�Y��ܽ� �=t��<�y�id��e��cr��hp�9��!�C��<�����'�Sv�~=�1�A��=;n�=If�^{F=��=�i =g��``=Ͷ��~t�<���u�����b���(��l\ >�xG�����
]��u��3���H󶼬&>.�=���=����\��=�l=cG>?V>���R�>�;Ľ�H=�P<Mc�=���)� >a��9;���+v=XCO�}��%��=θ�:\r�=�X�<�=�F=�e�=t���=䓽�V~=gм��> ,�=�:�������<���<���=�ŽK��:A߽YJt=[�~���=h��=��d>��>8י�4�<=�0��V��u�=��=@�����=�jнQ'�<�yy>��=a��=��w>j��w>
=J�����ӽ��J�υ�=���=W9Y����;?+"=��>�=����>y<�=��=�g=~��=$w�0�==%��<肝>
�=��ֽͰ���ҽ����#��=籤��C�=����t,]<@m>En�H�S>g%�;��#�(�d�q�O�l����],<U�A=�!��x��<�a@>�=,=��?=�S=�Fl=ca3�b�.��%���86�.�D>Zwc�-bL=��<��R�gx߽G�<�໼��;�i����~>`����L='>�bԼRR�=7Ȩ��l�=�b�
�%����Lv����=|�м�M2>�Ei��z���H>Po��fP4>�f���R>JJ��} h>�����y�k�=��<�o,>6ڴ<�c�=��,>?E�D�ƽ7M��K��=
o���v�;S5�=��0�v>�=�->�c���� >��e_���=d�=�<���c��W��� �:aϽF <��=�8K���=�o���YP���>gZ��j�=\��=����)3�Ie#��L=����J�y�Խ{"�=�]�<8^���?=i<��� ���/�=�Q ��=j���B<������:>���=��=i<��j��=q��=#�޼���%v�=kq���.�z1x�+zg=��=��,���ؼ#B���)���7Q>o,�=Hʕ=r�z=��<���=q�̻�|=r�����y@=�]�=�j%��c7����=U���=i��=��5����Q��">���=� ��T��=\<�I�"�~/��K[ϽR.��=Ͻ������<� ���]-��і�{���� >���=����/��<kp��E�K�����N �1d׽\�� +>�ܻ����=�A�x&������Mм����p�iT����{����=0g����=+�׼:�=񟽌Fs=vc�;��=���{+F=�9E>�g=g@�鬿=�<>����=x��Q�<zl>��=u5�����=�;=_;c�s�%�� �(e�������L���>{8>�\�����
)e:�׌�Z��=%��=f �;��⽺�
=�z����
=�޽�����5�=w¥�& ���V�Nm���*>%��=gE5=#M�;�i>�½H>Z ����� ���t0�>�>F-r<q�=�g�=5iA�4���
ؙ�a�>�i)��ϽE��<���%N��5>c('<�X<� $=���=G�����=�o
=�����'� )> ���.�V��=L ��`�)�VV뽔FT>�h�uUX�Z��<�� =��#=(ѵ=Q���s�l��/S<�w�֘����,>� =`Լ�W�>�r���8�����=��*=��*�;>N)�|��;ȅ�=*L��fh�����t�^>�D�=��������>N=ZP�<k|�=ּ�=�:=�<>�yZ��$�;ɤ뽤��=Pˊ=�-t;y 7�Mb�<�l����>4P�Wtw�e����W���S�=}���Z�����r�=%������=P��<5ۭ<A�̼�Yh>(�< �%�E�]=�$@=x;�=Mi���=g�0=�a�=%� �e�V����=� g�ۺ<pJ�qi�=��߹_>G��=0�6>��e����<NH��.�P<y�=<��՟�=�ҝ��%����g<�w1=��=aUϽ�!��I ��O�U��;������=uM�=�>,_<���=���=��h��c��n���̒�����$
��Y�=�l�u\q<��x=o�><��?
�=]�=RyP�MG�=�t��2����=5�e>��=Z��bA(=�YH� �2>�ʘ=sн�;$��d�=�d��+c}� �~>rZ��X^g�вR��!>�8˽ ;>?
���^=� ;�S<<Ӊ��ϼ���=����W��=��<q���.]>*=���=3 �ΰ켦�~=dr�*�>R:�<�� =�Y��n@>q�%���m�ӊ�;7A�<r=�d(�Rr>f���ͼ���= �=P7>�O8�|�;e����*��a x��/ӽ^_/=$�����Լ0t>��r���=��;��a=9(��M�*��~��JK���z���<G�I=
�>��0�}��=.�����>���V*=,��T3�=M@O=�}>�>�t =.�D>�松 -���8ý�)����н��=e���}�=�0�?��>\y���ކ�x��=���=�s��_���*<������`��->Vq�� �<9�=��z�;�cݻw���[> >�,w>sa�=��H��>�P�=~.����=O�=��]�&Bb=�g><���,6��^�<>%4O���=4��=|6 >�x >���=���;��o>�=�R_����=oZ���ݤ=��V�_J�K>��=\֜�� =n��=b���պ�=��H�>=�Ҝ<G>�V��7.���J;��:���S>�½ՠ==-�6�[ >%"�=1�佦h->��I=~^׽ux=`�=��>���=���k.�=��?9�<�`��Zj&>o���(��=J@D�k��<��W=���>Lx�=]��=e˜�Ң+�u�罫��=8�>��N�ܷA�O$�w�F�H��=rc=���=y��=�)e����=��<P �
�����b>J ��=�{��͌��H=�� � M�a&>PLj�*5��Q]��������=�w���z�LJ�=������>������u=���>�ܽ��=i�ʽ�햽pW>����X|���R=��<�ϗ=f�=U���Z[�=a��ӓ��������=�` = "%>��<�����> ��^'>�(>)��=[6��\bW=�$�:��%���9> ���!>*��=�a�@<H=��h<����%��,h�;Is<�ф=�`��w��=F��<�[�?���i˽�d2���X>s�y=��->j]�=]��=Ԅ�b��=X��=X븺[<��Ĭ��L.�k�=�q5�Q��=�����sx�f<��cK�=`xK�y��<j�.</X/� c���Hּ�Z�=Ǣ���y�� >R�����2����;�k�:����r�h���>�.�=�J�=t���[��_������<��I=��=��Ͻ�h���)�MW4>%e ����<c�0��j����(>UE��͠'�p��;�l�J��=Ǎ���?�:�>D�+�� �;#\q=���=��[>�z=�%>b6 > �n�����*��g�Q=���=�]w�r�(��>-,=� �=\�����=���=�9�=ͼ��ҥ����R�R<���=�;�=��߽�������<-�`��>2$�=����}��=1�>1�C�%I���ͼ�w�0�e�����f�=�{A��
���]
�B�&>J&ƾ��`=8^�=�===��9�X!=�铺n�(<�ۉ�m�^��=
��_D[������mq<�y���ѿ=�!�S��=��Ӽ�t>>��� ���&&>�Q/ ;+�ռʞH�F$�=G�7>B'�<�F�= �; <�����!��>�s��&_=R�<�⫼�>e̮=Ŷ�<�mm=ct=(��=��(�� �<�@�Ae���䎽Z�>E< V�;A}���>pj=��#�)�����o��Y
�s�}�����>�=��=�����zw>�ܼ�T$>oʔ�#�=n��<����4>��=�7>�0+>h\?>��w=�ڽ�� >�2��؎|=���Rzнv)���9�S|=�����1`�D3D>&!���� =�Q=���<�OD>S�:�\!'=^�>&��<M�D=ƚ�����=�i�=�
�=2���'���v;�Ȇ=�e�<��0=I��t5h� ֽ��ü&��n�=L�=�'Խ����9)=�� ��䯽��e=���=q|#>Z�F=� u�"vֽR��<��<#�ӽ��>�I�=�i=�Z>� �=��\����=�z�=K�[���ֽ��<��<<�S:�M��<t��=s��C�I=ƒ��X�=�D1� �=�=<�K= �Խ;1.>؍��~�>Xe��|r�=�E�<������=:=�n������ia=���<���:=mE��Sq=r��;k>�4�=1BM�y�b��=��3�I�M�z�ʽ[��=� �<� �;y��=/��=��¼)�r>e�߽�&�<�,k�m�V���Y��[�<�@���=�����
>���~m�=���=�yּ�\�=����ᆽP�=�>���=�s=�c���:>���<j@�>p}�=j�Ƽ�sO�/�� a�=1��t_�������Z>��#>�>+�+>�ۗ������=2�>��h���~= ̈��< >����X<�@�=����p*��:�<�>���=X�Y�s��='@�>d7����>e>� �n$O>k��> �=Np=��U���<D�=X}Ž��l�okQ��<">���<x��=��e=���=��>���*�G������U��0���=MѼ{� =�W��^.�=3�=j�=�������+=5��;S~>�[ͼ놾=K>��>���<g�@<Ӡ�=BO�����=; �����{Ҽ�Z����=���=�2�>裏�����|g8�өw=+0�uc�|��=aNX=���� yr>�<�;��=,%���ji������H��HH�5:$���4=&�}��=X�����=���������=�f�=v����=%ܛ=�1I�� ��9f���*u>���<n��>m�=A��fU$��ļ�̻�<�)=p�M><�J=%#���6��4�ǽ Lj���)�奊> o��Xd�;�] �V>������[{�=�I��b̽2�>�<#����֦�DDx>m�>=
z<0(E�ʄ�<&T�<�D(=��Ͻ�S�=i|\���:���w=VD�OŢ=���=��ټ����5�漢�>#�=���=��-� =�oS=_ >�c="�=Ƕ�=T][>T�(=Q�8Ƽ��<P ��L�=�8�>��=���X�\���漙5�=�*��,���\=>^�m@>L0E>� -����=C��>Ї�;�d�[q���f<g$@� �>u\����>UTҼx�`�6�=��=���]:�ލ.>��J�t����>��Ҽu�v=d�>��T�,`�=���> z�=rE������O�4�s<^�_.p;���ýL�n55<���=��;���P;�(�O�=��y<��-;Z��<H��<�$:>�H�����
���6u<%D�[��=�=���.(��}�W>]ԅ�.��<QAV��9��@�9��42>�>G�L��Nڽ��%���6�Jք;�����=V��F�@�}����iO=bV������c_=�tI��ƣ=��tdh<B/�<����\����:=r���.��0f�=g�d=|`>e[=贍;�9f�D/k� ����$�=���=��=�@V�n�6=�H�=���>� >�e�3�=i�R>J���漯p;=�R��$Ž�I���'T���X=�1b�Kc_>M��;� 1��!>u,�>ASF�)�ļ�-Ƚ�C>Z) >;�&=�\ ��~���ϽWԈ���'��*�=�F=���>(�=�c{���,���lx=ӂ���9�=�����4 =�� >��< ަ������=>�i>�?\=�S�=���< b=�LW=�I5�s���!x�^�=>|潧j�[���]O�.�<K �=����揟<���<� �a &� �˺8���������<,C�HD�=Q��=�,���=�p�<�=<;=j�wR�=�?=���=�L7>��!�p~�m>��\>q4Y�������<̈́����<���z���>�����<�w�7�8إ��3 ��>J� ��5��+��=�c{�?����ݽls��`��= ���=�.>��<�q�e�w�K���T�3�H�D=�_P=��|�������>[N�<t�=���!
�=���=6T�=S�;l�Y=_,?>�Ž��;�j =�8߼���&�I����=�9#>��[>�u>�R�>TT+=o3��U��l�<e����(�;�k����޽����)᥽*��=����s\�=hJ�>��#>,}�>^k�,�ں�K2=�Y,>��=��f�p���Z[>ƅ�-�.<+��=W��<=���=D ���׳�(M�X�Խ���=��;��=F�<Q9P�u%����=E��>�����"=�ܼ�5J=š>P5�<U��=�5�b�E>驷=yn<\��=�—� �=�RνoT>��_�=\��?�=6��=��T>_�W=�g���� I>v����=����*>��^��^|<�4>'Ӣ=�`=?\?�~ƽ7�="�= T�}8����C_!>���= �T�1��= s<っ�e?�=w
Ӽlp��)���(6w�)���o^C��U=���u�)>9`�s���AԽ�+>(R9�b�½�Y�='1���0�>K(>
����}�=�1>�o�=�\>z�Ժ�<��0w=�JR��Zǽr9��#+�<.���\��=mL�ߦ�[��'4>�!�=�Џ�U�|���Z=w o��n���nv����=����u�=�)=#%޽��𻨏T>.��<����_��=@t��R��K��c�b>�9�=ٌ�=~qE>w�����;��;A>�V= �_�>�L>�^���,���@�6Ի ������=�^�=���=�R����`�:o��U-��p��}�Lo$>!�>��>����g�=�*�=pE�<qD.�4����L=��&=}�v��O=�_�&�!����#;>h�u=�T�^�>t\0��1=�!���t�=su>>��;��Լ���=@��1��=�P�=�h=��!=�M�;��#�5����gI���id���}�����a�8�.���m�j����’�
�=+�\=^�o=���>=�S>5q����z�<���=nV�I�?>�.W��E��j>7֫��\������8���D�>�䗼ԗ<�e3��^�<l�j�Q�ս'E�i�����;=�^�=,�*>�=��I<0�S=��ֽI��=���=�A'��c/;D�n>Y�>)���.�k=MA�=��<�&��Ր=J�۽� >sD>������&<��)���.�qv�=x:,���=D�;���θ�Y[Z=�>��-=�\>T,��tͽ�� ����=��s�T��;]�0=K�T=��9���>eRڽg�=�Nj� XB>c/�=-��:y����/��<����g�i=����'=��<���=�]���m�lW,����=BF��\<=�� �&LA��Cr�514>F�P�q�CU&=��b�c�^>�ǎ��b��KVb�)�>��(=���=�<.�=OV�����v/=�X�=gg)<^.�=Ŧ����<��=!�j<a|�>Q��< �=:&*>p��+���E2>}�=�ӌ��ֽ�5<��ս�[=e� > =ݬ9��EG�I|=�3y=.�л��=��>�* �,ɼ���~#��ܧ ����<��=^�%��B^=�\�e�j�=��9�La��Q��OC�<�a�=�7$:>.<�ü=���<8S�����<9���?4�����t��=M5��9F=H[� >�8;i9�<��=�vH��i���V=�Z�� �=~-�=+������:E�V��,�=1R�=81��/Pͻr2�2(��Ee=x���
����ʽ �D<���>͗�=%}B�I�.> >o٦�rp<~����G>� ��->$}�;���Z�<�a�V��=�.t�n+/����Zj=w����`!>��=}}��J:=�T�<���=&����q?:<�I�#놽��^=� c�*k{�Cح=FU ���>���<6国.��=a�%�7|>-�5=���� ��]=q��<��<K�>S�6>a���EW�f�X�LBP���&�4Ʒ����=��= C;;�&�9y���R\>���=jɽ�`T>U�5>�����=���=�>=��ؽ�f <l뒼����p��;��p��4�=���>���Z�=|�Z���=���=@-q����2� �U �<��׽'�=��0��1�,=���;�m�<���=:A>�:�=��2>#�_>��=������=_��=�N%<��p=K�J��� =A>׽%B5��_�=O�ݽ��V�f��=��=�N6<{�F=%�8� m�=��U>���=�C޽��:_�j��?<1� �%O(�s�|>���=�h �"x">�P4��@ҽ�d >cu��M?>3O3=��\��g>A�=e64>BW=Y�����=�J=T#�n:�=y� =�8�<&�B=&M�="�&=">��\>q^� �=='<��p��V�=$#�����<�D� ,�<�ޛ�,}W=�� >��<cl3=�>�P>^����1���#--�sKʽXc�*�<S�>3��<L�`=r�=<xM>8<��8nK�7�W=Jq�>M�f=E/P=K� =H�<0=,��t=޾��Wm<,�ɽ�i ��l)>�8}�� ���7��!�>p�#<��W>�=���������<C�U=ݤ> �����=�b��G�+=�[�=/B>ت����c>�s(<E��<��=� ���� �7ճ���-=��$���%���� 9_�����v��=�������j] >U�>>Ҳ2��>�E= �x>��= �d��߷=M;��`��dN�;=�0�T6��2w��~�=�o��ij��4.<�G=Q7t=�h=>���=� ~=�$��=��缱��>� >��>����>=�>,�]�*n��"聽�`I<:�<S2�= ��>���k>*BO>�1�;���=��">Ь�=��^������⽱e�<��t��2;>��XH<����&�$��2&�)�[>���=��μ�Ù�4�1=XRȼ$����K�*�����p��,��r�K��E�=��K<�[�����=[�m�ֳ���_F=R��=������/��x�=r�L>oxҽs8� �?<]L���U=X>I<`�s<c�����;��ҽ}�:>)�I<k����<ˏ��Q>�d<�
��uԽ�Z�=(�=��?��� ���C���7=�M<�ַ�f��Y�<Pݢ�& �<T�J�(�ܢ;�N�8>��ν��&�j�?=4��<qǽpn >y������=� >�"w���=f��@g\<��=�Pm>��_��J�;���=;&�=.�k�aʃ<z� >�M8=������Hu�����܁��ژ=)n`>�-�8ڀ=0O�d"<�0ļ9L�=����ã�myH=Ղ>��4��N<��k����=��7�ߑ��o���5�<! ��s��^(����>�a���ؐ�Gf�=� �=S�4>� �:�窽a^l���C=�F0��� =ˍ�=�>&1����t>�� ���P=A��=�ߚ<u$C��y��;}��%�B�6}��CC�����i���8[� �ج�s5.=���=��=�q���f�<,_(>�έ�f��=��4=ジ;�ּ�䁽�r���=�#��}�=�V�徊��g�=Mݐ=�=�2>�U�=Xۻ��=C��ݜ;�:>)!����> ��/z>M� >!��<;����Z���мeu6���c��̅��[������&��x�>>���=NjU��,ǻ�܅���-�y��;�|��T����_������ ��v��=�����E=�S6���>8.C>{g�=����8�U:s��=�$�=q��<C5<�7�=�{!>X�{=@k�=��=���=����>u>�=7��=Ec#��|�=S����<OC=�pH>$���=�_��mܼ�d��7��;�UR>=I�[�=���=U�ҽVA>W k>+�<����ǒ�:�>p���MZӽ�,��}0>���=d���nV<�A@����93���W8���j�=�B'�R�v=���=�b>�G>,pM=�.��R�����2<5�� ��;��Ƚ�%>� �<�Jj>���=L��=��p��s�>��t=�sg�A����=(�=��{����<И>����T:=��8��9[�/vj��7����O���x�<�=���<H�`=�����
�=�ʀ�7b<��E>�$d=t)νm�h��=d7��F����9>��׽&c�=��:=GMS>:��=���= ����A�=5�&>��<�>��޽�s>�#��,J<����Ƀ=���
q������_����:%��{e&=w�>�KH� >�H�;�/l�.V>��q��b>�ټ��Ǽ��� �8�N����>Mr=� �=A)�=+�,�zJ0=u>ܨ>��|r�__����y=e齁1,=uCA��σ>&CP>��S��|o<� [<�};} V��ӕ��A�=�aW�g|���
d=��?>Om�>�~���ངWҽ�=��K�>� ��D��=7S�6χr�G�=���k�=n��<�%T=�_>�Ё���Z��bE=�m�<{,'��/> �_>�ý��H�'�=Ѻ��� ;�ʺ� �=�">����~X��9���i���o=LZ�;sB�=Hw@����ؽ�Wy>�lԼGi�>~�*�������f T=2vk>��K�9G�=�I�=�^=�]=��L�;��=S#a=�Z=�p�=�ߺ<���=�v��<�=�������<u��9iS=�(�Y�=ْ/>Nb3��P;��!>>QݽM�<^�f�U�'>)-�=*��[=�u��a�>�>�:;>�1(=P�E>C+<�8�=#Tн���<'�u>�d�� a >+��;�/��� �=�E���<���~)0��~��&.�<�8+����<0���׊<�=�<�(��;�g�0�D=I��͑�=%� >�J�=�o>0�:=��'>�♽�R}���Q�ز$��^�=���=��_�y9�F�.>N�=J��=&c=��ܽ@�߽�t�<d齇f��\�0=׎a=!#=�d�<���7Ѧ�p�p�5����:� ��KDH=
�=��g>��ֽ%x�����t�=����سR=^kн{�;��ֽ ?�<BDS=���:=v��=�� >�=�N�;&O%�dS���<(�Ϛc���\�ܲI��#o=$N=��"��R�<���=$
�<��.>�7Ӽ��>�ҩ=#�=��;���6����=j�=��7���'=i�k>)="�*>_f�<�o�����S=���<Z��g�Żb����=��$=]'%=R��<I��~�:�J$=2�ɽQf������ ���k��%d<!����K���=y(6<:��>��u��*[=4�����f�S���>~f4=�%+<ٿ��Ş&�t�=�q�Y;C���Q����Y�#=����К�������=��������_S=^��` =Ph^�Y@��V����r=3>8=jȷ��Ʌ=g�<X+5�D=5>�S���nN��oW><=��ü�>�=�g��)�P=֔ҼJ}���ά���=`;ڼ��=�d]�(?�����L�� Ƙ<LI�=�.�=�b������0T=��d�D=(���!����y6�ݐ/�d���Go�f�t=���q/|��<���� �=k齿���q|=�!��S��b�>���>�ר�T�<��j=��%>|%\>�WH=p=�z:;��˽$?O���>�=�,�����=a�������њ<�^i=c������D�D<��A>h)�<��t�1=l�=>q^�=���n��#E �6�G��F�<��ٻ��<��f<2��`u>(\>��z�=nd��<5#=�T�=�
��ו�Oh]=J7��&=�S�aG~��$5�]W>O > ��r�=o=2���]>vk�=$� �;Yڽv��P�,��G��sY�=� <��ۼ�;'�社2��<��6�L�������v�ar�=mp��^+=�+��=(!>�?�ڼ�"D>�Z>�&5>�]��y<�r��m&���z���=��<Y�t=�p��Rb�<��Խ�G���kȼ>q��
Ѫ=��=��ܼ�I"���+>����]��� ���˼נ����=?=����Y��E>�cV�|W�G��CӲ=D� ��p��Og�=b�>찻�}�<p%��0���=^d>l9�����������A>+�j=9R��7>��B�yS�=+;���N=.��=>�z=�y��@��=e7�<k�I���/>�*�!3�K�����=����Q >:6�ţ��}�<����[��zs(>v ڻI�=(��q��6-���ם��t ��s8��e�;�<g<Cc�=�|��ҽ_|��yX �:*�<l̼�߽��f<��?>��Z�ʛ�=ۉ�<�D��̆���m�=좽�6l�� P>�Ƚ3�=ȸ+�𹬽&�Z�I���z�������K�<�<����nw�w6�=���=N�ʻE��<�n�<p��=�_I=oc��g������ =���e����=�$9=�Q
�g��=HЬ='�����<=���=>2R�7Փ����e��=^n�K��<�/��&��=o�w<�
�U�= _-�6伽���<B�=+�f�É=�p!�
c�B�ؽ~v�;{�<"X6<���5�>>�"6��!@�����2>Kg�= -�=Uކ>��;μ=n]>� �=&�w��h���R�<�!��Tw�=�,�,��;�;=��?�m�^>��L��u�=VG�w<��=��=>�~�3=�2O=���=Cʧ=���<)_=��G=!�\=��7����� �q�/>h��=��d<���=�X���%=z�>�ܢ<�]����L>f�:�<�!��g�5=������\>S�?�y3ٽ46:����Iv��D)��B,��5���`�=��>Xk��en,�k��=a�]=�A>���e�U><����\�<��ͽ�ܰ<�
'�P�
��ۖ=�=�/�=�S�i�<>�i����g�m� �՝�җR���W<�$�R�f�r�Q<#�
?+��U=����:o#�_�D>�ݼ82�=X/[�~�=s��=B&���yK>�g�=�F&��fƼ)0g<��ʽ(ݩ��t�;���=���=�P�U�|>��n>YL<}E=�2=���<��_��u
���j<�ta�c����N�6��>�Cr� 2�<����h��� >IN��QE�0�=!(=����f��;���;Bq�=r0;=��v��w�;�㙽|����7#>%)�<㖽l&�=�v�~��:�%н�^=�d�=f������=�� ���b>���=o7��l��A�p�>�bR=+>d0��,��=� �<�=WS�=op� #��1ħ�2 �=�@;=v��� L�t4�<�a ;�9ݹ��!>� D>���=�w0>�~>}�`�Qd);��'<�n����;�ȇ��s�n-�=)�*�L�F��=��>ɞ"=���k��=p8ʻY[�=�U�� *m�*&���.��a=����(kb���>Y�3��!R>!�=��μ�OV��ђ=���=��'��D����1<n��=1g�<�� =��ͽsz����'��<�=���=l��=�^�L,�<�;�>�0�=���P��=@�=r�3=�0>c��=a��<3S-�D�����=�1�=X>��.=�˜<�*@���=>~�P��Q
��4z�QȎ����G�����"��=�w���y����=�P=�8�|�=�B�=��=MZ����=���=Ưk=�ٟ=y)�ǘ'��]=*��=��7=�*���\>+��=��%><f��b��=���=�U>Y���X�l��H%>� �,΢��<���$>���+��=h�'>��Խ�8->�a>���Bn���������=�O=�����=� ���D��-@���6���=��=;���1�9)�S<>PrX�5.>e_�=|$~����=+=�E>�A���dp< O&=��(��خ=HT<�����Պ��^�<F��=����j�k=�+�q�0�>)p=��.>���/l=C�jt>8w����d=�Qg�60!>!��J��؛�=[}�>����#��=̆=��X=���=��=��F>�ɹ=��<b�=[���U=d�:>TF��}����<>�m��5v=" E=�%d��ү=��8=�\�<�“��u?>躣��t�=:HP�Y��<f>�8<>&�B�0c��1�C�d��>3�p<���=�5���~=Y"� �->��ý�n>G�Ѽ8߻=���=1����=��=X۸;�R�=?��= �`h�J]��̆�s%��pF���m�=��߼yȽ��D� ���&=M�;$ָ=i=ш߼.Uv���������=>��=�G��!f<���A�*�%�>>�{J=�n�<}{��1�">�3�� �4Qj=��;� ҽTl>%���Dzu��e ���Һ-q�<IR�=�a��3,{k�*i��Ųb����=e'�<�.�NnF��9�=�WJ�+sϻ �=��Ǽ�Q�<J?%���;�w3��/�={��=v"W��=^!G=fs>C��<򛽱x���m�u��=��<SG�iӽ���=����">]�]=P��=���>�2x�.�X��=t�C�D£�b�潷n= �-��}���7�Kٽ��=�<���„�؇E�î ���ؽI���Žr�<i�@=�>�=(��<iT�=�B���c�<��';5Ȭ�tn��"�����=K��=0�˽9���ڠ=�3�=���$f>�\�v)>����[V<B���c]>_E== n-�3����۽C�|=r��;�-q�c�=WΥ=5��=��w<೰<����S<#>q)H�Gs���.�8Uj�u2A=UC��)Ap<} ���9۽��=��d�V�q���;�W���<���=�Z�; !��TK�����;�d=}@���[<A��=@ư��U6>�^=7ɽ/�<������m��~�=�솽��k���B��}�=0J=1����zn�<]�:g����%L��x����3�����d����V:�����@��j��]��=��<=�B=�o���/��@���-�@��=t\����=�k'=�RĽ���<%
#=��=(��3o߽��=�f�=��齷�<�2���;r>e�<b;=��4=�� >m�=�(��Q� >QT��O��=��}�M�h���=�FS��� ��g@<�Rj�����K|����ɽ����:�
>3����o��O{<��b=�y���q��?��M�����6=(E�=u]O=m��=�\���=>��<������= �n=�I�>en2�eL;-Zj=�!���I��;�<�[=��JQ>� �=�O��v����I=7>�9�����>)��=�S=�� ���=�����r�=���<2�;�Q�=6� >�e ���f��Q$=��>��>��ս�nO�)��>�a��� >R�z�$`[�ԩ= �">/�o<_��=Z>rit=�\>>�`:��H�=��X>i ��+G=��B�Ъn>p�W>� �=bd.�u5 �\�8��'����k�O>���Y ��+!<ؤ�>[%�= ڵ���㼻��=@�ἋXk��n�=6>��G=� �C���N =��j>�l�=J'K��ؑ<��4<'���l� ��Mn>v��<�����<Ѐ����@>�YɽV�P>��R>$>L�-=���=�˄=R۞��.�<����_�������W�=ҜM=� =Z�:�l�<����؈:> ����o�� T����̸ؼ)+�=��߽�B6��=���T`=b��=��V�o� ����=�$ �G�%=`N4���>%lM�S���H�E�z^ƽ��o����53>�Rl;`��,�C��!��<�<]q=y��=���2:U=8E�=������e=�1��U$�=��E=T��=�j�=�/ܽa�����>�)F�i����Ͷ;kF���;G�;�+�����;!l=ۻz��>���;�>3x�=�X!��z=��o<#U��C�������Ձ>��̽x�ؼW�M>1 Ƚ���=޿5>~J*��B�O>�
ּ�<ѽ��4���=�}b�ގ��R���6=��>�N=
*,��
你��л2>��½��-<�ө�"%�=��==�&=����$�J-$;?�=�̽=m���wU>�=�'��Ͱ����̽�_c�����^�;���+<�3�=n��=<h�=�~��"��s���|���aO�=���=���
/��y=03=t�����C�\���ؠ�>v�\���c�}�N��=�3>��T>�-Y���ͽLi
��>k^��� �=+B�<^T�����{�<�>̹W>cS>�|��J1>>ݬ�Ѱ7>���{�����=b>�^/��% <Q�����=|��;`��=��(=�Qk>p�E��.���>E�= �=��=�#��lq��.����<�[���!�<� �<��F��c�;��2��'ӽu��=�=D���">�<Y:]g7�R�=ԁ >nC��[�><����ܻo��9@��Qm>`� �{�k=e�>Mӯ<"%�)5��3.�ʸ4���՛�<A�/=(i����C��`���)��@��=�q�=d�1�I���S�~H%=��w>/�%��D��tN�=����t)>���;n���E���=��=��=|�� <�d|��E�>��r�3��:8V�=n:=�Z����=�߼ɢ�=�j�=��>�O=�mw��2ͽ`�b�#�>��@=� �<#���a�����=�Q0>L�%�af�lI�< ��=��I�h���"D�=`u>�̼U�����=,������=?E>�Y=
bǼp�i�=y �<��;=��j)F=��=��_$�=��a��=h�j�+׽C��>^��`�'��U��eE�� �=?\4����=���>��T=�*2<�}����>Z@�=�;=�w�<�S���B>rD��b8��w閼�i�==�&E�u�=I�&�^��=�X=��"=�_�=���=�F���1�=�ъ���m=��\>�{>=�d�=Z��=8 �S#<p�>���<��9=��>��۽׋3�ݪ��:��=���Nx�-�;�=1={���~��=+8�= ���B=�?����=h��=�����_������µ�&ҽ�s�>w���P���@A�L��e<��=��Y��=�vq��y��Q�[=(��"�s=��Ͼ�F�=��=�M\���>J ��y��t�>�C>��a=� ý��;�-�K�b�F>�s� =�=�1=�a#>ӗ�=����61=|~�=<�u�%��&p�����˒>���=�s�=X��xɼ;S���_�=�Z�=��>��=Ϯ=�Y*=�'�="h�=��#�KY>/A�=[�=\��6�~>,ͧ�U�����=���=X�>������=��&�+z��ˁ>B p��߽����� h���۽=��;>�諼� �=�U�=4j@=��>o��>���(�ͽ����c�)>�x�<X��C�+<E�3>�I���#ӼM���H�M�����ku��/�=�a��U ����ɼ(a�=�T�=lG>��R=�z��B̦�`w=K���ľ�� ���ն=� ���V�<l >��Ld�=�+;>�j�v��<.���`l����|=a$l=���<���{>42��հ������#<>?P��!��>��=��s>u*>Y���a<>�΅>~�k�δ �[:���Ǩ�~j��~ች^g���S��:B�=S�2��>�<������=��W>�V+�(��=^�=V[1���F=e*���ý��o==?���7=���������<\����]>~> >��R��h=�.�=�6e���W��-k=��=�c=���<�sQ>����@���=K�>iW<��k���y=�F>`a1=�1��(�};�����w>���r�=Ą~=Ŋ�<��'��� >E2�=*��=I]=��z>kR>�=����`=�����6��zR"��|3=��=���$�� � >7�=��ϼҸ���G>χ�D�>�kM��r�=~^��M�=�H=�Tڽ�cۼ^O$=� :��2>��U��Y�>�bY=��j��s��EH>�����;x_ >¢x���a�a�@�:L>&�<ŗ<a�=A7�= )=G��p&Ƚ*��<����']�=�I=������=�d+>��ں*ۮ=�I���.���������4d�����Ǩ�"��5���l��n�=Z#P=b'p=�6����"����;�4�:�F}������0�C�.�.ĸ�0����-�5�K=�N>ζ��JV�����<���=�WC��#=��ͧ� �B�WL�=LL�`�!���=���=�3�=~a+�]�=b�=i\����Q�C=LG> Q�=�T�=+s�=熽b�=��4�m�=����Y�>i����ku=W�J��8����T<���bT�=��=
��/�=���4ż��S=���=ՍD�D=���cY>0��}�ǽ:����:���꼲�3��܆���f=���;#��=��>I��<'�>DM����>ʅ=�?���1�&��հ��sO=���� ���p�<�r��} ��II >�Dj������vڽ�P�<��=�[P�����ǰ=�3l���F>ƀ~��� q8=�M���U��%>C��<�q=n&�=U�=�^�=�~�=CO�>$ ,���A=Ʃ����� $�� <<�Ʊ=VY��D���߽78�_7`��9~��=�7���C?j=`ۀ>�H�<�#=�+>��p<���"Kz=��3��=0>�8x�a֮=g���H�-��?�=I� �>�ȶ�r�&���E���p�;�\=���������>ɼ�=� I�mt��">꩒=�wV�KV�=�J�=#uC<&C =R�<'iY�'�8>bk�<�r>���:H���֫,=F� >� �o��P����Q�w�=]Q=��e=ࢩ�׋�:�L��h��=nv<����dƽ���+C �O%=-;_=0�=�hԽ�4W<{(��Jy�=����=%.=�
<���=�6 ��X�=�Tx=��>�n >*��v�������ra�;���=vT�<������=�Ð=���<N5=���;*�;>H(�N����=�c�=nd�=�'U�� ��ibѽ�f����=-�,���Z=Uǽ����]O=8*H�v8>(ڏ�a>�ף=F>Y��<$+L��\����;[
�<�I��:����7=ʘp�0�M���Y���.��K���vS������=��<��6=lʃ����<� =ѳ��oY,��4����ʽ���>+-1�W:��uL<��O�=<�={ /�*�<�Ѽ��U��z�<~���hK�=^
:��f>��ý[N��%��=���<\�=(1�=����ݺ�>)+>۽����N<~��f�Y������<:�R=c��;�!��Ug&�� >='=<�w:��S=�9>` ����7W<�+��c �Xg�<v����Q��O�=�$M���F��Q�=F�;���=�/>ji����������t�e��=5@ ��N2��O�<�z�<v�+���*���r��):��g���'9���Ĭ$;��>�� ��;��r= �n��
��׶��-��g*=��D���(=�9�� ν(������:�{C� ��=�V>�W>�=�����<K?>�@��$��=���<%?=s�J>�i�=�o����=��Ͻ h5=�[�=w,>H�>f�T����Y"c�:���P�Z> c7� -��6*�>��"����=�� ��u�'�>q�n���_��T��`��<��V=1�^=6�<�>���>r����H�A>���{E�����\�PL��EIǽ-����ׇ�t3���==i�%��+=w�N>���=�@�=|O�=.�⼿>T�3��� >C�A=&�۽v��=\2�=݅վ9�Q>Ξ=�yǻ�r��(=p���'6�>>���EЩ�$��= 2Y=�4#���>��Y�:�[�<:�;�;�=By�=z!��'XT��z��y�a;�ߐ�u�9�7�>��p������}\��h�="�N���=Д�S>U׮=�D=�'�yM�'�=akZ=��<�Q��wd>��p=
�>]C8��i4<���O=>�Y�<�� >�;V�\8��5�5=��O=k�>�&��$��P��=�F=eؚ=Gg4>C͌���Ͻ�rS���#��&:�o=��={%%�6���b��F��ߙ�=H�:>�Y�=f8�@�Kn���A<ܙ�;��!���=6��=M>����׋Ž�ƛ=���<3^"�n%ȼb��=G�e�B@>��>����߯>U�H�����~����J�x� >��b>i��>�Q���(>RJM�_K;�>Ԫ�=~��!==�gD>�F�=��=�`���g{=�e�>I ������f�'xW���=a�>��#=��=�|�<}=��/<#4Z�#�=11�=$p!��q-��)�:��J4>O�D=~��=y6��r�=��7=����2�=��<>���< o�=�/���;y�8=��%������M�;p2�=ϔ �ۘ�=Y)�p{V�ٍ���_!=� !=��=9^;�ƽ�(�<f= �=d5�<9�f>ޟ�<�5=2I�==_��<�6c��7�r�>�l����N|D��5�=�C�����<�dH>��=�P> k�=�H��i������NF>}����=xk@��c�=Y1��r!�=3Һ�T1Q���=��<�K�[�#��~��X���R����(� �(>�.<���Q@m���R>�Q�@�"�V�!����<�8v��"�;��=�"#������Ͻ0����+*�+V�<���ɽ��(� 氽�L�=��=Y�>�G��¼������5�(=ڽt�e=/�<����J#���>����<�����<��f8M^<���=qE�=*==�񗽅��;VK�-�+=e
_���M�8�s�mE�=&�"<��)�� ������[̼w��;Ѯ�=�}<�Ԟ�U =eɽ@k=>��� C���/�=Y�=�|��.���=4��ͽ�c�=��>n�+�dH�T�a=2�q�����"|޽�]��޻��X"=C=X����2��w[=7�ݽ�v��*�U=z�Y�rs⼑h)���F=]��=�q�Bn���h������€=\��=��y;� e�nF>0�˽�\��q0==�ꏽ�'_���r��y@���<.� >���m�=չi�9��<7A>~�0����d����v>n�нݧB>k����;��O���켛�S��O\=�u�=C�.=ť�<Y�m�I��=���;=���T�ļ���=����w@>D�.��:<��'�NQ<Xq)>F�ڼ�v����=��=���=<R���I�=Pe]�� ڽu)�=��"��T_�ձ8�el1>�#��b�=���������3#>��U=z������{���<���=��<l{�=DS=,ʌ�Q�`�B=�:����=�V�H��=;>�y>�b>��c>U�>��T�=�J>�)w��t>a��9�^��N�=rx��C�Y>Vt���!=7��뫒�dΦ����=` �=��h<Ť5>�)�dF�;qK��^Ə=Ku*>M���/�z>���TH>p >Y��=��_��)>~�S��-6>�p>mb��o�j>iVg>��%��r�<�nw=�<��
̽/�=�&�>���m7ڽ���=?Z��3{=��t>��[=j� �����y�pg�;
��H��=��>]�>�S�a̐�9~�;��=~�!>�N��^>B %>�f>�N�=j|=��]�V=� ܽ;��=Js =4��=���=��=�O��;߅#�-�U)�<,S���ɬ�-Lнͫ���=�p=�=�<x�����>��j=�<�V;���>:%��!�ƽ,9>���=��Ȼ�x���@�=�>�Q������5���:2�$��=Lcr=�彡��=��^�Vq���ف���=FI>���>�<���+���4Y�Y;����(>�>���eȽHV�x�\�há����=0��;���<�=;��ȳ=�`����={�j��E����[� ˆ=�g̻R�(>$�Ž\Ң>�����ѼL-�=�<�P<��&X���J<��q��~��F�/>�,�<��+>�Dٽc��$��=wq��{?�=�N�<�k=PY(>,h�#��=v˕���=���=s���?6�:�|�=u'W���(��1��s�<+��������=�,K�a+g�{�<�>��cӹ:��\���e���=#�y=���L|/���t��鸼 �z�<U�=LuO=Ι`��ԼA�)���л��=>qυ��ۺ-Sn=1����ͽ�!�=u�9�� )>�&@>��\��<�@=��.>8u~�$��=�P�=@=��1�Rܽ�Q ��X<��彪�!=�-�=Sp >Mv���)8>0�;^��<^!;��N�K+��f�3�B��<gx�<8`��p�=?�X���r�>={ ���;������ =-�Y�P�=�O�=�u��؏=� �=9]�q�5<7Z�<�pJ�g%�eN�=>c���>0�����\��Qs��i=�=>̍W>V����v�t���(�0>]�>����Q ��=�3=Vb����ӽ�S6>�C>O���C�[����;��/<��'>�%����=�K �)<�=�� �b�@>4Ŷ=��3�W�F�ۈ���?��սׁ=|�>�"�2=D�F��n}�k��ݱ���0>�S�=��>.�=��=���=�է�n� :w@<֮=�λMh�=�춼1%=��=i���g��=���=-�<�W��<CF=i"�<��@&\=Z��: NR�������=_7�L��=��=��;����D�<V�&��� =?S��7>�uX>Q�Խbs.�1'� ��>���軻��<
z'�Ue@>��T=� ��Xm=��>8���@C�=�g�=W��=���=nn>�B�<¬�=���I�<��;Vdѽ�>���=4vz�kID=���=TY��Xv=�8=e"k<cO����g�kh�=Jf> �>u�}�6����ƽv�7=�=L��<i=^�l�n��=�=V݇<�~ս��=��\>x?��ɘ��.�>��ҽd,*=m0�=����f��<�G�j��3��=?d��$`�<�>9w�=Jj��f�<� ��4Q|=���=��� �=�����OD;j�R�Oٗ=����3_��=h�!����<,���M�<Qֽg�d��<�����=L�m=Hw����L>�0>��+���<F.�<��U'<=��'���>��<�"&= �A>^h>G&���c�>M�<Nh�=�$�<��<�xC>��\>���=ce�����=|�*=��={A��k�>&&I��=5:�22=t�O�E��=`��Y��;�aV>Q���i�z~����=���=��n>�IT�,tf�e�;;T��;�}ͼ
��=��P>>�k�q�ӽ��R���=h��4� � /1>sjz�åx��'��-S_�1PȽ{#���3�V��y=�C=���#�F>�B@��P'���w=����4ŽW���q%
=����>� 9�{�,=N셽 ���ʺ`^;=q��=c5�<��=h =���<��>��ؽ���;�כ=[��=���=�顼�B��g��=�Ix=(��;t);��[�^B�=��r���Y����;�(;�s����=����Ǽ/> ��;�<r=� �;���=uI>)ED=����#�p�=<�>�2��]��=�O���>�(Q����=^��*��<�D���X����ѽ�=s��O�=�6��huX�u
<Ƚc>L�;>�c�<��N=��k����=BŽMw<�v��Bsu�%ټ���=9*0���Ͻ^��=�8>,��=�6�=�od<u�弽�<֍���S=m��>�����z$���3ս��=��;��t�l\>��<�P=<�9�c}���
�<Y���)�d��N�{餽ʏ_�"��㙽K�ʽA�>¶ռl��;y�= 5�=��N��C��a>��V>d�>��ǽ�˃�m����<3 >�lR��]F>Ҽ�A�������<�У�׊�=���=�=�޼=4��>
5Y;�-^>����
�<r��fW<�<p�3=�<)�����a>k���A�V�z����Y'�H]C��t��C��xjk�cH�<�8�=j�<�����I��
�.>j�6�о/<�������5g�=h�->�����ɽ�r���X��_G��e�=�� ����v>Iƽ=�ƽ��۽`�=Ӌ���L��+�>Ri����^�^| ���
��T<�:w�>�<��I�����7'�< Jf=����(=�����<�:��틖��=�Gd�.�����<�B��au����=9����<(у=�g=��[>��8<E��<��:���������0ʼ#7/��4�>7�>/���@K=T�X�|�����Z��\{��l�=�>=͎�����=0��<{�޽с>60O>�������>9��N*����=���#��|�>I���2�=��"�p�=/A�A~<�0=��<�AG��O����
� V�;�=o�#>� �={'�=�{Q>��"���#=��@��������
�<gU��T>��Al�Dݗ�"�E=�s�<�s>����$^1>���=i�i;��=Kz�<�3���>A7M���s����=�o�����<�������Y">!��;#>PZ>�9i=�$$=^�=Q���4ϕ=?�=�VV���_�=���4^<����n���:>��Ž�ݙ�/�i��0�=�3= *޽�(#>V�To�=� a>w��]���l�ո�������;=ZKu��N<B<;`�h��2 =(<(<-��r�V>�l���?@����=������=RI�=�6%�(|>5�V�٣�<�z>�EL�/3ڼ�Uo������4�=��};��~�c�D>��d>��T>�����ֽb��� � ��Pt>��7>�{s=�#:t�X=�G�z=|U�<�SO>��½/_R=�{�<��>����y,��|���Ր=6��pM6�Uw��q��=��]>���=�9�<'�=�;%=�<q�hV^���">����Y8�`'"����iA��Ƌ�<�w>&�:���y�ʼ<߼>�k=� =��<��[�vS����<ܗ-<vB$=-���4�=�;����}o� X�����[2=������\>������=o>��)=1݁>w�>M�1=(��<C�/=o�=s��=xR@���/>��<PRƽ~��=�b��Ђ�FB6>D��銈��N\<I]�=@Jb=S��<X7��cQ >F:�=��"� ק��|��a,>�d̻n��$>y���8��>�=�g&��@>��>�-TD�!���ޜ��C=���8�O�=(��<�F�_Df��Z >-�;��M=CY��CY�>���;���B�=3񶼶#�=���=1�Q;o!=IJo=�>>�������=���ĝ>�Ƚ1�A>�����2Q=7t���3���@F���=~@c�u.>�T4��-�>�x�=f��=��%>�%�=��`=��ֽ8w7�G��o�>*#�,<L>>�1>�I7=C��aR>�$Ƚ�Y<�����x��<75U=���=w�����_>U����I�n���u#���=���<[�=.W=2<ȽҝS=θ����=�<�;�ձ=9��׶M�k2L>q�>�T�=���y!�>]4�Nn���2E=B\�<��1�YX'>'����/>P�,�ȽռT�=Yv5=yμ =�=~ `� Ѽ=�9>}�>Uc����!>Gɽ�p�=9���$$>�l��Ua�=ȟ=�:�=���N�R��=��{=��蚻�4<=�x�;<��}��<�d]>b�m�����w��=��������6�d=����x�����=�����H>qz<���=B�[>/���</ �ð)��/B��k4���c=T���*��sU=j���,��]�M�t4E=p�T��'$����ui�=f� >gG�=��㼈V�=CM�b�a��n&>�h:,zS>śS=����b��SJ>��>=L�K%�P����G�=_/S;�Y�ZD��Jý�<>�;�>1@����U`U�L�+=-��=��>�����+X�1��o!�a�P��!+>��<�ȳ<Ԟ�>�T�VF{=@m]���:ƾ.>��:=K�Z�a�=#�>� ����e�?Ю=\. =<+I=H���۽潁ظ0ě;ډ=���=��=�|�;�&��9�Y=%�C�4>y ����l�l">ș��f�=!���-۬<��^��
> �o�$<\/�����=)�\=�Z��"�]��=G��<V�G�sj7=��x��|D��ԍ�>�?�_�M>B蘽�#���\�<n4��-�=v��ʇ��䑽ŭ��E;8>s�)��D�=.��X� �z|�'��=��>@μS�¼�~�>�v#>R���m��<lW���d9���,h�=�K">1b>�V��*�]��U �m�$>qN�=�8>�k� lǼa�<ɰսq9h�K_���8k={OǼ��%�� =�k���ey;���/���K��>����8𼇿���ü���ǰ�& �=�OͽM$�<kN�<��5=z|��
�����h��=̍�e*=�fk=m�>����=B >�-�Hc}�w�v�zA�l�꽖v��x��= i���θ�9սZ�!�Xk=Ѡ������ýj3=[� �A�>+����= �=#�]=�+�=<咽z��<�� ��J����>����l��=m�D=�O&��Vѽ��X=��ֽ�>��t<���3>�@=���<��T�qb>>k��}�_]�=��B<��(�1�u=��F�0�=x�=�u >����j�7=,��=�g�<�U>9ν��{�]�2<$�,>�v�=�I��7��=�5����z���:�����=q�v>fJ<B�g=I9;=M�Լ���<��+<�q%=�y�=���=��=O�$=�3��lp:>�ؼ<�W��Bn�>m���n5>�9���OV<Ht,>F�=�����=�@�< ^>��� ���O=���=��:���H�Z�Z��S�����=�Q<"��jݏ�$��;{a��[Ђ=�n=�:�=�C3>�= 7=�n�=jTU���>�Ͼ��{P=�^�<G�;XG>���<;�F>U/��/ޟ<W�1=���=��t>�
-�X��=UY��<��7p����C����=<$�B�0��=���<}�'�pĞ� �:���=��^�V�T>K�=��&>���<[��:E7�=޲9>2���o->!��v�O>��=��#<o$>pد=إ�<>�=8�������(>��b<��{=�f�=�"~��F�T�E�q��;�.F��K=�[��=<� �[Z뽹�>t�A=���=���=�-�=�C۽���� }>�!k=���(����=s%+>p�[������=���=�{�>>P�<� p<��f=2�=M�㽢_W<�~�=0�P=�0Ƚ���ɨ<Z�>��C�aR6���x>�6�j0��i7`�US����<�ؑ>g6��ky=�'�=P�Y>T3>%�¼�]�sM0=K�ֻ#�����a>H�}����k0>�T4��b ��2��;> <��S���{�Klv�6 9����:�†=�{7>8'>S���k�=�-�;u�E[n<��.�d�&=>�>�{�<���=�����=���=yG<��(�~�3<?����P�<�/�<8ӿ�Xߡ��כ=�@<���U>~�.=��1=p ����W=^eb�q�@��+�G��=��ܱe<��C>���=������cV<��]�U��=2�Q�1��=�y��ݙ�� 0=\��y���m����;=�HD�Y��=h��/t��˽�<�����N>P� �M����<V���H�<U �<aJ���p= �<�>|��<XI�=Z�>qN>�6*=1�><�;N��{�=n=�Ժ��8�=e���[=��4>�-f�F��=�'i>ו���K����c�=u�>,V~�O���އ
>8� �Lg7=P9S=��l�X��y*>�|= K>���=ۖ��I�'>˨=;�#=Rk
���>E��<��b=�u:=ts>��->v˳�Oe�b� <�F�=&�<.�K>.����H��i�=(\ ����=��*>�Ӟ>����>����i��=:1�<���j�=����>�=騍=cm ������>\?����=���ה�=7��=�:��.�=�VF>M��=��>k"6�� 7=)�-њ<jQ=��>e/ >����o��<��k=x5>\ڻN��\0>�OH=:�F��=�=�_��� <���<=�p���9����ì�=�[���Z�J����=O$>=�b=��:�� /��X>�&_<��@�=E�>@���DWý�l4�?G2>��=�C�>\H�������r����;��Ͻ+x}��f�Y_8�� �����;�6��?0
>ſ�=NQ�C��;�z�=j=-�Q<d�=�=H>@z��AM�=�근�u;���=�G��<�r�=�>�=��<���=p0R<7�������
�u^
=b=�nM��lL>pe=�6� �>� C�{�������Iv<�o�=����aY4;5Z�= v=��>�d=
n?��6.> 7�0��=���<fKp;QT&>�|>#LD=�d>y��=�J���-����=L��=��I�|���G=/�=V��<��=" >�)ν��y�‘#>���X}}=��>��='a =��7=V1>.=��=��Y�i�z��{�=c≯>2*ὼ���~5<B�ʼ���:�=���<!�D<��t>�b>ȡ>(&�=]���[��&7�`��<��4���F<0�-=�R�=�M =v���%���B>�� ��p�������>_�>4��=�D���=`0=GN:����<�:����b�ZB=�ͭ���*���@>S�= ����x�=�����7����M>䁊�ɾ��t��=z#�>Y
�=�-��Q4�*=9`��7��(o>Y۾<�\ѻ�ٽ<��=K۽[�.�!����T=>�=�N=<�|�j=���M�f�-��1�;}�=�)��HN��a1<�G-Z�b0���G�8�F�O�=>ʍY>��p>���=���=L��>�=�Sl�#ڔ=�����[=ﮏ�>��=�u㽐�O<�����>��* >�!��N�*=N��3�����;@:�=l����n�<��B���9<!2>�O���)��Խ >�i>0�������ׄ=7��<Rj��%2:>�M��)=�н �<�g���� ����<gς>���=K?�=�ޔ=�C$���z�n=#=,?S�=����������=G2���1<�WP>��=�>��༃:��)*z= h�=0\�����I|
>��<� �;��=�V�=F3�<���=�7޻�u�=it�=F���+���()�H�<f�-�/.�<���N|_=}�>�I�K��=c�ڽ�$�� %�<���> P�<����2�Kk��U9��ҡ��{�q�>�������=�L�=�0>>P+����9>��=�|�=�� �©�=8ֽ����0�>�/��S���F=K� ���T�鯾<U��|m�=ګ�&����5#> m$>�h-=� I=�{������=<N�={�.�g՗=Z�W���=���=;�;�~8=$�5=#X�?a:�#4>~�Ѽ��R>���=��[���<镧>3
��E�ܔ���a@=�7�=�A>��>8�>��^&=n�=>b�=��u=�[D>�*s��^+����=��[���û���>�{��GY>��sU޽�H:��WX�wn?�du<�{>!�<���=�����~���=i��=����[;}p���[d��_@�u����<P�m�Q��<VU>=�G=�'=����e'��T
=C����V>^�;��n<ӊ>%���J�9�;A��=?ˣ���`��8]�]�4<���<gւ<��-��G�= �>�*�����6����<<�A���_~=�x�滄=�_������<�V>�̽�M�㲏����>�㩽���=_�$>�$�< S�J>0*�=�܀�{L��1w���"B��g�==�r�Z>��< ]w���>$ ���>��s>���<�6�=���=w_�X蝽�tS�,$�� >��v���g��)���>86<9� ��<a>"�[��Ed>�
�<�H��i�=[�=�}��M�j=�Z7��ߩ=ÿa�Rn���⑾�
Խ�->���<�N�;n���3��<h9|>������=GQƽe��<��V;{��=&��=ȉ>6��e��-P��vc���K��9��<��>n,=���a�=�IM���-��̼+欼QM��� x;�f���f�=K�ռ��3�|���b���<?����<Y�>g�:>5�=� �������T<d���E_G�Y��=_��={�ؽꚁ=�>:$>t+㽛�>�"���>�j�;<�q-<I���ρ=80�=�=9��<����ֻ� ��h�=p襽FL�=�O>��Lt�B��=�8�=���=d�;)`n=���l�$��&�=����ޭ�=b�=��ٸJ���>� 㽼����(>�Q�>�Na�* `��r˽C���������l�'�#��^^���{��1��=��l��->p��(I��� �c?�_�%>e��=� ��s7�=ؠ�=�` :�d�=�o=A� �M��;�-�=e5�=�8��]��=�\J����=�>Y=�=��(�g���i�=%�;>��=��F=�:����^��=>��YS���=�(�;A����8 ���-<�=d<z��<)��>JC�A<�;�����=��"=�J>q�!��@>�����?�v��=��E>�ꁻ?#0����=3M"���c�������n��9���!=[>,���c>��w={������;� >t >��=�5;={߆��Zڽ�d�=P�=��;��<N�=������+��=�g�=��>�X��ۺ=�n��٭�����=��?>ei��(�x>+�d��,R�֩���)˽�F����>^�8>�Č��%�=�,���.��8�=�AI>�+H�p�����=Ma1<���=�M�=���WN�= � �Rm�<
�^=���=B�`��Q�>�+�=o�C�fa�=IkԻs�=�ݪ=\�O�Ճ >%��=M�x>L�3=��<*��=`rK>}��>ҭ;n�߽���=�������ncU��p����=��}�&�%����M=���=���%m�<�%P=�hx=î5�:�6�ޢ�=
�O��<p=�� ��$��4�=�y���eg=2�K�=l���V�=k�⽛na�C��=���;-C��䠽{;�C�=�s6�=��������0C=+����V���iA�ѻ���U�=y&�%d�<2������1�4��=>��<�?�� ٽ+�H��1����ҽ;�V#�<��ý�%�<�����J<�<��}�=_*�=%~�=B1^=��A��==#���=�.9�>D�>a�H=�K�����Ӕ��u����=<!�D����)�ԙ��퇽���=��B< �@��}<jR{;�1;=��>�=p?���l������,���սZР�u��~��=<n=�5�=_���+
�<�*��NB&>������=����^�8=�����X�=��9=�h���q��{���\"��a>�=d� >im����.�2��=F���^)���1b>5���� ���=�Ǽ�e���ׄ�"R>2ɼ=8�{�[��<.͒���1<�h�����ἵvr=X��<oS�����=���;\+;��T>=.� ��5�=���<���=&�:׽ݽ�Ů=����=��>�ɕ)�rUr=-[="N���酽�7=����x�<�,�=gkK>�q�=�+����t���U� -����p>`�=��νV��>�B=�w#����=��=Ia��a�)=���;��E�X�Q�]�:�K;��LC���l>�^�x >�ϝ=
�TYG>���<b$��E�A�;j?>�z���׉<u*�� �>�y>R">������=�v�<Y����U�^=�Z*>��$��Nk=R�;� ��|�'�J,�=x ;{�=ذt����<!����'0�E>���=�pQ����������=���ҡ�=�]��>�%'=��8>`�>+����G��=uV>�����d��p��.5>+}8��N���j�<wV ��n>��
<D�M>orػ�ft���>.5>& ��t�=�g�u�̽���= �,=K�Ἥ����Ƚ��;i���8"c���=?)o=�r���]������͓�f �=�P�YP��V�W��)2��| >�J��<��`=_y>�Y�=���=ퟚ<G�,�ɔ<�&�����=o�K>��彌{��$���!e�=�m�=� \=v?����<� >��d=u1�<�ܰ=re��4�R<�ZJ��)�a$=&�U�n{�=L�r> \�8�4=W�M>3/����=񑏽i Խ�'�=Rr��E8�6=K=�=�Q��G�<��><+p��uμ��ٽ;�?>��{������?���y�1 2��ˌ=4��=��g=��<��� =w�6��<7!3=�&��>T[�<���;��5��;���=���8��� �<�&>�:K�L�=g���1A�ҫ�8�q>N�����d;y��= #=�
�=��N�Z�ؼ�K0��><�߄>[�,=�[B�2a:>�y���C�=oaF�����Z���C�=�H��:>������ �]= ^>� ҽ��ý��>pH�=�ؕ����= �=M�N=�2p��{>�D �S =��(�i�$=���=�܆=i
s<x��Z# =R�=�(=�r`=r#)��=$e>��]�?s=LИ=�����)>8ʽ-Y���~�=�H>\J>���;����Q�A=�S�=�^�C΂�j��v����y�M�`=W�S�Ru�=b�a����=y>��ȶ�>���=ٙ><2J=���=)����!=���<$�Q�6��=ǟͽ�@����=��ޢ=4��n�����>>�/>���=p��=��l=�ܽ�%�=�z�4��<���!Ac=�n��
�=���\�=E[���KT�2:P>bt��_��=�l���L��[˺�t�o�D��<Y�>����� >1��
�ؽ�����m>|�ͽU�=Hqg�ٍ=�<�M>���Ѐ8>����~%>t�{��Yx=�e�����=��=Sƭ=P�,���"�^�:'��=j�Y�j;�'}���߽u�B>|���crʽ@��=�fh��殽���;�=m�9T�d���ڳ����=����6���Y>@p��@<WL˽�k���w5��mR��.>Cdн�~�=Np����ɪ��Bښ�9R��B<�~�Y�X\��2����W�=�ug��+,>��������2�d<dk=l�5�R��=cj��K� �0��g��gW��Z�;���=jB��Ħ�/����?�}2[=�ڥ;�E�<60�=�p��r��=|�>��><�=Z5�)�C>n+��́=��'�=u�>4��̍=z�����s=ŧ�Us�k���)<:��=���Q7;Pp �����R��7�*>�5V��6�>q'�=n�><�8�[J*�ߌ����=�\>���|�����=��,=��6��c>��=���;�c>�����Q�j>ɘ!>�T��e�ǽ �>"�r=�������=�C½�y��8(=C��;�@��������<��q��ͽ�j�����=9�v=���xQ�<�Z����<f���-��F=��=]��=�Aw�b���̼a�Խ1� ;�����G=1b����AH{�ƍ�=�>R��0�8����
>�0�<�{>?��=�E\<� Ỿ��< <~���߽���F8=�y����=�e�fo^<��4>��Ӽ�f1>'+�<K��8�=:���\�I���>�
X>Z�C>r�>xJ'=�f>���;4e�<߳$=��e�[Y��n�=QgؽG~'��1!��A��Q�<�e�=��C>����-�rcs;��4=zb��;S½�
ӽ�=�;>pU���!>��ýR�= �
=N��< �.��*��k>��>�T�=e�(��C�]���=���P��b'<T���3t���=���=KR=��&>�ZC=�����=�9���|�=���<���>�1����<�Q>�M=����\g>CL=> \>��>��'=�n��Z�c>���<����x�~R��5�ݼ��\�&�F��>?��=ڢ�=4Y>+ȼ���w}}=ȡ��Ύ��^ >�ߤ<��=���<�0�=d>�����U;=�]��NƇ>��;}=4����^=/[���>G��p;<��.=ed�;��罉H������l�=e����@#>���;}_4�1��=���=�ݼ<��=(� �۠�=���1=�i[�M�G��#5������Q1���!�D0��Tϻ��� w�=��F<'R���1q�F�=H_��_�������f߽��=����c,~=8�����L���ļa�o��ı��� �\�=�U�<Z"�s�A=�s�($��w��r��`z��(u���`(�pKC����= �4<��=6u�=����i��T�=�<(_(>�"�2 x=�����=
�����<�<��,�-׽
�<�c��Z�<x
.>u��<�=�?=�A�<E5�=Xu�=-��=�� >|�=̶��� >7���n�н:��>!A�qZ9<��=�̙=^��<+�v<�[3=zIG�s�<��������>kȲ� S
=|��=����_=�M"�\�=P�{��
���Ԁ��Y�ov�=h�o�� >A�9�y����
=bh#> ��=�֢� �t=�Pv�#n> ���p�����q��ҼtG����>�~��3�=�V(=�ޯ�k���E�\>��J�y�<�i`�<�~��I�=yFѾ�*>��'��X�=�s�U�滊H=�և�z�=A�׽r�<W~����V=�#G=��V�l��=긽�/S� �p=Hْ�����ÏH>�@>���=P�`��F����Խ���=�d��KW@>7��=Pkʽ��=ˀ*9���=`1��$�=>���=q�E=�Cc>SR���:u<,��<�\>�t��Ƚ�z���k�g� <^���`�>�5���4��N�=e�
=��'�ȴ�<�U������¦��P>� K�N����d��މ�<)�U�h�_>BI�=N�L���;ޖ=�z���~���o����Ow�=�"[=�_X�gC/�\
����=?�=b���C!=8��<5-����*�����,��H˽:A�0s���&���9=�v�=��+=tŽ E>�o�=]%�� 1����� !��u��|���}�>�$���a=�!�=b`P>�w:=��U��<t�J>8=��&=`����W�<;��=�ow��@�}���8= 鲼�0$�N���²<9>|X9�rws=�5��Y��0>?�I>�+�����;{�<^�X����
*����_��ѽ�_�����=|��=mq��C�����&>��K�+w ����>R0���{�[��=�l�=�-!>�!�� �߼�m�=HH>�G"���>>�f>�½�w#>��J=;O�<���==��<P W��7�� j����<��Ľ���=l�<�ӣ��'0>�>uO�<�D�<{�\=�39����1>.AS=�R�y =�5G=�uu��������=ˠ��t�=�D�=�����& =u�t<1���,������>T�ۿW=t~޽ǭ��6#q=�q�=�]�=�"O>�?�=��&�� >�o,�����F q�6= ��<Mҙ���Ľ�9> z��eUD<gW�=~r=<r�S��� Ҽ�����T��/�=ֱ=�jj<.��=��=��y�*�/>m R=A��<yۼ��”:v��|�T�٩>>�3>��*=m P��_ܽ��E>�Bļ�[F>���>�+���E�\`�s�|=�ȷ�d�Լ��.=���;NS=Q��׆=
*� ��={�=��=��7=���<M�}=ȬT=���?�<�6k=��<Ż=��<�zy߼����j#=�Ҍ;��J=�Q&=��;>���=�=�S�;έ=괱<��b�;�x��v�<4!|<�pJ����{lY=�>���0>=g�k�ĩ=�^<>�&�<W���,:;���=\� ���=��ut�� ���t>���=�+&>�s.�Ԩ=���<'=Z �<W�>ҹ���[6>���}�O<�I!=�ꎽ֢��cֽ��<���={u=�uǽ�gn�� !=��>���4��=j~���@�=ڠ�=gŽ���H���< �W=���=T�Hp�=ƒ:�Hdž>���=�m1��_ռd��Ӽ�=^�)>|��;WKh�2�'>V� ��5�=��W���=;L�^Q>�0>�b�=j��=�Sd�ڌ�<8N�=/d!=6m=��:q}v�R�3���=:���s�<,�m= >u-=�e�=F�=gb}>��������û�4�<h��<�x�l�������(=�W�f㶽� �=WP_=m��,���t��=<Y����J�ս�-(�e�(>����"�-��ir>^yD�H7�=,[���m� �v��� <�%=U�=c)>pk��)^�=����<*"0��_��oL���/�;�%���ʵ=W/��@D\<��J���ٻnۡ��m�;䓒�H��� ��D*=m(S���]�.A�<��޽yt�@Q����>�,��&�%�B�;�A�=�V�=,��f�+=\v<��*�Z,=7��=$�\=^ZE��KD�������=����gD�#�l=�'��( ��wE�mؽ��I.����Ҽ*:½��=L�9��Ծa�)>f�<�A2=򳕻�u|<G)�<��0>��><�>�WS)���ν\�>ӯ3=�� �Q�Q>��=DN!>䝱�����@�=�|>6���v�"꽇��8P7�<���=������f5�iȽ�}#>*�>f�S�V�G=��<� \�O^�����=[Q�=�[���ܽ����)�7Y>����CQh=],)>�Ps=��нq����Z��HlM��<�;�d�>��ռ�<�;b�6������?��F��++}���">5�'>�5g���y=�u��(����>siB>��;�T>>)���٬ܽ-�B>xS1>C�\�BCA�A��=�T��=1"��t����}�~Ҷ������m=�֐�>臼Q�L>E�˽�=^�&�ӹ%}����='�8>5� �5>6>��>�jO�*(9>�o=�/�;��U�9-�=���;jyH>"��<�g>y��=��{>u+ļ�!4=��Y�=~�q=>���K<�}��{�;�%��M=u����<��/:�=񊆾l��-d�>x�=���=r��=}E�=��>z�=�ʻ=�T=�!����}�et����J��.��[��$
��{���V�'�u�= }��̌>����l��=*͝�&B>��#�O-�=E�<�q�����"-�
O.>�W�<V��<~���!>Zf�=��}��Τ>�"���0>VJ�;��=x%�<^��=�=>|]>hh)�\�>������A<��Q<_1ս��T=SS��[X�>p��=�c���H<o�7>%Y>��>=�R;ˈ�=�N�=�%���;��DJ>`�Q=Z�ؼ��.;�R|� J"�e�>>s�;U���ۼ�<��Ž֌>�
>6[ֽj�m=�;�=���=ڰ�={��cý����֓�=����
>��>ߣF=� =�P�>͛���=�y��>�2������ =�)��Y=f>��ѽ��E=6>�o>)I<ogT>�c���1����=8�X=T�.>�E �92��e>���=>o��ŏ��W�=.�����=>n��>\�ý ��<� W>�҈=K�Ȼo�G>%��=[�>�� =���=2w>=7Yҽx�D>6<�^&>���= ���0 >m�:�k��[%;>Z��;8nн�L��3<�<Ҧ'�VFd=Y�s��_L>} ���s���}>�Q�����=Z��f=ڊ�=Dz��w��=4aU>�
;.��P6�=OYk��Q�=�� �%˃=��=RO�<n�k=ٻ/�� �=69�:�C�=eFX��p>(���r���
�2�':B�WӍ<m*>3�=Ш=꽵�$>y��>7=~����. �� ;G�˼���=����SMh�
����<u�<��(=��;�–Y��-�]m�=��v>E >o���u�<�I�=�y�= (�=ݲw=@=x���&>�؋�i >h�g�~�3�=]5ァj"=��>HX8��d>�}�<�轒s�g8���E���9��B��I�3�m=�tn�|ؽx�K�E!W<���=M-��d+;������=,�������&<;,Ƚ��=�ɖ=6S�>��Ž2�a=K���h�S=���� �>����m��ܼ��N���B=��6��7�=���=ת�=d��=mf�=X��=e&�<�:�����=�7l��Ae=�Y�=}]�=���= 1>��N�?�U=��9�4�6�%���<">�>=�=��=�:-�������<$��<�cǽ@�<1��=,�F���<��f>~W�='2=.�w���$<��� i��g(<� >�<ν�U�=��s�|U���7�=��p=����Ж>sz���A=F��=�k��Γ��ǻ����<!��;wj==1j�����|��>�����\q�L�=���=���=��>���=UoG=Օ>��>�l �Ž8>��=*|�=�*�=p������=5UٽBڸ����ZD�=0�>�=�vR><߭6>fDZ<�k�hc��C6�N۟���K��=�]���#>�h�= x޽@�(>.(�;���<Ljk�t)ӽXc<���D♼ ý-�e��d=�*g�i �rUx�3��p�cn>��;��=Q���=!q�=�61>dƍ�}���{�$�KS�=����Y'V>ܺн�1ƽ���>?�4�c*������t>��4<�о��<wŽ=��=��> =>�͂�U��=AP���>�=�K�%�ߊ���fI=q��=� �=�0����3�-��=�� �&�&>�}���=�荽�m����TB>&�6����<V�[=��@>/F-<X� ��i�=���= 2�=3� �]�=XԽ`X�=`_���>��=#X���VS�� @�Ҧ��n�5>Ş)��غ��G�=y0�=���=�L>�D�f�=�g)�C���f=]��=��>��9=�oڼ8U>�/ļ��#=|a>�d�=��t��=)=ҼE=6y!>IȀ=��2�Z<1)=4�W=5>��x���h����=�p��sн��������d�la�;�ν��g=��>}��=��L>gc�����ˬ>�0>�ч<�ך<�!��j<���=�W�=�R
=��AP�<���={$ҹ��:��9�*>��D��a=���<84��h����=�@>��'��v����K=�Y۽��Z�q2b�/>i<��#=�E�<$&<�ҷ��J ��q�=aB>İ�����=^���o�fA�=������'��ȟ�8��=�3�:�#<����uJ>#8�;�D˽/�<L�T=]WH=e88>������/���pѽSy`�,�u=����b�>1Ex>��i��w>?��=������8=|T��.��
K>^.�=�3= ʦ<���������=���=�v<�Թ��E�=H;�����=hv����n���#U���h>>4���\2>N��<��=/ͼ5]m=��>Oj^;ax>e�"=��������=>��1=���;j�*���<O�C<��=��<&h�=�(?�+��A>��r=�8 >d~���\�>Xi�;��*=3�u��jԽ����(m+���>ԑ��p'Y>�dܽ���=�����Ol=|�v<�� ��૽�V�=�M���֘�ˮ[�'&9=�h�� �c� ���n��]%=Ƌ�='�f���=>�w��s�Z>��A�]��<���5�>>ɀ�[������(�����Լ;佽�[<)����H�2a��lR���u�6b4>یg�\�D<Gl��÷�= Ym=�SP�x=]�MH>Ϻ�= �Q<�YB�VX >N���Ȯw=N@����#>�nL>�">/d¼�1��PL�2-��� >��#�)��=Z������d����=C��=��=�'>*�ؼ5 �=��8��/�=T|;�Ҡ��Ђ=��J�\�6�?D�={J>2U���׵�_�2>���;JE<<A�g��<wt��ͫ>���=�z =�!�<�\(>�K�<��{����.�P�=L����[b���E>m�q�].>�Gҽм�=�BE�)9����8>NX�=z���F��D���Z�=��(>��<=ܓ�=v���%��;��^=a ����0����=�� >tR$<:�+=�t=��<1'E>R�j���=�1:��Ǽ}z����=Ъ�����>�gb�9��{Q%>�x�=�0�=�T������t ���7>��=�3�=T�d>+�=9�=�-9������됽�����>�ս�>�k)<�%��tY^=e��<+絽o��=f��<�G��#,=�н<�z#���=� �=� +���=��>����%����Э�IaV=,�ν�_�=`�%=���g(<u�t<|>>�v��t���WA>���=�<�=8�z���=J]�]����>:j>4��<����+>��Ͻ��>��>���=\�=J4�=��=�����ad�=���}��|�+�P�x9#>l�3>{���'���䵠���=Ks���w6��%���M/��s|������V%���v>�p&>��2����
���l7���_��V����9>����/>��KE�=}�9dY=)�a>6�ý7S`=S7h�u�A��,�=h�;,����ڻI�����C<JH0>�[Ƹ��[�01�Q>z n�p��_%�=��=�a�=�w���d>��:�^����P�<�(��T��=������=��<��:�;�<�������=���=}�f�1�����>���=�ۀ�Bk�tSF�Z��l��=�v<�m�=?I�=o'D����r~�=.t=��=IF<��7����;��5�O��?���۽��=�����W=_�2�`ˢ��+\�J�"�l<7�K��HK��j�����=�/Z=9���q�ܠ�{�W�Y��x��� ���%�4��=�6�<��x�A����<A�+��=��Q>m���������ռ���=��>Ŕ_��M"=�g=�ڤ<ƽ������p��=1gݽ�ߞ=�z��ʡ��z������<�ۜ=���=�飼�%=wo=SIo�;��=�z2���G<���x��<��ֽ�C�<�@弲+8�pp�=82>L��������<�q�<���=�& ��V����1� ��Z[�=�Z���r���ݼ�-��Z=㮢��/���X>�W=]�=�*�?1>�.(<����_>n���D�=NVZ=EV��e�V�^{���:����<P��=z�=0�>���<n�;����=��1z=���< ��=� #>��M= �ڽ��#�kV �nCC>M*�=)ҽy� >z{ >M����.<��K��<�U=���=�r�X>������<Ĵq<�7> =�<A�Q�[�x=�C[=1J�=�E:>�K�<#|�<�ϸ��G}<�����nB�=��G>�PA= �
<��=o��=�"=o��x�������\=��;�=*k���qA�`v�==�ʼϣy������ѷ=�����j�����<xǢ<`<,>^�~<T�!=޻�
�>����s��X��%�J��nI�N�������S��H��=����ڄ�<�7��Ђ>W�={��[<{+d=_>�=k4��F+��^; ���@��cd�����%�b=�sB�m �]�ƽ�缈愼��<p��=[��<t��kj �<�<E# >���<�%&>�tp���1=W;�c��=>����sE=Ґl=+��<^���)E= -��)�L3=� #=�v轂���q�=,��=s�f�|<G7�<�U>� �=��>������5ɼz��O2۽%��u��=��?>e�����<��A<����.Q���5=F�6>p߄=S�8=l�$���<O����)+>!a���<2�G��V�=���3��� �~=��2>QI�=�U��I2�L>|�"��X#=�>�}�̿�=J�潆L=���޻��3���=���ch ��8���c����=���=p@=�-`� !�<Z-���D���˽ydf��l�9�lN=ܷ�=�Y�<O&u���<ŵ�=� ���>���=���=��>�…�x�S=�yv�3�= |ͽ-�I�h�L�`�=qNO�6g>;�5�?�c]3�7�z�"��;�1R�����5\=�b.=�7����O>�!���V����=��8��8>�{�`*D>��=��z=|K#=�n,�k�#�齡U>^4->p�����<�H1=�R�=�4��M��<�F�=�y>���=�� ���>�e��<V��=0l���w�: w
=�ڊ�v��<V?ڽ�@>�@@=���=L�>���}���Q ��x�=ޱ��2,<Nj��V��> =��[<XLO>ӹK��r[��>����BW�3u�����=�q�=|H�x�7>�����x��!»��^>"�<���=k��<ոH��S�.����٣=,+��������:�)q��扽d�����<h��:"ŭ<��ֽ��#�i�S�
s">�Y�.���$�B��?=&k=ԛ�=;;^���#=(�=�$��㼫��d��� >���<Q�>8ñ����=���=z�~����=+��<х >}��=@>���tq<��<�ҡ=�X���I�=��=��> w�/�-��,>~n�f�)<j�=�R�k����P���Ἐ ݽ�ҵ=;{>o��=M ���V�x���ؽ�P�T�)=���~p��Z�=~��:��=�NF<�]��ȋ=�u6�tp��߉= l>���=htR�]U�<՜{�Xoн%%�=�Q�F=����4>�&>�F����;��\>&��=��=֟��NPU���a>n�ڽ�Tm�t�>]���D�M>����vϽ&Z�����6��=�]�=��=�s@=A꽐�@���%=�;ֻ\��=G+>������;>����2n���xA���/��+=5>�\�H���>4#>=[�~���_=�>��y8���l>e�"�O��<���=��Ƚ'O�='���aiP�ֳ�<����A���lv���%/>�&d��į=��}=�.=9J��)iu�67y�U�E>��c����=5�g=W��:��<H�-=������=��L>�p���0>[�<��!>�7�=Sp+=�%y=�݃=U7�<[�>A�-=�������0��멍�8$�=eL �i���h�= (�=]��=L��]A��5u�=���=e�0>;� =��>��Y=@
�=���=��C>؎��\<���=���PK;��=O���B=���=E�#=,G>�n�a@�<�6���r>w��=��;C��<;|U�������J���{�=V��Id=�M��BJ��֪�b~>��^�ڶ~=��� b��!��p�`�j΂��ɽ=�>�u?=�T�<<��O@�����;�9�=|m�=�!���ݽSَ�n9�UN��%����z���'=y.��{����=�v,�y�;��=�V=]㮼ʔ����1H�="�����=�5Ľߞ=$+<-#W=�S�L�ȼ� v=���J��=b��>��(>�?�=M��=����- X��2=�ʧ�fՠ;kLj���=��>� �0=5Lý���==Z��r�=&�=v��=\�=1� >�<"r����=�y��jV��(c˽4��=�`>��N�E6<^��=�O�و�S��7��= ��=E�=;N���~��Y��<���>ǃ<(*�<����= v>�z��b�o� �_>�]��!�����!>��/��"�r^>PS�=U�=
�'�0,#>�Л���0����<%ʿ=D�d<"���p��=��S�4.��������=S��<����>��yF��aJ*=Y�#>cى�9eڼ�[ݽ�۫=^'?��½r0��=�>g��f/��"��<kP�<�D ���>�E]�@�X�ܫ�� >+��<E�I=�뒽�F�=�r�=��=4�=�b�=�-q=�6Z�<a�=O�g�;��=�'ʼ�o��+�_>E+��3̸�� ż#^)�u�=�Q;�_��<���� �@��Ә=�v=���V�=ٍ�=�x���G>*Q���녾tL>En�=���= 3�������>��8>׊�������T=Y�b�c�=�t.��#=~=�4���o=�q=ĉ��:���i���>�$����=�^s=$�l�Z� >|�<����k�9o(�=���=>�<������^> S�����=Fߞ=��ν_N9����=�]̼����� 4>�U8>�7ͼ14L�y8>�4[�&Ѐ�.��^�JEW=��J<�@ �'Z���;��N�� ���Ѽ[y >� �=:�=�<�qj=�O��P���fm��`>�-J����=�3=E��5|��� <����<1�;�Z< �c�}�2�]r>���E >q|��Z#P�}ġ��a= a[�+-ҽ�K�J+ν��<<��<�?@>�!Y�&��;d��=<��=o��=q�?>:h�����;RU�=t=W�F=�U>=�m�<-6����<�j�<�]��;i><���X٢=(`�>@(��B�C=���o�Y�F����`>��j>&��=�)u���:��.��I>K��: ��# ܼ%׫�ݾ�=�E>�b=>Q> V�����(D��8��<Ow�<����W��=�����f>��D����T������%>��<�T#���l=
�>K@@�-׽~ǯ>���͑=#�W�/0=&���>p�t=� �=c�R>ܚ
�ü�=t5�=59>ac>�3�� �k�tb��������<R�=�Q);�
��!�=2ּ�'>W���� )���%��3���I;=�Ӟ=��>C}��ʗ>��Q>$Q���QW>�k>��>>L�����Z����=G�:���?�>@�P�-�D�O�ھ���<%��;x���P�zc
���y<�ʋ��YO>z������]LT>���;����L��=��;�}������=*>ОO=�]C>5�=������!�|�s���<x���k>�M��">�N=gw��F`<�y7= >ÄJ��)o>�&��se=�=�c�u{=�����&�;g���E�Y9>���;0�X=�J����>�'�H�����>���> �>F+�)��M��ڧ�������<�J��"C>������9�5�< �����Ϡ�o�=���q�ټf�=�,O>�޽+��>�g�=.#+�T[Q;�ƽ4��
���}¾l>�=��;=}>�*#�6^p=&�+��=6<<ӫ�w��bC��P�9������{��+�=J5���=*=��`>�\�=��X�| =͹L����<j���hཌྷ�d��ԥ��-\="�!�������O�Or��i�"��e`���0>Ks�;&c����%>���=��r>�s��܊�=Y/�=��>�x������n>�TK�3��=L
�<�-���̸=���A��\��I��=[=>��=���<�L̽%>k��=���CN���콌z�=�s>��<>V��=���tzz=0Q�������4�2>>D6����=������=��U;W���uf$�/C�=� =iW�=�����{½�_ʼ��P���=��0>��b��K=�=���=S��� 闼���=SH�1�=����F��=� ��`3ѽ�2i<-"�=f�5��%.=�z�<FV>�x�� 3��S��=>�=�=cd��;��k���&=�� ��e������ϸ��h"�<��6=�[�P�t=���=�J*=�>�?��UT�Q�A��*#>t8+��4����=֯�T䙽  �+���0� =ԓ&<��S�� ��dh�=Tު�����3D=p;>&���K>
d���ݝ<��P=6 =��|�����l�>s\F��p�=� �=��=�΃=����kF��Q�=��,>1f��1�O����>�k.�'B溭[�����>y��@�=� ��2�޽�%�=}��;G��=Ç>�����>#���x=g�O>O|��G=�$�<�j,=v���찿=��'>��&>Z'Ľ"pI=�t��p$>;͔���wv=5�= 9����)�>�?�=�����齜bi=��=��=� ��P�B�_�'�ٔ���6>ez~=S�S�H��=)+\�Rkt=��$=8с=Y���٩�=5�.���j� ?M�I����j=�V�=�}E�o=x�ɺ�L;� �oͳ<� \�C�>��I�;L�D>���=��Z>����EԽz�8�7#>�y>�I&�J�>�.�Y2W=$���ɛ=� �S]�+=j �; Y��w��Rpw>֥=���>�}�=G��<�cϽ��߽V�=�~�K���^!�=a-�=�C�<�Ï=�A�=�n\��F.�T���/�^��+Z�0��&�>�\Z��%���>����b�;~u��f��.�`���t���ق����<B@[�� �=���<㪽��$>h�=0_��,;�<� �oۼ������=��u=��e�B|����k>�J���>!��=0���_ڒ=0�4��c>��K���>Q�D�]�w�} >�!�=8����}g��0<�5�R=O�s��z�=Ԧ����$>��䞀�4'�=+�Y<\����>���\�=���T�>��<�b��>K�=)��;�Mt=1q>�;��Z����;ٸ=��+� �{�.��=(T,�� ����A�½^0��O�o�Q�>�z����W`>d �<<_�����m��<����jjw=}�½��y���;B��=�.+<�����D#<�̬�3���o=<H�= �=��ཬ����4��|�M>Q�y=�GB=ѧ��Q�s�yt ��e����ŝb�鿖����=+��;g
�3�=�;���۽��:�Vt�=(PD>}�_������]o>nC!��j�� �=.s �M� ���L=Ʋ=stʽ���.yr��́��B=˚���6���\ͼ�����o7>y���rHw�%�O�7���X�L<t)l��t�������_�=M7���=>%�t�`b9�-�/�~ֽ>��<w ��"�����<=���(��<]�6>��1��kd=\��=S��������4s�=⦟=<�Ҽ�ֽ$�o�k�F��c��@a> �"��,��ʵy="�½T���*==z�9<�״��n<i9��w ����= �>(��=�� >|/b�,�=�ֽES�<�%�A`h>H�%>�N�=��j�st=�=�[��=�R=}->^�K�B��=_.ڽ��f=%%u>��;u���#K��`&n> mB��;>~�f���>�*��1���3ļ�T��s�w=��>��>'섽�耽1o[>&V��v��=��(�Fc�
��ҋ��%�p���<�ʼ�R=��M>(���rٽ_�x� E�=)��=2�z>����w=��=h!Y>եt=��>�R��t�>�r=���=9K'��&�� ��=>a��[E�=�� ����,�� y�=}=0���5*6>o�0�N�>���=N}��hsS=�=>�m$<��=\��=�q=G��<��r>RRk���:���\����=l�>;a���$+�87)>��c>n>��y�ٹ�=O��=R�m��=��.�=6 P�2�:>��<���׽"�l�)��<�=�oý)?=�X�$=j�[��Ls�bL�ֲ�=��g��J˼Z� >��i=���=oŽ��%U<''�=��=��3>�Έ�Ԑӽ� =� ��?,�=A<N�ܼ���=~�>"�ܽ�l>R\���>�+3< �/�;��=��>26>d>�=��M����K�8>���=�X7=� z=��3>���=�Rk����S{G�����C\=P���2�=&ؑ=�{�:#:����=/��<Ȗ!<���FO����=SW�=� �Ɛ'�Vzh���`��8�=q��=�W��O>-(>�*�;��e;[���z��U��;Еu��ن>=���<�Z=Obe�I���=��=���Bb�<� �=�X<>��=��1�r&�=;}7>(��=�'>�n�=��*���Z=�$��o���ڼ=��=� >����Ì�;��d5>G/^���<�i&=��Ƚ�h<�+Q=�`��2!>�����z��x��2>���]-����<��˽䵇<Uy�=��=��M>V��=q S���>K�>=% ��s�����<�G ��^<����=����]ټISν��=��!�3��=�D�=�q��_��<���=u��<�(�<�_���Տ=f��+<���J��=_V �-��=~Y�<ù�e�>�׽{(��
o����<r1>2>�mӼ�1��ۺ�<`Z�=U��1�9>��{=�b���0�2� >�+=; (>�y�;�>M �=2��=�)>{u�=�ԣ�� �(Q��Hܽ�:���H����=4S���,�Ni=y��<"K:S��s���f�J�@�:>!@�<2?=�ɼ{o��>ȨT=�̢= 0�>d����,�S� =���<�!=�&�#�Z�=��=��=�1ʽ (:>8�D=�y���ٺˢ<h�0�(��h�>.�9��n�� ߺ���>?�¼.ϕ<=��=>f⽧Sj�_[�>���=� =�ῼ��="���+���'���1>'���H
E�����=ƽEe��|��<���==]���I ��� =���=�m=![q="@`>#88�
g��*k=����t��0�( >>��=qw�=m��= ��F=o�&>1˩:P�۽ �� ���[n�=}X,=2Y�>�1 ����<Q����^�<����.��=������;>�ʊ����=,��=N����;=;�=h�u�`�B�Ē�����<��g�~y:>nI��ID�8v=5C>�a|��!>Ί�<���=�ٍ�1�M=g?J>䕻#N�;�l+>��=��<.�˽ya=]��=��.=��T<D%
=�x�������=0�=��$�Z{$>�&�?��=BoڻR+���>��2��?%��'�<X"S=���=�� �gN*>�R�=~��=�S�����=�Z\� ��=96%=�3���P�9�<���=(e%=r^�=+���Ī >�L��(o��i�<�6>���$;�KPм��=BٽX6=:&
<���:���=M$�� "���=O������=$.Ӽ����i�5�<a e��㺼�������<_'~���<�4ͼ������>�=���;ˡ7=�>K?
�~L~��,�=��_=u �<5����R�=��=>��W��=�ë���T�̢>���;zL�1h+>4�D�Л�<���=��=�"��U�=C�<�ܰ��v���<�-=��%�hB_=�ʂ��'=]�>�/Ž �⽃�����#�֤�7��"������<2H-�)��*��B-network_body.linear_encoder.seq_layers.2.biasJ��s?:�\�;]�<���< .=��^;��z��>�<���<��C<�3�<�^z;�v�<���<���;��_�<�F;ە�<�S�<' =��=�-ƻ�
�<B"=Av��e��;�p�<_�6�o����<u+<�ç:KӋ<���<9V�<�=fl;<�]�<9$�<���<��<�ߓ<nMZ<��P7�ȻB�-<�ř;K�=%� =U�V;��)< ��<���;H��<��;�&8=�%�<�Y?<&8�<�$#=�{�;���<e�=�{�<k=o�;� =�b�<�ˁ<�_�<u��+��<���<��<���<�a<��i<��:=Dκ���;�ǻ<&��`��<�B&�3/�<���C?=ms�<�q=y+;M` =�^�;S�w;�R�<?�\<�N�<���<\�=���<�a�<�=�<��<2��<o�=�;�u�;�L<Ѷ�<0̂<��/;R��<9�=�X�<OW�<�k<���<C�<u�=�Q<Jب<�<Pb�<8_c;�S*<s��;R��<�~<0�<*����B/network_body.linear_encoder.seq_layers.2.weightJ�����ݣ��+���m��Z住�>���<�� >�-�=1�%�rV@���>�� �!�<��6���3<9{=-��]���ʻ�M�</*���
=I�=4ˋ>Y �<&�=ڝN��!�=�4=@��;)'=��O=~zN=��1��Wj���=���<,�����z�<y���:���a�<@��;��<)�=��=�O#�2@"�V#ϼ����k�|<L"�<֡���Ƚ×<C��$��=��S=��=qڬ=�r潖�;��<2NH=RE="���m&�������p>�ܸ=fO3=�F�=>ʁ�=?���,�=O�мK1>��?����<d�9�nU;��ʽ�:����=�XL;]K�=›�=�-z=&�5���}=`񱽙��<:o�<���=Lk >��|�ѽ;�|����tü.�d=���(�:�B��u[��ش�d�<�Pi�����û�tݏ=���T��=��Ƽ�³��Q�-��
� =�'h=�ެ=i�*=�R
��K!>�4&=X��g�<��J�P>C�^�BQ>��`�i��V����
�Wg���7�|������=��l� ���w=!B=X�o=�h*�&�ƻG�f=�E,��ϐ;E�E�ݠ�=�����h�<��:�(�=�H�= �ʽ�/��V���J��E< �v�ƹ7=K1�<��>�ܽ:c�=reR��"j�Ԉ������q��=��O>��ԽE��<��7=��<j=&��Z�<)�׽��5=��!>u��=l�\��n���i�?��="GO��=_]���bN�m�e����}<5�S�ޞ=�)���ҽ�>>A���>�Ҽo�O��6>����@@���.:z9(<�S��\���^<k �=���<o?�=qS>$y�3�E�P���<���c��C�����<d��M=-�=l#8=-�<��>=2;U� �����R>��2��2~=�$�=�t>��s=ߢR���=� >>H�<��<��ڼ����>qk뻭g���U�=��ҽ��S>����Z����=��N>��a<e��;��$�\��c[���2=�=�S,��YҼ$d4=�������=��%=d�>6.m�6{z��=V��=��G�,}�P��=���Eצ=�8�<(�׽5����H>|��=�V�;S��)� >�E=�ׁ�Z�(>NA���WM=�i�= � �X�ʼ�]\<� j�{�=� ��<�D�3=����v=p�=�A�<�E�=�+��޽V���QٽgoC=�1��qw��N[<]?���<q5�=:r�%>��ۼta�=�:s>[��=r�����]�~���́���<=f�ּ55н��::L(��t��wv>>�.I=R4�< ߹9L��Fн��H>$�����<|�>[1=��w���彘_�� 钽�����5>�c�=7!��T����[=�0������=�c>�Y�<�™=B?߽��4<��[�d� �R���ֈ��BҦ<�>���=M;n�ԽkQĽ~��<�'�Y�$��{�^Ş=������e=�jZ=o��=Y�2���=�aٽ���s�8>[�/�x��=rR����=CD�t>���,:>_,���~���&>��>��=]�>�Թ=QB�;��q�!ȭ=ׄO�t�L>a��Wz����)='D9>B���y�����k������R;=�Eq���>��&=��=�f,=4�p3����=�m��/!>%�_��y�=� ?�,��;�p >����{�7�L7�=�=�';Z�ý�����=P@>= ��<:ξ=�e�=�v^>0О<�/�=#�z ->Q��=��e�C����=�ɽ`�'>e+>9ϵ=�,�����=���<$�:���=a&>l �=����c��� ����k_m�L���� ݽE_���\=�|�=��|�=�=����_\=�.0>@I<-;>�~�\y�=��=6C�<�W��0zz��\��
�����l9��@%����=)U�=LG�;D�=�T���'��jxO;���
���ԯ-�#"A�<\w���D��g=*�>-C���=6u�(?V����=H%齛y�������-���=�Й= �Y=�_=_<���@=6a�����=������3��@��"���i>p}�<<#�)M�N���]�o�4h'9�ʽ�g�ϼU{_=6}�;dk}=�I�=�g�<j�>�g��,������<������mն�-0�=�y�<����*r�hXμ���<��3�ʽ�_�=j����ؼ���=`n<��=�:���?<�*���Бp���Ἦ�>/�I=��=�
��U��y�@�=���J��u��<��>�=����=��C=c\e�/#���6 ��l>��]�Lv���m�=�><"ݽ��༿��=w�)>�>�h�=�a>K%�q�o=b!>��
�3J9='н,t={߽93�:^�=��2;~q�|K<[U>��U=��Q���*���&����=}3�=�8�7!Z��5��=Ġ���J��R=��3�>]ք�*��=N7f��^�=���Í=ZFi>���_��=6�p=�|<�σ�P���hU�=<� >L�J=�+��A1 =�/ٽ����z~������ф�=���=��~Ӑ<�KH��;I�Ѧ=�@�=�������=@�h�J=�%�;H� =~��=�L�=��=钭�ƂY�)�"�E=*���F�h+g���)>�X�=�T����=��/=�^=6�>ܑ��$)���a���E�!��<�н�=2y��;Ľ�@���iS�iP<~�^<B�=������g��=��l;��%��=�v����/==5>�}�.�u�4P����=�g�=��<�ȕ<݅�� 7�V���D/i�Kl&�y�@=bWS�|r>� s=�����
���v���(��� ��"���=a=,ܤ�1��|{<�� ��[=�wt�0w��2OѼ�;���J�<[�'='_)>�N��?��<�@>zT�=˭��*׽���g�=_n�=s���N��j���m���=�ނ=z��<7��%��Ծ�=q}�jG�=[t�=v�> y��\���O���R
�<��,>O�����ٽa|��&�d�=�Q��"�=�y彛�ܻr+���r�=������=dj���=z��=7��=�� �Ա4��0<�^i���%<e⽡�F�M\��HΘ=�Ͱ:<K�:�׈�S�=�8<&�����������+M��D">�m�1����R;���ܽ��z=�1��ļ�G'��ؼ�H�B�8,�$���G9��<�_˽+, ����xw��gi��&��<�i�>�O�=�ゼ�d���7>h�;̇A=��=���:=p��h=�=�A,>+k<:�#=� 9���>9�Ƚ&ZD�:5�=�����>�$����k>0�=6=�����='AY�"dG=�@ �O��j�G��_I���'��S:�#䆽Պ/<�%=�_2= G6�j�ǽ��;>y|��>v뻡o7=�=� �=�4���������FC>7�Ͻ<JW<�X(�D��=���=��B=�5.���>Ԥ >ղ��dE����w=njE=f�R>l�׽�'=�4&=Mj��`_7��J��n���V��'�<�[�8���'��i��}��2
��~ =�Vb=��!>X4�;��n=!�&��\��u���2�>�^= ׽�x��c;r��\�p �=��`<:@�:��=���=��=��D<a���� �7U�=��<L��Ej�~D�=���<g�>����0���>7N��{@>�@��ߡ��`�=5�>}�Q�xC-��sr���=E3��%�=�^�;�6c���#<^� >��8��ަ=�n��ouԽ�D
�z~> �z}�<7��<x����t3����=��=M�F���
>0�3<5��>Xe���?��u�<)��<װ�<,�S�><�B>���<7� �)9����;��\=짭<گ>{a�=*ȣ��i4>\�q�չ?�(��=�v|�B=�=*۽�LN>l5
��s�o-���a��^z�#���2�=9ٚ=�jJ�(�H>�o+=�j����<@��|)����=m{K�|�}<������нK�=&F�<��*� >���=V
>Y@��`zK<��½tż=( �:#x���K�;˚��◝�.�=T��>T>��D>��=�����S�<�ڥ=��!>��> ��<�2X����;8��=X�Y�&� >{�=�����=��<�i�=�[ ���=x8�:e��=I< �#�󾼏� >.�=���<�.=�.5���=x�q� XŽ�w>���w�8Q�=��� ��=ٝ��d�
�c4!�}���EH=�X�=�&>G� =Iy�=�ļ��>�-��M��pk�=
k�<�N_��섽@��l��=���0�>���>�:+>� ������N>ha�<�k0��;o=���^��� �>5i�=� �>��� ��=�u$�ɏ=��޻�t˽g�(>`��=�!F=.�=�V�� ����=�c5�w�F>����ً�v+����i��F=�#p�Tp���m���i��Qv�;����vN�=,� ���(<� >!b[�~˅����=d��<�n�~�=�*(>IԹ=�� =(S>\� =Z�U=#R�=�C>k8����#��-�=C��<�������=�*=�t��s�=b��<��)�ľ
>�� =T��=ם6��:=F:%>��q= c=��D�@���u>}� >��'>�a2�x�D�y��=���;���j�<{<>p��=��=���ʹ/��0�=�GM�(����S�T��;���2�B��~�|����y=�\K�&�y=���=b c� �R=?�D�����p��<�>&tɽG-�=��<��u=b\��l������A<J�����<B���=�E�<>�Y�w���� >�n�=:>s
=�M�ʚ<�S>gUĽ��=┍�hq��c�4��[�=��;�&���"V=y�=�6C��M>����TlO����=&3u��Z��j!��B�g����a��=#�R�����I������=|�ἆ֧;M渽�0�=wiͽ�g`�N��<�r=!��<�J̽�M-�N�=�� =�Π�J�f��������;���<=���fh=L���q�Y��}($=�b�����= {��UX���I��E�<p��<R�� �=%$S=�Ic���ݻ��#� ��<Ŋ=�d�=.B�=`�:�Z�=U��b4��A=C�2=ۜ)�Ԥ߼��$�/�1=5��;4���ȷ�;3O�a[һ�,�=��>+H�h�D�����}�=�j��i����-��o=J��=����#�+�j>8 z=�0>o��,+H��t��Xt;>p��Y�<�0[;���=^�̽kB>^��=��;>�K�K��B�=�D�=�O�=TD��L����:�;ͻ�<k=a�K>N� �`���4ܼ"�ռ����t�=�[�h�d<a<ὲm!��@<Iݼ�'?�U�Y�ECM��ž����; vM=զd���|>0=�|��v=�p�;�+'�� >O^��S��Y��X�4>�����=�<M���q���Z?>�5�=?�սv�=ȼڽ�v�=H�]��Ǝ���=�zz=����%��ς>1/>���5���@�����۴��B=�=��W>�\�<ιc=�3Y=XVn���#����=w �<1�=�L,>�w]= �p<�w�=�m> % =���=P/d�t,=C=<,
�=��ƼC�<��;��$=Մ����󒶼�,X�|��Rab;�i����֗>����;j=%�=�w��=������;��=)Ľnd=�2��[>F��< Od<�S�~�U�@_�=a�$�B�(=�1���f�U��=�����#h=+c�<�c=Ԉc=iQ��G�=,�:=�� =��i�HV=ڐ=�ӽ���=�.�����=ym��B���փ�������o��<r��=E���p4���i>E���p�q=�8�%��<#�=F=��r*>�s��d�_� ���!^K�{��=E��<����<�=�|Z<.,<3�������5����<Ix�=�sg��@�����<F;�<>_ �m@=�����z�w������.�n���>�S�<]�^�}=�(=Y�_>�����νГ�=��=��(�����M�ݽ7p���j=b@���O����<B���t�,R�=��ϻ��x=�
��o)>��Q�� W��H>�k=��8=�y�ǝ׽��H>��=ld���e�_�޽Z���r�=1���H��"{�=�"���/>�8>����<p#�3�E�2����5>&7 =��=�����{F=��:���='�ѼK�/��{�=�'�,���1c <聂����;�m�vg�=��U<���=_��=��5��k=>��ý���@��=?�>��=�"1��>��9�� �0W��o���o;<ģG=����U�����=2�V=��D>�9�=wӈ>!V=$s=�t>�d���=G����=/R�L�>>х>�[w=Ko�<�qf���>�C��^/���0�=e�}�
Վ<膣;W�½N�A<���=n���m^�=M%�<Lx =��Խ(��=�7�=��=yA&���o=�v�J�=Xl�=t{�
0&=.�=[��=K=��ƽ�ƾ��-�����S<��0>��;G�x=$
ڽɧ5�����n����:>S#�f2 �|��=��[����o�p>W��=Z4���̘�x�=*K)�Rع; L/<J���O:��CM�Wl�<�V}>�����伈
i��Zս���=U�1�=CJ��*G>���=���= yջS��<&3ʽsw>_f�>�Y�<�t&�΄9>xY>rH>�O�ʳ�;�[e>�ہ<�I�| ��W�F=c]�=y����h�<'bj=C=�<\�=ׁT�-�����;e��=��>}G�=���<&���5�>��νhmI>a� �:���R�<�߭��%�����=1)��0`4���:��?ؼ���6X���m>��m����<ȯI=��P=��S=_K��Q?&���=��E������ ��'=��;>�5�=�fB=F�;l�5>��>�Y,>��h� y�<�@p����=�^.<u52��<�<Λ�*h.>a5�= <=��@=�[=�� ����֡+>+#;>����=j��� ��=�8=a̡�"[ܼ��.�����N]>qؽ,q>����Q<�ѫ=X�B�TY����L=�>����޽���<����[>Z{ѽ2����>��a��瞽��8>�>J�>}��;�\u��Q�>_½��x>�5{�6Y�=-$�=�Â<���=A1^<>c�<w�߽~��b�Q=���<�=�G�����<�<�a{9L�u>0�"�frн����xJ/> �>��Җ=���<���=Zܪ=V�;Iy�����9�X�=�� ��A> J�U7��]�<x悼n��<��8>�?#�Gz��|Q��"�=�W��y�=kz��SH<���<��:~[�9(��;���Q l>@�=�a�;��8����=��&>P�[��'�o��=_���Z>�a�=�*p=�/�<Q��v>�I2�����Ҋ��<o<��Ӽ�=�z�<�-Ͻ�3��Tʼ�S���oƽ)�=8�[=��=Oq>��BD�m=�<�^o����<̊&>C��=հ1�`) �4~i=�Zs=�����;��n;#�e������b�������>��F��$5=�l^���U=Nĩ��bp�6�[>j�1�R�u=�J�<���<��x=�g�=\9r=��=-
h=*�>4��=�~�����������i;��R<>�%�������P�L��=8����ȟ��U�<��c>p䑽j1��L@=Ђ>��X��V�=�q>O��7=O��"<@���%9���a ��-[>�a�=��<��<�ι=��7:Z���l����>ʪ˽�͉�i/L�*u�=ߧ��*d=88>�;ތ�=�B=C�ʽ}Խ�Ƭ=Xd��SI���=2έ�I�=�=|��=� �=>n$o>5Gu<�l�<(��;z�d=E;:>DnN�s{��:�μ�AU�񬉽Z)��ݔl�XI�=�J���LǼ�L�=@`�ƀ<:xA:;�E>������
�y^=���:̓� Q�<m��<qN�=����.Z=!� ��co=_f��%V���ƽ���</Ժ$A���2
��{��E��=�5�=�S��O��=+�>�<�=8�=�v(<� B�"8+=� ����㩸=*"μ*qT���A<�[O> ������=��3>,M�ׄ�� ��;�A�=�~<SP<��=$�J;����[>����H=����l
���qY�LL9=�e=f�f�����?��f���Ì�=��1�-Y|=6= >�©�z�=���=ٽ�#>�!�Gpּ�g�;�Z�=ؾH<Rq�=�/>+sH���$�T�����+����=l�ڽ4�0=n� �� �rD��d�����=��[=ե)�G�ĽN�/=� ���W�=�=���<�u�#�R<�q���y���v>o������q#>���=l�����<�84>�N�=;9���qؼ�6=1����R�<��L<y�ͽ������sG,=/CL<:�=c����Z�T��!A=�&5��'��2�<��<C�vuX��,ٽ8�=������VK��3R�!� =
e�����=Ã�=󠼔�B�E���L햻W�н��9��⁽H�ý�޶��H-�� -=BfB>Ye�=�eb<�Q�<Ӂ>�����j��a=vsj���<�#3>y��=�*���,=����.Y����=4*&�'U�+�Ϭ�<|6ý����&|>�'=9�<�[6��,�fI�<���=���;}F�Y%�#�<��9�ȧ�<��<ڈ;��(ؼa.A�Λf=|D��==/
�= ���m�>�5A��fェ�J<<�컎ce>�>����9��?�nd�=��)>�yV>��༠�ʽP\�=6T�=v��=P�ּ���=��*<ꢗ<���ð<q��;�b�<Pn]=5��;�i�<���� ��>�g�=%���:�� ��l���j�����5��Ȍ<��8�0mf�g&�=Fb>�u����N<2y<D�E�����1!�>��=�_���.��ݨ<b%>��<7`(��KK�%>s��=6�;> ۷��Õ��r=ۃ
�q��=�T��1Q׽̏r�
���ϼ_f�>jG>��ɼ��;�]�;��/�<��b��=vڤ=�ݎ�����*������<]��<k�q=��'=x���M11>]������=w4f>vD�R��=�*�YaĻ�,W�Sq�:���*'�=m�=�,>�H�={; ��i>̰>��6>�2ɽ�F,����%��>�02>ޕܽrJ��!vѽ�6?�@�<� =B1>-� ��=δ=>N�=�qx=(B��2�m<��>Ni潄���L��[�Ǽ�l=w��=�%O�#G>\xz=\�<P�Լh�=Tt>��s>ѿ�=����7�>�/�1x:=��V��;)>��<=u�6�=>�%>��&=��;��[=݁��<�#�=�窼������=�ݮ<��a�|�@=\KO>p���!C ��2�=_>�g$�����݈=� =�P���$���LŽ8�u>y� ��½���Z�=�?�U���m�=f�<��"=��>W.��cӽh1_>�Լ�j>���<&�Z> ����k=�Bx>߷��W��W��>���=��� W�=P�=ua���<£��oC"���=?@���޽5���B��=c�s���ý�=�_>��f<-C&=n5�=C�,�ڑ���oO=���Pw�<��v�q���B��]�w=��B>D >�X8:��)�T��=���<�o-<�o�<p�^>L�x��~�=�z_����A����*�����U�<w��껁��=�
�WR�<��V������+>>B�=<R�= ��=�=5mh>���;5�<K�����='����TE>�=N�����2%���>��a>8��)�6�$�^�����!=�U}�:�¼�
�=JL:�1<sJ��P�=��"=]N�=�=۽���>N?I���>S�e��xB��9нxs����軝��;��D�?��=唽�Kӽ3D�=]�=5�>Z�'��R<�a�=u�M���˽:@�=Uݖ=��0>=Mf=�je> �>�w>���=6��;�н���;���Ժ�=q��2i�Gډ� �!>���8� >��<��=�Ye����:}��eZ>���;~/7�~�<^�t���`��U�=��>�6��?->g�\�~�)-�����9��?>|Ǖ���=�: >��ý3�^=�Q>rk
>B�����f� >��=����qT�=�"7�v)�=벽=��ѻ�ڽ=pZ��)�>�n���F=W�#=�>�<�{���h���d= i�� Am��Pg<�_ʼ�NX��V4���=1�ʽח�=��佊�нbJL��>�<dU�>��X��ڡ=�@�����(��W�/�P>���<����ݾ2�{��<�6�=��'������q�<E&��P`���">�p�=®=UZý�q==m�ƽ��=����>�(=�w��Z;> ��=�0������F�x��rn=O� =������=˖Ž������*�=߉g=&�
�=H��t�>J#�N簽ReC���l�NzX=��>|f<>�A�=ܟo>O�S>�#W��"��O�=�1��v�)�c�<x��n7���^?>�Ԥ=̺��sl׽������ ��j�=ws>]���빙�R��=]#J=m�=�9P�����
��=��,�/�=&�e��u����������m�s"�=�SD=��޽j�=�&н�t�=� M��g�=Q>��Ͻ���򳼽1�='=(W< ���@�+��=#2g=�U">M����m��!�=�ͥ�<�<�GڽF����Y�/�d�W�V<�U@=�����<)��!�WU��5T6��D=ԝ:>��H=8��=spD�y�|=�B= 1���7�&��<����L>�V��~�<"�%�b{�=���<����$�������B�=�3��=��R=���>.�]���;�1 �m�I�2bK�ȑ�<򫿽r��=$H>�`�<���|���Z�=1𧺞僻Y
=�w���q!<�:齔�����-L�=����е9�+*=�j���sý� =˱���Գ=x��;LK=R����*½�ko=�4=���Zկ���->��<l��%�=Sz=��=���<�^�}�>����=->�Ü�Ӵk���>�*�=�?H>�k<�M}=w��<z��=�vE<�Z�<Ϥ˽ޤ
>�n�lP<>V,м�j,=S��y2<N߸<�n�<�!�� �#��ܐ�m��=�{7�����U��&.c��Wq=�LP�cga��qQ>2S>)|�;^�E;�s����;á=ڭ�:q�T�/ż!�׽�bY=�3��ݤ���<- /�/�=��m�(.v���V�X����P�G� =H� >1���� ����%<.�ݺ�w3=&V�=�K�=f2I�,�o=���� _��œ�=�)��<�=���<�p�����by�=z �V�.>'!�Z���������:�$J><"#> *O=�MF�Qˇ<"։=�6������ �=l�������HB��6�z=����?4@>wu�=�)���{�<�ڽ�RL�$ ~�1���=P���3�>m:�=6�/>H u����<d)�=�u���Z>��5>���j{ �tS����l�_�������?��S��������<�hs> �=={g�@�˼�i�=q���A�<$�@��-)=�1�/Rüԩ�=���=�����I4� �$<GC�< �^">��><��;�� <��L<���<A@=C�,=�k�;2��=W��=t�����<"u�;� ��a�^=����!�9>�h�=���=���c�=�5O=0\�=�B[>�佋��>;��=�21>-"=T�)�� '��W>� ��b:>�m���л=�ˋ=���=b��=A��: O���,��슽Ƚ�K��/[���y=�Z�=��z<>��=� �<��>��4��� ����>� &=���=e��<ώ3=S8�_m�=Y�����=�p>�8���-��A=#�k��� ���K=Bt彥*h�yC�=镬= �����8N�=�н�->=SF�;�"=�;����=߽{�<6^[=��g��ļ2��;\�>��On2=A[e�|�f=���=�������=��Q>�s�<����&��2�1?$����=�Xk��"�<�<11w�D�?>�{:���I=���Ú�=Ck�<aH���u�=tPK���>���<S}��u#>�x��m =���=`�)�%̗=��.=R$�;k <�*I�m�>���>㭍=?{�=̏�=E�%���u=�4�=��`>�2�� Ё���B>�Kl����<T�?=I� �ߔ�=j� >�;��>$m�=��M��˕�h�������~>�@=���z'=�`?=�����=H/>��=j�<�ü��=07����<v2@��%����^��=';�:^U,���Ǽ"��;�4�}b =����f�ٓ!=�]<���<��M<;��֎=HZ�=�Nӽ|{L<֘���4=8�>Z��C����<�[ý����wȸ<��W<�&� p+=#b4�ݓؽ�#���3=7��c��=�Խ��A>Hn�=�;�=T>���e"� 9<��f���Ip��F�l( ��y�<9-:��N>�v�<)1��9���M�*q��8 �n�I�����=������db��/�=��B��Z���L=�� =������=��_�2�=W)��JH>���<.K�<E*�(9|<�,�:*��= v=���=!;�:V=|[�J��=?䉼�X���s:= �ɽɽO�y��eI���i/��?߽Va��I��=� >J>e��᡽���=B�f=꽅>ݶ>U�=ި>��)$�'��:]�=�#��-����Q=��$>��>4o��9��<�7�����=��U=���=}\�=Dl�����V���6�>k讽ݱ<���<�i=��yo�a��>�>R�>�M��L���I9=F��< ��;S��~`ʽ�Y����b���3�x=��n<�m�� �ͽr ����4E����(�u���;U��<>��=<\��_�<i���s�N>Z��r�>= �=�i,�:;�==����*��=iX)��;�<ת=�w�=�[��p:�ľ�=����N���=l��=�����˳=l�@>-���,b>�5�=y%E��I:>��s;*�;Z҉��� >ϲ߽��׽%7��*����<A0��ɼ���3?<� ���qn�;T�<�B�<������=�(�,��<�a�=�~�=�����=��=�L��� >%Y�=_�x=� J��븺^�<:�#�~�L>��������!=E�=�j�*=�p����6>��o+/>C��;ޙ����=������U>� ��ݽ�=1@�<><��.e>H��<�1 =(���D��=�n=?{j����=E����7�#���>=K��=c�H⁽��k=�<a^��ϲ������p >ea_>3��;�K��?������=�C�=�!���1�<�~;�\� �4|�=d`(>����ڥ��0<��eڼ5�=�I�=x�ͺڀf<��$���=�7V��~T=�� �8n�TB��=U��T�=�����v=B3��&��<U�@�we�<*2�;���=@5=<U�=*s=�'���D�Z���#�9=��l=���=�2L>,> �.>".> '�<���<�� �<�ݽ�ι�jP8�쥽��>�ͤ� Μ>��>�>!{��oG��>I�=��}=��$<�ނ<���<�u> #�=v�=���}��4��'�=;�q=qX=�Ὄ� >��F=�]=���=L��t��f��=Xj�=>{��=KH
���B=Y%=�td=�����%B�.�X=w���%�=Mp��t>���=�Z�<�g.=uH��S�}�,�?;h;��|=~��<@赼�m=;�K���߼}�7<���=���=!�=W�=�dͽX��� 7�;WNv�R�=�~2���`�<V�=B�+�]$=� �I��<F������n>�}>>����<S|�S��=��t<3�T��О=��E�~�f=_jj���x=�"/��9=�p��(k��S>�ZR>�>J�ӷL�C~�=���]�2=�3ͽ��V�fޮ=#J�5����%�>X8>~+T< Z<�7�=��y=Z[-��)<J_r="�=,=9>�l�=H���%]��޻�>����X����O�l��;\L>�f����ý�>,8׽��̽�֐=�ȳ=1�?=8�f� F���J�;;e̽�淽�̪=mM6����=���
u>4���@�j=99:��8����3h�c���>�^�<�%���C>l��=�\��;1�� �8�z�>���=���=�VX=xp߻y$�=S~�<pS�=;h�<�k>+)Q>F�u=gA=\Oܽ �n�>�ܽ�M(>?5��@̽�tF<B?=�e�=��<��S<6at=]�����|�L��=��=s�>��b�&M�<"�˽���=o��_;���B>�\<�0=���� �r >Lt<��6�7��=�˄=�Q��-�ϼUY��� w=*�N��;<���=��i=�N4;��V� ��;n\=[�i��<���<%�?>�;*=J��=�l�)��=Dr�<nS���Z>��u�b�M��ɼ7=�!�<����|?^=��=C���ҵ��p��rX��H�>�J|����f���L=��> zP;�{+��}߽����Ҕ����<.��hk�=D;;��="��<��"=���=�Å��6�=���<�:I���=���q>�����O�#5�=N�:�[�3>�]�їʽ����#ۧ=%
a=�j=Àk�}8>�,�o</�>iś�4�=y�$�,���mu��ֺ=�нO6)��� >�U�=�齾(��BO�=�[1�p������<�{[>���Ǐ=��罅V��-�<�8�<�*��<�;��,>= ?�4G���|ѽ���";���)b=kB=�u������+->�>�=��-�����{�b�D�ؼ��N=�����g>�t ���Ƽq�����=r�>Hw���v�<,@(=P �=���=6}罒�����=���<�� ��#��촼� >�׌��>���<�>4T=�C���w�o5)=��='Ĉ>U�(>~�'���H��;>-;{�`T�=����1�q�Ğ��ʧ�=���= 6�=ř�=�Y>�s->�����e��w<��4�=KM����n�
�~��=i�>3����B >)g�# �=2�V�Z>�e�=+��=�2��?.�� =>0#/�
��=mu�ݩ��o���h)�z�i�N~7���6��K*� ��=q�<��I���к��a�V�����T����N^��m�Q�^^d=-�R�r ��+β�)�����ܽ������ :��[�|�Ǽ��T>�R׽�Ɠ=�4�=m�; R><#T=غ=%���䈼��a� ٻ\Q�VfؽӠq�ˢ��ң�=�c�<� 佶 ؽ�-(��?=�y�:�>|�g<��齁`�=�q�=�`y=98����=_W0<t��=��3ٞ=:��=�XJ=���HB���f>f;>���n����V�ۙ����]Б= ($>�E>�򒽘�U>�H4�����\=�f�=Re8���>������'=�t@�ڤ�<p�罔�>�1K>z}�:�8@=`罔E>*@ �#H��*>�ś=2��=��c=��;��� �z��[|V=��>���I�<�8>b=�=���=���FM�=,���Pv;�[�<�뉽Ɓ��d�=��9��4>�/����1>��>�-)>��L�w���P$ռ���=�6˼a�K��=d���TF=Va��ު;>�k߽�����Kt=���dp�#UJ<t6<��={�=�I���A��X��<�?x���Խ!y�=Z2�<����=KX�A�>>C�=X�D�W:y�bB�<~��=����i�,>�='=HD=>�8��������m��=;n=����ڣ=���<9v�=��>���='�=p���b�<����i=���"=�j�=o���Iؽ�3>ɐH�!�=�c��渣��fM;5wY=:h�<0����/��%�h=ų(�e��=��޽�:;�����O=~C�=�.;M���h��Y䗽�>.=��>�ȶ���(=ћ�;ɦ=�g��\>�M��50�O�V��|�������~�8>2��L0=����yC��0�=���=Z�x�'�w�X8�<������Β��b�L=���=�Z�<�����=�93=GӰ���6���8=x��=/8:�7���7w�å��Ł=b�=�s���> ƥ=;⽸����U��L >�Ҁ>i��=b!L>�=��>� �=�����-�G:_=)H�=W�;`tg<�V=��=^Ӿ=3ױ<���=�>ӽ���ٚ=~��=Xsz=��=O��_ل�d&='�|�^� =��3�4��=��缮r=���=�x�<��=gY+>\v�=���w�d�ǭ�oΩ��μ�ݽ"v��8��=� ��-�<���<ML��N>�=�Ќ=J�p�z9�<�9i�^&�;eR���F=\�����=��M<^��;�T3=7#)����A3�=5�����=Х�*pB���\���G��I$=�嗽�e�=��">�y �j�˽83�<�G2>|ٽW�1>�S��o�y=s�c=�x=9HU;:5<F�9�@#?��S������= $��� �?�V�Y���E'��Ux�=
4 >��
���8=Y�;�Ƚ�@���=Tqü��>���=Ջz=�v�=�]%=�R~�A���t=CY�;M�#�rT�<Pڗ=K(_����=Xg����3=yʧ=���;5���.�ݽ�1o���~���<�<��0�=�==�����%=�� =Hci��*@�UB����>�-�����=�J�=�Q�eT>�l:J ��z檽�ߦ�C�὇s�3�¼�q>9�¼��L�F^���J�=ǀ$���>ds-�;_g:���=�c���?V=z�o>wx����=��>�b>F�/����;t�>R��=5��<o靽JnK>Y�Y>b��>O�=`�.<�Kݽ�W>���=�C���L>Se>��<@w½
��=ק>���������C��c��ro_��w��T�n=�k<k����=^�~=rN�<�ŽuV>�
>3w<���>4Z�f9>Ź�j�=�&;�(J0�? 3=�|==����a��m�=��νُ
���E>�o�M��=a�>N�T=���� ��ω�<�;�=kl,�_�a>���<&_L;5���n4�ы������+�<�VڽX!N=���<��0�_� � ��=�?�<���=�b�i��=�*��?!+=���d�{;�%a<�r=F79=����I���І�=C(/��L�;5�> V�<l���f=�o�==l����6=���V���0�<����F�rz��4� �3�=���<@wq�]̽*N>m��<B�>>z��<���<���=N�5�/�=i�0>�I
�1�#�N��,C�=�Ю=����i��|��<J�R=���=�k�� ���o�=��P=��>��B>d=��dOO���<ԙ$�b.�=��ؼ5� =e��;m�=��a��^��3��g�=9!R<2�x:�
�.M��]L>�gx=��\�L* �U�����>��q�#�=񒪽��=��,���>@��<-�H=&*<�g���ڶ=�H�=�!=�|��u�{�����_2[=���O��;���=�
W���w�X1��[6�=u;���'�<~��<� �=�%�=������={��=z��<��Žns3� �9=Jpg=0��bc=�k�=�n�;�u�=j�T�����[�:���=L��<�>L����5�%� > �>�� �J����E=��2=`�K<"��=��<mOm����=�q�����=��>U�>�m�Q�=����=�@�q�,=hd?>������=��>��h�+����&>��E�;���N��=z�=15�<rw�;G�i=_��=&m!�ำ�ϟL=�>[�=�������0=X��+1���˽�U�������=̔!>��s��D�<��5=̦�=*f���>�D=��!�����KW>���Z�½(ۏ<� z>��>M�
jO�[��=�h >)=��!%<B>qw1>�ɠ�AMu=+����Ҽ� �=�q&>������ ��l�<�&��` ��XH>Nð��=�
�k�==� ����VM^=+�x� �'���:�1�{=orE<8�<{8 =���w�>�`��Jܕ>SM��C��2�>=��<��S=dk��8互C�=��-=��r�O��=��=&{�=�Dg��-2��b>H� ��;[+�z��':�,%=��t;E����߽�� =>`>����Ͼý���=� x>�ŷ����>rܼ�� >�n�<��*=����HL���3�=w�=�d���D�����<=��5p�< ���!c��jw��5�8�Ƞ;�a>F^ڽ����1�6<�ю�GM=��f��<��]��=f�=,M9>�僽 �b>N��=���
��=��Y�Y0�^+$>Y�s;~虾b��<~o�U�{=�N��7�=}����n�=�p�;�����.�z�x>����&�<;{�;�ګ;5.ݽ}�=����I����=H7���=Q��<��<h|=iK�=`���l�<!5<�>��2V�=�н�\�<V� �oK�:}̼�Z�=Z����g>)cj��+��q��Dh=���+���C���=ZJ�_f="�a�N�$������� >�pڽ�2F�{�;S���W"��׆�= �.>� �=e>�¶�;��=�2g>���������D��-������� �j������3M�^;3��T �aF =��=��j=���:dG9���ǽ�7k=:Ys>n�3�F�=��=?��=���=Ӫ+>�—=���<�*'�^��'�>��<�w >���=Y >Aq@=圼6�G=�֛�e�x�ڭ��]�k>�=4+H>�[�:���~<��m����ym����<�����#>0L�=S#���ĽX��9l5�՚�=�
5�'�>��=��=��J=uc��� �=I"p�E>e��;����JW>�~�=)���lνF�ͽN����lD>�6�=Bb='��=6���� >�r��������=?2=�>c$M�{�W>2�H=�������=5��<G�����=�h�=|��� >�q>��6���2=n0a��u�=V
I=37�<��6��A�=����]؄=( N=�=�=?���q��=(�ȼj�!��k�=]4�<r��k~体��=W(�;s�=>İ=���=�\$>����1�s����<�A����<kf�;�8� 1�9���&=���<�E�F�
>��=�������,�H���ys���=(a+>�(�= ��=�,�Y7�<��Y=+b =�c9��< �;<ix�����=2�N���;�J�<@R�=�.�Ĭ�=4@�<s¼�� �� �����nW��+@>6�~�t�Z=���F7�s�>�3W��i��� Ӽ1B&>�f�>1�>�|s;Ff�� ���xL��C=reY��r�����V5/>N�Y���>=��ɼ�+w=4��=uCp=P6X��q�=d�=�6]=<O�D5�=�$>˽ʨ����;r����=+QT�Pb<_�0>���1��<�Fj���>>�zX���=��!���]���<.=�}���@=��w�Ғ ����઼�c+��$@>�)���>n =<�Ứ��<� ��^��e�{���=����`�P+
>��s���)=��f=j`3�S7�=���=� ��)������͓�2>x��=53;�-�<ɯ"<�=T>s)]>Ğ�=I�X::��=�D�=`����都*���b�$�po>Ӱ�<�~��=n"�=_� >��5�[���yw�<C񼡭���7K�~��=N�B>��ƹ�b�=�E> �-�oz�=dz�J.>��L��̗=��>KtM�F?�;��!>���ou��q �=�;�=6y�=ϸʽڏM>5&�=M���Y' �.{��ͭ=���=������=��:S.>��?�=��=L-�<3";=0#2<�C�=�-�;J��-u,=��˼��A������J������8>���=�����=`l>;}{��K����<�#���Ͻ�?��p{=e��=3t�<���=������>�D��΃�ϟ��V<.D��M�==v�=V蠽V��;�����=v)>��A=@��Մt������*f=��|� ས!�*��;g�T���:kB��g&�!|��;�6>o=���s��=M<)>����*�����>�H�=@�=��C>4��g0>���=B�=�����r��+�6����:U��<\�$>g�s=ʍ��}>�=ۛ�����"��<�('>��)>W�=�O��Q�y=�:=>�����k��n@��r�>�2B=��=e���6� ��n�=�`G��b{=�/t<���n�V��bG��²�vٶ���>= g6�uoz<�&��k�=Ǝ��r�<j��=�6�:�>>ܼн�K<jR.����=�,>M,=O�V���4>(�k;+�5=Y (>�aɼ��ѽ�/7>�n�=N� >7�&=�Ϭ��-\�w��E�<�N��D���ɓ=�t'>:��G�=t�< �;�l�:���)�<'^r��=b���d[�j꽘��<��4�G=h�=�UK<��T��<MJ'�7�ҽ����g�/�5� �K��<(�½�W�C�Ƚ�o8>�ce�zA����=��=�m���Q輔��=/=�秽�>�춽���=�_��ԋ=mH�=O��<O弽�H+>z&.�O�= #>�-�=��>��=� �=�;���k �l6;�n�<�ڥ=�
>"���[�<���A|=���=��=���=.�m>  >b������=5�<n�5��>���1�Ħ�<} =�Ԥ=���X.=�TF��B�<|�ڽ�4 =���C��5=}��=ͬ�:��R��#d=+&q<�^?����ɀ�`?%�� ���Z>���xY��*��̙��ܕ=�0�<��E�->���[�%õ=���N��>�4=&}��u
*>Q$�; ������=�]�=#P�=�u�=�@y=Iȉ�kT�=�l,>F.��/�Q=C��=B�=!B>螩�����#��&(=���=�_�<~��=���B��<�� ����=AU`>��ӽq�<7�A>��ڼ�ķ<�d/����=�����������"5� ��=ʹ�=��<� �D>�e�=�=h<�=�����g<$i��'D���`p� w ��բ�M2_>*��=H���Tp�<[�>F˽���=O�漉c�=`���� 9!>_�1>�����|M=��ݻ�f��ʹq� ;=N��<'�<�z�<uL=��Z<���=����a��I>�� >�5�=�s���� ��)�<�z=��0��^��>���9>q��=⁩<H�i��֤=��߽C�s�L��X2��z(� �D=���FDA<�`��k̽�%�<���<�z���>z�h�fI�<�B>hG>)b*<�Q��8����� �9>v?_�,9�=$*��i�=��H���c>i��<���>���=�D>��=D!�����<v��=%x=sS�<��J�u��p�c�]DB��t�����=�&H�i��=� �oۃ=a>�J������ �=�x&>���= ?s�� <N�ܼ�;>nwĽ��->�~=���= OL���=7�J>��=ڿ�=gȊ=p���u=Qᢽ���=�>x��=0�=#�ؽ� ��=`!���>��^�Eo�����v�=$�2��!
=|�̼��=ɠ�H:��^!��A=&�p=N��=�wܽ�!C� ��=S0��TL�;鞇=Ki�=�R�����F�8��`�=.@�S}�=��Q���
>yr>Ȱ)��)���)��^s'>�E#>���=�_��Q��=~G��I��������^���<���=��1���;�|>h>�������G0>� ����z�=Տ9�����S�=�E�����=u'�=��=ڼ�=Ȉ�=�lR=T@�;�=���80>�!>;v�7��ꝼK��=z"�<�x�����=��&��->�^��nN�����=�竽�̈́<W��=|>�1V=<ի���<��F�`m<�2b�����z�=N��=z{��T� =��N��� � �3��籽�B������W�����<�P �Ȼ�=ޱ=��V��$�=]^=Ƃ$�>=��G�� #ʽ�"�<�<��=ѽP�=3�=B�>pD� D�����M�=+1T=wv�F1 >��=UG6=0 ��F�=z �����m�.>����6�>�mw��O��=}/~=���>4�=�Q=>�����a<�_&=S^=�.>Mڟ=$�=�L��G�=[k���~�Qz��µ�=}�<�0Y>��|=P͠�>�>�S�W��hME=4�3=w6 �����5�=%}��T�O�i��<o�������U���v��L躜=��?���V�<���F �;~�)��A�������̽������=Iuý$�}�*q�k[����<8�(�`�=4:=���;N��=�D=�����=���%�Z= Vƽ朢=d����=�2�=�O̻�+<�zSl�[; �;���<* �V;�<`���j >n��=.����?*����=L=�-=(�:>v%X��8Լ����wW�=�[����`�,�=�����p�=-��$�=����n���C ��ȏ��71>
�#:�Dҽz㻼j�e>�> )j:s�R=���=|!%=�=�5�‘��Pl=��[�p�k���ڽJ;m��e �7<^��9c�|���5>�f���}�=�RX��:�=aյ��\�� �=&��:�}d�/Qd�V�C>h�
>oV>At��j�=�D �}��9���M�='���p;���L�A>�d <���=@C�<~����|<n��+���r����=���=��輾q�����9���>��`�B�/�=�����=�b�F� =m�>|�>w�><�.=Q��=q���P�N%�<��#=��[=7�=5Ee������ܽ��,>ᇭ<��=���=:)=1̚���O<{i=u�,��&�1i�9
>7$ �fJ>ȗ�D>,���G��-�����=Am=�q���z:R��&�<�:<?�[=|�Y�K�+>E�<�<��>߽'1)��O�<�>J<B��<afo��
|=1�>v��<S��<!��s"���'>d2w<g׽�a=g�>�V�,`�< x�;�u��k�=�ч�G@>>�w�)?>�!�<Ma�-#<��;{�=�5��>w���S<�����=>=J�= �=6C�=I#�� ���.�?���*�����=K�<��>p�X;cYl<�sx��� >��=�l9�*�*����<YG=K=껊�#�¶��,�HL �^���i%�=y
��څ�޿-�<�֏;�[� ����n���x�<e5`�Jd>P�a=Z���1>�<3�a=�%�L�>�ʂ<�i>=�ʓ=�C�=/��G�v=���=��=^��g\G�j9��P�=���jw=����X|��Gv=�u���0�;��=��{=�#�=�����T� �<���=�������x�;�y>�Y�=��%>�=}��k�b=Xg�<,�= S�<eF�=8n��uu6�W���DZ��,�޽ ;%=������=�wƻG|�=�E+=T��z�T=����*>���=�W��Q>�@:���=�^�:�񈾝�o>/��=S=�=,n�=t��`3��,�x��-�=���<.wS<��=��0��G�<�ʼё��D=�up�Vh>7�.>�m�>�7M=(k�]� ��m�zK.<o'�ݶ%�B�����������#��/H�HTl<1��. <�X>K��=�� �(*>_������=�.w<]Z�=6�U=�X#=+�,>9ʽ���=�NG�O� >����}9��b�<
��F��*H���>��<�&�=�a�=��G=��>�����Ҍ������ཨ��<D��=������S��̮=��޽P�d={�=պ�=Q�>�����-<�K����<<{��:Ln�����=���=���=t���f�=n�;0�W=�=Q0������*��i)�<���=�M�=s�<��J��,���>>�eX=UĻ爜�F=.e�=��y=s_T=�W^=YѼ�>��ڼlV[�BH�=z���p+�=B��=� ��k� ��Ꮍ9Ѵ=m��<�a^�U
><\>��"�<A���B�=@�|>���=�H�=����#Z���<=o=�ɐ�Ë|��㽱i�������=<��=ۘ��rC���n$�)������켽<�6��Z���ڍ�;�ິ����B �3h)�A����>?� =3��=+������<k��;5�F=��;/>1�?�$�K�=$�>�� ��0����q#>y��K��=�&�=b�>mWE>R4�=��)<�F���N�>�]��<�#��k�e��;)��=Z�/��z�=?�~��?��j>���u�=��x�����=(�Ժ�a;>��<��h������f��\l=ۇ �Ҍɽ[��=�����qŽ���=�}>7��<+&���Pཱ���� �d�">M#t�n�T�!G��Q�=���� >��?�/�����8>( �;�l=�E;a�r��\�=���=� >��w��%>ٓ1�� N>���=5޽�U;����=���=[�ν�=
(�;=�<�[=~t[������;=;$< _���;���=�q=G�><�1�=�c>�}�=H����p=�E~<4����ݽc��Ð=ۉ�Y�Z>
���r=0���~���!z�; >�:�����y>�(�)ߐ��ع�7H�=l��� �<IaC��d����q��>B�=��:=6���=1��= �=G>�<d�=�t��K(��cb=�����q�<$��=*��=���N�U=��z���N.���q�=���=6�ֽ�{X=wCJ< ���0�8� =y�L�K���p� <y. >����N�@��8��%�ã�=��\�f<���. �0#�=�}��\߽i� �x��<��P���)����%2�=
A2�d=�θ=���VW%�2�J���>�8�<YЕ�ڮ���E.�%�bBὺ>�g=�H$���g��=���=]45<����9=V�ʽ�C �I,=�~ѽ��<��=)Q!>��5=��S=L�\=�'�c��<�:����佪fR<���p��<�K>�|d��0�2�&��-��U����=u�?�~��ވ�=��ɼİ�5�D=>��=��>0{,�$2�=������=V������;!�޽����AU�U[=�f�=_�>�)C<��e=��0>W��<���r,<�ߠ����=��!>� �����=/Z����=E��=��<�á�j`�=G��=&�-���>���=э�=4���)������弊X����<����>w=!:Z>��.=�6=�nG>4�h���=Cm:��= N��]��<�������μA=��&=j��<�Q���'���Ƚ����u�">_O�s��=�\�=ť�� =�5"�a�=��E=�� ��?� �G;�)=9I�A&:=�����>Lj�:��s�1d;=��=��y=�����U�'������S�e�(�潣&�;z�ֺ�����=�� �*:>@�Q�o%d>�x=�
��i�=�>��=�ҥ=���=K��=B<�|�e<_��L�=!!>o�=�w&>�>�W<
%=����=A�oD�����=;�=��j�Jٽ4 M=�x->-Й<��Q�����<�m�=�`A=(M���_&>Q#���{�=���ԑ ��y[�S2�=<2�������U�0;噺=�i�=��Ǽ��>�=����o�������v��-+>��=�1�=$���ؽ4θ�X����%<���=}���P*<^u> ��=dC��3-��+I�=Y
��t�=�S����Z�.uO=H�h=�=�����<�ա=����v��<:l_=CS��I��<�����r >LJT=�ّ��,车�,���W=A/>�Z<�O.��3нvW�}�
=v?;��W�=�x��Ӛ���X�����={i��*m_>"�I;v�D�Y�S= ���'A=� �&K�=4��=�<=!�1=�oѽU��=㋲��� >�˽)!>�ֺ�L��=�=;2�=�Y������C��l/ټ Qʽƞ=���<���=�l�=� >iE��_=�g��>�d,<F�9�}�0��c�\��<Z�<�P�e�zf >g=2�޼|�>�'�+��N׻���wo2=��9<fxq>���0�����<<��X'.>F��=����"���>`�E>�y�=%q�W���&i7�?=X���W�=�g`��=��)<Sʘ>� >�$=�-��#�D�k��=�Q>],��Я���=12<(���X5�= �`���>�����g�श=�qǽ��N=�O�=��s�v��<䍕���ԽP-�<�H�Yd���Ƚ1 ���.�=1e>B<�^�= �~�X��;�ӭ�|��=>��<�a$a�i�<\깼��b=ث�=f�o�۽k�>�
���'<<9/>6�����"��}���L���\���"���:=����jR=�ϴ<^i��.�=;N�=֊=l>K��$*����CE`> +��>� ��b�(��#�<�?>�֗�����}&z=,T�� ��=� h�`›<����#�˼W�|=3��= ���6�3=.�d<�"�=��=�u���">�X�=�Ju=��ͼYt�$�J��~��}�D��񣽞���W�&>�r)��<+�x�=����$>~=�ha��������=YC,=)���`&t�Xd =��=���;��c=�X�=�����=�w�<��Pἇ��=ה�:��=��9�œн��h7 =���<^q���J�b�
>��H>�(=K�x=�C�=�/��^Aョ{T=(�i=����#=z�>�{b�!��������<?�<���=y�9���н�'!>��*��Vu��F�<����g���< �;K�b=W$�<�g>vzL=q؍=�q߽�4�=h��;Ҧ=�5�=o�U>���^������x!��$=�h^�
��=�i��!�Q= �ż��R=/Y�=wu�=�G�<c��=���<?�g=�{�=�g^������qa>(7����N�S����b�X�����=)�=/zW=�6�<�Խ=���=D�Z�.~>W�y>�mn>Ur�=�5�������U=���R��=sT�=�kx����k>^��<ti>�:�������>�"B�dֺ���=����O���$�<!�*=��=�m�.=:�=�&1�����������a��, >S����ռ���=���=T��<��ܽ��>p|�=$�=�W=�P�<l�#�F��;�_����=��,�W\=�8w�]��<�g�u��Ԡ�0�S�ث�=��s=��Q>�n��c.����p⇽=S���ǽ5h��0��=��>Gԙ��Q޽j�����=�x�=�� ��v�>>��<�i�=�]���M��7'J>u���,��� �� �1;b#D<K%)=U����Wʊ�� �=����`��Q✽��>ݬ�=�<3��3)>�&1���<!RT�4�`|C=uE ����=W*��u֏�Gk�=��>i
�=�6��F�>�1 ��N�2�&=��<췽/wa=0ΰ���7=��O<�H���+>)'�(zY�m}#=�ė=��/���=Y��<��q�=��=�=<����U�����F>��O2)�i�彴�=-�;=�e<�>5� >">���=o� >�Y-=�>�o{=���=vy>���=��O=U���~��pL<�����]�=�ꏽo �=�>����Zş�W����m��P�F���(=GN�<�P"�^�н0J�=����@*=�P>��� �+�^��=ÁB�C�*<|a�=/v��TX��1w车6�=��=+�G>�3½� t�{�J=�ؽJ9t=ny�=0�9<��=� =d��2=hX�=\��=f->�A(=��<ft~=��@>��=�/0���h$i<��j�����(�(����@'��"B��r��>Á����=��U�������==㽺�0��Ka=*�>ͣ�=�����S>�:E=� ���e�=J>���%����<�d=)��=�t <� >�p��/��Vk=�v� ��= ����J���,>�__��ou=�2�<������u>�P�� ��= ����"��j��=�=Ü�=Pu0��3�=ؒd=1=;�����L��{�=��">k�=��>Rb+����;=�>�׫=4�"=�bI�֞�=�&�����^�;Wá�Eg>g�;a.�<�c�����:B�t=(s�<����۾�>i��<L�G�F�$��^�=(z��d�=a07=�B��2����л(�(>�m����<Y��=��6�%��==�6 >)������=��9�s�(������tq>`\�=�(��=��~��V�o��K�<o�=~���K;�\]>�&Ľ����ּ=�JW=ͦ=��'�� �Q� >�����������|��| ��5�� CE=����/��3�<��%>�Ԛ=�b�<�q�<����eǽ���<���c�*���'>PYO<�;��-��<:�=rY��b��=�
�z#�=�zL���:��$=��̽��{��/G>��=e(0=�C��:��%�b=�U�=bQC>GI ��@J��N=ꣾ��3��\?>9�]>0��> ��<^��=�!��p<�p ��aB�ڷ>�oK�\c^>7�=L� ;l䧽2�B��z��/�'=m9��x% �A��k�*�k�����>ȇ�=f�7>�=�>�=�=�l����߽=�ǵ<���=(]��x_y=�p�=���= <*�������r'=�4>�<�<�kQ��ἂ��9Z^�<��=G�4=���=�u ����Z��EM��f����<�<�o�S;��
=�������<
�ʽ��ټb����\���6<�:>��R=ʓ��B�>��s=���: �!��pk=�>i���n�f>�IL>���=�Np=�0��Ͻ�=�pa�c�{�"Yʽ����O=�u�P���>m�`�c��=�t#�i�)�8��=�=�>�3<겂<i"5>T�=ƒ�� �<b�E>��<7��Z�y=��=M?=
�>��=b�S>�4>E>zƊ��T���A�=����?�Ko>�$�;+D=>��н��w<%��9��/��,<���7� =���<h�n>�j����[�4���!� �~�����=v��=�����KN=9�<έ�<i���n�u�[=:�M=i?=�á�>^���8�!/ =��>�ϵ�4���
�|=��m>G�>�mp>�y�<�ª����=�~����l=I?�=����� �¯���}&��+ � �V>x��=x��;�n'�v���}5�k��;��{<�=�f@=���=6��=K��=�A=� A�ϗ�;HM>�b*>sg+�.�"���0����d\1�+�=���=�]����^��c
>�4�vS��:��u
=�����޼�1=���=Uz!�,�=d�{��1�<-�
=��N��Ӹ=�}a=^�=���<����,�a>]�b��� �=+�=��鼶�����S��d�=�s>�t�=7d>nx1������*>i5�%�<
>9;��<�x!���S��E��{�y�����=�@:= '��Y_=%���$��!=�%�<E܀=~���^��kl ���#>�M��8�/$<>m���I�=�n<�n3>3@�<�� =������.<>�Ӌ>6T�;Wbߺ.f >�LD>�o��hڀ=_B�� Z�<�=�=�� <��������Sz���=_�#��s��c���Y�=E����b�޻ŋ������l8�����}hA=Y�½X< �>����=s=j6>C�f�mb���"2>e(���'���v�3�< I>��"<6m>&m����_�U>i�����<��<��{�wp�="�����/>jR9=��
�M�d=�C�;��ýr ���=]���Y7���1�������]�Wཬ�E= �W�z�0�� *=*4�;Dt><
�=I���F>Gx=r��=���8�=�U�=���o�{��ii�a=4����H���=5�� T�=�>f�˽!H����=�#��� ���%��ا�!>[�s�� j���Ѽ����m� �������c�-�I6O=��== �����=��=�h*>�2X�1��=| ��*�G>�y�=�v�=�6��N =�V�=�; >�s>O�=lj;���=�
�=��=�����=�;vI=���<ک⼞�����=�V3���J>
�=�&�=�t�:��:�XȾ<����#>����t2���ٗ<Ǝ%>����=���j�>A�p�o��<�g=i����Y�==���># [��. =���.���r�=��=[-%=l�<6=f>4<���,>�#<{@0=3�-=���;X�)��&>��=)�j=����ط�>���=�7>�'��A�=�(=�;(���A>��H=��>~�\>��=1:=�q[=�G���%�=���� �<l�u���Ƚb�ȼ�T=˅o=�:��8�=G��>/���Lm�=I��=���<h�g���[����=���=��=b$�="+j��y(>`��=���=��J� ��=9����1�����3���S��=�����>R�G�k�:��=��ߑ�,���Xc>/4>�7���X<O��<���K�=WJ ��-<�������S;��wӖ==[�>4j;>�Nw=�>\�<�9��6��=f�%�=R �=��7;$)��%�ͽ���X7ڽ��5=�W=���}�������둽 �>�6�Bg��=
t;�~�<"#=z��=Q.޽����?=��L=~��;�':���3�ȇ��s0�b=��8�.�<��2�
i<>�⋽��D=�h�<*���'>|7U����;x�=؁�B����F=�e8���J=��=J�ļ4$��J�ĵ�=Q��<�C�&�=���6�o=~�y=�H��U�6<�7 >m���*:�t+��Z!���R��� >)`3=�ĽC���4�=��==�>j��@�=Ay���*�:
��<��5� ��=��=�|b�ש�=��A>H�=�<�;Bx<4|=Kp���+8Tlx=J���}u9�]T�l�J>�=��*>;5���#��ד=f�=�p��1>� ==��J����:�z<�~��4 >jH�=�T>���<�U����v��}ۼNdѽ>��>l =D{>NCJ��&c��V���49>�6>�!�;qd�v����(��=C�&����=F���|=�$e>׳e=��`=�����J�<4���.�>�-��s�J�D>�M�= V�=XO��� <��>\�S�o�w��Wȼ�U(>��޽�$D����B�>Έd=zƂ�[� �ݽ����� �=�L�=��x*=dzϼ�2�=�d��8�V=q��<x&5�w�?�=<�=^=ַ��m����V��<�>J=��p��+F=������a=m4"� ���C<�=�N=`�����KH=@��D���R�=Pf>ǭ>�x4>�/� a�=*$�=���q��U�;ɘ�P|;@���� ����=���<;킽��D=�G=��A=���=�'��P�;��=(�>������=&r�o>��>m����<����$�= �*�׬t=�sf=%t�:W�@�*�=Z�=x��<&5=:r/>-V���=�^*��o���C ���W;�e�� WL>E�u<=�#>˪��M<ۼ=�%�=em��:�������f���=�,=���=d^)��� ��sq>qW=��X�o�]=G�F�z�D�0>�#�(4���*U�`>���=V������=LD=�wԽ�2���H=�!_2=�V�=Ӡ�<��I���<�K�D�l���">%�?<�{���׽����������e�Z=��h��\�3�2>\ J��">jf���<$>L.ڽ�-y<"RT=�Ƕ��9'<d>d%>·=���=�>����
Q�=F>�%>Ic����<�{W>�_����u� �y=f!0=����X#=�A��+�<������<;�4��G�������{�r� >{�,=�+�=[��=���Uk1=�m"����<u(��z`��T��k�1>cR��F�ǽ���<+p>�Ô��)�~��5�A<�D�=R�=�(���5��~�< ��wɞ=� M=���&ש���X>@��=��?��)>�=�_z=����=>fm �����`�X>�`���t��^���>�f��̧=1�8�%�8=axR=��/>���=]����/���a�<3�P>�,=��
��5�O0k��#�= ���aq伝- �<��=�����FC<�Yc�� ��T>8��<-�>��=�P���=�)C�o�>�᷽-"5>�;�=X�= 8�=EJ>�d��_m�<ni�:���C��k,=�o����,���J=�d0��;>�.�c��\ ��� >�B�� �����<�9A�L�D=�7�=�� =;W�< ����(�è/=���D <��<Q=�={xu�S�I=,V��?��p�=�C۽\�>��5�����9>���<x�)��KC>��=ڈ=t�����<��޽߶�T�=0�ֻ��2�J��=���=���=�E%��?6���S<4 ����;>[�ʼ�l��̐{=�f>h��P�<;��>o��������
<�����ځ� ��=7G�=���<��v=f�I=��� � >%�O>2Tq��t>��=.�A=��=�֙<:f*=��A>�_]=07�=�㮉=Hލ���4��ˈ=z��= �ʽ��{���m=�}Z=#��61-=�@�;�1A=I�J=�a���J>� ��j>�
����<J�=x��q��|㻹�p>�}$�Ω`=�@Q><z�=���<p!�Uk=�jY���B�4`=T�ӽ��>k��<��=��;>D�:��t=Y>��=`7�C�˽=��=f��<���KFܻ�=�=�m���#�>ހ�<r4>!e=�>{=5�?��)ټ�����"� ����N<v�>��?>.>=�༸� >m����
�<��Y�R=��^=�e@=�?�l���ɶ�<z ���=��p��b��<mz�=[ ���ɶ�+DQ>�d�KL��*ׇ=�Z>�� �8�>%��=��n=ڦ�;�-v��w=�>է]�/�-=xݡ�T9�.d�<(=6�B����<��'>o�u�t�?=ߪo�r�:�����e��.>W.=�;>��I<�zؽV��ux;C8.�":(=n��=b��<m~��(����<g�=��w�䠭=��>L�k=܈>��;���)�(/c��Ň=���<�>�v�=�[�=1�>a��}ҼPʁ:xg=� �=j>�����<0�-=r1>��1<��n;� �=��G=5y���E��\�D��<���=�M��5H�~v8>�4>��=���=Sm�Ҳ2��s=�;��"҂�$;>��)t����A=�
��o6�Z]�u�&��1]�s�"�k�=s׸<�m-�Fbڼ��B=��Q<+<b��DŽ=�½*o��/��>=��z>��}<,��=u��=v�k� ���‾�n۽󦼒���,�=
�!>�>s\�=@в��il��;�=@�\�N@�����)ݽ��� �-=���=^��=l=-U;���<����) =��4�Y&��3;� �=�z�=�S���$-=a��=/�-��Ͱ�gf��^��=q*�%o]�x>�p�=|>��~� }=�D!<�Ix�l$j����=���<�Q[=�]�=D����O%����>�V=��H>W�ɼ��ȽL�v=����������+4�=���=�~�>i�6>�^L�Of>r:/<��F>�h��������>�G����<۲=b=(�=�.�f�m���<>��.=�ߠ�s� ��`=4[�;Ҍ%�𦏼Hu:0m
>��\;Yx���ļj��ɓ�=�� �`��;�Y���*=�����l�X��<NUN=���= '/=G��=��,>(����8=��Q��F�<�:>",���=���<L�&��H=DX"�l�=�%�=n�=&�������<��=Lm�<Ʉ>v�v>Q��� ��o���6�su��ǻ�~�\���ɽ��D<�н=W��4爻O)���p=J�l>���=�c�;�H�;TN�m�ֽ2�;�ј�>,��=/ �=CA=��= 
=M������&=����*U���<���ϻ�s�=�y�<�E�;h%�=�M��ZA>q��=jU�o���oM�=��������`��<g&>(�=M���"<'V�=�Д=��=�<�=�:�<β�iP�=/)�=h��|<����u[>Uț=xB'=��]=x>L,>�,�=Y�1=�ވ�3,��d��=��<� ջrɯ=�Zۼ������I=��g=ć�=y�=5&�=t��=���=zd�<���J�˽L�>]$`=i��=���<�h����.�=������P�Ɔ�=�<���=)_>},��L+�=��Ἒ}�=���[b�;��׼�ds�"����=�n��&�=��:=58�=1s���#>�v��~���q��=ǒ�<x����^=��=�w>R�޽g�X��2�;o.�7��˕>%Te=1*:�Q���\�Y=e�=jH%�S�i=�Ҩ�ۗս������XG=�D�qV;=�p��E9ڽ��}�?<���=�V�=L�=���=�A���򇽈*��Ş���޼=�LE�/�����i�7���/=����|=�գ< ����<�ؼ(���v�=�?>@���V�-�<���<�8�=�Q �o(���)>�H�=�������=L
�<��=Ϫ�����=7
s������<#K� ?�=Hc�~�>��g�`�=�hV>�y]��x7>#����j��.>W��>�[�����<��<H��=K�q>�C�!M
�*�
>D;\��I����<}�>@�->�<��9���A�=��7=A��Ȟֽ(�=V��ՙ,<�M$>G�o����=��]<��|=79�=�����܋��"9=rM=� �=܀��vNe>���Γ$��]��h1> �U��y\>���>e���[�̽&Y�܀��&�>aP�= d/=wv�=��>R�̽\Z5����=\�T>Y��=����#>S� �܋\>?*���,��>Q�q��,= �h=Pջo��-�@=M��=Wݩ9�n0�"¡=�k>�vs�s)����=v��>��:�;F>>�A>g#>�>.鱽��X�[і�����' ��m��&.`=C�ҽ���;�
м�%��l�ὐh��kI=H?=6�$��f=r�4�G���(=����5���ﵽ�H���=��>�!�<�ۮ�ahq=Yvҽ��< �Q�D�<ʊ<��2k��s�=& L�r�;���=d�=s�R<���=M�1>��꽻�D��� H>g_�t�;��>4�=�e>H_�<��:=����=�1S�Ӻ5���c���z>NU7>�7/>+� >�P���>�����%=q��<f�2����.��<oR��*Oݺϵ�m���P�>=��=GN�<h߂������~�Z�C�61��C9=��/�1C��z�=�T�;_{�Ц��
�-�S.0�\S4�x5����H>l���*���mP>��=o�;!�=��_=ޛ�<��ӽ�W>܂ѽ���s�:���R՝�.�����ҽЩ=�����P*� ��==�3>��l>@=�d>)˨�D�=-Յ��� =�>"�C�r��Z�=��q=P/�<3=���x><��=��=/�=�F_>"�<@�=�L=4�>T�̽��='��=~PA= Y���q�=V��<��L<Ƿ�=lD:=�Tn>���=��>� ����S����=GGZ=^o�=��=.�=�� ���ƺ)'�2`=>�ѽ'S'>�>ٽ��4> #C�����f_@��u�<�]> Gc�� $;q �=��F�53m�-�/<, �<����h6>4y���ys=�v�={͝=JU>3T���b=dQ�=��<���=kC��;.8���3=جN�H�=���|��=��A�4ރ��Ho<��i>zϺ�;���=�r=4�<\��r�\���=ݾ�=��=�l�?
�<�ͯ��_=Tf�=� F���=3�w�?Ρ���>�bd>��u<E�=T�����DŽC<���/ =�s�=�ǩ�7��� �����=EQg=��K�C��ie=���z!>���>�����M+���=��<�2Q��F>~{�=6����֔�cOm=��S�v��=:ỵm �k�<�5��&�<��=�Q,�N
49>�֑̽�=4m�����E g����=� �=���=�ݰ<i�R>�Ľ=�g���q� 9%���;{�=��>l�D=���=ҝ��'��!��QɈ�*��k���h*�ɏ���s���1;���=��;�=է��D!���M,�ͅQ���a>�][=%�<K�>S^�<t��=Ϥ+����ɹ?<��->QE>��e��1F��+�<��>��ѽ����/�;I�-� =ȩ,>;[�������N�=`�=��/R����eP�=����k�>#sI�󰼸4��R=�z��R���f ���=�W�<5����̼][������m�ý8$�=�#��㾩�����a/>���<���Q�����<X
>���=��=�% <�v�}!�=�N�=8��;�q�d���t�; s��O� =5z½�gƻ᧼������p�M�>��>�g+��ѯ�|ʞ=1?@�z5_��>>�� > � =u>��[=m
�=���:���"��=���� 4�</�I>)�=��v=�ڴ=D��Z =�>�=�a>l9�=0��=�*�=کs>(E���<-��='=q�[=���>�2M>��=L�=2���N��=o�>;���{<n½g�5>�}��bo=����µ�fz3>,�=H���� �����=\�������u�=��]>}��<=�;=�1�>���<os����b=;�n=E#< :����C=�=� ��St>��=޸�����=4�E��*1>���=����R��ƽ$���6O��P`�=�/�6L>�1M������<2�D=���u
� �;<��<�.�=`d*��½y�<\���6@�+(���w�7��e���l��J3>B�x�ģ����^�Km�=&��=��,>}K�����=�
�=�!=T�m�
�<��<uҬ=��
���D�o��W��>�C>D@�=�<&>�=5�Q�4>ռ�a�4��=L�>����8n={ѣ=���=���=���=� �=p+>4�>=譛���ż�u��';׭<�6>==�'E;���<���=�c�=�Yh�;> ��C�<7>�=n�0> �2��$�=�eF>oш=��>�`<�.���"$���'>M�l=��b����<�]>��P=(��=�{��s���x���ɶ���/=P��<4� >���=v�<>��;G��=;�9=�)л��'�-@���+>�� �t[&�d�L>����ԩ�����h��i��9�=q����)?�sN(>�ĵ���=t�g��B�����֔�=@����=�*�x�<Ii�޻<�Z�ٽ+��=^:���b�=-׫=��>奜�?b�=��q=��=?,ŽL�:>'�'>5�_=�`�=��0����=�GK=�S#>����i���B�l�>������=3<�j,+=�c�<i����V��n�<�P�>�=���ҋ=e=`���9�����<�w1�I���������a<�F==ϔ��N��=����۝<u��=-�*<J*�;
�����=��J����ũ/�9S-=��=�нG>�z�����=6�����m= �m=��A<B=K��<��b�L]���ǽ$��,�C���S���� =�M<Y�I>ٓ�(�=���k����\<ѧ�=������{>��L>{\�=��H=�OȽ��=DiW=�)!���������d��=.��Q�ڴ��ы:��=�I��� ���r�Y`�<��>��=I=qqA=�����ph=�>}�J>G.=����$w2=�*�=L�B��ޮ=�%�����s�1���
>M�H=�;<���=��K� *>�T�<g���?��B� >�G����߽��w?.>��9<I��_Z�0M<$�j�N�>��z>�u�=��ʽ��=�\�=�ˇ=�t��wB�<��������=�0��`>>z@=�4"�:P����׼��#���=�r׼��=�5 = �N>�.�=L�½{��$�����*���3k�=c�=� =r������H>nV<w�������"���������<}F���T��i��Qߡ�x��=�e�� �=GUý�PἋ>=\��<�;>���������?����=����iA^>��
�r�/���U����=�ս���=��Z>u0 � n �\�O��C0�=S?>��=��p=�`һ[�P����:Q(�d�Ƚ2nz=^=П=�!�<��N=<���<n�,��fG�I�9��c�<�t�f����>6�=9U��#@�� j=6=�����=Sm�=S��`�<Dɵ�嘭=`]
>�o>�h��ߘ7=��ս�l<<塓<۵�=-��<4�=>������=���= h2��x�=[��=>d��
@�=,�Ƽ8�'{ ����=��C=G��=���؛=��&��">���]��=8=�XD�=�I޼ ���j��.c>������l4�@��nu���Q<�?-��ɬ��H��<L�Ի�½3�>a���/�꼁��Vt��w(x�Y+g��K�= 2>�Q=��ĺ<�=qĐ��G�Tg�=vm��X���|2�����=Q�ͻ��_���=*N =U<c��< �=�Ȫ���>`ю<4��!`;Je��^ >���=򨻽W0V����=�D1>��e�\h>���;�A�=��=T>~�N�-���=��o�->a���(4����+=��=�]����&����s0��j�
U�<�&��Y���P=.M�=jk��B�B�1B�Y};=e�>�˳;=f�=���<�X��Λ>�R?>&a>��뽳�;�4��>��2�Zِ=rҽ&냽�a�Rj�V�ý�R>��½�} >��n<]��<�tn;���=MBڽHX�<�=���:����=�>���<d�8>�|�=;���`�:���=y�ӻ�d5�E�������p$>�FѼ��j<�\4�!
�sw���R���&=��g��Խ��i��!�֏�=��#�0�= ���� ѻy�=�9O>�{C��]Ļ*�=MlF���o�&#>cs���v�>�k@>�ˈ��"��^��=���p^�u���G;`>8����3=�t^=�X�=�j�l���mkh>�x���v�.�B=�2> o3>R�ֽ�>u솽krҽ�e= ��;X�v<�u�%�m���L>ԅn>��>�_A��$½�W-��.d>��X� �=R =6T���z=���=@2>s�j=M�<i*f=P��=�.�� �E� �����=9>'#]�O�=�l���
>���<�� >���=ʌ���y>*g�7��;��x=�׽PR�=8u�<���=�lK�j^&�X�q�tTr��f�=!���j�����=�RU�z?�=��<�O߽j�>�㽼�]�<#qѽ�+<�"%�����?�/��7[<�9�;o��om�=�,����>f>��i�u�;1w>��>�1�;����q>a+>�Q��]ټ�Ì�?�3��о=)�۽�Π=�=I ��Z�<��KZ��ML>��;��qf=g�O�=\
O��G=�E�<���<��@�;w�&��=�43>*��=
�:O l=��=��">z�ټ�� ���=��w=�!�Ic���� ���*A= ��=�,��E�;���=ҿ�=���e����L��z����ͼo;�O<=@)���+��^��=�}9=�y�= ]M=�>�<�����!>�}�>j�=� �<���m��`򊽫�>�5>�z=��$�J��=gZR>!A'�݉>������D>¾�;���<�O�=�]��@a>��x����r��׼�=n���ܼ = ���{$>����^6>}�� �����;���;P����,�� ͌<"�O�J��=�#�%�='�P�Y�<��=��1>�l�*�>̲C=r���<wf:>g'�<�ܿ=��d>�G[�,���i�e= �=8��<D�o=7��<�bf>��<T��<LA~���=K,ӽh�>��׽T��=`�x���&��k���0�=��T=���;%ᔽ�����=��:D�=��ٽ����'Q��ʽ����?��=��`4˽>0���_=-1����t�$ڋ���=�}g=���E$��\�Y=�,��"3���S����=��=3��LE�=ԛ��+��=�/�=y��=dw'�����ׂ<���������!��98="�����y�)�ý>/�=y�1>�'f=���"a��=j<. 7>��>"�2=����9��u�
��U���G���+;$0U<�M���?<>
<��<=���:hXu=]$>t's=�󏽮n����;�R�=̌S�e ��:����l�=��`�<'��=����_����~�a���xN=t��=~��{Q���9�}��d� <���>a
�=���>����r�=��Ul�=���= ��<d�4��f>��>���&I��V<��=�,�;4�5>�'��]K>�b �-���SN��:�C�7><F�=A���p�#>��=���ؽb��F�ݻ����.�=J��=�*�<��X>8y<p�g�ϳ�<�
x<j"�=���=��*>(��Ͻ���ݗ�Pbz�q'��%:=��1���6�\Y����&>�8 =[7��8��=o�Ļ5r����=�?�#:�=���<��>���<z��=�>�\���='��=e��=���=��=p,���H7%=�'=l�=���q�>��F�@� ��Aż�*�礵=&��=���<a�A��1=,�>Z�Žj޷�`��=�6�>_�S;=��> %>=f=6�=�p�:C�=WK=���>n��=��N��0>�����oA<�1<��P�/�+>O�)���=<��{;t<�><U�=m C���7�;�y�*>�!�=/�P��N>l����c�=Ƅ=h������V�������Y ��=�;���=���<��=-�=����2=�:=�� ��f��U|=:��;)2\���
����=�u�w����N�;�e#>�!8�%f���#�=�@�<͂ =�H=�3��%�=�`*��I�������=�_s=+��=S���W�f9�=� �=H ü�xl��>5��<u��\�v��ߊ��^��jy��<Hn���ʽ^O��&=<j+�=g�Ὀ���ay���;�=�!��c焼wM-����X觽E�=�3���)�=�� >�<O���=O�����=7�ҽA.�;�J8���W�1��=eؽ����g�=���Qٽ�*-�v`��=��=���=�*�=_�A�):�=�T��w�y�=��A�����[�(W��▥= *��E�𼋸���~׽�>v;�/={���)<�����#=��&� =�����=x�Z]�=�8 ��t �Q�< �=�����߽��ҽ6���aɼưq��m���oZ�7�<��W=��&>�p�<r�[=N�������[���^=ݧp=o��9܅���>?��=M�=<6T��h> ���FK=-�<����Z�ؼ��>D>vR�=�Y�<�G=K��<G����F=�Qb=�ɼ����'�=�V�=Or*����=Y�����=�ȍ=�=��M����=Re��!?��*k�<���;�B�<�+�<92�=_���d#d>�Aݼ^����?Ͻ���;I����={r�=�SƼ��;��=��t>��R�gUڽ�۷;�ͣ=�DZ=��=�T�CJ�=�4�=nX�<��ۼ��B����=c�'�������ýV�ż4Iս=i���<o� ��� �=��+��6>�$��xȑ=�J��K@2���ʻΔ�=iټ۰�=5>��=�m��-=\p���l���W�<��;�V�ڼ��g������ (>3?�=��#��������)Q+>�>�=s�=�䧽­�����Ig=)��=H{�=�]&>��M�7#0�����kI���>;���Ž�k��r��=`�<��4�����+I=���=�)�=H��=㨅=�� ��݋=���;Q >�X=��>+v��)⎽���{�C=`U�=TAս>���}�=���=a�?�W�=����"f��ݰ����=���<"�S=��/;`�P��7��}��������V=^u�=A�-����<������=7��<BԂ����=���:�G��d�/��������FӽK �<0ӽM��P6>�>��&�ط���͟��5�]�>< �
�T�[�rg"��>�+��9� ���>%�:�� e�u{�=�_��D>T� �d�r=��y>#A=�j�<�����Tƽ�63�]-=���=��;%�=>6Do��G�<��0��½�8��i�S��f�<���=��v>Vソ�`��銽�Խ�k��������X��G��k�`�=���=���<!�=���T=�b��f�^=�7��o��=�����&��D>������:����=����`�*��P���=D�=�b��X��<�'����=&*)<��;�ч�æ̽�B�:]�=lȽ='}�=�i�<@�<���]=V�3�_���Ry><w�:@�Žq�z�CF.>���i���D2j��Ϋ<VA��g�= SQ<�\����=)o��c>��9�E�����=G۪=�6��O׽��,����=��޼����l��=h�=����aU<��:�ϻ��>�NR�ڒ^>-��=��ڽG�޽!=<�q�<j�]����=������=c3V=��=3��<�"�=9��;+xż��,��;�����=B��=���=�U(>K�W�4����\&�xU��� �=F��=;���0���<�ߋ<k�0��会��>�Sa�"��=S��<�ݽ�D>`6~�\��h� ���Q��k�5�@=�W�= I ����=�a��1���Pս��9��c>B�;>Q�;�|�='��=�����ݿu��z>Q��=ݮ�<�kz�ܴ�=(�>R�8ý����'�;i1��^��ɕw��F�=t ����2�r
w����� ='(������ݛؽ�[[� /�=� z=�w�=��ݻ1N>�8�/_='{�=�2c==�=���;v�`�(}D�e�ҽ"���$'�=���=�Gd�)�
=�H�R�罚�L�k���2��aP�I<>��ҽ�=��-�<��������M�Z�R��=9�2>)�)=ٻ<y;_<�ۯ�� �>Р��Mx*=��=Ӄ=����&|�=�ݩ=� @>X$>m�5�w�'�N�=�>m�4>\���Ǵ��7��e�<f>�T�=��R=5!>�Y8>*�>E �=lu1>���=�g�=�)�!��:�����2=�=ԋ�=���=��=F�ӽ�, >0�<�sp=y ��ZП�JH�<���=�3�< ��<u��<�P�=v1�#j��(2F�w�=�~���x�6>o=�=[a_=��O�n�>Ԅ�=�&2=ݑY�ѱT��D=q�>�Ǡ<�>��y=�3O=R���`��r>�6�;�R7�'�-�h��;���no>��V������=�[��8ώ���w�� ���[��U�=:7����Ͻ��=Ǔ�= �=�����彳6�����6x� �~<�7�=ճ�=���>s��<S�=q!ν�; �E�='J=��Y>���klR��H���([<j� O6��c���b����H�?�<��s��f�~��=a�����`��.>셊��Ղ=x�� ig��z׽[��=�u =1��=e��<�9(<Քn�B#�G H��G���w=*缽��>��(�]� ��UI�+4�S����4�xo^>���v���搽��n>�r~� �����=˶�=s���aRt�� l �L��;N���֫���7=§�=VΊ� ->���="��=M�"���=1�=Slȼ���;��=�ar;�m=`�9=�ҳ=~A�<�@�<S�����>z8�n��nn�=�P���,�=:�'� ��=r��A2!=��4��¥�!�=y���R!=�F�<n� >��t8(#�;��>��k�=���=��
>��=�<>�i@�t�>��<���=�7�=ΐ<<G��=2ǽ��)�&��=�q�<�K�=����DA >�����Ƚ!+=_6�=$��nq�=�g��޹�������Z=��=5������=�z�)\���Q�=x&>Ҽgի��.ý$�L�nc���J����Ⰷ=3齘�x=γ7�*h��##>)�>�7���p�=l[+>�dh>�=޽�[=�ci�jg�=5 ��+ߪ����<C(*��%������<AV>��7�N>�] ����`�������[=m�H�
$�=�=-�����=N�������Y����a��Dǽ�>��1<7���W����A�\��<� ���>.�\=U�F�c+;�7e'�/�?�J��=l�<��m>a�h<�A������:���������i�)<�\����L� !>>'6�<d}�=�[����_���i��<L����*M<���=�4�=c�=�]��W$������<�y�v�����nE�<q>�p>�4�3Y�=̃3>��콴�=h���hB<�?�`�o>�h*<iO
=�-ֽV=�=�;�<����Kս�Z��:�����<nI >�К=VN��QMD��E��Z=���=/��=w�>� �Es۽"� ��i!�o�w>[�����9s���sU><=�w<E%
>�k�=�$=��:;<h=�I=��>>gaP������W�=[�2<��K>�}=1�=��G��O�=��<=� $��� ��;����WP=��G_>�V>��>d?�<Aƶ=]7>.�S=� ���)��
����y�;V��ׇ���I����=�J(=5Ѽe)�=��==���= l��v�Ľœ�YƓ=�T!�k4F�ʲ�=D��<�ܒ<)����>͊�=�ց>{s���fŽ�妽8�D���1>�a��/;$�~c0� S˼*��m��=Ar�`�⽅m>��=(Mڽ��ʽ�d潭�6>���=�-��pߺ<1 �5�P��X$��?[>��=*œ��F�;_K�� �]>��������˽l5v���<S�=M�(�b���27����=�T��ی����&<�[w=��m>�@��l�<�S��$>���=D�0>9�6�1Y<���G =�T�<���=���B �D�м*ν�=�����=V�M=��=B!���N<ݎI>sܽ��;���<�.�=!�>@�+s������S=�XF>
����B�QL>�m��<����W?��t �}>#�=m�+�/�>�[Q>s�4=����<(�= �J��F��Ma ���=%tv:@I2�n�'>�e6>e �=
���>�<�� =��+��lI;��>4��<@��=zm�=�=�Gϻ\��=AQ�;T? >dq5<�<�<�f>���<4d��s�(=�J����{%���+��
��;� >r�=bo���U��-m��l=g�]�M�>��;>��]<B�w=�tG;���=A��=�|<Z�w<�+ ��t9>~��K�(�`�w=�Ӽi�>���K��2=߃o=B;0>�$ټ|���P�=�"��~�������4����� �N�Z �<o�
����
>�
>�N-�Ҥ�����=�-O=ҫ��
����[���\)=��}=�J8>.>��(=ٟu<x�<dO��r��=[h�<�W<��u�U3=�ԕ=3�4������n���/㽱���ӟ�=��=e?�=��b�R������t=v<�=E�ؽ�CT����='c�w��=��D>��<?(�K2ۼ�d�=�q6>W.ڽ���<E\�={Fڽo�P=
K�=;��S�Ƽ�gF���=�����<�
5Y�:��������=�X >3�S��X�=���<FF�=IJ�=������:��T>T��=K��=� �xP⽆��>W�<|7���”���5>P_&�����s��=�w =�a=q�C>�O�=�v�<vb^>2��=N�����I���,�>�>��i�@K>)A�������>)����v� 4�P�,>d���f�m=��4>�)�=ڬ>_9�1G����=��2��s�<��ӽܙ��q^=���=9�f�(�=�A�=5݀�n茽x��؄׽���<X��=���=$����$;�>��" �=��5<�J ����=�ɽ#�>�{J�jo��� Ͻ�U�<�q��14�=��>���=��\=���=^���:>�C�����=}`1��$�U�h�:F=��u6M�����1�˽����v`�<�]�<���=��V=�^���>VYZ=P���?Gp����;�5�� ���)�7�>�Rg=/�[���(>��>����'f�٫V=">�WM�$Mv=����t�=vq���� ����(ҟ<�=x���,tG=�R�����+��=��<}�<�%:��P�<�8�ۼ� ��=/>{Tb�m����r>K���]��������>�<h����%��:&�=���"���i�=�M���49=%�U>��>�a��T[a��� ���X=����hM=�M����<�>7>pW\=ϻ�=~��ޮ���<�Aս�b�=m�+��ོk�n=��ٻ8�=�;Ƚs�V=���<a09>��8� k��ط��)ֽ�j����˽T���B�<d9�=b�Q=\��;�L����;�C��G�=��V=�$�<?$��D�=c�T<M�>�ݕ<���<xN��# >� �̖�=�Ǚ��>��W�5L=����=���;k-�<�d�<���P7����>���=�轮������&���B��<�('��>1<ٌν
v��H<�qq<W��=����h����v��;7�=k9<B�콎��� �M>�h�����=Т�:.~���_�=�����~��%�=�B_�l(ʼ�A��@�=��O=��(=�=��|>����n�=���-f��d:����=� >��8=�� ��oV�b���>7�=�q����;�>�=&��;Ʒ+�aC(��ج=:y>G <�UN��c�=L��M����@>�U>n����׉�غ'=�᲻ ��_e�a�1�}��=b-�=����p���)ʹ��=*.��v����-=�g��� �=3ڼ暽Yk=P;���½V�;>\�=����<� � L��Z6�����\z� �i;13<訆�.�9 �=����ւ>=Q =
b>�-9=��=�(�.n>��9�1�3�&���=#f/>�_��L�O<��=!��= 락s���#V=��]; A�=E��=�[=����7����Ž�� >��!�쬼�!>�>�=Lԧ=����$y�r�{=X7�=K�=�,#>��>t.p<�Y�\���>m��H3�=�+^�2�뽡瀽��P>:��=�3��I=851>k-�$+�����=�`=m�x=�L���\<�@�=�=��7�!�=�!���\�=E��<��>���l=��> i��CC����ټyF�X����D)��C,�;������=��ս�l>\��=���=)'=7`=�z�<�>�}�=T��VM��
D��� Ǽ}�H���;S�7��є=s,�=Fh5>�`j�$Y�DM����=��7>ЈZ��F+��}Q���<��=Q ǽ��X��j���C��W�=Y������'>� >�(�=���=��=�bB=-�Ľ���=?i ;���^5�<�5��:5�0���T@>�lS=���=�2{>��i�Uѽ�Zֽ%xi�g<���D��N ���!�
�ػ]3���>ഩ=X�+����=�4=]�=��o=h��b�E=CQ<V^���q���`�=y��=�3�B��=yI��Yp���B=c�=duٽx ,< 舼.؄=��,�f.�F�ؽ}��;3^�KP>��
==�\=^=�>�=`f�x���ɒ��vŽ�Q>Kb�=BA~<r��<�?�У � i�� ���1�<u�!>a͋�<8>����FR=񩬽���=cB�����=���=��=���|�=��N>�m�=omJ��F>�������=��=�t�=����yE<��u>�, >���^�N=�=�;�=�*�=D�'=BE����\=� >$G1>(6�d��=Zt]<6�U�lQ,=��I=o�?>�6��X�:��>>��>h? =�j���.
>�ѽC�����<|[<�D=> ���6=��=GY;��U>�
����=���7� ��!���W�=��Z>�B�=��p����Xf=�,8=��>e�K=�|����N<�f�=�伿�j�> �=�ὈZ˽Z�d>K���%�׽��>9x<��= w=$�<o � >
X�=�U潛'����1��V�5�r�v.��9B]=E>�=�N=���3=o�=ښ���!�A3>���: I���Q�R~>wR.<�{�<`YV="Q�<\X&>�A���ý�ʽ�/>H��A��<8JV;�'��Լ�y�����=��=i�<������:���)�ڼN���x�<�D὎����(R=��]��[�v��<(�����=<��U���}>�5F<ط�=]�w�O�G�T:#�,�H<F#!>�R�=ʶ�=]r��_c>�">8�ν9�~���>i��=�p�0L ����=�.$=\8Ҽ%9H�cL���w��|�<8QA��\�m�W��0��c���1<[���-\p=g�S<��==Ͱ9=&V��Dx=�e*�>�`����"��1;>��ٽb��=d��=��=�g>҂���-�=ݿa���O>�� � 7c=DG���0=\��?Ľ[��i{=
�>�v��e=עF=�򭽸‚<� >�C�=��������j��<`ew���w<C�Y>\��=bj=��=�
���={ü2�+�u�=md�w4�C�>z��<�)=���<���= Ѽx>� ����>������[f�=^�>W6>�W=t�)���<�]ƽg[G�'q%�ZF��8�T���O<�6��K=��u=��U�e*�<��H��.=Up��h��=�p��VL���S�5fɼu�n�$]j>A|�=9��=y���S>�
> �%�YVY�:�o>U]
�U�1>�H¼����%os=h��M8= ����ك�^풽�c軓v,�B��!�0=���=���Aғ��'2�6��|�/>�w�=�}:�7���m��=&�Ny߽��+>HP�;�⩽<<�)����=����Ԙ�<$�>������<�N}�0�=bι=p@��5�=8�z���w<p+�����=�^h<��%�K7����$=��(:�׊�N�r<{Y���J���9,��� �������8�=�:��7���Q>� �=�.��n_���9=Q^>���R�=�~�<���=�3�=gc_��"e=�p��Ƣ=�m�=�>;e��@�x�"dؽ�]�<� ż�[t�����e�������H�<+�R�l; ��=g�<�J
��7I�����M >r�R�A�a���'�f��=�
�D @=s~�;�K�=���=M$<���=n7��?J�kX�=�\g����FF�=��2�<E#<�l�=Gs>�/�>��r���o<��=�H�%xA��Z�>�0=x�>�����>�=ع4=�ν_6�=���:���< �>��=ƃ$>X޼�{w9�4���>K��=�㔼Kt%>�g�<m�=�$�����>iCݽ�^���T�1��c�\= �'�F�z=X��f�v>bo��3��:����=T�@>}Yl<� �����Տ���6S=.Bڽ��bĽϞc��kA=R��;V����->A~m�O�>� ̽T'L>�[-����=����T��=�u�;ڧ�=!�����=�A^����>��^=�ǟ:���9B������.�L��d6>�D<�qG�=m��=-�=�{���8�{コ���.�*���׽���d�m��9<򧐻B]��<m��Og�;�A7>�G��k�1�2=1���m�C�⽣H7>�z�=��`<��D�nط��N�=kWK=^�p�BgS�;��=@L����=��I��I`�� }=��w=۫�=�]���r�= 'i<�5��C����%=zG�=�z���f�<�&�<��=(�<���=��=��׽�!�= ��=� /�@��< >��<Г��KU>�L�=hJ�ޢ���JD>Z��=��P=f���� �aC���Ww=�%��u��=
Q�=�cK=|����Y=�'�!��r������'=��K�:�����<1v�=����&O=����Ɏn="8>V�Խ�.<��6>�>��=b���^�+=����WU���싽Ǎ�<��= ����S��B��=X���Ke<���=LǪ�k�L=}F�=ţ��*�=�6��3k�=� �:$I_���q�������=�k�== ��p�޼ӽ�=1�=�V�y9=�;>�[�=J|��׬<I.o�󄧽�
1��4 �j|�=��&=���<w�s=)��1&u=�s��.�=��;<���������5'��h�=��%>ڑ�=���=�������u��p�~;�׆�=Y<`=BL=#K�='��<�1ͽ�´V�L<W��=�`6>�=��=�J(��$>��<OR�=�Ӆ��MI>Q�='>4=�>f��=��y����=�0g�ңƼ�K�څ ��`ǽ@p�=�`�>2 ^=������>���=8� ��5�ζJ�P3v��m�b��=���cx=�|�z�=���l�A>}l��
��!|��/�>� �=��ɽ�>=v>�s�=��<Wa<��<�� >Q�X���,��>�=��>=�s�$ї�!�N�ߊ;��3�:<�=J�2>-#��$
H��E�LՐ<���f]��g�=3�@��6"<����,��ϡ=ݏ�:_���_ ļ�J_<�!��Y��>��Ž��/<����o�x���<��U=0߽���=�n�=X"���!���J=�;>3��=u�u�4��=�F�=��>�mj>1B�<�خ=�O<�^�<A�<�%�����=� ;/W=�� � _�[z>GgA�x٧=wa�.w>��B>$ѽ����K
�=�o>F>�N=+�=^zP���x>�u����=&HI��9��.=[��<���=X;5�;
<6����̜�>��<#��� �/F��*=��-=� �7�i�^=�z�8�)��R=Q��'�ս}@�b�<�����'=��< R>6��=�c���\������T��2������u��h3=�P�Y�p��;C��}�=Gɀ�#�<,G�=�Y=!�޽�t >�$˼�`
>grؽښf��-Ӽ}μ*0>�I<<>j>:�(��Y׼�=� ���<`���<�=6]V��<��"�/�����4ꊽ�|�<`�����=D�Y=W�I> <�=���=\���VQ<���=.�=s��;֣>��ҽ�#:�X��p]�<�K��Da�<m �,��C> >�`�;Y�ؽF>�=L� �t�s��<K�k�=�&�uQ�=q�
��T>�V�=��x<��Ͻ�6<Z�8�!U�<����8��[���b���V�8!��ǰ�=0y��R >� >6X1>G�<\?=��<Y���$�@>�^�<�5ͽT$�;�<��Rh=�<�=zi��J�=��="��=!�U� �>�=�&!�}���� >i�A��#���3����݅>+3�;_u���<�#��z��=SN���Gz��Aw=��1�u��=��)<JӠ=�i��f�!>iLj>��S=��F=�'���v�=Ǿ/=��I:��=PS/�| $=�p<��z=m��=f���GTF>���=_�e>�Y3�:�׽�wV�A�8=m�[�&�=P��=�==vޫ=`��=��Z����=d(޼�%9��+��v]<�ǽv̽����G=��>Ξ!�S M�Y���kl�<$�*�j�w�>��!��e+���>e��=���*pq<3񺼍������x j��]+>7�q=�ʼ^Խ��h>8tU=!M�yZ
>�9>ReU>u�+>2������=q\/�4,�<ćν>��<砽6i���Q!��<.+e>��>�>���<��
��'W=B�Ȼ�|�<�K����<���=����D.�H�J�ۀ��s�����;��>|�ýW��=���h�8>2l��������<R;��ٽiYI>q�I<��,<Ӑ=MO��0� =������EN&>�O >B�H��\c����cٽ v�=$�='G�;��=E��=1�=m�N<���= ��Ф�=�Fh�B��=�����%ν1����r��N<>�H��7�u��)�7׽N�>����=<z >4��:1DA��D�<Xݫ=�|=A��9�j�=>9ʮ�2~��k8�A����;���� ��5=v�}<�X>R1=�����<!=s�t=�O�=�a�<�N�S�>��-=����;��=C�=����3UU=��B>S��N�=��ĥ�=��=(�<��>d]M�aQ�>^��=�J�=�e�>9��=ZT=� B��٩=0��=��5��*�����=;�<��;�=�;@��E���"�$���<^��=9誼�)� �5=�j!�؄z�b�׼��Ҽ? �=� >�?�l������=k�>�4=�#¼=���!�=/{�=�N��&�">j�:>*�I=ό>��Ƽ˂=�m�<�܇�˼
> gм�m�=��<�l׽�%=�>�e$>GD�=aܒ���v�-�4=^Vd��b����Ľ���<?�O=5>��+>za=">�<
�=��<�0$�Ҩ ���[=�F1<��>TS�S*û��j���ht���R=vIR�}S��'��\�a=~]�=BG�<h����+>�r ����=�0
�J���.>�DZ=N�_>��/��<Ӽ��<Ok+�pg�=n*������^�<��t�V<�νTl=�즽W��<�?�L��뽰���<6���X��\R�=��= �a�-�=�=� >���!�7����=�=6) ;�u>���<���=6�=��<�߽�q���창z�"={z����L>����ET�<1d�<&��=�� ��T��3���=��
�`���1�#���4�=X8|=`0�=����T���n��y �$�<�b��.���Y�=�a��{.*�$��:����nY��&h=̓�=����p8�<�v��&T�=o��; /����?=W�+��֦�"��<���=�8R=/7�=���=�&�+�_��d%�Y4��E�����>�/��P�8� �is3��U��n��(�\=���=����k�,>QN�=��n8\
>��<(:W=�v�=�����c������7��*>��a��
K=�m����=+��:�����;.�<���5=B��=C=��x�<����d{� �>�?�=��E;P��<y�q=fb���z<�&=�@0<}&�=�AV���D� ���S�;�u$=�;�<-����`g=5Ǽ��>"= T >}~*��o+=��e=�'<�LT�|�-<z�>��!=ֲN�~��=�1�)��=�J|���ӽ�R��˻+�ʽ��� ;����=���ӽ��;�I<+�L>�F%<�0���
��CS��E���J޽ �=����G?�5 '�cY�=��[�A٪=��鼄��<W=�u��5r=��> b6��3Y;�n��� <����,ҽ�玽$�;,��<�!;��3>B᜼h�!<1j�=��`��}��YL��k)���)�E��=�#�YMz;/^���L�bR���h=���<�����B!�y�� ��=���Ē������;��E�iE�=*+C>�<;d���Ӓ=7���&c��`>ծ�� �2>��<���=��=�¼���=�x���*�����T ���� �P��<~,&�.���2.������m�J;�K�|�@�[t�;4��W�;����}�=\��=����T��=E��=��=���=Bbv=�9v<Le���=q�8��-�=��I<-���!K>��h���t=Iò�Ȍ=�̸��"<��`�=v�l=.�g�̳=J��;0�;� Y>��>�q�=��O��2���M���r��m�<zH=}S;�;����u=V�<�C =~M���a��H�� S�=�c��$x��!6^�u��/R��e�}=T��MJq��8�=\o��� ���E�ܗ<p[�=���=�(�<@�M=jK��{�r�m����o=��=^�Ƚ^�*��/����ܽ]]= �>��H�<����
I)>�c�=������軍�:����2��� [=V�<��@���S����=:��=���=� <�=7��X-�=되����bI�</��;]��/�=�iϼ}Hl=�n&���˽��=O�ĽЫ��„%��HI>�M�=��0;._>:����<��j=��>��_������I�Id�;���6�エ8$=ؓ:���;;�=f��"v=M} �S�i��>߬s=j �<��Q�ØV>��=� ���5[=��=5q=�f>�u�ѽ|�O=���� >��� V�=Y�V=4��;*|g=J>��m=���r'�=��E�e���C����eZ�� ������=��s�==о�=��m;P\5��z�=�|����^=Y/�=�Pd=q�=�K <�U>�����<�O��Ȣ�=�uc�#�μGC0�����:L�<I`">�`B���]>��4>@�ʽ7Tؼ>+]� ��/�̼��޽ݢQ=-��=�@�=���=’D=4���� =�����H�<�ϝ= �>��]=�^`��T�<�ԽU�=2yҽ-�&<���<��>����(�0>J��41����潿����è=C�$=ԮG��a�=�w>n��=� ս7&<1��=�\�=:� >nI`>�!���<1v>3+=�y�=@ᘽ��= 2>}=>�d��H�=v_�=�m��>���l��ULl���b�Ȼ������:�=���=��=��׽O��=�LJ�0=6=]ֽ�5<=xe��FG=��ϻ��འ��;|�Z���r�ء����ܻ�2;�d�<Lk9�٦.>�К�Ȱ��/�=�6>'�}=��J����=?�k�:�E=f��=��#=qнά= V���(�= �~�M������=��(��|]=��|=]���Ϛ��~^>8�m��n���V=)��<�QO�F�<B�#�O��=θt=3@��N����>�K�����9�=��:���H�K�=#�;Le��鸽P:M�b= ��~��<����M����u>1]����=8�*>� >]�
�����ܧZ<��<\��=!�=��=vlh�l�>��>d3��E�պㇷ<O��9=�=�L>W����ֽ
���`.=��=�G�鮜=��"=Q��=�&������5!�&=>q�����=f>�3�=���=�߻=O����d>E��=��'�=4>��~>뛶�����:H<�6m�mxN�2���x>�q�=����� �h�]�E6,�Wx=�� >�y<C� >!!A>c>B��K����ɽ����ͱ�<Ǫ���P=���<߱���h;q� =��>�M�=!8�=W�>=?#
>=<=�-�<��O>�X��H:�<��!�=���~0>-;�X=�d�� �K>|z���=���=�VӼs�o��L�1����;�y(=��ν$,�=��l�nF��q�7�4<�O>1N�;�#��ã<�1>X>SA��p=�b�>I��=�"=㍹�j��Rː=g����4W=�_L>��r=� 齣�9�"�82�<�H!��A�=�څ=��Z���齭(�<5h��SSƽ{C
=�e�����<ױo��U�=h⽃�j������Dɼ`{)�џ ���=Nӌ=v���_=��ս��>�e�=f�&>�ؽ�s�����."=L>.�*�O<M��=�қ�T�`;�p�<���+��<{U�=�"��D�V;�'�=I�]� ���9aٽRJ���
B��-�7wڼ0�<>�Eżm���#�x�0����P�w��!�>�R=�?Ͻx“���1=���=��"�=aH<���<�&@=�H�=P
�=q�;�lj�d��<2�� �q<)I�=��S=1�>=- ��i>$�==�C�=�ߴ��4<�9��(�=ЖT=�&��+�= �E�.75����<�ȕ=�z���dN��E�=�&�F�:.��oI>F%�=�C���g�= ��=\�>��ѽ$���[�<0�=l�/<P�����=��=(m�=��ּ>=Cմ=���6+˼=½4��896��� �Jv�<��Z>�s�;��c=���*��<&CJ����=�ㄽ�7>�l�O_���s޽W�ۼ�̽"��=� ҽ�
�=�Mv�%D6=j���9�Ž�->>W����B=�o�:=e>�'�=K���������=�><A���9=�茽|}z�EҎ=���Y�����< |�^+<6�n=���]�M���޽�ZνO�B��5>@m]<x�o��v=� =A�;���*�;�DZ=\�a���6�ѴX�� {<� �<d�������1 ; �=��<v�=M��< }���4=�<�=�N�=�␽�:��l��r G< 꼥�2> #�g��=�rb<`��=%J�ÇL��Tս�E>�n>Q�'�>5=?a��">�<��1���м�FA>.�\��l�<��=7��=�|�=�L��J��}=d���=ʼnw�XSN���o=�>�}ּ��5=� ���<f��o�Ͻx=:�=n���ͥ�K��=��=��ǽ2�=QE�.�c��Z���"��{��:o�/h=�������+>a������q��=S;�i >�l���R����<V�/���F�e�>N�=5����� ��=�0��e��/���T��=}��=�oɽ�s�;8%����=bp�<�J= �J��H|�c�4>�I��K�0�u�����=��o=f��=�' >�. ����=�o3��
>J��=j]�<�xE>)ڼ��@=Ph���½�(=K���쐄=Z�g����<G��=6<Cy��3��=�5 >n&�¨ �cQ�=�Y�=�ݼ<���Gٴ=�� ��ý1j!=���:~���*��=�jH>�I��md�<.��<r<!7���Z$���1�I���2V�.�J>���;7=����>�ߝ��s��ɏ����"=Z<+��>P���U!�={�������.��=�g�N����K>ϸ�=����������<�������� И�a�>��<���<Dr>-��<M��;�j�=��Ļ���=%�ɽ�P=�r��ޖ=ر�<�����冼�8J�z��=zb =s�ԕ�=�oH=���pU@>�}+=Y>�����2=xn��G>Fy���n���W~=���<��k;q� =Tz�=��;Q�x������=�3^=S%x=��#=�� ��MA>��<���p���48?��G]>���=������=��=����g�0�‘���Ѽ�r�gv}����= 5>瞻�ᄑfY������ǽ!����w���r#>����/�<����1�= >?b�<C�m��5ڼ��q:C�{>ү9;Q֦�$=��e1�=������ϼF�= ��=��-><@�^B�� e�<�P=/ʽ�&:eJ�<����;Di���t�=T�y��lS�;BQ~=�f=���;��'�F�<P8>yJ�����`�ͼ/�<�Ǽ˄:*�b>I>����;>z��@g��;*=�,��x�=~�]�&������|\Y=���<Gd����=_��=Wk�=�9p�+�G�A�ĺc.P=���a������=[��=FQ�<����fT=eX%>���>�<Y��$߼���Y��=�L��Ux�=��>$�=�{X��)�=���=�;��ˋ�=��<�"�=+��=�9��{����޽��/� ��=G�=,��=]���Z��=Α<�:�b> H>)��2����[<l,�=u�9�x���5?���W<*�z=���=G�`���B�S��s����:T�;>��=o�>J���4� >o��<T�*�:�>�D�=�]�=02���� ����=̗�=m�����J=Cc=�(j;:Z,>#������.�7冼
>Î7=�Q=D�o���&�&�>�<>�\">���#b
�خt���K���w�v>�<�oI�X16=G���@�l�T��=M�.�C�-�l�}<% ->�hؽ�.�=����A :=0�Ƚ�RK>>`=�Hɽe��<��u��1Y>�;�>�ʽr����N�=Q���_R<:�����=洐=��>�g�>~`2>�ܒ���"�o�����<Z��=��T>����JY�=��&��J4�l�$>dpn����&���}���!�=�(����L=���>����_�1=�,,>�>O=���=���=ID>�<�>�`�=a4 =�Cw����=|xH�ا��A�� �=���:��e��<����9 >6��=Y=�;Վ�;�U�:�gV>��7a�<�^����,Y>�=r�(]���n$��7�=�ͷ��J�<��߽�״��Ǐ=�[�E%<�-�=� ��/�5<�_*���n>i�*< �W>j�j��5�7��x�=�`=�R<�l�=���=$k<Tz�>"Ø�:s/<tio��=��}�=����0p=-=�+�<!�������ڥ�&��={��ˬ=3M^��-����<�9wz�v3m�S��=M����q=�4->�~!;� �<УU=_�ҽ�5��
�����=Z��=K�->�<�w�=�� >RZ�=� �ң ��������<9�(�ƽ��I=L��=St�=\���=A��=pR@=#x=���=�k,>i�<����Z��<ʹ>��=�
��d�6��=I� �h�=]��|)��J���+���[C=+&�&1>�$��J�~�����
Խ��>YR=��
���B<*�=��A�0�5��&E����s�ټ)�<���=�N���Υ=�˕=/*���������=Ʋ���S���g>3
��2v�ղ<=���=⡼�έ�B��=1\����=�"ֽ�[=��=?Y�<]��<����?�:��*�RxU��y*��x�=v�>����j���}UX:��w�[3f��,'>)@;��W�=x�X�Է>�>�ZO��d2= 蹼���<J�������д�=�*=��L�?8>~�ڽ �n=M t=c����t=���<�Qy>��A��S�=�m=€�;�۔�(���=/=&���뉽|Wl�-5���]=�M��4N�=N'�=j+�4+>�PV���K=G�>_��=Cc���:�<�������;�&>�8��h�>�? ���)�)�&��.>�ۦ�t�=ɮ�O��vgн��j>3�J=`�|<9�)>���>�C��F@o>B =r�</L�ȕ��9�1>�P"�wa� ��>Q�>���=��'=����r���=��=�j�<�p��F轄c�����=]-�=�ؽ>���}Ӈ=idw=�W >-�k�ʟ���޽���=�����;,�w�*�ソO��&��&��=#\>�;=��������]9��C�=��=h�����: ��z�=W����˻Vi�=���G��F"�=���=���=�1=�Ἅ�`�m�ɼ�yK>�sH���D�b��=��E��˘=4�彫x˽���<3�'��� ����<���=��<c�\�A�J�̤=V�&���>r�<:q'�L���ؤ�=�V�=���=�Ն�=�_�����=�*'����� ��� r�=�����S>�g =r�>M�A����=�,½�y�=~n>)�J<Kб;j+���/�P��=,��}���Xܵ<��3>"�A>������d��h��=R�����=�����0��۔=��m��P�<�g��K/�=���=M�=P�=�!��{ɽWƼ)D�<��>��B<��2=�N<=Spo>+�伷u(>G���q�Y=er>_�[=p��T4�9�{��J�}�(��=7�=����{���>�X�=�d'�4#��,�c=|�O���=l�>���;]ن=sY�=���=lI%�����N*���"T���<�38<���=�޽UΡ=JT��̭�=9��<�+��� >u���x=M�¼�^4�����%��=�p;����1��m�ͽͿ�=�`��ˬP<
�^=�� �6-�=P�
>�N;�[����=>���� ~����=ۯ�=ȮD� �>�9�Rw����:�q @>X�-=�;��_Xýr��=ht<����`M�=�=v���=e؀�n=x��=PE��po����\0���� ��Q����=5��=ZQѻ�Q�=��2��r=!��=����!)���G+=��>>�Ѫ����<����� �>��t����!_>v��=�����ǀ�t�>��j<i[
=��E�DL���Ȏ<���P_�-y��u���� %>,v��xE�S
=0<=�~�<�����:�S/7���N>������^tn=�~�=�2�<Q�ɽ4ī�;��=pr���A���M����=T�b=h�.�W��=Ⱥż�(ټe�y�]��D½�b)��$\=p�=.\弿�0=r,��|s��Z��=��M�kG"�N&?=�$%�b*(>~�[=?ل=KP==��=�@ =�t>?����8�;���^e�=�>����ܼc�q=��3=�+F:�i�<d����A,�ź=��=�ʼy�=��ڤ�=�~����<6썽K4 >�����y>�ȧ�d�,>�����"a��1=�[=�Q>e�W�����`�k.�<2\���=�>J�?=N&<_�=Q��;�^���b=a�>|�?=�D���6��JM>.$>C��:�����5?>`Ԗ��,<�&JS�))���̽p2<{�<Z = x">��hK>&���ey���;>�%S>��8�A��<�>N3->h�=�X�;�f <�9�_��=��^��"> ���<��s�=u >��D>f���t��;z�<=c�>�M5�i�!='�ܽ�ƚ; !>����XR�;�,2=�>�=ۭ>�>�=����>������ �9=���<=B�<où����>$Z�<�Y�[ �=ږ���5W<YJ�fL�<�t=p�=Y��^͂=Ub���
>�x�<I6t�֨9�}3�>s��:`�j=9t���`<�j=�1l�3��?�۽|L�=S6�=a��<���=׻?>5�=Jw]��{B��A=[�<%��=iK��D�\=�J�=}l�����=?�}���>�ur;���Ÿ>�q��73�=J��=&6>�"����w�Xh�<���=��=kn�+0�=��~�'u��[�>ǧ$>��C<��.=R۽=�qG�򒤻�(�v)n�� h���A���f<Xx>�L>�?�=��9;?�1=�c2�I�>d��=5ǎ��a��y�A���ν��к��>5g�=̭�=�4Ƚg5��RHU>�T=�� �y2;����e��<g��= KS�*����J��A���H���-<dn��Ο=bˣ=����+��=jL>�\0���O��e!>��1��T��Y�k�Q�]�U�h>�^ ="NZ��%=��=�� >�&���G=G]��<�ؽA�5=I-j>o>ZO�=k0<>�'��4�=ǡ���]��^_��u)=�ګ=������:'>=��н�צ=�$�=!żU�b��Ɵ=��+=�g
>�
��|N�<��}=ǃ\=�t�=/6��[V�N�7���W=�H��&�Yv=Iн�f�=���=����"<��Q=�Mν ڧ=Dr�=�>ݻ���<��=F*�G`>A��dv���_��k�$=�w:<�AB�Q��<�j5�o���n=���=���9W���_��X=)�&�=F��<S3�;����BX"��_<).�<� ��%�$P�=\sf=��<=2n��� �=Y��� ��->�߯=�U[�� �Ͱ�/��=9紽KZ�=4����B��P���(+B��$r=��ؽ�� =0�轀���\�:ɞ=��<�Ii>�X����ֻ�gd>��<����*�<�0=��<<l�m=���=-�f��6��)4뼋p޼]?�=K�>#VF>������*��=���=}�=T�H�S��o���4��������i=宑���f����>��=>V�%�˽`ͽ i1���>sHq=�
��8� Ƽ�0�����=b="HU�7 �=%����<��=�S>�#>˚�=�ͅ���y� ��=�b��@���c~>
&��6.;�(�<�Z�=��=�wC=�7/�Y�������N>x�=�'����%'�=��*>6�=���F�=����~�a�U�=a=u>JW��q��3�� >9-��!��<��ǽ�4>d��=���=#Z�;�㙻Wb�=>���&�=@�2=�W9>x6e<��7��i����>�V���)V=Ef�<���=$�7���U:I��V�����"]��t4>�1 =x!Q=��� >Z��<e V>O��;j��<y_>䳽>��<n����0�=\𐽥������"�>̱��� =Tm�=��=�mb�f�G>E�;�]�d�Sɔ�0Ѩ����=eM-��E >���=�������}t�H�z�PȨ�,�z=��c>������<�p�-=��`�Q�:<0R���=U*5�'B|����=�Jż�u�=Ѐ�=�i�=�
6�1_>�G��[xi��D<�q<ћ=L6�=���;|�>Zh��m��M=I���DO�=!�<��=��\=52n��\޽�),�`�(��\�$H׽f9�>=�� ��=����t��;��ѽ�`>r�l<<�c=d���L��<�ힽ�6>]O彌u�=N絽T.S����<v7�=���=�=L a��GA>��`=���=�w���"<�Δ+>��I=��=Ԉ�=@��<a6���\�<f� >���=n�=I~=^�L>7�̽|
(>��<^�ǽD�_��k!�fG�=e����>V��8�'�,*��
�=�=>�j�*�T]>9�2>��=>�R=!@��=�<��=��d=��G=$���0=�5�=2x�o���ω���d�=�f�?�i>�J<g������=���ͱ��"vP=�Ľ�����=Du�<��=������=�} �H� =O�!=�]�=���>�a ��C�=���)o����3�:�|�H=Պt�q�=ۉ�=���=� ��L�L�c( �`I.<z��<�<�u��m�?��h�=T��= ���>=jE�=�����<
>�Le=��=5ǽ�� ���=�]�=#T��TD:�q�ɏŽ"A>'�x=�\&>�X
<<c�<#�c�QB_�v����k�=�J�=�$8=�4����;�t>�Gs��ҏ�)�+��7N���u�� >S:@>��i:o�\=��6�]߼��=��>��t<���=�޺��Xʼ���0R��=J�Q��>.�?�Q=��!=ک���<$��#���z|>f]Ƽ�U��5m �q�>Eg=��%;K�ʖ=tcu=��=^�Ⱥ��=S�V<'����̚=�d?=���;6"�=��Ž�e�=}�>��(��=�<|�������Aȴ�_�)R�b�W=�� ��<�'̼o�)=�Qy=�~�7���ǂ�<�A���g=�綠�q�=m(O=���s ҽD��<q2/=��?=@����G���A��廟��= LY�� �=n8�<�����U�Qv:���μ���5�>�=T=�'�=KJQ=�+��@����g���o��h���B�_ \>��(>��=_�3=�~���k�<tǼn��<��4��u'�N>L����u&<=�=��#=�O=�GV�=�!��'6�����sl>f� =z} �|O �M@h=��>��U>`����>}�=J_��̭=���q�3�����Y!>0��W/a���=�. >�s9;ϝ�=��=O� >��=*��l����
=u2�=��K=S��=0}A����=?�4>3��=�5�=޿>��=',m�ܛ==���=��)���/�ΗE=g�'��伽Ԑ$���h��$>�<¯>#|9�b�[���4>��V=��*��c��,�=�M=�c���z�=$(*>�޼�(��9�z���ͬ���'>��>��;�P���k�*{���VE;� ��������S=�1�hW����=�~>�ѽd���=`Ď=�W>zH�=KI�����=e"_��==^�Lwv��f�<�+a=��������=-�:<(�$� ! =#n�<�ϼ� �� >I�<@B#>��\>��8����<���:�r�=jo�lj����S=��J=@B>��8>q��=�,��lr[��ƨ;k��=ӻ�=���<K��4Q���$�vi>X���H�������4V=AuԽ���=��!>�Y�
+���N���=E)=&�)��g�=ݍ�� �<� �=r����>=���l�� �>g<�<�ϡ��v⹳ˇ=�^ϼv�ƽ���=�����Ͻh=L��������=�Z1=���<y~����>��޽n����.�<����Ѝ�����7ï< �5\���W.�Q���a?����=7�m��?r>�$�< n�=Q$;U<X=�����޽sV�=��ra��6�=c ��쿼�SY=�����d�=�����^����<���3G@>< >
m�<%5��]Ҽ��=�ş=���=�[�:�R������(������l!��Dp=�?��_��=O��= �Ƚ����H��x��g�X>��=n�=K(���ē<��e�S7�=�%/�W���G>-4��Ƚ��a6�=�Md���W>�1 ���6��n=�_��3!=��r+=Q�)��ӽ�7b�)�����6='b=>�V�Y��=e�k������n�<rz��ՌY� �9>&߉=���=���;%��'�ƽi������9>�<��U>�+�2}�;8�=So�;輽�;��,X�Q��= ��:е�F&�=���;�6�R�>h=aG>��7>Ia>��X<�}���!�=���=�K6>���jn�=�;��P�=qU�=x�>����xA=�u�u9ս�����=>o>�Φ���|�B��;K>���=iW켺��~�ҽ �=���<о�="5��Q[�� �<1�h=��<t�:����;��t���Ž\K��v �=���=B<ͺ>Ė�<�Z�<T.�=
; <;��=����qĽJG=Y����������6=�M�΄�=G��>�����G�Tͥ=��=��%�����ސ=T����'>\�ŽΗ�RJg=ȽI<��A��ր=��<��o���=�I=Q�B�N =��7�/m�=��9>u� >�
\= [d��*�<1[?�q)>���=MfU�Z\k<�p���;�;=t�=O��<��>�h��� <<�Rҽ�ϻ�Ar����R$<�ɻ�=φؽ�c�>y�^>i�-������>+��<]̗�؃�=�<���=��d�J >Y�[>�}�<h��#�T=R1X=ؼ���� ��[��N�@��=��->a���.�a<s�=�cE;?J!>HY=�31=Mb齘��=�B>��9��aڽS����s�h�+<2�B=pH��B���n>����8">7G �y!��a��� ��>&�w������=�d��(����U���ͼ���<sD<�a >>@>ʬl���>Z�&���G=|�<= �>��+R����*Bversion_numberJ@Z)
vector_observation

batch
oZ#
action_masks

batch
b
version_number

b
memory_size

b'
discrete_actions

batch
b*
discrete_action_output_shape

b
action

batch
b#
is_continuous_control

b!
action_output_shape

B

15
Project/Assets/ML-Agents/Examples/Hallway/TFModels/HallwayCollab.onnx.meta


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

11
Project/Assets/ML-Agents/Examples/Hallway/Scripts/HallwayCollabAgent.cs.meta


fileFormatVersion: 2
guid: f7451777d89fd47418f0e1c3e2511919
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

11
Project/Assets/ML-Agents/Examples/Hallway/Scripts/HallwayTeamManager.cs.meta


fileFormatVersion: 2
guid: 8b67166b7adef46febf8b570f92c400d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

204
Project/Assets/ML-Agents/Examples/Hallway/Scripts/HallwayCollabAgent.cs


using UnityEngine;
using Unity.MLAgents.Extensions.Teams;
using Unity.MLAgents.Actuators;
using Unity.MLAgents.Sensors;
public class HallwayCollabAgent : HallwayAgent
{
public GameObject symbolSGoal;
public GameObject symbolS;
public HallwayCollabAgent teammate;
public bool isSpotter = true;
int m_Message = 0;
[HideInInspector]
public int selection = 0;
public override void Initialize()
{
base.Initialize();
if (isSpotter)
{
var teamManager = new HallwayTeamManager();
SetTeamManager(teamManager);
teammate.SetTeamManager(teamManager);
}
}
public override void OnEpisodeBegin()
{
m_Message = -1;
var agentOffset = 10f;
if (isSpotter)
{
agentOffset = -15;
}
if (!isSpotter)
{
transform.position = new Vector3(0f + Random.Range(-3f, 3f),
1f, agentOffset + Random.Range(-5f, 5f))
+ ground.transform.position;
transform.rotation = Quaternion.Euler(0f, Random.Range(0f, 360f), 0f);
}
else
{
transform.position = new Vector3(0f,
1f, agentOffset)
+ ground.transform.position;
transform.rotation = Quaternion.Euler(0f, 0f, 0f);
}
// Remove the randomness
m_AgentRb.velocity *= 0f;
if (isSpotter)
{
var blockOffset = -9f;
// Only the Spotter has the correct selection
selection = Random.Range(0, 3);
if (selection == 0)
{
symbolO.transform.position =
new Vector3(0f, 2f, blockOffset)
+ ground.transform.position;
symbolX.transform.position =
new Vector3(0f, -1000f, blockOffset + Random.Range(-5f, 5f))
+ ground.transform.position;
symbolS.transform.position =
new Vector3(0f, -1000f, blockOffset + Random.Range(-5f, 5f))
+ ground.transform.position;
}
else if (selection == 1)
{
symbolO.transform.position =
new Vector3(0f, -1000f, blockOffset + Random.Range(-5f, 5f))
+ ground.transform.position;
symbolX.transform.position =
new Vector3(0f, 2f, blockOffset)
+ ground.transform.position;
symbolS.transform.position =
new Vector3(0f, -1000f, blockOffset + Random.Range(-5f, 5f))
+ ground.transform.position;
}
else
{
symbolO.transform.position =
new Vector3(0f, -1000f, blockOffset + Random.Range(-5f, 5f))
+ ground.transform.position;
symbolX.transform.position =
new Vector3(0f, -1000f, blockOffset)
+ ground.transform.position;
symbolS.transform.position =
new Vector3(0f, 2f, blockOffset)
+ ground.transform.position;
}
var goalPos = Random.Range(0, 7);
if (goalPos == 0)
{
symbolOGoal.transform.position = new Vector3(7f, 0.5f, 22.29f) + area.transform.position;
symbolXGoal.transform.position = new Vector3(0f, 0.5f, 22.29f) + area.transform.position;
symbolSGoal.transform.position = new Vector3(-7f, 0.5f, 22.29f) + area.transform.position;
}
else if (goalPos == 1)
{
symbolOGoal.transform.position = new Vector3(7f, 0.5f, 22.29f) + area.transform.position;
symbolXGoal.transform.position = new Vector3(-7f, 0.5f, 22.29f) + area.transform.position;
symbolSGoal.transform.position = new Vector3(0f, 0.5f, 22.29f) + area.transform.position;
}
else if (goalPos == 2)
{
symbolOGoal.transform.position = new Vector3(-7f, 0.5f, 22.29f) + area.transform.position;
symbolXGoal.transform.position = new Vector3(7f, 0.5f, 22.29f) + area.transform.position;
symbolSGoal.transform.position = new Vector3(0f, 0.5f, 22.29f) + area.transform.position;
}
else if (goalPos == 3)
{
symbolOGoal.transform.position = new Vector3(-7f, 0.5f, 22.29f) + area.transform.position;
symbolXGoal.transform.position = new Vector3(0f, 0.5f, 22.29f) + area.transform.position;
symbolSGoal.transform.position = new Vector3(7f, 0.5f, 22.29f) + area.transform.position;
}
else if (goalPos == 4)
{
symbolOGoal.transform.position = new Vector3(0f, 0.5f, 22.29f) + area.transform.position;
symbolXGoal.transform.position = new Vector3(-7f, 0.5f, 22.29f) + area.transform.position;
symbolSGoal.transform.position = new Vector3(7f, 0.5f, 22.29f) + area.transform.position;
}
else
{
symbolOGoal.transform.position = new Vector3(0f, 0.5f, 22.29f) + area.transform.position;
symbolXGoal.transform.position = new Vector3(7f, 0.5f, 22.29f) + area.transform.position;
symbolSGoal.transform.position = new Vector3(-7f, 0.5f, 22.29f) + area.transform.position;
}
}
}
public override void CollectObservations(VectorSensor sensor)
{
if (useVectorObs)
{
sensor.AddObservation(StepCount / (float)MaxStep);
}
sensor.AddObservation(toOnehot(m_Message));
}
float[] toOnehot(int message)
{
float[] onehot = new float[3];
if (message < 0 || message >= 3)
{
return onehot;
}
onehot[message] = 1f;
return onehot;
}
public void tellAgent(int message)
{
m_Message = message;
}
public override void OnActionReceived(ActionBuffers actionBuffers)
{
AddReward(-1f / MaxStep);
if (!isSpotter)
{
MoveAgent(actionBuffers.DiscreteActions);
}
int comm_act = actionBuffers.DiscreteActions[1];
teammate.tellAgent(comm_act);
// if (isSpotter) // Test
// {
// teammate.tellAgent(selection);
// }
}
void OnCollisionEnter(Collision col)
{
if (col.gameObject.CompareTag("symbol_O_Goal") || col.gameObject.CompareTag("symbol_X_Goal") || col.gameObject.CompareTag("symbol_S_Goal"))
{
if (!isSpotter)
{
// Check the ground truth
if ((teammate.selection == 0 && col.gameObject.CompareTag("symbol_O_Goal")) ||
(teammate.selection == 1 && col.gameObject.CompareTag("symbol_X_Goal")) ||
(teammate.selection == 2 && col.gameObject.CompareTag("symbol_S_Goal")))
{
SetReward(1f);
teammate.SetReward(1f);
StartCoroutine(GoalScoredSwapGroundMaterial(m_HallwaySettings.goalScoredMaterial, 0.5f));
}
else
{
SetReward(-0.1f);
teammate.SetReward(-0.1f);
StartCoroutine(GoalScoredSwapGroundMaterial(m_HallwaySettings.failMaterial, 0.5f));
}
EndEpisode();
teammate.EndEpisode();
}
}
}
}

24
Project/Assets/ML-Agents/Examples/Hallway/Scripts/HallwayTeamManager.cs


using System.Collections.Generic;
using Unity.MLAgents;
using Unity.MLAgents.Extensions.Teams;
using Unity.MLAgents.Sensors;
public class HallwayTeamManager : BaseTeamManager
{
List<Agent> m_AgentList = new List<Agent> { };
public override void RegisterAgent(Agent agent)
{
m_AgentList.Add(agent);
}
// public override void OnAgentDone(Agent agent, Agent.DoneReason doneReason, List<ISensor> sensors)
// {
// }
// public override void AddTeamReward(float reward)
// {
// }
}

8
Project/Assets/ML-Agents/Examples/CubeWars.meta


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

3
com.unity.ml-agents.extensions/Runtime/Teams/BaseTeamManager.cs.meta


fileFormatVersion: 2
guid: b2967f9c3bd4449a98ad309085094769
timeCreated: 1610064493

34
com.unity.ml-agents.extensions/Runtime/Teams/BaseTeamManager.cs


using System.Collections.Generic;
using Unity.MLAgents;
using Unity.MLAgents.Sensors;
namespace Unity.MLAgents.Extensions.Teams
{
public class BaseTeamManager : ITeamManager
{
private readonly string m_Id = System.Guid.NewGuid().ToString();
public virtual void RegisterAgent(Agent agent)
{
}
public virtual void OnAgentDone(Agent agent, Agent.DoneReason doneReason, List<ISensor> sensors)
{
// Possible implementation - save reference to Agent's IPolicy so that we can repeatedly
// call IPolicy.RequestDecision on behalf of the Agent after it's dead
// If so, we'll need dummy sensor impls with the same shape as the originals.
agent.SendDoneToTrainer();
}
public virtual void AddTeamReward(float reward)
{
}
public string GetId()
{
return m_Id;
}
}
}

8
Project/Assets/ML-Agents/Examples/CubeWars/Materials.meta


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

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

正在加载...
取消
保存