From 934a495d47d573f98a88dbd15664dc42231dd707 Mon Sep 17 00:00:00 2001 From: genxium Date: Wed, 11 Jan 2023 18:09:18 +0800 Subject: [PATCH] Updates for fireball bullet. --- battle_srv/models/pb_type_convert.go | 4 + battle_srv/protos/room_downsync_frame.pb.go | 547 +- frontend/assets/plugin_scripts/jsexport.js | 6540 ++++++++++++++++- .../assets/resources/animation/Fireball.meta | 7 + .../animation/Fireball/Fireball1.anim | 145 + .../animation/Fireball/Fireball1.anim.meta | 5 + .../animation/Monk/InAirIdle1ByJump.anim | 24 +- .../resources/animation/Monk/Monk.plist | 952 ++- .../resources/animation/Monk/Monk.plist.meta | 1380 +++- .../assets/resources/animation/Monk/Monk.png | Bin 221902 -> 265584 bytes .../pbfiles/room_downsync_frame.proto | 3 + .../prefabs/ControlledCharacter.prefab | 31 +- .../assets/resources/prefabs/Fireball.prefab | 224 + .../resources/prefabs/Fireball.prefab.meta | 8 + frontend/assets/scenes/login.fire | 2 +- frontend/assets/scenes/offline_map.fire | 5 +- frontend/assets/scripts/Fireball.js | 26 + .../{Heap.js.meta => Fireball.js.meta} | 2 +- frontend/assets/scripts/Map.js | 71 +- .../scripts/{Heap.js => PriorityQueue.js} | 185 +- frontend/assets/scripts/PriorityQueue.js.meta | 9 + ...om_downsync_frame_proto_bundle.forcemsg.js | 46 + jsexport/battle/battle.go | 9 +- jsexport/battle/characterConfig.go | 5 +- jsexport/battle/room_downsync_frame.go | 2 + jsexport/main.go | 3 +- 26 files changed, 9367 insertions(+), 868 deletions(-) create mode 100644 frontend/assets/resources/animation/Fireball.meta create mode 100644 frontend/assets/resources/animation/Fireball/Fireball1.anim create mode 100644 frontend/assets/resources/animation/Fireball/Fireball1.anim.meta create mode 100644 frontend/assets/resources/prefabs/Fireball.prefab create mode 100644 frontend/assets/resources/prefabs/Fireball.prefab.meta create mode 100644 frontend/assets/scripts/Fireball.js rename frontend/assets/scripts/{Heap.js.meta => Fireball.js.meta} (74%) rename frontend/assets/scripts/{Heap.js => PriorityQueue.js} (50%) create mode 100644 frontend/assets/scripts/PriorityQueue.js.meta diff --git a/battle_srv/models/pb_type_convert.go b/battle_srv/models/pb_type_convert.go index d07b663..2948e2d 100644 --- a/battle_srv/models/pb_type_convert.go +++ b/battle_srv/models/pb_type_convert.go @@ -38,6 +38,7 @@ func toPbRoomDownsyncFrame(rdf *battle.RoomDownsyncFrame) *pb.RoomDownsyncFrame BattleState: last.BattleState, CharacterState: last.CharacterState, InAir: last.InAir, + OnWall: last.OnWall, JoinIndex: last.JoinIndex, BulletTeamId: last.BulletTeamId, ChCollisionTeamId: last.ChCollisionTeamId, @@ -116,6 +117,7 @@ func toPbRoomDownsyncFrame(rdf *battle.RoomDownsyncFrame) *pb.RoomDownsyncFrame VelX: last.VelX, VelY: last.VelY, Speed: last.Speed, + SpeciesId: last.SpeciesId, } ret.FireballBullets[i] = pbBullet } @@ -147,6 +149,7 @@ func toPbPlayers(modelInstances map[int32]*Player, withMetaInfo bool) []*pb.Play BattleState: last.BattleState, CharacterState: last.CharacterState, InAir: last.InAir, + OnWall: last.OnWall, JoinIndex: last.JoinIndex, BulletTeamId: last.BulletTeamId, ChCollisionTeamId: last.ChCollisionTeamId, @@ -195,6 +198,7 @@ func toJsPlayers(modelInstances map[int32]*Player) []*battle.PlayerDownsync { MaxHp: last.MaxHp, ColliderRadius: last.ColliderRadius, InAir: last.InAir, + OnWall: last.OnWall, Score: last.Score, Removed: last.Removed, } diff --git a/battle_srv/protos/room_downsync_frame.pb.go b/battle_srv/protos/room_downsync_frame.pb.go index b2bbdb6..779f13d 100644 --- a/battle_srv/protos/room_downsync_frame.pb.go +++ b/battle_srv/protos/room_downsync_frame.pb.go @@ -51,6 +51,7 @@ type PlayerDownsync struct { FramesInvinsible int32 `protobuf:"varint,23,opt,name=framesInvinsible,proto3" json:"framesInvinsible,omitempty"` BulletTeamId int32 `protobuf:"varint,24,opt,name=bulletTeamId,proto3" json:"bulletTeamId,omitempty"` ChCollisionTeamId int32 `protobuf:"varint,25,opt,name=chCollisionTeamId,proto3" json:"chCollisionTeamId,omitempty"` + OnWall bool `protobuf:"varint,26,opt,name=onWall,proto3" json:"onWall,omitempty"` // like "inAir", it’s by design a standalone field only inferred by the collision result of "applyInputFrameDownsyncDynamicsOnSingleRenderFrame" instead of "characterState", because we need check the transition for "characterState" from this field, i.e. "onWall (prev -> curr)" Name string `protobuf:"bytes,997,opt,name=name,proto3" json:"name,omitempty"` DisplayName string `protobuf:"bytes,998,opt,name=displayName,proto3" json:"displayName,omitempty"` Avatar string `protobuf:"bytes,999,opt,name=avatar,proto3" json:"avatar,omitempty"` @@ -263,6 +264,13 @@ func (x *PlayerDownsync) GetChCollisionTeamId() int32 { return 0 } +func (x *PlayerDownsync) GetOnWall() bool { + if x != nil { + return x.OnWall + } + return false +} + func (x *PlayerDownsync) GetName() string { if x != nil { return x.Name @@ -1006,6 +1014,7 @@ type FireballBullet struct { BlowUp bool `protobuf:"varint,18,opt,name=blowUp,proto3" json:"blowUp,omitempty"` TeamId int32 `protobuf:"varint,19,opt,name=teamId,proto3" json:"teamId,omitempty"` BulletLocalId int32 `protobuf:"varint,20,opt,name=bulletLocalId,proto3" json:"bulletLocalId,omitempty"` + SpeciesId int32 `protobuf:"varint,21,opt,name=speciesId,proto3" json:"speciesId,omitempty"` VirtualGridX int32 `protobuf:"varint,999,opt,name=virtualGridX,proto3" json:"virtualGridX,omitempty"` VirtualGridY int32 `protobuf:"varint,1000,opt,name=virtualGridY,proto3" json:"virtualGridY,omitempty"` DirX int32 `protobuf:"varint,1001,opt,name=dirX,proto3" json:"dirX,omitempty"` @@ -1187,6 +1196,13 @@ func (x *FireballBullet) GetBulletLocalId() int32 { return 0 } +func (x *FireballBullet) GetSpeciesId() int32 { + if x != nil { + return x.SpeciesId + } + return 0 +} + func (x *FireballBullet) GetVirtualGridX() int32 { if x != nil { return x.VirtualGridX @@ -1504,7 +1520,7 @@ var file_room_downsync_frame_proto_rawDesc = []byte{ 0x0a, 0x19, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x1a, 0x0e, 0x67, 0x65, 0x6f, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x22, 0xe9, 0x06, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x6f, + 0x6f, 0x74, 0x6f, 0x22, 0x81, 0x07, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x47, 0x72, 0x69, 0x64, 0x58, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x76, 0x69, @@ -1553,271 +1569,274 @@ var file_room_downsync_frame_proto_rawDesc = []byte{ 0x28, 0x05, 0x52, 0x0c, 0x62, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x54, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x63, 0x68, 0x43, 0x6f, 0x6c, 0x6c, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x63, 0x68, 0x43, - 0x6f, 0x6c, 0x6c, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x13, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0xe5, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, - 0x6d, 0x65, 0x18, 0xe6, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, - 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, - 0x18, 0xe7, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x22, - 0x6f, 0x0a, 0x11, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x63, - 0x6f, 0x64, 0x65, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x64, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x02, 0x64, 0x78, 0x12, 0x0e, 0x0a, 0x02, 0x64, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x02, 0x64, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x74, 0x6e, 0x41, 0x4c, 0x65, 0x76, 0x65, - 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x62, 0x74, 0x6e, 0x41, 0x4c, 0x65, 0x76, - 0x65, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x74, 0x6e, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x62, 0x74, 0x6e, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, - 0x22, 0x50, 0x0a, 0x10, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x55, 0x70, - 0x73, 0x79, 0x6e, 0x63, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, - 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x69, 0x6e, 0x70, 0x75, - 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x63, 0x6f, - 0x64, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x65, 0x6e, 0x63, 0x6f, 0x64, - 0x65, 0x64, 0x22, 0x7c, 0x0a, 0x12, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, - 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x6e, 0x70, 0x75, - 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, - 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, - 0x69, 0x6e, 0x70, 0x75, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x04, 0x52, - 0x09, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, - 0x22, 0x3b, 0x0a, 0x0f, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x55, 0x70, 0x73, - 0x79, 0x6e, 0x63, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x63, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xb8, 0x02, - 0x0a, 0x05, 0x57, 0x73, 0x52, 0x65, 0x71, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x73, 0x67, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6d, 0x73, 0x67, 0x49, 0x64, 0x12, 0x1a, 0x0a, - 0x08, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x08, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x63, 0x74, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x61, 0x63, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6a, - 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, - 0x6a, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x63, 0x6b, - 0x69, 0x6e, 0x67, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0d, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, - 0x2e, 0x0a, 0x12, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, - 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x61, 0x63, 0x6b, - 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, - 0x4e, 0x0a, 0x15, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x55, 0x70, 0x73, - 0x79, 0x6e, 0x63, 0x42, 0x61, 0x74, 0x63, 0x68, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, - 0x6d, 0x65, 0x55, 0x70, 0x73, 0x79, 0x6e, 0x63, 0x52, 0x15, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, - 0x72, 0x61, 0x6d, 0x65, 0x55, 0x70, 0x73, 0x79, 0x6e, 0x63, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, - 0x27, 0x0a, 0x02, 0x68, 0x62, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x73, 0x2e, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x55, 0x70, - 0x73, 0x79, 0x6e, 0x63, 0x52, 0x02, 0x68, 0x62, 0x22, 0x89, 0x02, 0x0a, 0x06, 0x57, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x03, 0x72, 0x65, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x65, 0x63, 0x68, 0x6f, 0x65, 0x64, 0x4d, - 0x73, 0x67, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x65, 0x63, 0x68, 0x6f, - 0x65, 0x64, 0x4d, 0x73, 0x67, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x63, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x61, 0x63, 0x74, 0x12, 0x2b, 0x0a, 0x03, 0x72, 0x64, 0x66, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2e, - 0x52, 0x6f, 0x6f, 0x6d, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x46, 0x72, 0x61, 0x6d, - 0x65, 0x52, 0x03, 0x72, 0x64, 0x66, 0x12, 0x54, 0x0a, 0x17, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, - 0x72, 0x61, 0x6d, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x42, 0x61, 0x74, 0x63, - 0x68, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, - 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x73, - 0x79, 0x6e, 0x63, 0x52, 0x17, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x44, - 0x6f, 0x77, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x36, 0x0a, 0x08, - 0x62, 0x63, 0x69, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x43, 0x6f, - 0x6c, 0x6c, 0x69, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x62, 0x63, 0x69, 0x46, - 0x72, 0x61, 0x6d, 0x65, 0x22, 0xf4, 0x01, 0x0a, 0x14, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x42, - 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x2a, 0x0a, - 0x10, 0x72, 0x65, 0x66, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x72, 0x65, 0x66, 0x52, 0x65, 0x6e, 0x64, - 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x75, 0x6e, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x0f, 0x75, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x4d, - 0x61, 0x73, 0x6b, 0x12, 0x58, 0x0a, 0x19, 0x74, 0x6f, 0x53, 0x65, 0x6e, 0x64, 0x49, 0x6e, 0x70, - 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2e, - 0x49, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x79, - 0x6e, 0x63, 0x52, 0x19, 0x74, 0x6f, 0x53, 0x65, 0x6e, 0x64, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x46, - 0x72, 0x61, 0x6d, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x73, 0x12, 0x2c, 0x0a, - 0x11, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x79, - 0x6e, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, - 0x46, 0x6f, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x79, 0x6e, 0x63, 0x22, 0xfd, 0x05, 0x0a, 0x0b, - 0x4d, 0x65, 0x6c, 0x65, 0x65, 0x42, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x12, 0x38, 0x0a, 0x17, 0x6f, - 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x46, - 0x72, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x17, 0x6f, 0x72, - 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x46, 0x72, - 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x6f, 0x66, 0x66, 0x65, 0x6e, 0x64, 0x65, - 0x72, 0x4a, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x11, 0x6f, 0x66, 0x66, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x4a, 0x6f, 0x69, 0x6e, 0x49, 0x6e, - 0x64, 0x65, 0x78, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x46, 0x72, - 0x61, 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x75, 0x70, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x61, 0x6e, - 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x62, - 0x6c, 0x65, 0x53, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x61, 0x6e, - 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x64, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x62, - 0x6c, 0x65, 0x45, 0x64, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x24, 0x0a, - 0x0d, 0x68, 0x69, 0x74, 0x53, 0x74, 0x75, 0x6e, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x68, 0x69, 0x74, 0x53, 0x74, 0x75, 0x6e, 0x46, 0x72, 0x61, - 0x6d, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x74, 0x75, 0x6e, - 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x53, 0x74, 0x75, 0x6e, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x22, 0x0a, - 0x0c, 0x70, 0x75, 0x73, 0x68, 0x62, 0x61, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x58, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0c, 0x70, 0x75, 0x73, 0x68, 0x62, 0x61, 0x63, 0x6b, 0x56, 0x65, 0x6c, - 0x58, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x75, 0x73, 0x68, 0x62, 0x61, 0x63, 0x6b, 0x56, 0x65, 0x6c, - 0x59, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x70, 0x75, 0x73, 0x68, 0x62, 0x61, 0x63, - 0x6b, 0x56, 0x65, 0x6c, 0x59, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, - 0x0c, 0x73, 0x65, 0x6c, 0x66, 0x4c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x58, 0x18, 0x0c, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0c, 0x73, 0x65, 0x6c, 0x66, 0x4c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x6c, - 0x58, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x65, 0x6c, 0x66, 0x4c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x6c, - 0x59, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x73, 0x65, 0x6c, 0x66, 0x4c, 0x6f, 0x63, - 0x6b, 0x56, 0x65, 0x6c, 0x59, 0x12, 0x24, 0x0a, 0x0d, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x4f, - 0x66, 0x66, 0x73, 0x65, 0x74, 0x58, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x68, 0x69, - 0x74, 0x62, 0x6f, 0x78, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x58, 0x12, 0x24, 0x0a, 0x0d, 0x68, - 0x69, 0x74, 0x62, 0x6f, 0x78, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x59, 0x18, 0x0f, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0d, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, - 0x59, 0x12, 0x20, 0x0a, 0x0b, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x58, - 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x53, 0x69, - 0x7a, 0x65, 0x58, 0x12, 0x20, 0x0a, 0x0b, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x53, 0x69, 0x7a, - 0x65, 0x59, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, - 0x53, 0x69, 0x7a, 0x65, 0x59, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x6c, 0x6f, 0x77, 0x55, 0x70, 0x18, - 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x62, 0x6c, 0x6f, 0x77, 0x55, 0x70, 0x12, 0x16, 0x0a, - 0x06, 0x74, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x74, - 0x65, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x62, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x4c, - 0x6f, 0x63, 0x61, 0x6c, 0x49, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x62, 0x75, - 0x6c, 0x6c, 0x65, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x49, 0x64, 0x22, 0xb5, 0x07, 0x0a, 0x0e, - 0x46, 0x69, 0x72, 0x65, 0x62, 0x61, 0x6c, 0x6c, 0x42, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x12, 0x38, - 0x0a, 0x17, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x6e, 0x64, + 0x6f, 0x6c, 0x6c, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x16, + 0x0a, 0x06, 0x6f, 0x6e, 0x57, 0x61, 0x6c, 0x6c, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, + 0x6f, 0x6e, 0x57, 0x61, 0x6c, 0x6c, 0x12, 0x13, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0xe5, + 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0b, 0x64, + 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0xe6, 0x07, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x17, + 0x0a, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x18, 0xe7, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x22, 0x6f, 0x0a, 0x11, 0x49, 0x6e, 0x70, 0x75, 0x74, + 0x46, 0x72, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x12, 0x0e, 0x0a, 0x02, + 0x64, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x64, 0x78, 0x12, 0x0e, 0x0a, 0x02, + 0x64, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x64, 0x79, 0x12, 0x1c, 0x0a, 0x09, + 0x62, 0x74, 0x6e, 0x41, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x09, 0x62, 0x74, 0x6e, 0x41, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x74, + 0x6e, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x62, + 0x74, 0x6e, 0x42, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x22, 0x50, 0x0a, 0x10, 0x49, 0x6e, 0x70, 0x75, + 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x55, 0x70, 0x73, 0x79, 0x6e, 0x63, 0x12, 0x22, 0x0a, 0x0c, + 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x64, + 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x07, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x22, 0x7c, 0x0a, 0x12, 0x49, 0x6e, + 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x79, 0x6e, 0x63, + 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, + 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x4c, 0x69, 0x73, + 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x04, 0x52, 0x09, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x4c, 0x69, + 0x73, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x4c, + 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x72, 0x6d, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x3b, 0x0a, 0x0f, 0x48, 0x65, 0x61, 0x72, + 0x74, 0x62, 0x65, 0x61, 0x74, 0x55, 0x70, 0x73, 0x79, 0x6e, 0x63, 0x12, 0x28, 0x0a, 0x0f, 0x63, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xb8, 0x02, 0x0a, 0x05, 0x57, 0x73, 0x52, 0x65, 0x71, 0x12, + 0x14, 0x0a, 0x05, 0x6d, 0x73, 0x67, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, + 0x6d, 0x73, 0x67, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, + 0x64, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, + 0x61, 0x63, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6a, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x6a, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x64, 0x65, + 0x78, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x46, 0x72, 0x61, 0x6d, 0x65, + 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, + 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x12, 0x61, 0x63, 0x6b, 0x69, 0x6e, + 0x67, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x12, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x70, 0x75, 0x74, + 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x4e, 0x0a, 0x15, 0x69, 0x6e, 0x70, 0x75, 0x74, + 0x46, 0x72, 0x61, 0x6d, 0x65, 0x55, 0x70, 0x73, 0x79, 0x6e, 0x63, 0x42, 0x61, 0x74, 0x63, 0x68, + 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2e, + 0x49, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x55, 0x70, 0x73, 0x79, 0x6e, 0x63, + 0x52, 0x15, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x55, 0x70, 0x73, 0x79, + 0x6e, 0x63, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x27, 0x0a, 0x02, 0x68, 0x62, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2e, 0x48, 0x65, 0x61, + 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x55, 0x70, 0x73, 0x79, 0x6e, 0x63, 0x52, 0x02, 0x68, 0x62, + 0x22, 0x89, 0x02, 0x0a, 0x06, 0x57, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x72, + 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x72, 0x65, 0x74, 0x12, 0x20, 0x0a, + 0x0b, 0x65, 0x63, 0x68, 0x6f, 0x65, 0x64, 0x4d, 0x73, 0x67, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0b, 0x65, 0x63, 0x68, 0x6f, 0x65, 0x64, 0x4d, 0x73, 0x67, 0x49, 0x64, 0x12, + 0x10, 0x0a, 0x03, 0x61, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x61, 0x63, + 0x74, 0x12, 0x2b, 0x0a, 0x03, 0x72, 0x64, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x44, 0x6f, 0x77, 0x6e, + 0x73, 0x79, 0x6e, 0x63, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x52, 0x03, 0x72, 0x64, 0x66, 0x12, 0x54, + 0x0a, 0x17, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x44, 0x6f, 0x77, 0x6e, + 0x73, 0x79, 0x6e, 0x63, 0x42, 0x61, 0x74, 0x63, 0x68, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, + 0x61, 0x6d, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x52, 0x17, 0x69, 0x6e, 0x70, + 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x42, + 0x61, 0x74, 0x63, 0x68, 0x12, 0x36, 0x0a, 0x08, 0x62, 0x63, 0x69, 0x46, 0x72, 0x61, 0x6d, 0x65, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2e, + 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x69, 0x64, 0x65, 0x72, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x08, 0x62, 0x63, 0x69, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x22, 0xf4, 0x01, 0x0a, + 0x14, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, 0x6e, 0x61, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x2a, 0x0a, 0x10, 0x72, 0x65, 0x66, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x17, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x6e, 0x64, 0x65, - 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x11, 0x6f, 0x66, 0x66, 0x65, - 0x6e, 0x64, 0x65, 0x72, 0x4a, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x11, 0x6f, 0x66, 0x66, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x4a, 0x6f, 0x69, - 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, - 0x70, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x12, - 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x46, 0x72, 0x61, - 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, - 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x12, - 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x64, 0x46, 0x72, 0x61, - 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, - 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x64, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, - 0x12, 0x24, 0x0a, 0x0d, 0x68, 0x69, 0x74, 0x53, 0x74, 0x75, 0x6e, 0x46, 0x72, 0x61, 0x6d, 0x65, - 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x68, 0x69, 0x74, 0x53, 0x74, 0x75, 0x6e, - 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x53, - 0x74, 0x75, 0x6e, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x74, 0x75, 0x6e, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, - 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x75, 0x73, 0x68, 0x62, 0x61, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x58, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x70, 0x75, 0x73, 0x68, 0x62, 0x61, 0x63, 0x6b, - 0x56, 0x65, 0x6c, 0x58, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x75, 0x73, 0x68, 0x62, 0x61, 0x63, 0x6b, - 0x56, 0x65, 0x6c, 0x59, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x70, 0x75, 0x73, 0x68, - 0x62, 0x61, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x59, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x61, 0x6d, 0x61, - 0x67, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, - 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x65, 0x6c, 0x66, 0x4c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x58, - 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x73, 0x65, 0x6c, 0x66, 0x4c, 0x6f, 0x63, 0x6b, - 0x56, 0x65, 0x6c, 0x58, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x65, 0x6c, 0x66, 0x4c, 0x6f, 0x63, 0x6b, - 0x56, 0x65, 0x6c, 0x59, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x73, 0x65, 0x6c, 0x66, - 0x4c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x59, 0x12, 0x24, 0x0a, 0x0d, 0x68, 0x69, 0x74, 0x62, - 0x6f, 0x78, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x58, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0d, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x58, 0x12, 0x24, - 0x0a, 0x0d, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x59, 0x18, - 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x4f, 0x66, 0x66, - 0x73, 0x65, 0x74, 0x59, 0x12, 0x20, 0x0a, 0x0b, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x53, 0x69, - 0x7a, 0x65, 0x58, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x68, 0x69, 0x74, 0x62, 0x6f, - 0x78, 0x53, 0x69, 0x7a, 0x65, 0x58, 0x12, 0x20, 0x0a, 0x0b, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, - 0x53, 0x69, 0x7a, 0x65, 0x59, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x68, 0x69, 0x74, - 0x62, 0x6f, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x59, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x6c, 0x6f, 0x77, - 0x55, 0x70, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x62, 0x6c, 0x6f, 0x77, 0x55, 0x70, - 0x12, 0x16, 0x0a, 0x06, 0x74, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x74, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x62, 0x75, 0x6c, 0x6c, - 0x65, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x49, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0d, 0x62, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x23, - 0x0a, 0x0c, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x47, 0x72, 0x69, 0x64, 0x58, 0x18, 0xe7, - 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x47, 0x72, - 0x69, 0x64, 0x58, 0x12, 0x23, 0x0a, 0x0c, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x47, 0x72, - 0x69, 0x64, 0x59, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x76, 0x69, 0x72, 0x74, - 0x75, 0x61, 0x6c, 0x47, 0x72, 0x69, 0x64, 0x59, 0x12, 0x13, 0x0a, 0x04, 0x64, 0x69, 0x72, 0x58, - 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x64, 0x69, 0x72, 0x58, 0x12, 0x13, 0x0a, - 0x04, 0x64, 0x69, 0x72, 0x59, 0x18, 0xea, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x64, 0x69, - 0x72, 0x59, 0x12, 0x13, 0x0a, 0x04, 0x76, 0x65, 0x6c, 0x58, 0x18, 0xeb, 0x07, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x04, 0x76, 0x65, 0x6c, 0x58, 0x12, 0x13, 0x0a, 0x04, 0x76, 0x65, 0x6c, 0x59, 0x18, - 0xec, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x76, 0x65, 0x6c, 0x59, 0x12, 0x15, 0x0a, 0x05, - 0x73, 0x70, 0x65, 0x65, 0x64, 0x18, 0xed, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x70, - 0x65, 0x65, 0x64, 0x22, 0xc9, 0x05, 0x0a, 0x12, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x43, 0x6f, - 0x6c, 0x6c, 0x69, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, - 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, - 0x74, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x76, 0x61, 0x6c, 0x54, 0x6f, 0x50, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x54, 0x6f, 0x50, 0x69, 0x6e, 0x67, - 0x12, 0x34, 0x0a, 0x15, 0x77, 0x69, 0x6c, 0x6c, 0x4b, 0x69, 0x63, 0x6b, 0x49, 0x66, 0x49, 0x6e, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x46, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x15, 0x77, 0x69, 0x6c, 0x6c, 0x4b, 0x69, 0x63, 0x6b, 0x49, 0x66, 0x49, 0x6e, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x46, 0x6f, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x52, - 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x62, 0x6f, 0x75, - 0x6e, 0x64, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x13, 0x62, 0x61, 0x74, 0x74, - 0x6c, 0x65, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x13, 0x62, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x44, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x12, 0x46, 0x0a, 0x1e, 0x69, 0x6e, - 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x55, 0x70, 0x73, 0x79, 0x6e, 0x63, 0x44, 0x65, - 0x6c, 0x61, 0x79, 0x54, 0x6f, 0x6c, 0x65, 0x72, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x1e, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x55, 0x70, + 0x10, 0x72, 0x65, 0x66, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, + 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x75, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, + 0x4d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x75, 0x6e, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x58, 0x0a, 0x19, 0x74, + 0x6f, 0x53, 0x65, 0x6e, 0x64, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x44, + 0x6f, 0x77, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, + 0x6d, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x52, 0x19, 0x74, 0x6f, 0x53, 0x65, + 0x6e, 0x64, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x44, 0x6f, 0x77, 0x6e, + 0x73, 0x79, 0x6e, 0x63, 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x46, + 0x6f, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x79, 0x6e, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x11, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, + 0x79, 0x6e, 0x63, 0x22, 0xfd, 0x05, 0x0a, 0x0b, 0x4d, 0x65, 0x6c, 0x65, 0x65, 0x42, 0x75, 0x6c, + 0x6c, 0x65, 0x74, 0x12, 0x38, 0x0a, 0x17, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x65, + 0x64, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x17, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, + 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x2c, 0x0a, + 0x11, 0x6f, 0x66, 0x66, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x4a, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x64, + 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x6f, 0x66, 0x66, 0x65, 0x6e, 0x64, + 0x65, 0x72, 0x4a, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x24, 0x0a, 0x0d, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x46, 0x72, 0x61, 0x6d, 0x65, + 0x73, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, + 0x53, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x63, + 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x46, 0x72, 0x61, 0x6d, + 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, + 0x45, 0x64, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x63, + 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x64, 0x46, 0x72, 0x61, 0x6d, + 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x46, 0x72, 0x61, 0x6d, 0x65, + 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x46, + 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x68, 0x69, 0x74, 0x53, 0x74, 0x75, 0x6e, + 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x68, 0x69, + 0x74, 0x53, 0x74, 0x75, 0x6e, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x74, 0x75, 0x6e, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x74, 0x75, 0x6e, 0x46, + 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x75, 0x73, 0x68, 0x62, 0x61, 0x63, + 0x6b, 0x56, 0x65, 0x6c, 0x58, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x70, 0x75, 0x73, + 0x68, 0x62, 0x61, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x58, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x75, 0x73, + 0x68, 0x62, 0x61, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x59, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0c, 0x70, 0x75, 0x73, 0x68, 0x62, 0x61, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x59, 0x12, 0x16, 0x0a, + 0x06, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x64, + 0x61, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x65, 0x6c, 0x66, 0x4c, 0x6f, 0x63, + 0x6b, 0x56, 0x65, 0x6c, 0x58, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x73, 0x65, 0x6c, + 0x66, 0x4c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x58, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x65, 0x6c, + 0x66, 0x4c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x59, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0c, 0x73, 0x65, 0x6c, 0x66, 0x4c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x59, 0x12, 0x24, 0x0a, + 0x0d, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x58, 0x18, 0x0e, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x4f, 0x66, 0x66, 0x73, + 0x65, 0x74, 0x58, 0x12, 0x24, 0x0a, 0x0d, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x4f, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x59, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x68, 0x69, 0x74, 0x62, + 0x6f, 0x78, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x59, 0x12, 0x20, 0x0a, 0x0b, 0x68, 0x69, 0x74, + 0x62, 0x6f, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x58, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, + 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x58, 0x12, 0x20, 0x0a, 0x0b, 0x68, + 0x69, 0x74, 0x62, 0x6f, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x59, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0b, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x59, 0x12, 0x16, 0x0a, + 0x06, 0x62, 0x6c, 0x6f, 0x77, 0x55, 0x70, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x62, + 0x6c, 0x6f, 0x77, 0x55, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x18, + 0x13, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x74, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x24, 0x0a, + 0x0d, 0x62, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x49, 0x64, 0x18, 0x14, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x62, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x4c, 0x6f, 0x63, 0x61, + 0x6c, 0x49, 0x64, 0x22, 0xd3, 0x07, 0x0a, 0x0e, 0x46, 0x69, 0x72, 0x65, 0x62, 0x61, 0x6c, 0x6c, + 0x42, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x12, 0x38, 0x0a, 0x17, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, + 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x17, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, + 0x74, 0x65, 0x64, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x64, + 0x12, 0x2c, 0x0a, 0x11, 0x6f, 0x66, 0x66, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x4a, 0x6f, 0x69, 0x6e, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x6f, 0x66, 0x66, + 0x65, 0x6e, 0x64, 0x65, 0x72, 0x4a, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x24, + 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x46, 0x72, + 0x61, 0x6d, 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x53, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x12, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x46, + 0x72, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x45, 0x64, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x12, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x64, 0x46, + 0x72, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x46, 0x72, + 0x61, 0x6d, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x61, 0x63, 0x74, 0x69, + 0x76, 0x65, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x68, 0x69, 0x74, 0x53, + 0x74, 0x75, 0x6e, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0d, 0x68, 0x69, 0x74, 0x53, 0x74, 0x75, 0x6e, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x28, + 0x0a, 0x0f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x74, 0x75, 0x6e, 0x46, 0x72, 0x61, 0x6d, 0x65, + 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x74, + 0x75, 0x6e, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x75, 0x73, 0x68, + 0x62, 0x61, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x58, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, + 0x70, 0x75, 0x73, 0x68, 0x62, 0x61, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x58, 0x12, 0x22, 0x0a, 0x0c, + 0x70, 0x75, 0x73, 0x68, 0x62, 0x61, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x59, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0c, 0x70, 0x75, 0x73, 0x68, 0x62, 0x61, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x59, + 0x12, 0x16, 0x0a, 0x06, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x06, 0x64, 0x61, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x65, 0x6c, 0x66, + 0x4c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x58, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, + 0x73, 0x65, 0x6c, 0x66, 0x4c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x58, 0x12, 0x22, 0x0a, 0x0c, + 0x73, 0x65, 0x6c, 0x66, 0x4c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x59, 0x18, 0x0d, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0c, 0x73, 0x65, 0x6c, 0x66, 0x4c, 0x6f, 0x63, 0x6b, 0x56, 0x65, 0x6c, 0x59, + 0x12, 0x24, 0x0a, 0x0d, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, + 0x58, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x4f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x58, 0x12, 0x24, 0x0a, 0x0d, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, + 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x59, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x68, + 0x69, 0x74, 0x62, 0x6f, 0x78, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x59, 0x12, 0x20, 0x0a, 0x0b, + 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x58, 0x18, 0x10, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0b, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x58, 0x12, 0x20, + 0x0a, 0x0b, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x59, 0x18, 0x11, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0b, 0x68, 0x69, 0x74, 0x62, 0x6f, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x59, + 0x12, 0x16, 0x0a, 0x06, 0x62, 0x6c, 0x6f, 0x77, 0x55, 0x70, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x06, 0x62, 0x6c, 0x6f, 0x77, 0x55, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x65, 0x61, 0x6d, + 0x49, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x74, 0x65, 0x61, 0x6d, 0x49, 0x64, + 0x12, 0x24, 0x0a, 0x0d, 0x62, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x49, + 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x62, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x4c, + 0x6f, 0x63, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x70, 0x65, 0x63, 0x69, 0x65, + 0x73, 0x49, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x70, 0x65, 0x63, 0x69, + 0x65, 0x73, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0c, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x47, + 0x72, 0x69, 0x64, 0x58, 0x18, 0xe7, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x76, 0x69, 0x72, + 0x74, 0x75, 0x61, 0x6c, 0x47, 0x72, 0x69, 0x64, 0x58, 0x12, 0x23, 0x0a, 0x0c, 0x76, 0x69, 0x72, + 0x74, 0x75, 0x61, 0x6c, 0x47, 0x72, 0x69, 0x64, 0x59, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0c, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x47, 0x72, 0x69, 0x64, 0x59, 0x12, 0x13, + 0x0a, 0x04, 0x64, 0x69, 0x72, 0x58, 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x64, + 0x69, 0x72, 0x58, 0x12, 0x13, 0x0a, 0x04, 0x64, 0x69, 0x72, 0x59, 0x18, 0xea, 0x07, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x04, 0x64, 0x69, 0x72, 0x59, 0x12, 0x13, 0x0a, 0x04, 0x76, 0x65, 0x6c, 0x58, + 0x18, 0xeb, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x76, 0x65, 0x6c, 0x58, 0x12, 0x13, 0x0a, + 0x04, 0x76, 0x65, 0x6c, 0x59, 0x18, 0xec, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x76, 0x65, + 0x6c, 0x59, 0x12, 0x15, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x65, 0x64, 0x18, 0xed, 0x07, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x05, 0x73, 0x70, 0x65, 0x65, 0x64, 0x22, 0xc9, 0x05, 0x0a, 0x12, 0x42, 0x61, + 0x74, 0x74, 0x6c, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x69, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, + 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, + 0x0a, 0x0e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x54, 0x6f, 0x50, 0x69, 0x6e, 0x67, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, + 0x54, 0x6f, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x34, 0x0a, 0x15, 0x77, 0x69, 0x6c, 0x6c, 0x4b, 0x69, + 0x63, 0x6b, 0x49, 0x66, 0x49, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x46, 0x6f, 0x72, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x15, 0x77, 0x69, 0x6c, 0x6c, 0x4b, 0x69, 0x63, 0x6b, 0x49, + 0x66, 0x49, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x46, 0x6f, 0x72, 0x12, 0x20, 0x0a, 0x0b, + 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0b, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x30, + 0x0a, 0x13, 0x62, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x13, 0x62, 0x61, 0x74, + 0x74, 0x6c, 0x65, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6e, 0x6f, 0x73, + 0x12, 0x46, 0x0a, 0x1e, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x55, 0x70, 0x73, 0x79, 0x6e, 0x63, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x54, 0x6f, 0x6c, 0x65, 0x72, 0x61, 0x6e, - 0x63, 0x65, 0x12, 0x48, 0x0a, 0x1f, 0x6d, 0x61, 0x78, 0x43, 0x68, 0x61, 0x73, 0x69, 0x6e, 0x67, - 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x50, 0x65, 0x72, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x1f, 0x6d, 0x61, 0x78, - 0x43, 0x68, 0x61, 0x73, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x46, 0x72, 0x61, - 0x6d, 0x65, 0x73, 0x50, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x3c, 0x0a, 0x19, - 0x72, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, - 0x64, 0x44, 0x74, 0x4d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x01, 0x52, - 0x19, 0x72, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, - 0x65, 0x64, 0x44, 0x74, 0x4d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x12, 0x3a, 0x0a, 0x18, 0x72, 0x6f, - 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x64, 0x44, - 0x74, 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x18, 0x72, 0x6f, - 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x45, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x64, 0x44, - 0x74, 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, - 0x43, 0x61, 0x63, 0x68, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0f, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x43, 0x61, 0x63, 0x68, 0x65, 0x53, 0x69, 0x7a, 0x65, - 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x58, - 0x18, 0x0b, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0c, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4f, 0x66, 0x66, - 0x73, 0x65, 0x74, 0x58, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4f, 0x66, 0x66, - 0x73, 0x65, 0x74, 0x59, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0c, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x59, 0x12, 0x2a, 0x0a, 0x10, 0x63, 0x6f, 0x6c, 0x6c, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x69, 0x6e, 0x53, 0x74, 0x65, 0x70, 0x18, 0x0d, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x10, 0x63, 0x6f, 0x6c, 0x6c, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x69, 0x6e, - 0x53, 0x74, 0x65, 0x70, 0x12, 0x39, 0x0a, 0x17, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x44, 0x61, 0x74, - 0x61, 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, - 0x80, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x44, 0x61, 0x74, - 0x61, 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, - 0xc2, 0x03, 0x0a, 0x11, 0x52, 0x6f, 0x6f, 0x6d, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x79, 0x6e, 0x63, - 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x36, 0x0a, 0x0a, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, - 0x41, 0x72, 0x72, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x73, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x79, 0x6e, - 0x63, 0x52, 0x0a, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x41, 0x72, 0x72, 0x12, 0x26, 0x0a, - 0x0e, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x64, 0x6f, 0x77, 0x6e, - 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x12, 0x37, 0x0a, 0x0c, 0x6d, 0x65, 0x6c, 0x65, 0x65, 0x42, 0x75, - 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x73, 0x2e, 0x4d, 0x65, 0x6c, 0x65, 0x65, 0x42, 0x75, 0x6c, 0x6c, 0x65, 0x74, - 0x52, 0x0c, 0x6d, 0x65, 0x6c, 0x65, 0x65, 0x42, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x12, 0x40, - 0x0a, 0x0f, 0x66, 0x69, 0x72, 0x65, 0x62, 0x61, 0x6c, 0x6c, 0x42, 0x75, 0x6c, 0x6c, 0x65, 0x74, - 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, - 0x2e, 0x46, 0x69, 0x72, 0x65, 0x62, 0x61, 0x6c, 0x6c, 0x42, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x52, - 0x0f, 0x66, 0x69, 0x72, 0x65, 0x62, 0x61, 0x6c, 0x6c, 0x42, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x73, - 0x12, 0x37, 0x0a, 0x16, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x55, 0x6e, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x18, 0x80, 0x08, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x16, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x55, 0x6e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x72, 0x6d, 0x65, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x2d, 0x0a, 0x11, 0x73, 0x68, 0x6f, - 0x75, 0x6c, 0x64, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x79, 0x6e, 0x63, 0x18, 0x81, - 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x46, 0x6f, 0x72, - 0x63, 0x65, 0x52, 0x65, 0x73, 0x79, 0x6e, 0x63, 0x12, 0x25, 0x0a, 0x0d, 0x73, 0x70, 0x65, 0x63, - 0x69, 0x65, 0x73, 0x49, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x82, 0x08, 0x20, 0x03, 0x28, 0x05, - 0x52, 0x0d, 0x73, 0x70, 0x65, 0x63, 0x69, 0x65, 0x73, 0x49, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x12, - 0x33, 0x0a, 0x14, 0x62, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x49, 0x64, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x83, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, - 0x62, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x49, 0x64, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x65, 0x72, 0x42, 0x13, 0x5a, 0x11, 0x62, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x5f, 0x73, - 0x72, 0x76, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x1e, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x46, + 0x72, 0x61, 0x6d, 0x65, 0x55, 0x70, 0x73, 0x79, 0x6e, 0x63, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x54, + 0x6f, 0x6c, 0x65, 0x72, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x48, 0x0a, 0x1f, 0x6d, 0x61, 0x78, 0x43, + 0x68, 0x61, 0x73, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, + 0x65, 0x73, 0x50, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x1f, 0x6d, 0x61, 0x78, 0x43, 0x68, 0x61, 0x73, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x6e, + 0x64, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x50, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x12, 0x3c, 0x0a, 0x19, 0x72, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x45, 0x73, + 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x64, 0x44, 0x74, 0x4d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x01, 0x52, 0x19, 0x72, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x45, + 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x64, 0x44, 0x74, 0x4d, 0x69, 0x6c, 0x6c, 0x69, 0x73, + 0x12, 0x3a, 0x0a, 0x18, 0x72, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x45, 0x73, 0x74, 0x69, + 0x6d, 0x61, 0x74, 0x65, 0x64, 0x44, 0x74, 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x18, 0x72, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x45, 0x73, 0x74, 0x69, + 0x6d, 0x61, 0x74, 0x65, 0x64, 0x44, 0x74, 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x12, 0x28, 0x0a, 0x0f, + 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x43, 0x61, 0x63, 0x68, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x43, 0x61, 0x63, + 0x68, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x58, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0c, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x58, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x59, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x01, + 0x52, 0x0c, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x59, 0x12, 0x2a, + 0x0a, 0x10, 0x63, 0x6f, 0x6c, 0x6c, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x69, 0x6e, 0x53, 0x74, + 0x65, 0x70, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x63, 0x6f, 0x6c, 0x6c, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x4d, 0x69, 0x6e, 0x53, 0x74, 0x65, 0x70, 0x12, 0x39, 0x0a, 0x17, 0x66, 0x72, + 0x61, 0x6d, 0x65, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x45, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x80, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x66, 0x72, + 0x61, 0x6d, 0x65, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x45, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0xc2, 0x03, 0x0a, 0x11, 0x52, 0x6f, 0x6f, 0x6d, 0x44, 0x6f, + 0x77, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x36, 0x0a, 0x0a, 0x70, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x41, 0x72, 0x72, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x44, + 0x6f, 0x77, 0x6e, 0x73, 0x79, 0x6e, 0x63, 0x52, 0x0a, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, + 0x41, 0x72, 0x72, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x64, 0x6f, 0x77, 0x6e, + 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x12, 0x37, 0x0a, 0x0c, 0x6d, + 0x65, 0x6c, 0x65, 0x65, 0x42, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2e, 0x4d, 0x65, 0x6c, 0x65, 0x65, + 0x42, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x0c, 0x6d, 0x65, 0x6c, 0x65, 0x65, 0x42, 0x75, 0x6c, + 0x6c, 0x65, 0x74, 0x73, 0x12, 0x40, 0x0a, 0x0f, 0x66, 0x69, 0x72, 0x65, 0x62, 0x61, 0x6c, 0x6c, + 0x42, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2e, 0x46, 0x69, 0x72, 0x65, 0x62, 0x61, 0x6c, 0x6c, 0x42, + 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x0f, 0x66, 0x69, 0x72, 0x65, 0x62, 0x61, 0x6c, 0x6c, 0x42, + 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x12, 0x37, 0x0a, 0x16, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, + 0x64, 0x55, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x4d, 0x61, 0x73, 0x6b, + 0x18, 0x80, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x16, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, + 0x55, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x12, + 0x2d, 0x0a, 0x11, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x52, 0x65, + 0x73, 0x79, 0x6e, 0x63, 0x18, 0x81, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x73, 0x68, 0x6f, + 0x75, 0x6c, 0x64, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x79, 0x6e, 0x63, 0x12, 0x25, + 0x0a, 0x0d, 0x73, 0x70, 0x65, 0x63, 0x69, 0x65, 0x73, 0x49, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x18, + 0x82, 0x08, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0d, 0x73, 0x70, 0x65, 0x63, 0x69, 0x65, 0x73, 0x49, + 0x64, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x14, 0x62, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x4c, + 0x6f, 0x63, 0x61, 0x6c, 0x49, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x83, 0x08, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x62, 0x75, 0x6c, 0x6c, 0x65, 0x74, 0x4c, 0x6f, 0x63, 0x61, + 0x6c, 0x49, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x13, 0x5a, 0x11, 0x62, 0x61, + 0x74, 0x74, 0x6c, 0x65, 0x5f, 0x73, 0x72, 0x76, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/frontend/assets/plugin_scripts/jsexport.js b/frontend/assets/plugin_scripts/jsexport.js index 5088366..fe5a621 100644 --- a/frontend/assets/plugin_scripts/jsexport.js +++ b/frontend/assets/plugin_scripts/jsexport.js @@ -2,15 +2,6539 @@ (function() { var $goVersion = "go1.18.6"; -Error.stackTraceLimit=1/0;var $global,$module,$NaN=NaN;if("undefined"!=typeof window?$global=window:"undefined"!=typeof self?$global=self:"undefined"!=typeof global?($global=global).require=require:$global=this,void 0===$global||void 0===$global.Array)throw new Error("no global object found");if("undefined"!=typeof module&&($module=module),!$global.fs&&$global.require)try{var fs=$global.require("fs");"object"==typeof fs&&null!==fs&&0!==Object.keys(fs).length&&($global.fs=fs)}catch(e){}if(!$global.fs){var outputBuf="",decoder=new TextDecoder("utf-8");$global.fs={constants:{O_WRONLY:-1,O_RDWR:-1,O_CREAT:-1,O_TRUNC:-1,O_APPEND:-1,O_EXCL:-1},writeSync:function(e,n){var r=(outputBuf+=decoder.decode(n)).lastIndexOf("\n");return-1!=r&&(console.log(outputBuf.substr(0,r)),outputBuf=outputBuf.substr(r+1)),n.length},write:function(e,n,r,t,i,a){0===r&&t===n.length&&null===i?a(null,this.writeSync(e,n)):a(enosys())}}}var $throwRuntimeError,$linknames={},$packages={},$idCounter=0,$keys=function(e){return e?Object.keys(e):[]},$flushConsole=function(){},$throwNilPointerError=function(){$throwRuntimeError("invalid memory address or nil pointer dereference")},$call=function(e,n,r){return e.apply(n,r)},$makeFunc=function(e){return function(){return $externalize(e(this,new($sliceType($jsObjectPtr))($global.Array.prototype.slice.call(arguments,[]))),$emptyInterface)}},$unused=function(e){},$print=console.log;if(void 0!==$global.process&&$global.require)try{var util=$global.require("util");$print=function(){$global.process.stderr.write(util.format.apply(this,arguments))}}catch(e){}var $println=console.log,$initAllLinknames=function(){for(var e=$keys($packages),n=0;ne.$capacity||t>e.$capacity)&&$throwRuntimeError("slice bounds out of range"),e===e.constructor.nil)return e;var i=new e.constructor(e.$array);return i.$offset=e.$offset+n,i.$length=r-n,i.$capacity=t-n,i},$substring=function(e,n,r){return(n<0||re.length)&&$throwRuntimeError("slice bounds out of range"),e.substring(n,r)},$sliceToNativeArray=function(e){return e.$array.constructor!==Array?e.$array.subarray(e.$offset,e.$offset+e.$length):e.$array.slice(e.$offset,e.$offset+e.$length)},$sliceToGoArray=function(e,n){var r=n.elem;return void 0!==r&&e.$length1114111||55296<=e&&e<=57343)&&(e=65533),e<=127?String.fromCharCode(e):e<=2047?String.fromCharCode(192|e>>6,128|63&e):e<=65535?String.fromCharCode(224|e>>12,128|e>>6&63,128|63&e):String.fromCharCode(240|e>>18,128|e>>12&63,128|e>>6&63,128|63&e)},$stringToBytes=function(e){for(var n=new Uint8Array(e.length),r=0;rt){for(var o=i-1;o>=0;o--)a.copy(e[r+o],n[t+o]);return}for(o=0;ot)for(o=i-1;o>=0;o--)e[r+o]=n[t+o];else for(o=0;oc)if(a=0,c=Math.max(o,e.$capacity<1024?2*e.$capacity:Math.floor(5*e.$capacity/4)),e.$array.constructor===Array){(i=e.$array.slice(e.$offset,e.$offset+e.$length)).length=c;for(var $=e.constructor.elem.zero,u=e.$length;u>>16&65535)*t+r*(n>>>16&65535)<<16>>>0)>>0},$floatKey=function(e){return e!=e?"NaN$"+ ++$idCounter:String(e)},$flatten64=function(e){return 4294967296*e.$high+e.$low},$shiftLeft64=function(e,n){return 0===n?e:n<32?new e.constructor(e.$high<>>32-n,e.$low<>>0):n<64?new e.constructor(e.$low<>n,(e.$low>>>n|e.$high<<32-n)>>>0):n<64?new e.constructor(e.$high>>31,e.$high>>n-32>>>0):e.$high<0?new e.constructor(-1,4294967295):new e.constructor(0,0)},$shiftRightUint64=function(e,n){return 0===n?e:n<32?new e.constructor(e.$high>>>n,(e.$low>>>n|e.$high<<32-n)>>>0):n<64?new e.constructor(0,e.$high>>>n-32):new e.constructor(0,0)},$mul64=function(e,n){var r=e.$high>>>16,t=65535&e.$high,i=e.$low>>>16,a=65535&e.$low,o=n.$high>>>16,c=65535&n.$high,$=n.$low>>>16,u=65535&n.$low,l=0,s=0,f=0,d=0;f+=(d+=a*u)>>>16,s+=(f+=i*u)>>>16,f&=65535,s+=(f+=a*$)>>>16,l+=(s+=t*u)>>>16,s&=65535,l+=(s+=i*$)>>>16,s&=65535,l+=(s+=a*c)>>>16,l+=r*u+t*$+i*c+a*o;var p=((l&=65535)<<16|(s&=65535))>>>0,h=((f&=65535)<<16|(d&=65535))>>>0;return new e.constructor(p,h)},$div64=function(e,n,r){0===n.$high&&0===n.$low&&$throwRuntimeError("integer divide by zero");var t=1,i=1,a=e.$high,o=e.$low;a<0&&(t=-1,i=-1,a=-a,0!==o&&(a--,o=4294967296-o));var c=n.$high,$=n.$low;n.$high<0&&(t*=-1,c=-c,0!==$&&(c--,$=4294967296-$));for(var u=0,l=0,s=0;c<2147483648&&(a>c||a===c&&o>$);)c=(c<<1|$>>>31)>>>0,$=$<<1>>>0,s++;for(var f=0;f<=s;f++)u=u<<1|l>>>31,l=l<<1>>>0,(a>c||a===c&&o>=$)&&(a-=c,(o-=$)<0&&(a--,o+=4294967296),4294967296===++l&&(u++,l=0)),$=($>>>1|c<<31)>>>0,c>>>=1;return r?new e.constructor(a*i,o*i):new e.constructor(u*t,l*t)},$divComplex=function(e,n){var r=e.$real===1/0||e.$real===-1/0||e.$imag===1/0||e.$imag===-1/0,t=n.$real===1/0||n.$real===-1/0||n.$imag===1/0||n.$imag===-1/0,i=!r&&(e.$real!=e.$real||e.$imag!=e.$imag),a=!t&&(n.$real!=n.$real||n.$imag!=n.$imag);if(i||a)return new e.constructor(NaN,NaN);if(r&&!t)return new e.constructor(1/0,1/0);if(!r&&t)return new e.constructor(0,0);if(0===n.$real&&0===n.$imag)return 0===e.$real&&0===e.$imag?new e.constructor(NaN,NaN):new e.constructor(1/0,1/0);if(Math.abs(n.$real)<=Math.abs(n.$imag)){var o=n.$real/n.$imag,c=n.$real*o+n.$imag;return new e.constructor((e.$real*o+e.$imag)/c,(e.$imag*o-e.$real)/c)}o=n.$imag/n.$real,c=n.$imag*o+n.$real;return new e.constructor((e.$imag*o+e.$real)/c,(e.$imag-e.$real*o)/c)},$kindBool=1,$kindInt=2,$kindInt8=3,$kindInt16=4,$kindInt32=5,$kindInt64=6,$kindUint=7,$kindUint8=8,$kindUint16=9,$kindUint32=10,$kindUint64=11,$kindUintptr=12,$kindFloat32=13,$kindFloat64=14,$kindComplex64=15,$kindComplex128=16,$kindArray=17,$kindChan=18,$kindFunc=19,$kindInterface=20,$kindMap=21,$kindPtr=22,$kindSlice=23,$kindString=24,$kindStruct=25,$kindUnsafePointer=26,$methodSynthesizers=[],$addMethodSynthesizer=function(e){null!==$methodSynthesizers?$methodSynthesizers.push(e):e()},$synthesizeMethods=function(){$methodSynthesizers.forEach(function(e){e()}),$methodSynthesizers=null},$ifaceKeyFor=function(e){if(e===$ifaceNil)return"nil";var n=e.constructor;return n.string+"$"+n.keyFor(e.$val)},$identity=function(e){return e},$typeIDCounter=0,$idKey=function(e){return void 0===e.$id&&($idCounter++,e.$id=$idCounter),String(e.$id)},$arrayPtrCtor=function(){return function(e){this.$get=function(){return e},this.$set=function(e){typ.copy(this,e)},this.$val=e}},$newType=function(e,n,r,t,i,a,o){var c;switch(n){case $kindBool:case $kindInt:case $kindInt8:case $kindInt16:case $kindInt32:case $kindUint:case $kindUint8:case $kindUint16:case $kindUint32:case $kindUintptr:case $kindUnsafePointer:(c=function(e){this.$val=e}).wrapped=!0,c.keyFor=$identity;break;case $kindString:(c=function(e){this.$val=e}).wrapped=!0,c.keyFor=function(e){return"$"+e};break;case $kindFloat32:case $kindFloat64:(c=function(e){this.$val=e}).wrapped=!0,c.keyFor=function(e){return $floatKey(e)};break;case $kindInt64:(c=function(e,n){this.$high=e+Math.floor(Math.ceil(n)/4294967296)>>0,this.$low=n>>>0,this.$val=this}).keyFor=function(e){return e.$high+"$"+e.$low};break;case $kindUint64:(c=function(e,n){this.$high=e+Math.floor(Math.ceil(n)/4294967296)>>>0,this.$low=n>>>0,this.$val=this}).keyFor=function(e){return e.$high+"$"+e.$low};break;case $kindComplex64:(c=function(e,n){this.$real=$fround(e),this.$imag=$fround(n),this.$val=this}).keyFor=function(e){return e.$real+"$"+e.$imag};break;case $kindComplex128:(c=function(e,n){this.$real=e,this.$imag=n,this.$val=this}).keyFor=function(e){return e.$real+"$"+e.$imag};break;case $kindArray:(c=function(e){this.$val=e}).wrapped=!0,c.ptr=$newType(4,$kindPtr,"*"+r,!1,"",!1,$arrayPtrCtor()),c.init=function(e,n){c.elem=e,c.len=n,c.comparable=e.comparable,c.keyFor=function(n){return Array.prototype.join.call($mapArray(n,function(n){return String(e.keyFor(n)).replace(/\\/g,"\\\\").replace(/\$/g,"\\$")}),"$")},c.copy=function(n,r){$copyArray(n,r,0,0,r.length,e)},c.ptr.init(c),Object.defineProperty(c.ptr.nil,"nilCheck",{get:$throwNilPointerError})};break;case $kindChan:(c=function(e){this.$val=e}).wrapped=!0,c.keyFor=$idKey,c.init=function(e,n,r){c.elem=e,c.sendOnly=n,c.recvOnly=r};break;case $kindFunc:(c=function(e){this.$val=e}).wrapped=!0,c.init=function(e,n,r){c.params=e,c.results=n,c.variadic=r,c.comparable=!1};break;case $kindInterface:(c={implementedBy:{},missingMethodFor:{}}).keyFor=$ifaceKeyFor,c.init=function(e){c.methods=e,e.forEach(function(e){$ifaceNil[e.prop]=$throwNilPointerError})};break;case $kindMap:(c=function(e){this.$val=e}).wrapped=!0,c.init=function(e,n){c.key=e,c.elem=n,c.comparable=!1};break;case $kindPtr:(c=o||function(e,n,r){this.$get=e,this.$set=n,this.$target=r,this.$val=this}).keyFor=$idKey,c.init=function(e){c.elem=e,c.wrapped=e.kind===$kindArray,c.nil=new c($throwNilPointerError,$throwNilPointerError)};break;case $kindSlice:(c=function(e){e.constructor!==c.nativeArray&&(e=new c.nativeArray(e)),this.$array=e,this.$offset=0,this.$length=e.length,this.$capacity=e.length,this.$val=this}).init=function(e){c.elem=e,c.comparable=!1,c.nativeArray=$nativeArray(e.kind),c.nil=new c([])};break;case $kindStruct:(c=function(e){this.$val=e}).wrapped=!0,c.ptr=$newType(4,$kindPtr,"*"+r,!1,i,a,o),c.ptr.elem=c,c.ptr.prototype.$get=function(){return this},c.ptr.prototype.$set=function(e){c.copy(this,e)},c.init=function(e,n){c.pkgPath=e,c.fields=n,n.forEach(function(e){e.typ.comparable||(c.comparable=!1)}),c.keyFor=function(e){var r=e.$val;return $mapArray(n,function(e){return String(e.typ.keyFor(r[e.prop])).replace(/\\/g,"\\\\").replace(/\$/g,"\\$")}).join("$")},c.copy=function(e,r){for(var t=0;t0;){var a=[],o=[];t.forEach(function(e){if(!i[e.typ.string])switch(i[e.typ.string]=!0,e.typ.named&&(o=o.concat(e.typ.methods),e.indirect&&(o=o.concat($ptrType(e.typ).methods))),e.typ.kind){case $kindStruct:e.typ.fields.forEach(function(n){if(n.embedded){var r=n.typ,t=r.kind===$kindPtr;a.push({typ:t?r.elem:r,indirect:e.indirect||t})}});break;case $kindInterface:o=o.concat(e.typ.methods)}}),o.forEach(function(e){void 0===n[e.name]&&(n[e.name]=e)}),t=a}return e.methodSetCache=[],Object.keys(n).sort().forEach(function(r){e.methodSetCache.push(n[r])}),e.methodSetCache},$Bool=$newType(1,$kindBool,"bool",!0,"",!1,null),$Int=$newType(4,$kindInt,"int",!0,"",!1,null),$Int8=$newType(1,$kindInt8,"int8",!0,"",!1,null),$Int16=$newType(2,$kindInt16,"int16",!0,"",!1,null),$Int32=$newType(4,$kindInt32,"int32",!0,"",!1,null),$Int64=$newType(8,$kindInt64,"int64",!0,"",!1,null),$Uint=$newType(4,$kindUint,"uint",!0,"",!1,null),$Uint8=$newType(1,$kindUint8,"uint8",!0,"",!1,null),$Uint16=$newType(2,$kindUint16,"uint16",!0,"",!1,null),$Uint32=$newType(4,$kindUint32,"uint32",!0,"",!1,null),$Uint64=$newType(8,$kindUint64,"uint64",!0,"",!1,null),$Uintptr=$newType(4,$kindUintptr,"uintptr",!0,"",!1,null),$Float32=$newType(4,$kindFloat32,"float32",!0,"",!1,null),$Float64=$newType(8,$kindFloat64,"float64",!0,"",!1,null),$Complex64=$newType(8,$kindComplex64,"complex64",!0,"",!1,null),$Complex128=$newType(16,$kindComplex128,"complex128",!0,"",!1,null),$String=$newType(8,$kindString,"string",!0,"",!1,null),$UnsafePointer=$newType(4,$kindUnsafePointer,"unsafe.Pointer",!0,"unsafe",!1,null),$nativeArray=function(e){switch(e){case $kindInt:return Int32Array;case $kindInt8:return Int8Array;case $kindInt16:return Int16Array;case $kindInt32:return Int32Array;case $kindUint:return Uint32Array;case $kindUint8:return Uint8Array;case $kindUint16:return Uint16Array;case $kindUint32:case $kindUintptr:return Uint32Array;case $kindFloat32:return Float32Array;case $kindFloat64:return Float64Array;default:return Array}},$toNativeArray=function(e,n){var r=$nativeArray(e);return r===Array?n:new r(n)},$arrayTypes={},$arrayType=function(e,n){var r=e.id+"$"+n,t=$arrayTypes[r];return void 0===t&&(t=$newType(12,$kindArray,"["+n+"]"+e.string,!1,"",!1,null),$arrayTypes[r]=t,t.init(e,n)),t},$chanType=function(e,n,r){var t=(r?"<-":"")+"chan"+(n?"<- ":" ");n||r||"<"!=e.string[0]?t+=e.string:t+="("+e.string+")";var i=n?"SendChan":r?"RecvChan":"Chan",a=e[i];return void 0===a&&(a=$newType(4,$kindChan,t,!1,"",!1,null),e[i]=a,a.init(e,n,r)),a},$Chan=function(e,n){(n<0||n>2147483647)&&$throwRuntimeError("makechan: size out of range"),this.$elem=e,this.$capacity=n,this.$buffer=[],this.$sendQueue=[],this.$recvQueue=[],this.$closed=!1},$chanNil=new $Chan(null,0);$chanNil.$sendQueue=$chanNil.$recvQueue={length:0,push:function(){},shift:function(){},indexOf:function(){return-1}};var $funcTypes={},$funcType=function(e,n,r){var t=$mapArray(e,function(e){return e.id}).join(",")+"$"+$mapArray(n,function(e){return e.id}).join(",")+"$"+r,i=$funcTypes[t];if(void 0===i){var a=$mapArray(e,function(e){return e.string});r&&(a[a.length-1]="..."+a[a.length-1].substr(2));var o="func("+a.join(", ")+")";1===n.length?o+=" "+n[0].string:n.length>1&&(o+=" ("+$mapArray(n,function(e){return e.string}).join(", ")+")"),i=$newType(4,$kindFunc,o,!1,"",!1,null),$funcTypes[t]=i,i.init(e,n,r)}return i},$interfaceTypes={},$interfaceType=function(e){var n=$mapArray(e,function(e){return e.pkg+","+e.name+","+e.typ.id}).join("$"),r=$interfaceTypes[n];if(void 0===r){var t="interface {}";0!==e.length&&(t="interface { "+$mapArray(e,function(e){return(""!==e.pkg?e.pkg+".":"")+e.name+e.typ.string.substr(4)}).join("; ")+" }"),r=$newType(8,$kindInterface,t,!1,"",!1,null),$interfaceTypes[n]=r,r.init(e)}return r},$emptyInterface=$interfaceType([]),$ifaceNil={},$error=$newType(8,$kindInterface,"error",!0,"",!1,null);$error.init([{prop:"Error",name:"Error",pkg:"",typ:$funcType([],[$String],!1)}]);var $panicValue,$jsObjectPtr,$jsErrorPtr,$mapTypes={},$mapType=function(e,n){var r=e.id+"$"+n.id,t=$mapTypes[r];return void 0===t&&(t=$newType(4,$kindMap,"map["+e.string+"]"+n.string,!1,"",!1,null),$mapTypes[r]=t,t.init(e,n)),t},$makeMap=function(e,n){for(var r={},t=0;t2147483647)&&$throwRuntimeError("makeslice: len out of range"),(r<0||r2147483647)&&$throwRuntimeError("makeslice: cap out of range");var t=new e.nativeArray(r);if(e.nativeArray===Array)for(var i=0;i4||t<0)break}}finally{0==$scheduled.length&&clearTimeout(e)}},$schedule=function(e){e.asleep&&(e.asleep=!1,$awakeGoroutines++),$scheduled.push(e),$curGoroutine===$noGoroutine&&$runScheduled()},$setTimeout=function(e,n){return $awakeGoroutines++,setTimeout(function(){$awakeGoroutines--,e()},n)},$block=function(){$curGoroutine===$noGoroutine&&$throwRuntimeError("cannot block in JavaScript callback, fix by wrapping code in goroutine"),$curGoroutine.asleep=!0},$restore=function(e,n){return void 0!==e&&void 0!==e.$blk?e:n},$send=function(e,n){e.$closed&&$throwRuntimeError("send on closed channel");var r=e.$recvQueue.shift();if(void 0===r){if(!(e.$buffer.length65535){var l=Math.floor((u-65536)/1024)+55296,s=(u-65536)%1024+56320;$+=String.fromCharCode(l,s)}else $+=String.fromCharCode(u)}return $;case $kindStruct:var f=$packages.time;if(void 0!==f&&e.constructor===f.Time.ptr){var d=$div64(e.UnixNano(),new $Int64(0,1e6));return new Date($flatten64(d))}var p={},h=function(e,n){if(n===$jsObjectPtr)return e;switch(n.kind){case $kindPtr:return e===n.nil?p:h(e.$get(),n.elem);case $kindStruct:var r=n.fields[0];return h(e[r.prop],r.typ);case $kindInterface:return h(e.$val,e.constructor);default:return p}},k=h(e,n);if(k!==p)return k;if(void 0!==r)return r(e);k={};for(a=0;a>24;case $kindInt16:return parseInt(e)<<16>>16;case $kindInt32:return parseInt(e)>>0;case $kindUint:return parseInt(e);case $kindUint8:return parseInt(e)<<24>>>24;case $kindUint16:return parseInt(e)<<16>>>16;case $kindUint32:case $kindUintptr:return parseInt(e)>>>0;case $kindInt64:case $kindUint64:return new n(0,e);case $kindFloat32:case $kindFloat64:return parseFloat(e);case $kindArray:return e.length!==n.len&&$throwRuntimeError("got array with wrong size from JavaScript native"),$mapArray(e,function(e){return $internalize(e,n.elem,i)});case $kindFunc:return function(){for(var t=[],a=0;a=128)return!1;return!0}; +Error.stackTraceLimit = Infinity; -$packages["github.com/gopherjs/gopherjs/js"]=(function(){var $pkg={},$init,A,B,J,K,M,O,P,Q,R,S,T,G,H,L;A=$pkg.Object=$newType(0,$kindStruct,"js.Object",true,"github.com/gopherjs/gopherjs/js",true,function(object_){this.$val=this;if(arguments.length===0){this.object=null;return;}this.object=object_;});B=$pkg.Error=$newType(0,$kindStruct,"js.Error",true,"github.com/gopherjs/gopherjs/js",true,function(Object_){this.$val=this;if(arguments.length===0){this.Object=null;return;}this.Object=Object_;});J=$pkg.M=$newType(4,$kindMap,"js.M",true,"github.com/gopherjs/gopherjs/js",true,null);K=$pkg.S=$newType(12,$kindSlice,"js.S",true,"github.com/gopherjs/gopherjs/js",true,null);M=$sliceType($emptyInterface);O=$ptrType(A);P=$sliceType(O);Q=$funcType([P],[O],true);R=$funcType([],[O],false);S=$funcType([O],[],false);T=$ptrType(B);A.ptr.prototype.Get=function(a){var a,b;b=this;return b.object[$externalize(a,$String)];};A.prototype.Get=function(a){return this.$val.Get(a);};A.ptr.prototype.Set=function(a,b){var a,b,c;c=this;c.object[$externalize(a,$String)]=$externalize(b,$emptyInterface);};A.prototype.Set=function(a,b){return this.$val.Set(a,b);};A.ptr.prototype.Delete=function(a){var a,b;b=this;delete b.object[$externalize(a,$String)];};A.prototype.Delete=function(a){return this.$val.Delete(a);};A.ptr.prototype.Length=function(){var a;a=this;return $parseInt(a.object.length);};A.prototype.Length=function(){return this.$val.Length();};A.ptr.prototype.Index=function(a){var a,b;b=this;return b.object[a];};A.prototype.Index=function(a){return this.$val.Index(a);};A.ptr.prototype.SetIndex=function(a,b){var a,b,c;c=this;c.object[a]=$externalize(b,$emptyInterface);};A.prototype.SetIndex=function(a,b){return this.$val.SetIndex(a,b);};A.ptr.prototype.Call=function(a,b){var a,b,c,d;c=this;return(d=c.object,d[$externalize(a,$String)].apply(d,$externalize(b,M)));};A.prototype.Call=function(a,b){return this.$val.Call(a,b);};A.ptr.prototype.Invoke=function(a){var a,b;b=this;return b.object.apply(undefined,$externalize(a,M));};A.prototype.Invoke=function(a){return this.$val.Invoke(a);};A.ptr.prototype.New=function(a){var a,b;b=this;return new($global.Function.prototype.bind.apply(b.object,[undefined].concat($externalize(a,M))));};A.prototype.New=function(a){return this.$val.New(a);};A.ptr.prototype.Bool=function(){var a;a=this;return!!(a.object);};A.prototype.Bool=function(){return this.$val.Bool();};A.ptr.prototype.String=function(){var a;a=this;return $internalize(a.object,$String);};A.prototype.String=function(){return this.$val.String();};A.ptr.prototype.Int=function(){var a;a=this;return $parseInt(a.object)>>0;};A.prototype.Int=function(){return this.$val.Int();};A.ptr.prototype.Int64=function(){var a;a=this;return $internalize(a.object,$Int64);};A.prototype.Int64=function(){return this.$val.Int64();};A.ptr.prototype.Uint64=function(){var a;a=this;return $internalize(a.object,$Uint64);};A.prototype.Uint64=function(){return this.$val.Uint64();};A.ptr.prototype.Float=function(){var a;a=this;return $parseFloat(a.object);};A.prototype.Float=function(){return this.$val.Float();};A.ptr.prototype.Interface=function(){var a;a=this;return $internalize(a.object,$emptyInterface);};A.prototype.Interface=function(){return this.$val.Interface();};A.ptr.prototype.Unsafe=function(){var a;a=this;return a.object;};A.prototype.Unsafe=function(){return this.$val.Unsafe();};B.ptr.prototype.Error=function(){var a;a=this;return"JavaScript error: "+$internalize(a.Object.message,$String);};B.prototype.Error=function(){return this.$val.Error();};B.ptr.prototype.Stack=function(){var a;a=this;return $internalize(a.Object.stack,$String);};B.prototype.Stack=function(){return this.$val.Stack();};G=function(a){var a,b,c,d,e,f;b=a;c=new($global.Object)();c.__internal_object__=b;d=b.constructor.methods;e=0;while(true){if(!(e<$parseInt(d.length))){break;}f=[f];f[0]=d[e];if(!($internalize(f[0].pkg,$String)==="")){e=e+(1)>>0;continue;}c[$externalize($internalize(f[0].name,$String),$String)]=$externalize((function(f){return function(g){var g;return $externalizeFunction(b[$externalize($internalize(f[0].prop,$String),$String)],f[0].typ,$externalize(true,$Bool)).apply(b,$externalize(g,P));};})(f),Q);e=e+(1)>>0;}return c;};$pkg.MakeWrapper=G;H=function(a){var{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,$s,$r,$c}=$restore(this,{a});$s=$s||0;s:while(true){switch($s){case 0:b=[b];c=[c];b[0]=a;d=b[0].constructor;c[0]=new($global.Object)();e=(function(b,c){return function(e,f){var e,f;$global.Object.defineProperty(c[0],$externalize(e,$String),$externalize(f,J));};})(b,c);$r=e("__internal_object__",$makeMap($String.keyFor,[{k:"value",v:new $jsObjectPtr(b[0])}]));$s=1;case 1:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}f=$internalize(d.string,$String);g=$internalize(d.pkg,$String);h="";if(f.charCodeAt(0)===42){h="*";}i=0;while(true){if(!(i>0));break;}i=i+(1)>>0;}j=g+"."+h+f;$r=e("$type",$makeMap($String.keyFor,[{k:"value",v:new $String(j)}]));$s=2;case 2:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}k=null;l=new($global.Array)();m=d.methods;if(!(m===undefined)){l=l.concat(m);}n=d.elem;if(!(n===undefined)){k=n.fields;l=l.concat(n.methods);}else{k=d.fields;}o=0;case 3:if(!(o<$parseInt(l.length))){$s=4;continue;}p=[p];p[0]=l[o];if(!($internalize(p[0].pkg,$String)==="")){o=o+(1)>>0;$s=3;continue;}$r=e($internalize(p[0].prop,$String),$makeMap($String.keyFor,[{k:"value",v:new Q((function(b,c,p){return function(q){var q;return $externalizeFunction(b[0][$externalize($internalize(p[0].prop,$String),$String)],p[0].typ,$externalize(true,$Bool),H).apply(b[0],$externalize(q,P));};})(b,c,p))}]));$s=5;case 5:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}o=o+(1)>>0;$s=3;continue;case 4:if(!(k===undefined)){$s=6;continue;}$s=7;continue;case 6:q=0;case 8:if(!(q<$parseInt(k.length))){$s=9;continue;}r=[r];r[0]=k[q];if(!!!(r[0].exported)){q=q+(1)>>0;$s=8;continue;}$r=e($internalize(r[0].prop,$String),$makeMap($String.keyFor,[{k:"get",v:new R((function(b,c,r){return function(){var s;s=$copyIfRequired(b[0].$val[$externalize($internalize(r[0].prop,$String),$String)],r[0].typ);return $externalize(s,r[0].typ,H);};})(b,c,r))},{k:"set",v:new S((function(b,c,r){return function(s){var s,t;t=$internalize(s,r[0].typ,H);b[0].$val[$externalize($internalize(r[0].prop,$String),$String)]=t;};})(b,c,r))}]));$s=10;case 10:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}q=q+(1)>>0;$s=8;continue;case 9:case 7:$s=-1;return c[0];}return;}var $f={$blk:H,$c:true,$r,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,$s};return $f;};$pkg.MakeFullWrapper=H;L=function(){var a;a=new B.ptr(null);$unused(a);};O.methods=[{prop:"Get",name:"Get",pkg:"",typ:$funcType([$String],[O],false)},{prop:"Set",name:"Set",pkg:"",typ:$funcType([$String,$emptyInterface],[],false)},{prop:"Delete",name:"Delete",pkg:"",typ:$funcType([$String],[],false)},{prop:"Length",name:"Length",pkg:"",typ:$funcType([],[$Int],false)},{prop:"Index",name:"Index",pkg:"",typ:$funcType([$Int],[O],false)},{prop:"SetIndex",name:"SetIndex",pkg:"",typ:$funcType([$Int,$emptyInterface],[],false)},{prop:"Call",name:"Call",pkg:"",typ:$funcType([$String,M],[O],true)},{prop:"Invoke",name:"Invoke",pkg:"",typ:$funcType([M],[O],true)},{prop:"New",name:"New",pkg:"",typ:$funcType([M],[O],true)},{prop:"Bool",name:"Bool",pkg:"",typ:$funcType([],[$Bool],false)},{prop:"String",name:"String",pkg:"",typ:$funcType([],[$String],false)},{prop:"Int",name:"Int",pkg:"",typ:$funcType([],[$Int],false)},{prop:"Int64",name:"Int64",pkg:"",typ:$funcType([],[$Int64],false)},{prop:"Uint64",name:"Uint64",pkg:"",typ:$funcType([],[$Uint64],false)},{prop:"Float",name:"Float",pkg:"",typ:$funcType([],[$Float64],false)},{prop:"Interface",name:"Interface",pkg:"",typ:$funcType([],[$emptyInterface],false)},{prop:"Unsafe",name:"Unsafe",pkg:"",typ:$funcType([],[$Uintptr],false)}];T.methods=[{prop:"Error",name:"Error",pkg:"",typ:$funcType([],[$String],false)},{prop:"Stack",name:"Stack",pkg:"",typ:$funcType([],[$String],false)}];A.init("github.com/gopherjs/gopherjs/js",[{prop:"object",name:"object",embedded:false,exported:false,typ:O,tag:""}]);B.init("",[{prop:"Object",name:"Object",embedded:true,exported:true,typ:O,tag:""}]);J.init($String,$emptyInterface);K.init($emptyInterface);$init=function(){$pkg.$init=function(){};var $f,$c=false,$s=0,$r;if(this!==undefined&&this.$blk!==undefined){$f=this;$c=true;$s=$f.$s;$r=$f.$r;}s:while(true){switch($s){case 0:L();}return;}if($f===undefined){$f={$blk:$init};}$f.$s=$s;$f.$r=$r;return $f;};$pkg.$init=$init;return $pkg;})(); -$packages["runtime"]=(function(){var $pkg={},$init,A,C,D,AT,AZ,BD,AM,E,AU;A=$packages["github.com/gopherjs/gopherjs/js"];C=$pkg._type=$newType(0,$kindStruct,"runtime._type",true,"runtime",false,function(str_){this.$val=this;if(arguments.length===0){this.str="";return;}this.str=str_;});D=$pkg.TypeAssertionError=$newType(0,$kindStruct,"runtime.TypeAssertionError",true,"runtime",true,function(_interface_,concrete_,asserted_,missingMethod_){this.$val=this;if(arguments.length===0){this._interface=AZ.nil;this.concrete=AZ.nil;this.asserted=AZ.nil;this.missingMethod="";return;}this._interface=_interface_;this.concrete=concrete_;this.asserted=asserted_;this.missingMethod=missingMethod_;});AT=$pkg.errorString=$newType(8,$kindString,"runtime.errorString",true,"runtime",false,null);AZ=$ptrType(C);BD=$ptrType(D);C.ptr.prototype.string=function(){var a;a=this;return a.str;};C.prototype.string=function(){return this.$val.string();};C.ptr.prototype.pkgpath=function(){var a;a=this;return"";};C.prototype.pkgpath=function(){return this.$val.pkgpath();};D.ptr.prototype.RuntimeError=function(){};D.prototype.RuntimeError=function(){return this.$val.RuntimeError();};D.ptr.prototype.Error=function(){var a,b,c,d,e;a=this;b="interface";if(!(a._interface===AZ.nil)){b=a._interface.string();}c=a.asserted.string();if(a.concrete===AZ.nil){return"interface conversion: "+b+" is nil, not "+c;}d=a.concrete.string();if(a.missingMethod===""){e="interface conversion: "+b+" is "+d+", not "+c;if(d===c){if(!(a.concrete.pkgpath()===a.asserted.pkgpath())){e=e+(" (types from different packages)");}else{e=e+(" (types from different scopes)");}}return e;}return"interface conversion: "+d+" is not "+c+": missing method "+a.missingMethod;};D.prototype.Error=function(){return this.$val.Error();};E=function(){var a,b;a=$packages[$externalize("github.com/gopherjs/gopherjs/js",$String)];$jsObjectPtr=a.Object.ptr;$jsErrorPtr=a.Error.ptr;$throwRuntimeError=AU;AM=$internalize($goVersion,$String);b=$ifaceNil;b=new D.ptr(AZ.nil,AZ.nil,AZ.nil,"");$unused(b);};AT.prototype.RuntimeError=function(){var a;a=this.$val;};$ptrType(AT).prototype.RuntimeError=function(){return new AT(this.$get()).RuntimeError();};AT.prototype.Error=function(){var a;a=this.$val;return"runtime error: "+(a);};$ptrType(AT).prototype.Error=function(){return new AT(this.$get()).Error();};AU=function(a){var a;$panic(new AT((a)));};AZ.methods=[{prop:"string",name:"string",pkg:"runtime",typ:$funcType([],[$String],false)},{prop:"pkgpath",name:"pkgpath",pkg:"runtime",typ:$funcType([],[$String],false)}];BD.methods=[{prop:"RuntimeError",name:"RuntimeError",pkg:"",typ:$funcType([],[],false)},{prop:"Error",name:"Error",pkg:"",typ:$funcType([],[$String],false)}];AT.methods=[{prop:"RuntimeError",name:"RuntimeError",pkg:"",typ:$funcType([],[],false)},{prop:"Error",name:"Error",pkg:"",typ:$funcType([],[$String],false)}];C.init("runtime",[{prop:"str",name:"str",embedded:false,exported:false,typ:$String,tag:""}]);D.init("runtime",[{prop:"_interface",name:"_interface",embedded:false,exported:false,typ:AZ,tag:""},{prop:"concrete",name:"concrete",embedded:false,exported:false,typ:AZ,tag:""},{prop:"asserted",name:"asserted",embedded:false,exported:false,typ:AZ,tag:""},{prop:"missingMethod",name:"missingMethod",embedded:false,exported:false,typ:$String,tag:""}]);$init=function(){$pkg.$init=function(){};var $f,$c=false,$s=0,$r;if(this!==undefined&&this.$blk!==undefined){$f=this;$c=true;$s=$f.$s;$r=$f.$r;}s:while(true){switch($s){case 0:$r=A.$init();$s=1;case 1:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}AM="";E();}return;}if($f===undefined){$f={$blk:$init};}$f.$s=$s;$f.$r=$r;return $f;};$pkg.$init=$init;return $pkg;})(); -$packages["math/bits"]=(function(){var $pkg={},$init;$init=function(){$pkg.$init=function(){};var $f,$c=false,$s=0,$r;if(this!==undefined&&this.$blk!==undefined){$f=this;$c=true;$s=$f.$s;$r=$f.$r;}s:while(true){switch($s){case 0:}return;}if($f===undefined){$f={$blk:$init};}$f.$s=$s;$f.$r=$r;return $f;};$pkg.$init=$init;return $pkg;})(); -$packages["math"]=(function(){var $pkg={},$init,B,A,IT,IU,IV,IW,FL,FM,FN,FO,FP,HH,EX,EY,FK,GA,GH,GK,GL,GM,GS,GT,GW,GX,GZ,HA,HD,HI,HL,HM;B=$packages["github.com/gopherjs/gopherjs/js"];A=$packages["math/bits"];IT=$arrayType($Uint32,2);IU=$arrayType($Float32,2);IV=$arrayType($Float64,1);IW=$structType("math",[{prop:"uint32array",name:"uint32array",embedded:false,exported:false,typ:IT,tag:""},{prop:"float32array",name:"float32array",embedded:false,exported:false,typ:IU,tag:""},{prop:"float64array",name:"float64array",embedded:false,exported:false,typ:IV,tag:""}]);EX=function(av,aw){var av,aw;if(GL(av,1)||GL(aw,1)){return GK(1);}else if(GM(av)||GM(aw)){return GW();}else if((av===0)&&(av===aw)){if(GZ(av)){return aw;}return av;}if(av>aw){return av;}return aw;};EY=function(av,aw){var av,aw;if(GL(av,-1)||GL(aw,-1)){return GK(-1);}else if(GM(av)||GM(aw)){return GW();}else if((av===0)&&(av===aw)){if(GZ(av)){return av;}return aw;}if(av>>0)));};$pkg.Abs=FK;GA=function(av){var av;return $parseFloat(FL.cos(av));};$pkg.Cos=GA;GH=function(av){var av;return $parseFloat(FL.floor(av));};$pkg.Floor=GH;GK=function(av){var av;if(av>=0){return FN;}else{return FO;}};$pkg.Inf=GK;GL=function(av,aw){var av,aw;if(av===FN){return aw>=0;}if(av===FO){return aw<=0;}return false;};$pkg.IsInf=GL;GM=function(av){var av,aw;aw=false;aw=!((av===av));return aw;};$pkg.IsNaN=GM;GS=function(av,aw){var av,aw;return EX(av,aw);};$pkg.Max=GS;GT=function(av,aw){var av,aw;return EY(av,aw);};$pkg.Min=GT;GW=function(){return FP;};$pkg.NaN=GW;GX=function(av,aw){var av,aw;if((av===1)||((av===-1)&&((aw===FN)||(aw===FO)))){return 1;}return $parseFloat(FL.pow(av,aw));};$pkg.Pow=GX;GZ=function(av){var av;return av<0||(1/av===FO);};$pkg.Signbit=GZ;HA=function(av){var av;return $parseFloat(FL.sin(av));};$pkg.Sin=HA;HD=function(av){var av;return $parseFloat(FL.sqrt(av));};$pkg.Sqrt=HD;HI=function(){var av;av=new($global.ArrayBuffer)(8);HH.uint32array=new($global.Uint32Array)(av);HH.float32array=new($global.Float32Array)(av);HH.float64array=new($global.Float64Array)(av);};HL=function(av){var av,aw,ax;HH.float64array[0]=av;return(aw=$shiftLeft64((new $Uint64(0,HH.uint32array[1])),32),ax=(new $Uint64(0,HH.uint32array[0])),new $Uint64(aw.$high+ax.$high,aw.$low+ax.$low));};$pkg.Float64bits=HL;HM=function(av){var av;HH.uint32array[0]=((av.$low>>>0));HH.uint32array[1]=(($shiftRightUint64(av,32).$low>>>0));return HH.float64array[0];};$pkg.Float64frombits=HM;$init=function(){$pkg.$init=function(){};var $f,$c=false,$s=0,$r;if(this!==undefined&&this.$blk!==undefined){$f=this;$c=true;$s=$f.$s;$r=$f.$r;}s:while(true){switch($s){case 0:$r=B.$init();$s=1;case 1:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}$r=A.$init();$s=2;case 2:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}HH=new IW.ptr(IT.zero(),IU.zero(),IV.zero());FL=$global.Math;FM=0;FN=1/FM;FO=-1/FM;FP=$parseFloat($NaN);HI();}return;}if($f===undefined){$f={$blk:$init};}$f.$s=$s;$f.$r=$r;return $f;};$pkg.$init=$init;return $pkg;})(); -$packages["resolv"]=(function(){var $pkg={},$init,A,B,C,N,P,Q,S,U,X,Z,AA,AE,AG,AI,AJ,AK,AL,AM,AN,AO,AP,AQ,AR,AS,AT,AU,AV,AW,AX,AY,K,O,R,T,V,W,Y,AB,AC,AD,AF,AH;A=$packages["math"];B=$pkg.Vector=$newType(12,$kindSlice,"resolv.Vector",true,"resolv",true,null);C=$pkg.Axis=$newType(4,$kindInt,"resolv.Axis",true,"resolv",true,null);N=$pkg.Space=$newType(0,$kindStruct,"resolv.Space",true,"resolv",true,function(Cells_,CellWidth_,CellHeight_){this.$val=this;if(arguments.length===0){this.Cells=AL.nil;this.CellWidth=0;this.CellHeight=0;return;}this.Cells=Cells_;this.CellWidth=CellWidth_;this.CellHeight=CellHeight_;});P=$pkg.Shape=$newType(8,$kindInterface,"resolv.Shape",true,"resolv",true,null);Q=$pkg.Line=$newType(0,$kindStruct,"resolv.Line",true,"resolv",true,function(Start_,End_){this.$val=this;if(arguments.length===0){this.Start=B.nil;this.End=B.nil;return;}this.Start=Start_;this.End=End_;});S=$pkg.ConvexPolygon=$newType(0,$kindStruct,"resolv.ConvexPolygon",true,"resolv",true,function(Points_,X_,Y_,Closed_){this.$val=this;if(arguments.length===0){this.Points=AP.nil;this.X=0;this.Y=0;this.Closed=false;return;}this.Points=Points_;this.X=X_;this.Y=Y_;this.Closed=Closed_;});U=$pkg.ContactSet=$newType(0,$kindStruct,"resolv.ContactSet",true,"resolv",true,function(Points_,MTV_,Center_){this.$val=this;if(arguments.length===0){this.Points=AP.nil;this.MTV=B.nil;this.Center=B.nil;return;}this.Points=Points_;this.MTV=MTV_;this.Center=Center_;});X=$pkg.Circle=$newType(0,$kindStruct,"resolv.Circle",true,"resolv",true,function(X_,Y_,Radius_){this.$val=this;if(arguments.length===0){this.X=0;this.Y=0;this.Radius=0;return;}this.X=X_;this.Y=Y_;this.Radius=Radius_;});Z=$pkg.Projection=$newType(0,$kindStruct,"resolv.Projection",true,"resolv",true,function(Min_,Max_){this.$val=this;if(arguments.length===0){this.Min=0;this.Max=0;return;}this.Min=Min_;this.Max=Max_;});AA=$pkg.Object=$newType(0,$kindStruct,"resolv.Object",true,"resolv",true,function(Shape_,Space_,X_,Y_,W_,H_,TouchingCells_,Data_,ignoreList_,tags_){this.$val=this;if(arguments.length===0){this.Shape=$ifaceNil;this.Space=AM.nil;this.X=0;this.Y=0;this.W=0;this.H=0;this.TouchingCells=AK.nil;this.Data=$ifaceNil;this.ignoreList=false;this.tags=AV.nil;return;}this.Shape=Shape_;this.Space=Space_;this.X=X_;this.Y=Y_;this.W=W_;this.H=H_;this.TouchingCells=TouchingCells_;this.Data=Data_;this.ignoreList=ignoreList_;this.tags=tags_;});AE=$pkg.Collision=$newType(0,$kindStruct,"resolv.Collision",true,"resolv",true,function(checkingObject_,dx_,dy_,Objects_,Cells_){this.$val=this;if(arguments.length===0){this.checkingObject=AN.nil;this.dx=0;this.dy=0;this.Objects=AO.nil;this.Cells=AK.nil;return;}this.checkingObject=checkingObject_;this.dx=dx_;this.dy=dy_;this.Objects=Objects_;this.Cells=Cells_;});AG=$pkg.Cell=$newType(0,$kindStruct,"resolv.Cell",true,"resolv",true,function(X_,Y_,Objects_){this.$val=this;if(arguments.length===0){this.X=0;this.Y=0;this.Objects=AO.nil;return;}this.X=X_;this.Y=Y_;this.Objects=Objects_;});AI=$sliceType($Float64);AJ=$ptrType(AG);AK=$sliceType(AJ);AL=$sliceType(AK);AM=$ptrType(N);AN=$ptrType(AA);AO=$sliceType(AN);AP=$sliceType(B);AQ=$ptrType(Q);AR=$sliceType(AQ);AS=$ptrType(X);AT=$ptrType(S);AU=$ptrType(U);AV=$sliceType($String);AW=$ptrType(AE);AX=$sliceType(C);AY=$mapType(AN,$Bool);B.prototype.Clone=function(){var a,b;a=this;b=$makeSlice(B,a.$length);$copySlice(b,a);return b;};$ptrType(B).prototype.Clone=function(){return this.$get().Clone();};B.prototype.Add=function(a){var a,b,c,d,e,f;b=this;c=b.$length;d=a;e=0;while(true){if(!(e=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+f]).$length>c){AC($convertSliceType(b,AI),1,$convertSliceType(b,AI),$convertSliceType($subslice(((f<0||f>=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+f]),0,c),AI));}else{AC($convertSliceType(b,AI),1,$convertSliceType(b,AI),$convertSliceType(((f<0||f>=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+f]),AI));}e++;}return b;};$ptrType(B).prototype.Add=function(a){return this.$get().Add(a);};B.prototype.Sub=function(a){var a,b,c,d,e,f;b=this;c=b.$length;d=a;e=0;while(true){if(!(e=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+f]).$length>c){AC($convertSliceType(b,AI),-1,$convertSliceType($subslice(((f<0||f>=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+f]),0,c),AI),$convertSliceType(b,AI));}else{AC($convertSliceType(b,AI),-1,$convertSliceType(((f<0||f>=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+f]),AI),$convertSliceType(b,AI));}e++;}return b;};$ptrType(B).prototype.Sub=function(a){return this.$get().Sub(a);};B.prototype.Scale=function(a){var a,b;b=this;AD($convertSliceType(b,AI),a,$convertSliceType(b,AI));return b;};$ptrType(B).prototype.Scale=function(a){return this.$get().Scale(a);};B.prototype.Equal=function(a){var a,b,c,d,e;b=this;if(!((b.$length===a.$length))){return false;}c=b;d=0;while(true){if(!(d=b.$length)?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+e])-((e<0||e>=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+e]))>1e-08){return false;}d++;}return true;};$ptrType(B).prototype.Equal=function(a){return this.$get().Equal(a);};B.prototype.Magnitude=function(){var a;a=this;return A.Sqrt(a.Magnitude2());};$ptrType(B).prototype.Magnitude=function(){return this.$get().Magnitude();};B.prototype.Magnitude2=function(){var a,b,c,d,e;a=this;b=0;c=a;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);b=b+(e*e);d++;}return b;};$ptrType(B).prototype.Magnitude2=function(){return this.$get().Magnitude2();};B.prototype.Unit=function(){var a,b,c,d,e;a=this;b=a.Magnitude();if(b<1e-08){return a;}c=a;d=0;while(true){if(!(d=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+e]=((e<0||e>=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+e])/b);d++;}return a;};$ptrType(B).prototype.Unit=function(){return this.$get().Unit();};K=function(a,b){var a,b,c,d,e,f,g,h,i,j,k;c=0;d=a.$length;e=b.$length;f=c;g=d;h=e;if(g>h){b=$appendSlice(b,$convertSliceType($makeSlice(B,(g-h>>0)),AI));}if(g>0)),AI));}i=a;j=0;while(true){if(!(j=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+k])*((k<0||k>=b.$length)?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+k]));j++;}return f;};$pkg.Dot=K;B.prototype.Dot=function(a){var a,b;b=this;return K(b,a);};$ptrType(B).prototype.Dot=function(a){return this.$get().Dot(a);};B.prototype.Cross=function(a){var a,b;b=this;if(!((b.$length===3))||!((a.$length===3))){return B.nil;}return new B([(1>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+1])*(2>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+2])-(2>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+2])*(1>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+1]),(2>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+2])*(0>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+0])-(0>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+0])*(2>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+2]),(0>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+0])*(2>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+2])-(2>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+2])*(0>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+0])]);};$ptrType(B).prototype.Cross=function(a){return this.$get().Cross(a);};B.prototype.Rotate=function(a,b){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;c=this;d=2;e=c.$length;f=d;g=e;if(g===0){return c;}if(b.$length>0){f=(0>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+0]);}if((g===1)&&!((f===2))){c=$append(c,0,0);}if((g<2&&(f===2))||((g===2)&&!((f===2)))){c=$append(c,0);}h=(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0]);i=(1>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+1]);j=h;k=i;l=A.Cos(a);m=A.Sin(a);n=l;o=m;p=f;if(p===(0)){q=(2>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+2]);(1>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+1]=k*n-q*o);(2>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+2]=k*o+q*n);}else if(p===(1)){r=(2>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+2]);(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0]=j*n+r*o);(2>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+2]=-j*o+r*n);}else if(p===(2)){(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0]=j*n-k*o);(1>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+1]=j*o+k*n);}if(g>3){return $subslice(c,0,3);}return c;};$ptrType(B).prototype.Rotate=function(a,b){return this.$get().Rotate(a,b);};B.prototype.X=function(){var a;a=this;if(a.$length<1){return 0;}return(0>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+0]);};$ptrType(B).prototype.X=function(){return this.$get().X();};B.prototype.Y=function(){var a;a=this;if(a.$length<2){return 0;}return(1>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+1]);};$ptrType(B).prototype.Y=function(){return this.$get().Y();};B.prototype.Z=function(){var a;a=this;if(a.$length<3){return 0;}return(2>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+2]);};$ptrType(B).prototype.Z=function(){return this.$get().Z();};O=function(a,b,c,d){var a,b,c,d,e,f,g;e=new N.ptr(AL.nil,c,d);e.Resize((f=a/c,(f===f&&f!==1/0&&f!==-1/0)?f>>0:$throwRuntimeError("integer divide by zero")),(g=b/d,(g===g&&g!==1/0&&g!==-1/0)?g>>0:$throwRuntimeError("integer divide by zero")));return e;};$pkg.NewSpace=O;N.ptr.prototype.Add=function(a){var{a,b,c,d,e,$s,$r,$c}=$restore(this,{a});$s=$s||0;s:while(true){switch($s){case 0:b=this;if(b===AM.nil){$panic(new $String("ERROR: space is nil"));}c=a;d=0;case 1:if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);e.Space=b;$r=e.Update();$s=3;case 3:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}d++;$s=1;continue;case 2:$s=-1;return;}return;}var $f={$blk:N.ptr.prototype.Add,$c:true,$r,a,b,c,d,e,$s};return $f;};N.prototype.Add=function(a){return this.$val.Add(a);};N.ptr.prototype.Remove=function(a){var a,b,c,d,e,f,g,h;b=this;if(b===AM.nil){$panic(new $String("ERROR: space is nil"));}c=a;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);f=e.TouchingCells;g=0;while(true){if(!(g=f.$length)?($throwRuntimeError("index out of range"),undefined):f.$array[f.$offset+g]);h.unregister(e);g++;}e.TouchingCells=new AK([]);e.Space=AM.nil;d++;}};N.prototype.Remove=function(a){return this.$val.Remove(a);};N.ptr.prototype.Objects=function(){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;a=this;b=$makeMap(AN.keyFor,[]);c=new AO([]);d=a.Cells;e=0;while(true){if(!(e=h.$length)?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+f]));i=0;while(true){if(!(i=m.$length)?($throwRuntimeError("index out of range"),undefined):m.$array[m.$offset+f])),((j<0||j>=l.$length)?($throwRuntimeError("index out of range"),undefined):l.$array[l.$offset+j])).Objects;n=0;while(true){if(!(n=k.$length)?($throwRuntimeError("index out of range"),undefined):k.$array[k.$offset+n]);p=(q=b[AN.keyFor(o)],q!==undefined?[q.v,true]:[false,false]);r=p[1];if(!r){c=$append(c,o);s=o;(b||$throwRuntimeError("assignment to entry in nil map"))[AN.keyFor(s)]={k:s,v:true};}n++;}i++;}e++;}return c;};N.prototype.Objects=function(){return this.$val.Objects();};N.ptr.prototype.Resize=function(a,b){var a,b,c,d,e,f,g;c=this;c.Cells=new AL([]);d=0;while(true){if(!(d=g.$length)?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+d]=$append((f=c.Cells,((d<0||d>=f.$length)?($throwRuntimeError("index out of range"),undefined):f.$array[f.$offset+d])),AH(e,d))));e=e+(1)>>0;}d=d+(1)>>0;}};N.prototype.Resize=function(a,b){return this.$val.Resize(a,b);};N.ptr.prototype.Cell=function(a,b){var a,b,c,d,e,f;c=this;if(b>=0&&b=0&&a<(d=c.Cells,((b<0||b>=d.$length)?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+b])).$length){return(e=(f=c.Cells,((b<0||b>=f.$length)?($throwRuntimeError("index out of range"),undefined):f.$array[f.$offset+b])),((a<0||a>=e.$length)?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+a]));}return AJ.nil;};N.prototype.Cell=function(a,b){return this.$val.Cell(a,b);};N.ptr.prototype.CheckCells=function(a,b,c,d,e){var a,b,c,d,e,f,g,h,i,j,k,l,m;f=this;g=a;while(true){if(!(g<(a+c>>0))){break;}h=b;while(true){if(!(h<(b+d>>0))){break;}i=f.Cell(g,h);if(!(i===AJ.nil)){if(e.$length>0){if(i.ContainsTags(e)){j=i.Objects;k=0;while(true){if(!(k=j.$length)?($throwRuntimeError("index out of range"),undefined):j.$array[j.$offset+k]);if(l.HasTags(e)){return l;}k++;}}}else if(i.Occupied()){return(m=i.Objects,(0>=m.$length?($throwRuntimeError("index out of range"),undefined):m.$array[m.$offset+0]));}}h=h+(1)>>0;}g=g+(1)>>0;}return AN.nil;};N.prototype.CheckCells=function(a,b,c,d,e){return this.$val.CheckCells(a,b,c,d,e);};N.ptr.prototype.CheckCellsWorld=function(a,b,c,d,e){var a,b,c,d,e,f,g,h,i,j,k,l;f=this;g=f.WorldToSpace(a,b);h=g[0];i=g[1];j=f.WorldToSpace(c,d);k=j[0];l=j[1];return f.CheckCells(h,i,k,l,e);};N.prototype.CheckCellsWorld=function(a,b,c,d,e){return this.$val.CheckCellsWorld(a,b,c,d,e);};N.ptr.prototype.UnregisterAllObjects=function(){var a,b,c,d,e,f,g;a=this;b=0;while(true){if(!(b=d.$length)?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+b])).$length)){break;}g=(e=(f=a.Cells,((b<0||b>=f.$length)?($throwRuntimeError("index out of range"),undefined):f.$array[f.$offset+b])),((c<0||c>=e.$length)?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+c]));a.Remove(g.Objects);c=c+(1)>>0;}b=b+(1)>>0;}};N.prototype.UnregisterAllObjects=function(){return this.$val.UnregisterAllObjects();};N.ptr.prototype.WorldToSpace=function(a,b){var a,b,c,d,e;c=this;d=((A.Floor(a/(c.CellWidth))>>0));e=((A.Floor(b/(c.CellHeight))>>0));return[d,e];};N.prototype.WorldToSpace=function(a,b){return this.$val.WorldToSpace(a,b);};N.ptr.prototype.SpaceToWorld=function(a,b){var a,b,c,d,e;c=this;d=(($imul(a,c.CellWidth)));e=(($imul(b,c.CellHeight)));return[d,e];};N.prototype.SpaceToWorld=function(a,b){return this.$val.SpaceToWorld(a,b);};N.ptr.prototype.Height=function(){var a;a=this;return a.Cells.$length;};N.prototype.Height=function(){return this.$val.Height();};N.ptr.prototype.Width=function(){var a,b;a=this;if(a.Cells.$length>0){return(b=a.Cells,(0>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+0])).$length;}return 0;};N.prototype.Width=function(){return this.$val.Width();};N.ptr.prototype.CellsInLine=function(a,b,c,d){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v;e=this;f=new AK([]);g=e.Cell(a,b);h=e.Cell(c,d);if(!(g===AJ.nil)&&!(h===AJ.nil)){i=new B([((c-a>>0)),((d-b>>0))]).Unit();(0>=i.$length?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+0]=(0>=i.$length?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+0])*(((j=e.CellWidth/2,(j===j&&j!==1/0&&j!==-1/0)?j>>0:$throwRuntimeError("integer divide by zero")))));(1>=i.$length?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+1]=(1>=i.$length?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+1])*(((k=e.CellHeight/2,(k===k&&k!==1/0&&k!==-1/0)?k>>0:$throwRuntimeError("integer divide by zero")))));l=e.SpaceToWorld(a,b);m=l[0];n=l[1];q=new B([m+((o=e.CellWidth/2,(o===o&&o!==1/0&&o!==-1/0)?o>>0:$throwRuntimeError("integer divide by zero"))),n+((p=e.CellHeight/2,(p===p&&p!==1/0&&p!==-1/0)?p>>0:$throwRuntimeError("integer divide by zero")))]);r=false;while(true){if(!(!(g===AJ.nil))){break;}if(g===h){f=$append(f,g);break;}f=$append(f,g);if(r){(1>=q.$length?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+1]=(1>=q.$length?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+1])+((1>=i.$length?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+1])));}else{(0>=q.$length?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+0]=(0>=q.$length?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+0])+((0>=i.$length?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+0])));}s=e.WorldToSpace((0>=q.$length?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+0]),(1>=q.$length?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+1]));t=s[0];u=s[1];v=e.Cell(t,u);if(!(v===g)){g=v;}r=!r;}}return f;};N.prototype.CellsInLine=function(a,b,c,d){return this.$val.CellsInLine(a,b,c,d);};R=function(a,b,c,d){var a,b,c,d;return new Q.ptr(new B([a,b]),new B([c,d]));};$pkg.NewLine=R;Q.ptr.prototype.Project=function(a){var a,b;b=this;return b.Vector().Scale(a.Dot(b.Start.Sub(new AP([b.End]))));};Q.prototype.Project=function(a){return this.$val.Project(a);};Q.ptr.prototype.Normal=function(){var a,b;a=this;b=a.Vector();return new B([(1>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+1]),-(0>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+0])]).Unit();};Q.prototype.Normal=function(){return this.$val.Normal();};Q.ptr.prototype.Vector=function(){var a;a=this;return a.End.Clone().Sub(new AP([a.Start])).Unit();};Q.prototype.Vector=function(){return this.$val.Vector();};Q.ptr.prototype.IntersectionPointsLine=function(a){var a,aa,ab,ac,ad,ae,af,ag,ah,ai,aj,ak,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z;b=this;k=((c=b.End,(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0]))-(d=b.Start,(0>=d.$length?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+0])))*((e=a.End,(1>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+1]))-(f=a.Start,(1>=f.$length?($throwRuntimeError("index out of range"),undefined):f.$array[f.$offset+1])))-((g=a.End,(0>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+0]))-(h=a.Start,(0>=h.$length?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+0])))*((i=b.End,(1>=i.$length?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+1]))-(j=b.Start,(1>=j.$length?($throwRuntimeError("index out of range"),undefined):j.$array[j.$offset+1])));if(!((k===0))){t=((((l=b.Start,(1>=l.$length?($throwRuntimeError("index out of range"),undefined):l.$array[l.$offset+1]))-(m=a.Start,(1>=m.$length?($throwRuntimeError("index out of range"),undefined):m.$array[m.$offset+1])))*((n=a.End,(0>=n.$length?($throwRuntimeError("index out of range"),undefined):n.$array[n.$offset+0]))-(o=a.Start,(0>=o.$length?($throwRuntimeError("index out of range"),undefined):o.$array[o.$offset+0]))))-(((p=b.Start,(0>=p.$length?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+0]))-(q=a.Start,(0>=q.$length?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+0])))*((r=a.End,(1>=r.$length?($throwRuntimeError("index out of range"),undefined):r.$array[r.$offset+1]))-(s=a.Start,(1>=s.$length?($throwRuntimeError("index out of range"),undefined):s.$array[s.$offset+1]))))+1)/k;ac=((((u=b.Start,(1>=u.$length?($throwRuntimeError("index out of range"),undefined):u.$array[u.$offset+1]))-(v=a.Start,(1>=v.$length?($throwRuntimeError("index out of range"),undefined):v.$array[v.$offset+1])))*((w=b.End,(0>=w.$length?($throwRuntimeError("index out of range"),undefined):w.$array[w.$offset+0]))-(x=b.Start,(0>=x.$length?($throwRuntimeError("index out of range"),undefined):x.$array[x.$offset+0]))))-(((y=b.Start,(0>=y.$length?($throwRuntimeError("index out of range"),undefined):y.$array[y.$offset+0]))-(z=a.Start,(0>=z.$length?($throwRuntimeError("index out of range"),undefined):z.$array[z.$offset+0])))*((aa=b.End,(1>=aa.$length?($throwRuntimeError("index out of range"),undefined):aa.$array[aa.$offset+1]))-(ab=b.Start,(1>=ab.$length?($throwRuntimeError("index out of range"),undefined):ab.$array[ab.$offset+1]))))+1)/k;if((0=ad.$length?($throwRuntimeError("index out of range"),undefined):ad.$array[ad.$offset+0]))-(ae=b.Start,(0>=ae.$length?($throwRuntimeError("index out of range"),undefined):ae.$array[ae.$offset+0]));ai=(ag=b.End,(1>=ag.$length?($throwRuntimeError("index out of range"),undefined):ag.$array[ag.$offset+1]))-(ah=b.Start,(1>=ah.$length?($throwRuntimeError("index out of range"),undefined):ah.$array[ah.$offset+1]));return new B([(aj=b.Start,(0>=aj.$length?($throwRuntimeError("index out of range"),undefined):aj.$array[aj.$offset+0]))+(t*af),(ak=b.Start,(1>=ak.$length?($throwRuntimeError("index out of range"),undefined):ak.$array[ak.$offset+1]))+(t*ai)]);}}return B.nil;};Q.prototype.IntersectionPointsLine=function(a){return this.$val.IntersectionPointsLine(a);};Q.ptr.prototype.IntersectionPointsCircle=function(a){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s;b=this;c=new AP([]);d=new B([a.X,a.Y]);e=b.Start.Sub(new AP([d]));f=b.End.Sub(new AP([d]));g=f.Sub(new AP([e]));h=(0>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+0])*(0>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+0])+(1>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+1])*(1>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+1]);i=2*(((0>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+0])*(0>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+0]))+((1>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+1])*(1>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+1])));j=((0>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+0])*(0>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+0]))+((1>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+1])*(1>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+1]))-(a.Radius*a.Radius);k=i*i-(4*h*j);if(k<0){}else if(k===0){l=-i/(2*h);if(l>=0&&l<=1){c=$append(c,new B([(m=b.Start,(0>=m.$length?($throwRuntimeError("index out of range"),undefined):m.$array[m.$offset+0]))+l*(0>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+0]),(n=b.Start,(1>=n.$length?($throwRuntimeError("index out of range"),undefined):n.$array[n.$offset+1]))+l*(1>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+1])]));}}else{o=(-i+A.Sqrt(k))/(2*h);if(o>=0&&o<=1){c=$append(c,new B([(p=b.Start,(0>=p.$length?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+0]))+o*(0>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+0]),(q=b.Start,(1>=q.$length?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+1]))+o*(1>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+1])]));}o=(-i-A.Sqrt(k))/(2*h);if(o>=0&&o<=1){c=$append(c,new B([(r=b.Start,(0>=r.$length?($throwRuntimeError("index out of range"),undefined):r.$array[r.$offset+0]))+o*(0>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+0]),(s=b.Start,(1>=s.$length?($throwRuntimeError("index out of range"),undefined):s.$array[s.$offset+1]))+o*(1>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+1])]));}}return c;};Q.prototype.IntersectionPointsCircle=function(a){return this.$val.IntersectionPointsCircle(a);};T=function(a){var a,b;b=new S.ptr(new AP([]),0,0,true);b.AddPoints(a);return b;};$pkg.NewConvexPolygon=T;S.ptr.prototype.Clone=function(){var a,b,c,d,e,f;a=this;b=new AP([]);c=a.Points;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);b=$append(b,e.Clone());d++;}f=T(AI.nil);f.X=a.X;f.Y=a.Y;f.AddPointsVec(b);f.Closed=a.Closed;return f;};S.prototype.Clone=function(){return this.$val.Clone();};S.ptr.prototype.AddPointsVec=function(a){var a,b;b=this;b.Points=$appendSlice(b.Points,a);};S.prototype.AddPointsVec=function(a){return this.$val.AddPointsVec(a);};S.ptr.prototype.AddPoints=function(a){var a,b,c,d;b=this;c=0;while(true){if(!(c=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+c]),(d=c+1>>0,((d<0||d>=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+d]))]));c=c+(2)>>0;}};S.prototype.AddPoints=function(a){return this.$val.AddPoints(a);};S.ptr.prototype.Lines=function(){var a,b,c,d,e,f,g,h,i,j;a=this;b=new AR([]);c=a.Transformed();d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);f=(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0]);g=e;h=f;if(d<(c.$length-1>>0)){h=(i=d+1>>0,((i<0||i>=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+i]));}else if(!a.Closed){break;}j=R((0>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+0]),(1>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+1]),(0>=h.$length?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+0]),(1>=h.$length?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+1]));b=$append(b,j);d=d+(1)>>0;}return b;};S.prototype.Lines=function(){return this.$val.Lines();};S.ptr.prototype.Transformed=function(){var a,b,c,d,e;a=this;b=new AP([]);c=a.Points;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);b=$append(b,new B([(0>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+0])+a.X,(1>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+1])+a.Y]));d++;}return b;};S.prototype.Transformed=function(){return this.$val.Transformed();};S.ptr.prototype.Bounds=function(){var a,b,c,d,e,f,g,h;a=this;b=a.Transformed();e=new B([(c=(0>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+0]),(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0])),(d=(0>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+0]),(1>=d.$length?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+1]))]);f=e.Clone();g=0;while(true){if(!(g=b.$length)?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+g]);if((0>=h.$length?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+0])<(0>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+0])){(0>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+0]=(0>=h.$length?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+0]));}else if((0>=h.$length?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+0])>(0>=f.$length?($throwRuntimeError("index out of range"),undefined):f.$array[f.$offset+0])){(0>=f.$length?($throwRuntimeError("index out of range"),undefined):f.$array[f.$offset+0]=(0>=h.$length?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+0]));}if((1>=h.$length?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+1])<(1>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+1])){(1>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+1]=(1>=h.$length?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+1]));}else if((1>=h.$length?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+1])>(1>=f.$length?($throwRuntimeError("index out of range"),undefined):f.$array[f.$offset+1])){(1>=f.$length?($throwRuntimeError("index out of range"),undefined):f.$array[f.$offset+1]=(1>=h.$length?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+1]));}g=g+(1)>>0;}return[e,f];};S.prototype.Bounds=function(){return this.$val.Bounds();};S.ptr.prototype.Position=function(){var a;a=this;return[a.X,a.Y];};S.prototype.Position=function(){return this.$val.Position();};S.ptr.prototype.SetPosition=function(a,b){var a,b,c;c=this;c.X=a;c.Y=b;};S.prototype.SetPosition=function(a,b){return this.$val.SetPosition(a,b);};S.ptr.prototype.SetPositionVec=function(a){var a,b;b=this;b.X=a.X();b.Y=a.Y();};S.prototype.SetPositionVec=function(a){return this.$val.SetPositionVec(a);};S.ptr.prototype.Move=function(a,b){var a,b,c;c=this;c.X=c.X+(a);c.Y=c.Y+(b);};S.prototype.Move=function(a,b){return this.$val.Move(a,b);};S.ptr.prototype.MoveVec=function(a){var a,b;b=this;b.X=b.X+(a.X());b.Y=b.Y+(a.Y());};S.prototype.MoveVec=function(a){return this.$val.MoveVec(a);};S.ptr.prototype.Center=function(){var a,b,c,d,e;a=this;b=new B([0,0]);c=a.Transformed();d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);b.Add(new AP([e]));d++;}(0>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+0]=(0>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+0])/((a.Transformed().$length)));(1>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+1]=(1>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+1])/((a.Transformed().$length)));return b;};S.prototype.Center=function(){return this.$val.Center();};S.ptr.prototype.Project=function(a){var a,b,c,d,e,f,g,h,i,j,k;b=this;a=a.Unit();c=b.Transformed();f=a.Dot(new B([(d=(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0]),(0>=d.$length?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+0])),(e=(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0]),(1>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+1]))]));g=f;h=1;while(true){if(!(h=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+h]),(0>=i.$length?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+0])),(j=((h<0||h>=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+h]),(1>=j.$length?($throwRuntimeError("index out of range"),undefined):j.$array[j.$offset+1]))]));if(kg){g=k;}h=h+(1)>>0;}return new Z.ptr(f,g);};S.prototype.Project=function(a){return this.$val.Project(a);};S.ptr.prototype.SATAxes=function(){var a,b,c,d,e;a=this;b=new AP([]);c=a.Lines();d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);b=$append(b,e.Normal());d++;}return b;};S.prototype.SATAxes=function(){return this.$val.SATAxes();};S.ptr.prototype.PointInside=function(a){var a,b,c,d,e,f,g;b=this;c=R((0>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+0]),(1>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+1]),(0>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+0])+9.99999999999e+11,(1>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+1]));d=0;e=b.Lines();f=0;while(true){if(!(f=e.$length)?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+f]);if(!(g.IntersectionPointsLine(c)===B.nil)){d=d+(1)>>0;}f++;}return d===1;};S.prototype.PointInside=function(a){return this.$val.PointInside(a);};V=function(){return new U.ptr(new AP([]),new B([0,0]),new B([0,0]));};$pkg.NewContactSet=V;U.ptr.prototype.LeftmostPoint=function(){var a,b,c,d,e;a=this;b=B.nil;c=a.Points;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);if(b===B.nil||(0>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+0])<(0>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+0])){b=e;}d++;}return b;};U.prototype.LeftmostPoint=function(){return this.$val.LeftmostPoint();};U.ptr.prototype.RightmostPoint=function(){var a,b,c,d,e;a=this;b=B.nil;c=a.Points;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);if(b===B.nil||(0>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+0])>(0>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+0])){b=e;}d++;}return b;};U.prototype.RightmostPoint=function(){return this.$val.RightmostPoint();};U.ptr.prototype.TopmostPoint=function(){var a,b,c,d,e;a=this;b=B.nil;c=a.Points;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);if(b===B.nil||(1>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+1])<(1>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+1])){b=e;}d++;}return b;};U.prototype.TopmostPoint=function(){return this.$val.TopmostPoint();};U.ptr.prototype.BottommostPoint=function(){var a,b,c,d,e;a=this;b=B.nil;c=a.Points;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);if(b===B.nil||(1>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+1])>(1>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+1])){b=e;}d++;}return b;};U.prototype.BottommostPoint=function(){return this.$val.BottommostPoint();};S.ptr.prototype.Intersection=function(a,b,c){var a,aa,ab,ac,ad,ae,af,ag,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z;d=this;e=V();f=d.X;g=d.Y;d.X=d.X+(a);d.Y=d.Y+(b);h=$assertType(c,AS,true);i=h[0];j=h[1];if(j){k=d.Lines();l=0;while(true){if(!(l=k.$length)?($throwRuntimeError("index out of range"),undefined):k.$array[k.$offset+l]);e.Points=$appendSlice(e.Points,m.IntersectionPointsCircle(i));l++;}}else{n=$assertType(c,AT,true);o=n[0];p=n[1];if(p){q=d.Lines();r=0;while(true){if(!(r=q.$length)?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+r]);t=o.Lines();u=0;while(true){if(!(u=t.$length)?($throwRuntimeError("index out of range"),undefined):t.$array[t.$offset+u]);w=s.IntersectionPointsLine(v);if(!(w===B.nil)){e.Points=$append(e.Points,w);}u++;}r++;}}}if(e.Points.$length>0){x=e.Points;y=0;while(true){if(!(y=x.$length)?($throwRuntimeError("index out of range"),undefined):x.$array[x.$offset+y]);e.Center=e.Center.Add(new AP([z]));y++;}(ab=e.Center,(0>=ab.$length?($throwRuntimeError("index out of range"),undefined):ab.$array[ab.$offset+0]=(aa=e.Center,(0>=aa.$length?($throwRuntimeError("index out of range"),undefined):aa.$array[aa.$offset+0]))/((e.Points.$length))));(ad=e.Center,(1>=ad.$length?($throwRuntimeError("index out of range"),undefined):ad.$array[ad.$offset+1]=(ac=e.Center,(1>=ac.$length?($throwRuntimeError("index out of range"),undefined):ac.$array[ac.$offset+1]))/((e.Points.$length))));ae=d.calculateMTV(e,c);if(!(ae===B.nil)){e.MTV=ae;}}else{e=AU.nil;}if(!(e===AU.nil)&&(!((a===0))||!((b===0)))){af=new B([a,b]).Magnitude();ag=e.MTV.Magnitude();e.MTV=e.MTV.Unit().Scale(ag-af);}d.X=f;d.Y=g;return e;};S.prototype.Intersection=function(a,b,c){return this.$val.Intersection(a,b,c);};S.ptr.prototype.calculateMTV=function(a,b){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o;c=this;d=new B([0,0]);e=new B([1.7976931348623157e+308,0]);f=b;if($assertType(f,AT,true)[1]){g=f.$val;h=c.SATAxes();i=0;while(true){if(!(i=h.$length)?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+i]);if(!$clone(c.Project(j),Z).Overlapping($clone(g.Project(j),Z))){return B.nil;}k=$clone(c.Project(j),Z).Overlap($clone(g.Project(j),Z));if(e.Magnitude()>k){e=j.Scale(k);}i++;}l=g.SATAxes();m=0;while(true){if(!(m=l.$length)?($throwRuntimeError("index out of range"),undefined):l.$array[l.$offset+m]);if(!$clone(c.Project(n),Z).Overlapping($clone(g.Project(n),Z))){return B.nil;}o=$clone(c.Project(n),Z).Overlap($clone(g.Project(n),Z));if(e.Magnitude()>o){e=n.Scale(o);}m++;}}(0>=d.$length?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+0]=(0>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+0]));(1>=d.$length?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+1]=(1>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+1]));return d;};S.prototype.calculateMTV=function(a,b){return this.$val.calculateMTV(a,b);};S.ptr.prototype.ContainedBy=function(a){var a,b,c,d,e,f,g,h,i,j;b=this;c=a;if($assertType(c,AT,true)[1]){d=c.$val;e=b.SATAxes();f=0;while(true){if(!(f=e.$length)?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+f]);if(!$clone(b.Project(g),Z).IsInside($clone(d.Project(g),Z))){return false;}f++;}h=d.SATAxes();i=0;while(true){if(!(i=h.$length)?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+i]);if(!$clone(b.Project(j),Z).IsInside($clone(d.Project(j),Z))){return false;}i++;}}return true;};S.prototype.ContainedBy=function(a){return this.$val.ContainedBy(a);};S.ptr.prototype.FlipH=function(){var a,b,c,d;a=this;b=a.Points;c=0;while(true){if(!(c=b.$length)?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+c]);(0>=d.$length?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+0]=-(0>=d.$length?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+0]));c++;}a.ReverseVertexOrder();};S.prototype.FlipH=function(){return this.$val.FlipH();};S.ptr.prototype.FlipV=function(){var a,b,c,d;a=this;b=a.Points;c=0;while(true){if(!(c=b.$length)?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+c]);(1>=d.$length?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+1]=-(1>=d.$length?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+1]));c++;}a.ReverseVertexOrder();};S.prototype.FlipV=function(){return this.$val.FlipV();};S.ptr.prototype.ReverseVertexOrder=function(){var a,b,c,d,e;a=this;c=new AP([(b=a.Points,(0>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+0]))]);d=a.Points.$length-1>>0;while(true){if(!(d>=1)){break;}c=$append(c,(e=a.Points,((d<0||d>=e.$length)?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+d])));d=d-(1)>>0;}a.Points=c;};S.prototype.ReverseVertexOrder=function(){return this.$val.ReverseVertexOrder();};W=function(a,b,c,d){var a,b,c,d;return T(new AI([a,b,a+c,b,a+c,b+d,a,b+d]));};$pkg.NewRectangle=W;Y=function(a,b,c){var a,b,c,d;d=new X.ptr(a,b,c);return d;};$pkg.NewCircle=Y;X.ptr.prototype.Clone=function(){var a;a=this;return Y(a.X,a.Y,a.Radius);};X.prototype.Clone=function(){return this.$val.Clone();};X.ptr.prototype.Bounds=function(){var a;a=this;return[new B([a.X-a.Radius,a.Y-a.Radius]),new B([a.X+a.Radius,a.Y+a.Radius])];};X.prototype.Bounds=function(){return this.$val.Bounds();};X.ptr.prototype.Intersection=function(a,b,c){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;d=this;e=AU.nil;f=d.X;g=d.Y;d.X=d.X+(a);d.Y=d.Y+(b);h=c;if($assertType(h,AT,true)[1]){i=h.$val;e=i.Intersection(-a,-b,d);if(!(e===AU.nil)){e.MTV=e.MTV.Scale(-1);}}else if($assertType(h,AS,true)[1]){j=h.$val;e=V();e.Points=d.IntersectionPointsCircle(j);if(e.Points.$length===0){return AU.nil;}e.MTV=new B([d.X-j.X,d.Y-j.Y]);k=e.MTV.Magnitude();e.MTV=e.MTV.Unit().Scale(d.Radius+j.Radius-k);l=e.Points;m=0;while(true){if(!(m=l.$length)?($throwRuntimeError("index out of range"),undefined):l.$array[l.$offset+m]);e.Center=e.Center.Add(new AP([n]));m++;}(p=e.Center,(0>=p.$length?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+0]=(o=e.Center,(0>=o.$length?($throwRuntimeError("index out of range"),undefined):o.$array[o.$offset+0]))/((e.Points.$length))));(r=e.Center,(1>=r.$length?($throwRuntimeError("index out of range"),undefined):r.$array[r.$offset+1]=(q=e.Center,(1>=q.$length?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+1]))/((e.Points.$length))));}d.X=f;d.Y=g;return e;};X.prototype.Intersection=function(a,b,c){return this.$val.Intersection(a,b,c);};X.ptr.prototype.Move=function(a,b){var a,b,c;c=this;c.X=c.X+(a);c.Y=c.Y+(b);};X.prototype.Move=function(a,b){return this.$val.Move(a,b);};X.ptr.prototype.MoveVec=function(a){var a,b;b=this;b.X=b.X+(a.X());b.Y=b.Y+(a.Y());};X.prototype.MoveVec=function(a){return this.$val.MoveVec(a);};X.ptr.prototype.SetPosition=function(a,b){var a,b,c;c=this;c.X=a;c.Y=b;};X.prototype.SetPosition=function(a,b){return this.$val.SetPosition(a,b);};X.ptr.prototype.SetPositionVec=function(a){var a,b;b=this;b.X=a.X();b.Y=a.Y();};X.prototype.SetPositionVec=function(a){return this.$val.SetPositionVec(a);};X.ptr.prototype.Position=function(){var a;a=this;return[a.X,a.Y];};X.prototype.Position=function(){return this.$val.Position();};X.ptr.prototype.PointInside=function(a){var a,b;b=this;return a.Sub(new AP([new B([b.X,b.Y])])).Magnitude()<=b.Radius;};X.prototype.PointInside=function(a){return this.$val.PointInside(a);};X.ptr.prototype.IntersectionPointsCircle=function(a){var a,b,c,d,e,f,g;b=this;c=A.Sqrt(A.Pow(a.X-b.X,2)+A.Pow(a.Y-b.Y,2));if(c>b.Radius+a.Radius||c0;};Z.prototype.Overlapping=function(a){return this.$val.Overlapping(a);};Z.ptr.prototype.Overlap=function(a){var a,b;b=this;return A.Min(b.Max,a.Max)-A.Max(b.Min,a.Min);};Z.prototype.Overlap=function(a){return this.$val.Overlap(a);};Z.ptr.prototype.IsInside=function(a){var a,b;b=this;return b.Min>=a.Min&&b.Max<=a.Max;};Z.prototype.IsInside=function(a){return this.$val.IsInside(a);};AB=function(a,b,c,d,e){var a,b,c,d,e,f;f=new AA.ptr($ifaceNil,AM.nil,a,b,c,d,AK.nil,$ifaceNil,$makeMap(AN.keyFor,[]),new AV([]));if(e.$length>0){f.AddTags(e);}return f;};$pkg.NewObject=AB;AA.ptr.prototype.Clone=function(){var{a,b,c,d,e,f,g,h,$s,$r,$c}=$restore(this,{});$s=$s||0;s:while(true){switch($s){case 0:a=this;b=AB(a.X,a.Y,a.W,a.H,a.Tags());b.Data=a.Data;if(!($interfaceIsEqual(a.Shape,$ifaceNil))){$s=1;continue;}$s=2;continue;case 1:c=a.Shape.Clone();$s=3;case 3:if($c){$c=false;c=c.$blk();}if(c&&c.$blk!==undefined){break s;}$r=b.SetShape(c);$s=4;case 4:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}case 2:d=a.ignoreList;e=0;f=$keys(d);while(true){if(!(e>0;}h=h+(1)>>0;}}if(!($interfaceIsEqual(a.Shape,$ifaceNil))){$s=1;continue;}$s=2;continue;case 1:$r=a.Shape.SetPosition(a.X,a.Y);$s=3;case 3:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}case 2:$s=-1;return;}return;}var $f={$blk:AA.ptr.prototype.Update,$c:true,$r,a,b,c,d,e,f,g,h,i,j,$s};return $f;};AA.prototype.Update=function(){return this.$val.Update();};AA.ptr.prototype.AddTags=function(a){var a,b;b=this;b.tags=$appendSlice(b.tags,a);};AA.prototype.AddTags=function(a){return this.$val.AddTags(a);};AA.ptr.prototype.RemoveTags=function(a){var a,b,c,d,e,f,g,h,i;b=this;c=a;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);f=b.tags;g=0;while(true){if(!(g=f.$length)?($throwRuntimeError("index out of range"),undefined):f.$array[f.$offset+g]);if(i===e){b.tags=$appendSlice($subslice(b.tags,0,h),$subslice(b.tags,(h+1>>0)));break;}g++;}d++;}};AA.prototype.RemoveTags=function(a){return this.$val.RemoveTags(a);};AA.ptr.prototype.HasTags=function(a){var a,b,c,d,e,f,g,h;b=this;c=a;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);f=b.tags;g=0;while(true){if(!(g=f.$length)?($throwRuntimeError("index out of range"),undefined):f.$array[f.$offset+g]);if(h===e){return true;}g++;}d++;}return false;};AA.prototype.HasTags=function(a){return this.$val.HasTags(a);};AA.ptr.prototype.Tags=function(){var a;a=this;return $appendSlice(new AV([]),a.tags);};AA.prototype.Tags=function(){return this.$val.Tags();};AA.ptr.prototype.SetShape=function(a){var{a,b,$s,$r,$c}=$restore(this,{a});$s=$s||0;s:while(true){switch($s){case 0:b=this;if(!($interfaceIsEqual(b.Shape,a))){$s=1;continue;}$s=2;continue;case 1:b.Shape=a;$r=b.Update();$s=3;case 3:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}case 2:$s=-1;return;}return;}var $f={$blk:AA.ptr.prototype.SetShape,$c:true,$r,a,b,$s};return $f;};AA.prototype.SetShape=function(a){return this.$val.SetShape(a);};AA.ptr.prototype.BoundsToSpace=function(a,b){var a,b,c,d,e,f,g,h,i;c=this;d=c.Space.WorldToSpace(c.X+a,c.Y+b);e=d[0];f=d[1];g=c.Space.WorldToSpace(c.X+c.W+a-1,c.Y+c.H+b-1);h=g[0];i=g[1];return[e,f,h,i];};AA.prototype.BoundsToSpace=function(a,b){return this.$val.BoundsToSpace(a,b);};AA.ptr.prototype.SharesCells=function(a){var a,b,c,d,e;b=this;c=b.TouchingCells;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);if(e.Contains(a)){return true;}d++;}return false;};AA.prototype.SharesCells=function(a){return this.$val.SharesCells(a);};AA.ptr.prototype.SharesCellsTags=function(a){var a,b,c,d,e;b=this;c=b.TouchingCells;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);if(e.ContainsTags(a)){return true;}d++;}return false;};AA.prototype.SharesCellsTags=function(a){return this.$val.SharesCellsTags(a);};AA.ptr.prototype.Center=function(){var a;a=this;return[a.X+(a.W/2),a.Y+(a.H/2)];};AA.prototype.Center=function(){return this.$val.Center();};AA.ptr.prototype.SetCenter=function(a,b){var a,b,c;c=this;c.X=a-(c.W/2);c.Y=b-(c.H/2);};AA.prototype.SetCenter=function(a,b){return this.$val.SetCenter(a,b);};AA.ptr.prototype.CellPosition=function(){var a,b;a=this;b=a.Center();return a.Space.WorldToSpace(b[0],b[1]);};AA.prototype.CellPosition=function(){return this.$val.CellPosition();};AA.ptr.prototype.SetRight=function(a){var a,b;b=this;b.X=a-b.W;};AA.prototype.SetRight=function(a){return this.$val.SetRight(a);};AA.ptr.prototype.SetBottom=function(a){var a,b;b=this;b.Y=a-b.H;};AA.prototype.SetBottom=function(a){return this.$val.SetBottom(a);};AA.ptr.prototype.Bottom=function(){var a;a=this;return a.Y+a.H;};AA.prototype.Bottom=function(){return this.$val.Bottom();};AA.ptr.prototype.Right=function(){var a;a=this;return a.X+a.W;};AA.prototype.Right=function(){return this.$val.Right();};AA.ptr.prototype.SetBounds=function(a,b){var a,b,c;c=this;c.X=(0>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+0]);c.Y=(1>=a.$length?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+1]);c.W=(0>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+0])-c.X;c.H=(1>=b.$length?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+1])-c.Y;};AA.prototype.SetBounds=function(a,b){return this.$val.SetBounds(a,b);};AA.ptr.prototype.Check=function(a,b,c){var a,aa,ab,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z;d=this;if(d.Space===AM.nil){return AW.nil;}e=AF();e.checkingObject=d;if(a<0){a=A.Min(a,-1);}else if(a>0){a=A.Max(a,1);}if(b<0){b=A.Min(b,-1);}else if(b>0){b=A.Max(b,1);}e.dx=a;e.dy=b;f=d.BoundsToSpace(a,b);g=f[0];h=f[1];i=f[2];j=f[3];k=$makeMap(AN.keyFor,[]);l=$makeMap(AJ.keyFor,[]);m=h;while(true){if(!(m<=j)){break;}n=g;while(true){if(!(n<=i)){break;}o=d.Space.Cell(n,m);if(!(o===AJ.nil)){p=o.Objects;q=0;while(true){if(!(q=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+q]);t=(s=d.ignoreList[AN.keyFor(r)],s!==undefined?s.v:false);if(r===d||t){q++;continue;}u=(v=k[AN.keyFor(r)],v!==undefined?[v.v,true]:[false,false]);w=u[1];if(((c.$length===0)||r.HasTags(c))&&!w){e.Objects=$append(e.Objects,r);x=r;(k||$throwRuntimeError("assignment to entry in nil map"))[AN.keyFor(x)]={k:x,v:true};y=(z=l[AJ.keyFor(o)],z!==undefined?[z.v,true]:[false,false]);aa=y[1];if(!aa){e.Cells=$append(e.Cells,o);ab=o;(l||$throwRuntimeError("assignment to entry in nil map"))[AJ.keyFor(ab)]={k:ab,v:true};}q++;continue;}q++;}}n=n+(1)>>0;}m=m+(1)>>0;}if(e.Objects.$length===0){return AW.nil;}return e;};AA.prototype.Check=function(a,b,c){return this.$val.Check(a,b,c);};AA.ptr.prototype.Overlaps=function(a){var a,b;b=this;return a.X<=b.X+b.W&&a.X+a.W>=b.X&&a.Y<=b.Y+b.H&&a.Y+a.H>=b.Y;};AA.prototype.Overlaps=function(a){return this.$val.Overlaps(a);};AA.ptr.prototype.AddToIgnoreList=function(a){var a,b,c;b=this;c=a;(b.ignoreList||$throwRuntimeError("assignment to entry in nil map"))[AN.keyFor(c)]={k:c,v:true};};AA.prototype.AddToIgnoreList=function(a){return this.$val.AddToIgnoreList(a);};AA.ptr.prototype.RemoveFromIgnoreList=function(a){var a,b;b=this;delete b.ignoreList[AN.keyFor(a)];};AA.prototype.RemoveFromIgnoreList=function(a){return this.$val.RemoveFromIgnoreList(a);};AC=function(a,b,c,d){var a,b,c,d,e,f,g,h,i;e=d.$length;f=c;g=0;while(true){if(!(g=f.$length)?($throwRuntimeError("index out of range"),undefined):f.$array[f.$offset+g]);if(h===e){return;}((h<0||h>=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+h]=b*i+((h<0||h>=d.$length)?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+h]));g++;}};AD=function(a,b,c){var a,b,c,d,e,f;d=c;e=0;while(true){if(!(e=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+f]=((f<0||f>=a.$length)?($throwRuntimeError("index out of range"),undefined):a.$array[a.$offset+f])*(b));e++;}};AF=function(){return new AE.ptr(AN.nil,0,0,new AO([]),AK.nil);};$pkg.NewCollision=AF;AE.ptr.prototype.HasTags=function(a){var a,b,c,d,e;b=this;c=b.Objects;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);if(e===b.checkingObject){d++;continue;}if(e.HasTags(a)){return true;}d++;}return false;};AE.prototype.HasTags=function(a){return this.$val.HasTags(a);};AE.ptr.prototype.ObjectsByTags=function(a){var a,b,c,d,e,f;b=this;c=new AO([]);d=b.Objects;e=0;while(true){if(!(e=d.$length)?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+e]);if(f===b.checkingObject){e++;continue;}if(f.HasTags(a)){c=$append(c,f);}e++;}return c;};AE.prototype.ObjectsByTags=function(a){return this.$val.ObjectsByTags(a);};AE.ptr.prototype.ContactWithObject=function(a){var a,b,c;b=this;c=new B([0,0]);if(b.dx<0){(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0]=a.X+a.W-b.checkingObject.X);}else if(b.dx>0){(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0]=a.X-b.checkingObject.W-b.checkingObject.X);}if(b.dy<0){(1>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+1]=a.Y+a.H-b.checkingObject.Y);}else if(b.dy>0){(1>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+1]=a.Y-b.checkingObject.H-b.checkingObject.Y);}return c;};AE.prototype.ContactWithObject=function(a){return this.$val.ContactWithObject(a);};AE.ptr.prototype.ContactWithCell=function(a){var a,b,c,d,e;b=this;c=new B([0,0]);d=(($imul(a.X,b.checkingObject.Space.CellWidth)));e=(($imul(a.Y,b.checkingObject.Space.CellHeight)));if(b.dx<0){(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0]=d+(b.checkingObject.Space.CellWidth)-b.checkingObject.X);}else if(b.dx>0){(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0]=d-b.checkingObject.W-b.checkingObject.X);}if(b.dy<0){(1>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+1]=e+(b.checkingObject.Space.CellHeight)-b.checkingObject.Y);}else if(b.dy>0){(1>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+1]=e-b.checkingObject.H-b.checkingObject.Y);}return c;};AE.prototype.ContactWithCell=function(a){return this.$val.ContactWithCell(a);};AE.ptr.prototype.SlideAgainstCell=function(a,b){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;c=this;d=c.checkingObject.Space;f=(e=c.Cells,(0>=e.$length?($throwRuntimeError("index out of range"),undefined):e.$array[e.$offset+0]));g=d.SpaceToWorld(f.X,f.Y);h=g[0];i=g[1];j=(d.CellWidth)/2;k=(d.CellHeight)/2;h=h+(j);i=i+(k);l=c.checkingObject.Center();m=l[0];n=l[1];o=m-h;p=n-i;q=d.Cell(f.X-1>>0,f.Y);r=d.Cell(f.X+1>>0,f.Y);s=d.Cell(f.X,f.Y-1>>0);t=d.Cell(f.X,f.Y+1>>0);u=new B([0,0]);if(!((c.dy===0))){if(o>0&&(r===AJ.nil||!r.ContainsTags(b))){(0>=u.$length?($throwRuntimeError("index out of range"),undefined):u.$array[u.$offset+0]=h+j-c.checkingObject.X);}else if(o<0&&(q===AJ.nil||!q.ContainsTags(b))){(0>=u.$length?($throwRuntimeError("index out of range"),undefined):u.$array[u.$offset+0]=h-j-(c.checkingObject.X+c.checkingObject.W));}else{return B.nil;}}if(!((c.dx===0))){if(p>0&&(t===AJ.nil||!t.ContainsTags(b))){(1>=u.$length?($throwRuntimeError("index out of range"),undefined):u.$array[u.$offset+1]=i+k-c.checkingObject.Y);}else if(p<0&&(s===AJ.nil||!s.ContainsTags(b))){(1>=u.$length?($throwRuntimeError("index out of range"),undefined):u.$array[u.$offset+1]=i-k-(c.checkingObject.Y+c.checkingObject.H));}else{return B.nil;}}return u;};AE.prototype.SlideAgainstCell=function(a,b){return this.$val.SlideAgainstCell(a,b);};AH=function(a,b){var a,b;return new AG.ptr(a,b,new AO([]));};AG.ptr.prototype.register=function(a){var a,b;b=this;if(!b.Contains(a)){b.Objects=$append(b.Objects,a);}};AG.prototype.register=function(a){return this.$val.register(a);};AG.ptr.prototype.unregister=function(a){var a,b,c,d,e,f,g,h,i;b=this;c=b.Objects;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);if(f===a){(i=b.Objects,((e<0||e>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+e]=(g=b.Objects,h=b.Objects.$length-1>>0,((h<0||h>=g.$length)?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+h]))));b.Objects=$subslice(b.Objects,0,(b.Objects.$length-1>>0));break;}d++;}};AG.prototype.unregister=function(a){return this.$val.unregister(a);};AG.ptr.prototype.Contains=function(a){var a,b,c,d,e;b=this;c=b.Objects;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);if(e===a){return true;}d++;}return false;};AG.prototype.Contains=function(a){return this.$val.Contains(a);};AG.ptr.prototype.ContainsTags=function(a){var a,b,c,d,e;b=this;c=b.Objects;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);if(e.HasTags(a)){return true;}d++;}return false;};AG.prototype.ContainsTags=function(a){return this.$val.ContainsTags(a);};AG.ptr.prototype.Occupied=function(){var a;a=this;return a.Objects.$length>0;};AG.prototype.Occupied=function(){return this.$val.Occupied();};B.methods=[{prop:"Clone",name:"Clone",pkg:"",typ:$funcType([],[B],false)},{prop:"Add",name:"Add",pkg:"",typ:$funcType([AP],[B],true)},{prop:"Sub",name:"Sub",pkg:"",typ:$funcType([AP],[B],true)},{prop:"Scale",name:"Scale",pkg:"",typ:$funcType([$Float64],[B],false)},{prop:"Equal",name:"Equal",pkg:"",typ:$funcType([B],[$Bool],false)},{prop:"Magnitude",name:"Magnitude",pkg:"",typ:$funcType([],[$Float64],false)},{prop:"Magnitude2",name:"Magnitude2",pkg:"",typ:$funcType([],[$Float64],false)},{prop:"Unit",name:"Unit",pkg:"",typ:$funcType([],[B],false)},{prop:"Dot",name:"Dot",pkg:"",typ:$funcType([B],[$Float64],false)},{prop:"Cross",name:"Cross",pkg:"",typ:$funcType([B],[B],false)},{prop:"Rotate",name:"Rotate",pkg:"",typ:$funcType([$Float64,AX],[B],true)},{prop:"X",name:"X",pkg:"",typ:$funcType([],[$Float64],false)},{prop:"Y",name:"Y",pkg:"",typ:$funcType([],[$Float64],false)},{prop:"Z",name:"Z",pkg:"",typ:$funcType([],[$Float64],false)}];AM.methods=[{prop:"Add",name:"Add",pkg:"",typ:$funcType([AO],[],true)},{prop:"Remove",name:"Remove",pkg:"",typ:$funcType([AO],[],true)},{prop:"Objects",name:"Objects",pkg:"",typ:$funcType([],[AO],false)},{prop:"Resize",name:"Resize",pkg:"",typ:$funcType([$Int,$Int],[],false)},{prop:"Cell",name:"Cell",pkg:"",typ:$funcType([$Int,$Int],[AJ],false)},{prop:"CheckCells",name:"CheckCells",pkg:"",typ:$funcType([$Int,$Int,$Int,$Int,AV],[AN],true)},{prop:"CheckCellsWorld",name:"CheckCellsWorld",pkg:"",typ:$funcType([$Float64,$Float64,$Float64,$Float64,AV],[AN],true)},{prop:"UnregisterAllObjects",name:"UnregisterAllObjects",pkg:"",typ:$funcType([],[],false)},{prop:"WorldToSpace",name:"WorldToSpace",pkg:"",typ:$funcType([$Float64,$Float64],[$Int,$Int],false)},{prop:"SpaceToWorld",name:"SpaceToWorld",pkg:"",typ:$funcType([$Int,$Int],[$Float64,$Float64],false)},{prop:"Height",name:"Height",pkg:"",typ:$funcType([],[$Int],false)},{prop:"Width",name:"Width",pkg:"",typ:$funcType([],[$Int],false)},{prop:"CellsInLine",name:"CellsInLine",pkg:"",typ:$funcType([$Int,$Int,$Int,$Int],[AK],false)}];AQ.methods=[{prop:"Project",name:"Project",pkg:"",typ:$funcType([B],[B],false)},{prop:"Normal",name:"Normal",pkg:"",typ:$funcType([],[B],false)},{prop:"Vector",name:"Vector",pkg:"",typ:$funcType([],[B],false)},{prop:"IntersectionPointsLine",name:"IntersectionPointsLine",pkg:"",typ:$funcType([AQ],[B],false)},{prop:"IntersectionPointsCircle",name:"IntersectionPointsCircle",pkg:"",typ:$funcType([AS],[AP],false)}];AT.methods=[{prop:"Clone",name:"Clone",pkg:"",typ:$funcType([],[P],false)},{prop:"AddPointsVec",name:"AddPointsVec",pkg:"",typ:$funcType([AP],[],true)},{prop:"AddPoints",name:"AddPoints",pkg:"",typ:$funcType([AI],[],true)},{prop:"Lines",name:"Lines",pkg:"",typ:$funcType([],[AR],false)},{prop:"Transformed",name:"Transformed",pkg:"",typ:$funcType([],[AP],false)},{prop:"Bounds",name:"Bounds",pkg:"",typ:$funcType([],[B,B],false)},{prop:"Position",name:"Position",pkg:"",typ:$funcType([],[$Float64,$Float64],false)},{prop:"SetPosition",name:"SetPosition",pkg:"",typ:$funcType([$Float64,$Float64],[],false)},{prop:"SetPositionVec",name:"SetPositionVec",pkg:"",typ:$funcType([B],[],false)},{prop:"Move",name:"Move",pkg:"",typ:$funcType([$Float64,$Float64],[],false)},{prop:"MoveVec",name:"MoveVec",pkg:"",typ:$funcType([B],[],false)},{prop:"Center",name:"Center",pkg:"",typ:$funcType([],[B],false)},{prop:"Project",name:"Project",pkg:"",typ:$funcType([B],[Z],false)},{prop:"SATAxes",name:"SATAxes",pkg:"",typ:$funcType([],[AP],false)},{prop:"PointInside",name:"PointInside",pkg:"",typ:$funcType([B],[$Bool],false)},{prop:"Intersection",name:"Intersection",pkg:"",typ:$funcType([$Float64,$Float64,P],[AU],false)},{prop:"calculateMTV",name:"calculateMTV",pkg:"resolv",typ:$funcType([AU,P],[B],false)},{prop:"ContainedBy",name:"ContainedBy",pkg:"",typ:$funcType([P],[$Bool],false)},{prop:"FlipH",name:"FlipH",pkg:"",typ:$funcType([],[],false)},{prop:"FlipV",name:"FlipV",pkg:"",typ:$funcType([],[],false)},{prop:"ReverseVertexOrder",name:"ReverseVertexOrder",pkg:"",typ:$funcType([],[],false)}];AU.methods=[{prop:"LeftmostPoint",name:"LeftmostPoint",pkg:"",typ:$funcType([],[B],false)},{prop:"RightmostPoint",name:"RightmostPoint",pkg:"",typ:$funcType([],[B],false)},{prop:"TopmostPoint",name:"TopmostPoint",pkg:"",typ:$funcType([],[B],false)},{prop:"BottommostPoint",name:"BottommostPoint",pkg:"",typ:$funcType([],[B],false)}];AS.methods=[{prop:"Clone",name:"Clone",pkg:"",typ:$funcType([],[P],false)},{prop:"Bounds",name:"Bounds",pkg:"",typ:$funcType([],[B,B],false)},{prop:"Intersection",name:"Intersection",pkg:"",typ:$funcType([$Float64,$Float64,P],[AU],false)},{prop:"Move",name:"Move",pkg:"",typ:$funcType([$Float64,$Float64],[],false)},{prop:"MoveVec",name:"MoveVec",pkg:"",typ:$funcType([B],[],false)},{prop:"SetPosition",name:"SetPosition",pkg:"",typ:$funcType([$Float64,$Float64],[],false)},{prop:"SetPositionVec",name:"SetPositionVec",pkg:"",typ:$funcType([B],[],false)},{prop:"Position",name:"Position",pkg:"",typ:$funcType([],[$Float64,$Float64],false)},{prop:"PointInside",name:"PointInside",pkg:"",typ:$funcType([B],[$Bool],false)},{prop:"IntersectionPointsCircle",name:"IntersectionPointsCircle",pkg:"",typ:$funcType([AS],[AP],false)}];Z.methods=[{prop:"Overlapping",name:"Overlapping",pkg:"",typ:$funcType([Z],[$Bool],false)},{prop:"Overlap",name:"Overlap",pkg:"",typ:$funcType([Z],[$Float64],false)},{prop:"IsInside",name:"IsInside",pkg:"",typ:$funcType([Z],[$Bool],false)}];AN.methods=[{prop:"Clone",name:"Clone",pkg:"",typ:$funcType([],[AN],false)},{prop:"Update",name:"Update",pkg:"",typ:$funcType([],[],false)},{prop:"AddTags",name:"AddTags",pkg:"",typ:$funcType([AV],[],true)},{prop:"RemoveTags",name:"RemoveTags",pkg:"",typ:$funcType([AV],[],true)},{prop:"HasTags",name:"HasTags",pkg:"",typ:$funcType([AV],[$Bool],true)},{prop:"Tags",name:"Tags",pkg:"",typ:$funcType([],[AV],false)},{prop:"SetShape",name:"SetShape",pkg:"",typ:$funcType([P],[],false)},{prop:"BoundsToSpace",name:"BoundsToSpace",pkg:"",typ:$funcType([$Float64,$Float64],[$Int,$Int,$Int,$Int],false)},{prop:"SharesCells",name:"SharesCells",pkg:"",typ:$funcType([AN],[$Bool],false)},{prop:"SharesCellsTags",name:"SharesCellsTags",pkg:"",typ:$funcType([AV],[$Bool],true)},{prop:"Center",name:"Center",pkg:"",typ:$funcType([],[$Float64,$Float64],false)},{prop:"SetCenter",name:"SetCenter",pkg:"",typ:$funcType([$Float64,$Float64],[],false)},{prop:"CellPosition",name:"CellPosition",pkg:"",typ:$funcType([],[$Int,$Int],false)},{prop:"SetRight",name:"SetRight",pkg:"",typ:$funcType([$Float64],[],false)},{prop:"SetBottom",name:"SetBottom",pkg:"",typ:$funcType([$Float64],[],false)},{prop:"Bottom",name:"Bottom",pkg:"",typ:$funcType([],[$Float64],false)},{prop:"Right",name:"Right",pkg:"",typ:$funcType([],[$Float64],false)},{prop:"SetBounds",name:"SetBounds",pkg:"",typ:$funcType([B,B],[],false)},{prop:"Check",name:"Check",pkg:"",typ:$funcType([$Float64,$Float64,AV],[AW],true)},{prop:"Overlaps",name:"Overlaps",pkg:"",typ:$funcType([AN],[$Bool],false)},{prop:"AddToIgnoreList",name:"AddToIgnoreList",pkg:"",typ:$funcType([AN],[],false)},{prop:"RemoveFromIgnoreList",name:"RemoveFromIgnoreList",pkg:"",typ:$funcType([AN],[],false)}];AW.methods=[{prop:"HasTags",name:"HasTags",pkg:"",typ:$funcType([AV],[$Bool],true)},{prop:"ObjectsByTags",name:"ObjectsByTags",pkg:"",typ:$funcType([AV],[AO],true)},{prop:"ContactWithObject",name:"ContactWithObject",pkg:"",typ:$funcType([AN],[B],false)},{prop:"ContactWithCell",name:"ContactWithCell",pkg:"",typ:$funcType([AJ],[B],false)},{prop:"SlideAgainstCell",name:"SlideAgainstCell",pkg:"",typ:$funcType([AJ,AV],[B],true)}];AJ.methods=[{prop:"register",name:"register",pkg:"resolv",typ:$funcType([AN],[],false)},{prop:"unregister",name:"unregister",pkg:"resolv",typ:$funcType([AN],[],false)},{prop:"Contains",name:"Contains",pkg:"",typ:$funcType([AN],[$Bool],false)},{prop:"ContainsTags",name:"ContainsTags",pkg:"",typ:$funcType([AV],[$Bool],true)},{prop:"Occupied",name:"Occupied",pkg:"",typ:$funcType([],[$Bool],false)}];B.init($Float64);N.init("",[{prop:"Cells",name:"Cells",embedded:false,exported:true,typ:AL,tag:""},{prop:"CellWidth",name:"CellWidth",embedded:false,exported:true,typ:$Int,tag:""},{prop:"CellHeight",name:"CellHeight",embedded:false,exported:true,typ:$Int,tag:""}]);P.init([{prop:"Bounds",name:"Bounds",pkg:"",typ:$funcType([],[B,B],false)},{prop:"Clone",name:"Clone",pkg:"",typ:$funcType([],[P],false)},{prop:"Intersection",name:"Intersection",pkg:"",typ:$funcType([$Float64,$Float64,P],[AU],false)},{prop:"Position",name:"Position",pkg:"",typ:$funcType([],[$Float64,$Float64],false)},{prop:"SetPosition",name:"SetPosition",pkg:"",typ:$funcType([$Float64,$Float64],[],false)}]);Q.init("",[{prop:"Start",name:"Start",embedded:false,exported:true,typ:B,tag:""},{prop:"End",name:"End",embedded:false,exported:true,typ:B,tag:""}]);S.init("",[{prop:"Points",name:"Points",embedded:false,exported:true,typ:AP,tag:""},{prop:"X",name:"X",embedded:false,exported:true,typ:$Float64,tag:""},{prop:"Y",name:"Y",embedded:false,exported:true,typ:$Float64,tag:""},{prop:"Closed",name:"Closed",embedded:false,exported:true,typ:$Bool,tag:""}]);U.init("",[{prop:"Points",name:"Points",embedded:false,exported:true,typ:AP,tag:""},{prop:"MTV",name:"MTV",embedded:false,exported:true,typ:B,tag:""},{prop:"Center",name:"Center",embedded:false,exported:true,typ:B,tag:""}]);X.init("",[{prop:"X",name:"X",embedded:false,exported:true,typ:$Float64,tag:""},{prop:"Y",name:"Y",embedded:false,exported:true,typ:$Float64,tag:""},{prop:"Radius",name:"Radius",embedded:false,exported:true,typ:$Float64,tag:""}]);Z.init("",[{prop:"Min",name:"Min",embedded:false,exported:true,typ:$Float64,tag:""},{prop:"Max",name:"Max",embedded:false,exported:true,typ:$Float64,tag:""}]);AA.init("resolv",[{prop:"Shape",name:"Shape",embedded:false,exported:true,typ:P,tag:""},{prop:"Space",name:"Space",embedded:false,exported:true,typ:AM,tag:""},{prop:"X",name:"X",embedded:false,exported:true,typ:$Float64,tag:""},{prop:"Y",name:"Y",embedded:false,exported:true,typ:$Float64,tag:""},{prop:"W",name:"W",embedded:false,exported:true,typ:$Float64,tag:""},{prop:"H",name:"H",embedded:false,exported:true,typ:$Float64,tag:""},{prop:"TouchingCells",name:"TouchingCells",embedded:false,exported:true,typ:AK,tag:""},{prop:"Data",name:"Data",embedded:false,exported:true,typ:$emptyInterface,tag:""},{prop:"ignoreList",name:"ignoreList",embedded:false,exported:false,typ:AY,tag:""},{prop:"tags",name:"tags",embedded:false,exported:false,typ:AV,tag:""}]);AE.init("resolv",[{prop:"checkingObject",name:"checkingObject",embedded:false,exported:false,typ:AN,tag:""},{prop:"dx",name:"dx",embedded:false,exported:false,typ:$Float64,tag:""},{prop:"dy",name:"dy",embedded:false,exported:false,typ:$Float64,tag:""},{prop:"Objects",name:"Objects",embedded:false,exported:true,typ:AO,tag:""},{prop:"Cells",name:"Cells",embedded:false,exported:true,typ:AK,tag:""}]);AG.init("",[{prop:"X",name:"X",embedded:false,exported:true,typ:$Int,tag:""},{prop:"Y",name:"Y",embedded:false,exported:true,typ:$Int,tag:""},{prop:"Objects",name:"Objects",embedded:false,exported:true,typ:AO,tag:""}]);$init=function(){$pkg.$init=function(){};var $f,$c=false,$s=0,$r;if(this!==undefined&&this.$blk!==undefined){$f=this;$c=true;$s=$f.$s;$r=$f.$r;}s:while(true){switch($s){case 0:$r=A.$init();$s=1;case 1:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}}return;}if($f===undefined){$f={$blk:$init};}$f.$s=$s;$f.$r=$r;return $f;};$pkg.$init=$init;return $pkg;})(); -$packages["jsexport/battle"]=(function(){var $pkg={},$init,A,B,C,D,E,F,H,I,J,K,L,M,N,O,P,R,S,AF,AW,AX,AY,AZ,BA,BB,BC,BD,BE,BF,BG,BH,BI,BJ,BK,BL,BM,BN,BO,BP,BQ,BR,BS,BT,BU,BV,BW,BX,T,U,V,W,X,Q,Z,AA,AB,AC,AD,AE,AG,AH,AI,AJ,AK,AL,AM,AN,AP,AQ,AR,AS,AT,AU,AV;A=$packages["math"];B=$packages["resolv"];C=$pkg.Vec2D=$newType(0,$kindStruct,"battle.Vec2D",true,"jsexport/battle",true,function(X_,Y_){this.$val=this;if(arguments.length===0){this.X=0;this.Y=0;return;}this.X=X_;this.Y=Y_;});D=$pkg.Polygon2D=$newType(0,$kindStruct,"battle.Polygon2D",true,"jsexport/battle",true,function(Anchor_,Points_){this.$val=this;if(arguments.length===0){this.Anchor=BT.nil;this.Points=BU.nil;return;}this.Anchor=Anchor_;this.Points=Points_;});E=$pkg.PlayerDownsync=$newType(0,$kindStruct,"battle.PlayerDownsync",true,"jsexport/battle",true,function(Id_,VirtualGridX_,VirtualGridY_,DirX_,DirY_,VelX_,VelY_,Speed_,BattleState_,JoinIndex_,ColliderRadius_,Removed_,Score_,LastMoveGmtMillis_,FramesToRecover_,FramesInChState_,Hp_,MaxHp_,CharacterState_,InAir_,ActiveSkillId_,ActiveSkillHit_,FramesInvinsible_,BulletTeamId_,ChCollisionTeamId_){this.$val=this;if(arguments.length===0){this.Id=0;this.VirtualGridX=0;this.VirtualGridY=0;this.DirX=0;this.DirY=0;this.VelX=0;this.VelY=0;this.Speed=0;this.BattleState=0;this.JoinIndex=0;this.ColliderRadius=0;this.Removed=false;this.Score=0;this.LastMoveGmtMillis=0;this.FramesToRecover=0;this.FramesInChState=0;this.Hp=0;this.MaxHp=0;this.CharacterState=0;this.InAir=false;this.ActiveSkillId=0;this.ActiveSkillHit=0;this.FramesInvinsible=0;this.BulletTeamId=0;this.ChCollisionTeamId=0;return;}this.Id=Id_;this.VirtualGridX=VirtualGridX_;this.VirtualGridY=VirtualGridY_;this.DirX=DirX_;this.DirY=DirY_;this.VelX=VelX_;this.VelY=VelY_;this.Speed=Speed_;this.BattleState=BattleState_;this.JoinIndex=JoinIndex_;this.ColliderRadius=ColliderRadius_;this.Removed=Removed_;this.Score=Score_;this.LastMoveGmtMillis=LastMoveGmtMillis_;this.FramesToRecover=FramesToRecover_;this.FramesInChState=FramesInChState_;this.Hp=Hp_;this.MaxHp=MaxHp_;this.CharacterState=CharacterState_;this.InAir=InAir_;this.ActiveSkillId=ActiveSkillId_;this.ActiveSkillHit=ActiveSkillHit_;this.FramesInvinsible=FramesInvinsible_;this.BulletTeamId=BulletTeamId_;this.ChCollisionTeamId=ChCollisionTeamId_;});F=$pkg.InputFrameDecoded=$newType(0,$kindStruct,"battle.InputFrameDecoded",true,"jsexport/battle",true,function(Dx_,Dy_,BtnALevel_,BtnBLevel_){this.$val=this;if(arguments.length===0){this.Dx=0;this.Dy=0;this.BtnALevel=0;this.BtnBLevel=0;return;}this.Dx=Dx_;this.Dy=Dy_;this.BtnALevel=BtnALevel_;this.BtnBLevel=BtnBLevel_;});H=$pkg.Barrier=$newType(0,$kindStruct,"battle.Barrier",true,"jsexport/battle",true,function(Boundary_){this.$val=this;if(arguments.length===0){this.Boundary=BV.nil;return;}this.Boundary=Boundary_;});I=$pkg.Bullet=$newType(0,$kindStruct,"battle.Bullet",true,"jsexport/battle",true,function(BulletLocalId_,OriginatedRenderFrameId_,OffenderJoinIndex_,StartupFrames_,CancellableStFrame_,CancellableEdFrame_,ActiveFrames_,HitStunFrames_,BlockStunFrames_,PushbackVelX_,PushbackVelY_,Damage_,SelfLockVelX_,SelfLockVelY_,HitboxOffsetX_,HitboxOffsetY_,HitboxSizeX_,HitboxSizeY_,BlowUp_,CancelTransit_,TeamId_){this.$val=this;if(arguments.length===0){this.BulletLocalId=0;this.OriginatedRenderFrameId=0;this.OffenderJoinIndex=0;this.StartupFrames=0;this.CancellableStFrame=0;this.CancellableEdFrame=0;this.ActiveFrames=0;this.HitStunFrames=0;this.BlockStunFrames=0;this.PushbackVelX=0;this.PushbackVelY=0;this.Damage=0;this.SelfLockVelX=0;this.SelfLockVelY=0;this.HitboxOffsetX=0;this.HitboxOffsetY=0;this.HitboxSizeX=0;this.HitboxSizeY=0;this.BlowUp=false;this.CancelTransit=false;this.TeamId=0;return;}this.BulletLocalId=BulletLocalId_;this.OriginatedRenderFrameId=OriginatedRenderFrameId_;this.OffenderJoinIndex=OffenderJoinIndex_;this.StartupFrames=StartupFrames_;this.CancellableStFrame=CancellableStFrame_;this.CancellableEdFrame=CancellableEdFrame_;this.ActiveFrames=ActiveFrames_;this.HitStunFrames=HitStunFrames_;this.BlockStunFrames=BlockStunFrames_;this.PushbackVelX=PushbackVelX_;this.PushbackVelY=PushbackVelY_;this.Damage=Damage_;this.SelfLockVelX=SelfLockVelX_;this.SelfLockVelY=SelfLockVelY_;this.HitboxOffsetX=HitboxOffsetX_;this.HitboxOffsetY=HitboxOffsetY_;this.HitboxSizeX=HitboxSizeX_;this.HitboxSizeY=HitboxSizeY_;this.BlowUp=BlowUp_;this.CancelTransit=CancelTransit_;this.TeamId=TeamId_;});J=$pkg.MeleeBullet=$newType(0,$kindStruct,"battle.MeleeBullet",true,"jsexport/battle",true,function(Bullet_){this.$val=this;if(arguments.length===0){this.Bullet=new I.ptr(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,false,false,0);return;}this.Bullet=Bullet_;});K=$pkg.FireballBullet=$newType(0,$kindStruct,"battle.FireballBullet",true,"jsexport/battle",true,function(VirtualGridX_,VirtualGridY_,DirX_,DirY_,VelX_,VelY_,Speed_,Bullet_){this.$val=this;if(arguments.length===0){this.VirtualGridX=0;this.VirtualGridY=0;this.DirX=0;this.DirY=0;this.VelX=0;this.VelY=0;this.Speed=0;this.Bullet=new I.ptr(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,false,false,0);return;}this.VirtualGridX=VirtualGridX_;this.VirtualGridY=VirtualGridY_;this.DirX=DirX_;this.DirY=DirY_;this.VelX=VelX_;this.VelY=VelY_;this.Speed=Speed_;this.Bullet=Bullet_;});L=$pkg.Skill=$newType(0,$kindStruct,"battle.Skill",true,"jsexport/battle",true,function(BattleLocalId_,RecoveryFrames_,RecoveryFramesOnBlock_,RecoveryFramesOnHit_,ReleaseTriggerType_,BoundChState_,Hits_){this.$val=this;if(arguments.length===0){this.BattleLocalId=0;this.RecoveryFrames=0;this.RecoveryFramesOnBlock=0;this.RecoveryFramesOnHit=0;this.ReleaseTriggerType=0;this.BoundChState=0;this.Hits=AY.nil;return;}this.BattleLocalId=BattleLocalId_;this.RecoveryFrames=RecoveryFrames_;this.RecoveryFramesOnBlock=RecoveryFramesOnBlock_;this.RecoveryFramesOnHit=RecoveryFramesOnHit_;this.ReleaseTriggerType=ReleaseTriggerType_;this.BoundChState=BoundChState_;this.Hits=Hits_;});M=$pkg.RoomDownsyncFrame=$newType(0,$kindStruct,"battle.RoomDownsyncFrame",true,"jsexport/battle",true,function(Id_,PlayersArr_,CountdownNanos_,MeleeBullets_,FireballBullets_,BackendUnconfirmedMask_,ShouldForceResync_,BulletLocalIdCounter_){this.$val=this;if(arguments.length===0){this.Id=0;this.PlayersArr=BL.nil;this.CountdownNanos=new $Int64(0,0);this.MeleeBullets=BM.nil;this.FireballBullets=BN.nil;this.BackendUnconfirmedMask=new $Uint64(0,0);this.ShouldForceResync=false;this.BulletLocalIdCounter=0;return;}this.Id=Id_;this.PlayersArr=PlayersArr_;this.CountdownNanos=CountdownNanos_;this.MeleeBullets=MeleeBullets_;this.FireballBullets=FireballBullets_;this.BackendUnconfirmedMask=BackendUnconfirmedMask_;this.ShouldForceResync=ShouldForceResync_;this.BulletLocalIdCounter=BulletLocalIdCounter_;});N=$pkg.InputFrameDownsync=$newType(0,$kindStruct,"battle.InputFrameDownsync",true,"jsexport/battle",true,function(InputFrameId_,InputList_,ConfirmedList_){this.$val=this;if(arguments.length===0){this.InputFrameId=0;this.InputList=BK.nil;this.ConfirmedList=new $Uint64(0,0);return;}this.InputFrameId=InputFrameId_;this.InputList=InputList_;this.ConfirmedList=ConfirmedList_;});O=$pkg.NpcPatrolCue=$newType(0,$kindStruct,"battle.NpcPatrolCue",true,"jsexport/battle",true,function(FlAct_,FrAct_,X_,Y_){this.$val=this;if(arguments.length===0){this.FlAct=new $Uint64(0,0);this.FrAct=new $Uint64(0,0);this.X=0;this.Y=0;return;}this.FlAct=FlAct_;this.FrAct=FrAct_;this.X=X_;this.Y=Y_;});P=$pkg.RingBuffer=$newType(0,$kindStruct,"battle.RingBuffer",true,"jsexport/battle",true,function(Ed_,St_,EdFrameId_,StFrameId_,N_,Cnt_,Eles_){this.$val=this;if(arguments.length===0){this.Ed=0;this.St=0;this.EdFrameId=0;this.StFrameId=0;this.N=0;this.Cnt=0;this.Eles=AY.nil;return;}this.Ed=Ed_;this.St=St_;this.EdFrameId=EdFrameId_;this.StFrameId=StFrameId_;this.N=N_;this.Cnt=Cnt_;this.Eles=Eles_;});R=$pkg.SkillMapperType=$newType(4,$kindFunc,"battle.SkillMapperType",true,"jsexport/battle",true,null);S=$pkg.CharacterConfig=$newType(0,$kindStruct,"battle.CharacterConfig",true,"jsexport/battle",true,function(SpeciesId_,SpeciesName_,InAirIdleFrameIdxTurningPoint_,InAirIdleFrameIdxTurnedCycle_,LayDownFrames_,LayDownFramesToRecover_,GetUpInvinsibleFrames_,GetUpFramesToRecover_,Speed_,JumpingInitVelY_,SkillMapper_){this.$val=this;if(arguments.length===0){this.SpeciesId=0;this.SpeciesName="";this.InAirIdleFrameIdxTurningPoint=0;this.InAirIdleFrameIdxTurnedCycle=0;this.LayDownFrames=0;this.LayDownFramesToRecover=0;this.GetUpInvinsibleFrames=0;this.GetUpFramesToRecover=0;this.Speed=0;this.JumpingInitVelY=0;this.SkillMapper=$throwNilPointerError;return;}this.SpeciesId=SpeciesId_;this.SpeciesName=SpeciesName_;this.InAirIdleFrameIdxTurningPoint=InAirIdleFrameIdxTurningPoint_;this.InAirIdleFrameIdxTurnedCycle=InAirIdleFrameIdxTurnedCycle_;this.LayDownFrames=LayDownFrames_;this.LayDownFramesToRecover=LayDownFramesToRecover_;this.GetUpInvinsibleFrames=GetUpInvinsibleFrames_;this.GetUpFramesToRecover=GetUpFramesToRecover_;this.Speed=Speed_;this.JumpingInitVelY=JumpingInitVelY_;this.SkillMapper=SkillMapper_;});AF=$pkg.SatResult=$newType(0,$kindStruct,"battle.SatResult",true,"jsexport/battle",true,function(Overlap_,OverlapX_,OverlapY_,AContainedInB_,BContainedInA_,Axis_){this.$val=this;if(arguments.length===0){this.Overlap=0;this.OverlapX=0;this.OverlapY=0;this.AContainedInB=false;this.BContainedInA=false;this.Axis=B.Vector.nil;return;}this.Overlap=Overlap_;this.OverlapX=OverlapX_;this.OverlapY=OverlapY_;this.AContainedInB=AContainedInB_;this.BContainedInA=BContainedInA_;this.Axis=Axis_;});AW=$sliceType($Int32);AX=$sliceType(AW);AY=$sliceType($emptyInterface);AZ=$ptrType(L);BA=$ptrType(J);BB=$ptrType(AF);BC=$sliceType(C);BD=$sliceType($String);BE=$ptrType(B.Collision);BF=$ptrType(BC);BG=$ptrType(E);BH=$ptrType(K);BI=$ptrType(B.ConvexPolygon);BJ=$ptrType(N);BK=$sliceType($Uint64);BL=$sliceType(BG);BM=$sliceType(BA);BN=$sliceType(BH);BO=$sliceType(BF);BP=$sliceType($Bool);BQ=$ptrType(B.Object);BR=$sliceType(BQ);BS=$sliceType($Float64);BT=$ptrType(C);BU=$sliceType(BT);BV=$ptrType(D);BW=$mapType($Int,$Int);BX=$ptrType(P);Q=function(a){var a;return new P.ptr(0,0,0,0,a,0,$makeSlice(AY,a));};$pkg.NewRingBuffer=Q;P.ptr.prototype.Put=function(a){var a,b,c,d;b=this;while(true){if(!(0=b.N)){break;}b.Pop();}(c=b.Eles,d=b.Ed,((d<0||d>=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]=a));b.EdFrameId=b.EdFrameId+(1)>>0;b.Cnt=b.Cnt+(1)>>0;b.Ed=b.Ed+(1)>>0;if(b.Ed>=b.N){b.Ed=b.Ed-(b.N)>>0;}};P.prototype.Put=function(a){return this.$val.Put(a);};P.ptr.prototype.Pop=function(){var a,b,c,d;a=this;if(0===a.Cnt){return $ifaceNil;}d=(b=a.Eles,c=a.St,((c<0||c>=b.$length)?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+c]));a.StFrameId=a.StFrameId+(1)>>0;a.Cnt=a.Cnt-(1)>>0;a.St=a.St+(1)>>0;if(a.St>=a.N){a.St=a.St-(a.N)>>0;}return d;};P.prototype.Pop=function(){return this.$val.Pop();};P.ptr.prototype.GetArrIdxByOffset=function(a){var a,b,c;b=this;if((0===b.Cnt)||0>a){return-1;}c=b.St+a>>0;if(b.St=b.N){c=c-(b.N)>>0;}if(c>=b.St||c=d.$length)?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+c]));};P.prototype.GetByOffset=function(a){return this.$val.GetByOffset(a);};P.ptr.prototype.GetByFrameId=function(a){var a,b;b=this;if(a>=b.EdFrameId||a>0);};P.prototype.GetByFrameId=function(a){return this.$val.GetByFrameId(a);};P.ptr.prototype.SetByFrameId=function(a,b){var a,b,c,d,e,f,g,h,i,j,k,l,m,n;c=this;d=c.StFrameId;e=c.EdFrameId;f=d;g=e;if(bb){h=c.GetArrIdxByOffset(b-c.StFrameId>>0);if(!((-1===h))){(i=c.Eles,((h<0||h>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+h]=a));return[0,f,g];}}j=0;if(g>0))>>2>>0);};$pkg.ConvertToDelayedInputFrameId=AA;AB=function(a){var a;return(a>>2>>0);};$pkg.ConvertToNoDelayInputFrameId=AB;AC=function(a){var a;return(((a<<2>>0))+8>>0);};$pkg.ConvertToFirstUsedRenderFrameId=AC;AD=function(a){var a;return(((((a<<2>>0))+8>>0)+4>>0)-1>>0);};$pkg.ConvertToLastUsedRenderFrameId=AD;AE=function(a){var a,b,c,d,e,f,g,h;b=new $Uint64(a.$high&0,(a.$low&15)>>>0);d=(((c=$shiftRightUint64(a,4),new $Uint64(c.$high&0,(c.$low&1)>>>0)).$low>>0));f=(((e=$shiftRightUint64(a,5),new $Uint64(e.$high&0,(e.$low&1)>>>0)).$low>>0));return new F.ptr((g=(($flatten64(b)<0||$flatten64(b)>=$pkg.DIRECTION_DECODER.$length)?($throwRuntimeError("index out of range"),undefined):$pkg.DIRECTION_DECODER.$array[$pkg.DIRECTION_DECODER.$offset+$flatten64(b)]),(0>=g.$length?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+0])),(h=(($flatten64(b)<0||$flatten64(b)>=$pkg.DIRECTION_DECODER.$length)?($throwRuntimeError("index out of range"),undefined):$pkg.DIRECTION_DECODER.$array[$pkg.DIRECTION_DECODER.$offset+$flatten64(b)]),(1>=h.$length?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+1])),d,f);};AG=function(a,b,c,d){var{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,$s,$deferred,$r,$c}=$restore(this,{a,b,c,d});$s=$s||0;var $err=null;try{s:while(true){switch($s){case 0:$deferred=[];$curGoroutine.deferStack.push($deferred);c=[c];e=[e];f=[f];g=c[0].Position();e[0]=g[0];f[0]=g[1];$deferred.push([(function(c,e,f){return function(){c[0].SetPosition(e[0],f[0]);};})(c,e,f),[]]);c[0].SetPosition(e[0]+a,f[0]+b);h=new AF.ptr(0,0,0,true,true,new B.Vector([0,0]));i=AH(c[0],d,h);if(i){$s=1;continue;}$s=2;continue;case 1:j=h.Overlap*h.OverlapX;k=h.Overlap*h.OverlapY;l=j;m=k;n=[true,l,m,h];$s=4;case 4:return n;case 2:o=[false,0,0,h];$s=5;case 5:return o;case 3:$s=-1;return[false,0,0,BB.nil];}return;}}catch(err){$err=err;$s=-1;return[false,0,0,BB.nil];}finally{$callDeferred($deferred,$err);if($curGoroutine.asleep){var $f={$blk:AG,$c:true,$r,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,$s,$deferred};return $f;}}};$pkg.CalcPushbacks=AG;AH=function(a,b,c){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;d=a.Points.$length;e=b.Points.$length;f=d;g=e;if((1===f)&&(1===g)){if(!(BB.nil===c)){c.Overlap=0;}return((h=(i=a.Points,(0>=i.$length?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+0])),(0>=h.$length?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+0]))===(j=(k=b.Points,(0>=k.$length?($throwRuntimeError("index out of range"),undefined):k.$array[k.$offset+0])),(0>=j.$length?($throwRuntimeError("index out of range"),undefined):j.$array[j.$offset+0])))&&((l=(m=a.Points,(0>=m.$length?($throwRuntimeError("index out of range"),undefined):m.$array[m.$offset+0])),(1>=l.$length?($throwRuntimeError("index out of range"),undefined):l.$array[l.$offset+1]))===(n=(o=b.Points,(0>=o.$length?($throwRuntimeError("index out of range"),undefined):o.$array[o.$offset+0])),(1>=n.$length?($throwRuntimeError("index out of range"),undefined):n.$array[n.$offset+1])));}if(1=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+q]);if(AI(a,b,r.Unit(),c)){return false;}q++;}}if(1=s.$length)?($throwRuntimeError("index out of range"),undefined):s.$array[s.$offset+t]);if(AI(a,b,u.Unit(),c)){return false;}t++;}}return true;};AI=function(a,b,c,d){var a,aa,ab,ac,ad,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z;e=1.7e+308;f=-1.7e+308;g=1.7e+308;h=-1.7e+308;i=e;j=f;k=g;l=h;m=a.Points;n=0;while(true){if(!(n=m.$length)?($throwRuntimeError("index out of range"),undefined):m.$array[m.$offset+n]);p=((0>=o.$length?($throwRuntimeError("index out of range"),undefined):o.$array[o.$offset+0])+a.X)*(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0])+((1>=o.$length?($throwRuntimeError("index out of range"),undefined):o.$array[o.$offset+1])+a.Y)*(1>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+1]);if(i>p){i=p;}if(j=q.$length)?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+r]);t=((0>=s.$length?($throwRuntimeError("index out of range"),undefined):s.$array[s.$offset+0])+b.X)*(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0])+((1>=s.$length?($throwRuntimeError("index out of range"),undefined):s.$array[s.$offset+1])+b.Y)*(1>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+1]);if(k>t){k=t;}if(ll||jl){u=i-l;d.AContainedInB=false;}else{x=j-k;y=l-i;if(x=ab.$length?($throwRuntimeError("index out of range"),undefined):ab.$array[ab.$offset+0])))&&(0===(ac=d.Axis,(1>=ac.$length?($throwRuntimeError("index out of range"),undefined):ac.$array[ac.$offset+1]))))||z>aa){ad=1;if(u<0){ad=-1;}d.Overlap=aa;d.OverlapX=(0>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+0])*ad;d.OverlapY=(1>=c.$length?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+1])*ad;}d.Axis=c;}return false;};AJ=function(a,b){var a,b,c,d;c=((A.Floor(a*100)>>0));d=((A.Floor(b*100)>>0));return[c,d];};$pkg.WorldToVirtualGridPos=AJ;AK=function(a,b){var a,b,c,d;c=(a)*0.01;d=(b)*0.01;return[c,d];};$pkg.VirtualGridToWorldPos=AK;AL=function(a,b,c,d,e,f,g,h,i,j){var a,b,c,d,e,f,g,h,i,j;return[a-c-g+i,b-d-f+j];};$pkg.WorldToPolygonColliderBLPos=AL;AM=function(a,b,c,d,e,f,g,h,i,j){var a,b,c,d,e,f,g,h,i,j;return[a+c+g-i,b+d+f-j];};$pkg.PolygonColliderBLToWorldPos=AM;AN=function(a,b,c,d,e,f,g,h,i,j){var a,b,c,d,e,f,g,h,i,j,k,l,m;k=AM(a,b,c,d,e,f,g,h,i,j);l=k[0];m=k[1];return AJ(l,m);};$pkg.PolygonColliderBLToVirtualGridPos=AN;AP=function(a,b,c,d,e){var{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,$s,$r,$c}=$restore(this,{a,b,c,d,e});$s=$s||0;s:while(true){switch($s){case 0:f=[f];f[0]=$makeSlice(BC,0,10);g=b.Check(0,0,new BD([]));if(BE.nil===g){$s=-1;return(f.$ptr||(f.$ptr=new BF(function(){return this.$target[0];},function($v){this.$target[0]=$v;},f)));}h=g.Objects;i=0;case 1:if(!(i=h.$length)?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+i]);k=false;l=j.Data;if($assertType(l,BG,true)[1]){}else if($assertType(l,BA,true)[1]||$assertType(l,BH,true)[1]){}else{k=true;}if(!k){i++;$s=1;continue;}m=$assertType(j.Shape,BI);o=AG(0,0,c,m);$s=3;case 3:if($c){$c=false;o=o.$blk();}if(o&&o.$blk!==undefined){break s;}n=o;p=n[0];q=n[1];r=n[2];s=n[3];if(!p){i++;$s=1;continue;}t=(s.Overlap-d)*s.OverlapX;u=(s.Overlap-d)*s.OverlapY;q=t;r=u;f[0]=$append(f[0],new C.ptr(s.OverlapX,s.OverlapY));e.X=e.X+(q);e.Y=e.Y+(r);i++;$s=1;continue;case 2:$s=-1;return(f.$ptr||(f.$ptr=new BF(function(){return this.$target[0];},function($v){this.$target[0]=$v;},f)));}return;}var $f={$blk:AP,$c:true,$r,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,$s};return $f;};AQ=function(a,b,c,d){var a,aa,ab,ac,ad,ae,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z;e=AA(c.Id);f=AA(c.Id-1>>0);if(0>=e){return[-2,false,0,0];}g=(h=V[$Int32.keyFor(a.CharacterState)],h!==undefined?[h.v,true]:[false,false]);i=g[1];if(i){return[-2,false,0,0];}j=$assertType(d.GetByFrameId(e),BJ).InputList;k=BK.nil;if(0>0,((n<0||n>=j.$length)?($throwRuntimeError("index out of range"),undefined):j.$array[j.$offset+n])));p=0;q=0;r=p;s=q;t=0;u=0;v=t;w=u;if(!(BK.nil===k)){y=AE((x=m-1>>0,((x<0||x>=k.$length)?($throwRuntimeError("index out of range"),undefined):k.$array[k.$offset+x])));v=y.BtnALevel;w=y.BtnBLevel;}if(0===a.FramesToRecover){z=o.Dx;aa=o.Dy;r=z;s=aa;if(o.BtnBLevel>w){ab=(ac=U[$Int32.keyFor(a.CharacterState)],ac!==undefined?[ac.v,true]:[false,false]);ad=ab[1];if(!ad){l=true;}}}ae=-1;if(o.BtnALevel>v){ae=1;}return[ae,l,r,s];};AR=function(a,b,c,d,e,f,g){var{a,aa,ab,ac,ad,ae,af,ag,ah,ai,aj,ak,al,am,an,ao,ap,aq,ar,as,at,au,av,aw,ax,ay,az,b,ba,bb,bc,bd,be,bf,bg,bh,bi,bj,bk,bl,bm,bn,bo,bp,bq,br,bs,bt,bu,bv,bw,bx,by,bz,c,ca,cb,cc,cd,ce,cf,cg,ch,ci,cj,ck,cl,cm,cn,co,cp,cq,cr,cs,ct,cu,cv,cw,cx,cy,cz,d,da,db,dc,dd,de,df,dg,dh,di,dj,dk,dl,dm,dn,dp,dq,dr,ds,dt,du,dv,dw,dx,dy,dz,e,ea,eb,ec,ed,ee,ef,eg,eh,ei,ej,ek,el,em,en,eo,ep,eq,er,es,et,eu,ev,ew,ex,ey,ez,f,fa,fb,fc,fd,fe,ff,fg,fh,fi,fj,fk,fl,fm,fn,fo,fp,fq,fr,fs,ft,fu,fv,fw,fx,fy,fz,g,ga,gb,gc,gd,ge,gf,gg,gh,gi,gj,gk,gl,gm,gn,go,gp,gq,gr,gs,gt,gu,gv,gw,gx,gy,gz,h,ha,hb,hc,hd,he,hf,hg,hh,hi,hj,hk,hl,hm,hn,ho,hp,hq,hr,hs,ht,hu,hv,hw,hx,hy,hz,i,ia,ib,ic,id,ie,ig,ih,ii,ij,ik,il,im,io,ip,iq,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,$s,$r,$c}=$restore(this,{a,b,c,d,e,f,g});$s=$s||0;s:while(true){switch($s){case 0:h=b.PlayersArr.$length;i=$makeSlice(BL,h);j=b.PlayersArr;k=0;while(true){if(!(k=j.$length)?($throwRuntimeError("index out of range"),undefined):j.$array[j.$offset+k]);((l<0||l>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+l]=new E.ptr(m.Id,m.VirtualGridX,m.VirtualGridY,m.DirX,m.DirY,m.VelX,m.VelY,m.Speed,m.BattleState,m.JoinIndex,m.ColliderRadius,m.Removed,m.Score,0,m.FramesToRecover-1>>0,m.FramesInChState+1>>0,m.Hp,m.MaxHp,m.CharacterState,true,m.ActiveSkillId,m.ActiveSkillHit,m.FramesInvinsible-1>>0,0,0));if(((l<0||l>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+l]).FramesToRecover<0){((l<0||l>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+l]).FramesToRecover=0;}if(((l<0||l>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+l]).FramesInvinsible<0){((l<0||l>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+l]).FramesInvinsible=0;}k++;}n=$makeSlice(BM,0,b.MeleeBullets.$length);o=$makeSlice(BN,0,b.FireballBullets.$length);p=$makeSlice(BC,h);q=$makeSlice(BO,h);r=$makeSlice(BP,h);s=b.BulletLocalIdCounter;t=b.PlayersArr;u=0;case 1:if(!(u=t.$length)?($throwRuntimeError("index out of range"),undefined):t.$array[t.$offset+u]);((x<0||x>=r.$length)?($throwRuntimeError("index out of range"),undefined):r.$array[r.$offset+x]=false);z=((x<0||x>=g.$length)?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+x]);aa=((x<0||x>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+x]);ab=AQ(y,aa,b,a);ac=ab[0];ad=ab[1];ae=ab[2];af=ab[3];if(ad){aa.VelY=(z.JumpingInitVelY);((x<0||x>=r.$length)?($throwRuntimeError("index out of range"),undefined):r.$array[r.$offset+x]=true);}ag=y.JoinIndex;ah=z.SkillMapper(ac,y);$s=3;case 3:if($c){$c=false;ah=ah.$blk();}if(ah&&ah.$blk!==undefined){break s;}ai=ah;aj=(ak=T[$Int.keyFor(ai)],ak!==undefined?[ak.v,true]:[AZ.nil,false]);al=aj[0];am=aj[1];if(am){aa.ActiveSkillId=((ai>>0));aa.ActiveSkillHit=0;aa.FramesToRecover=al.RecoveryFrames;an=1;if(0>aa.DirX){an=-an;}ao=false;ap=(aq=al.Hits,ar=aa.ActiveSkillHit,((ar<0||ar>=aq.$length)?($throwRuntimeError("index out of range"),undefined):aq.$array[aq.$offset+ar]));if($assertType(ap,BA,true)[1]){as=ap.$val;v[0]=$clone(as,J);v[0].Bullet.BulletLocalId=s;s=s+(1)>>0;v[0].Bullet.OriginatedRenderFrameId=b.Id;v[0].Bullet.OffenderJoinIndex=ag;n=$append(n,v[0]);if(!((-1===as.Bullet.SelfLockVelX))){ao=true;aa.VelX=$imul(an,as.Bullet.SelfLockVelX);}if(!((-1===as.Bullet.SelfLockVelY))){ao=true;aa.VelY=as.Bullet.SelfLockVelY;}}else if($assertType(ap,BH,true)[1]){at=ap.$val;w[0]=$clone(at,K);w[0].Bullet.BulletLocalId=s;s=s+(1)>>0;au=1;if(0>aa.DirX){au=-au;}av=y.VirtualGridX+($imul(au,w[0].Bullet.HitboxOffsetX))>>0;aw=y.VirtualGridY;w[0].VirtualGridX=av;w[0].VirtualGridY=aw;w[0].Bullet.OriginatedRenderFrameId=b.Id;w[0].Bullet.OffenderJoinIndex=ag;w[0].VelX=$imul(w[0].Speed,au);w[0].VelY=0;o=$append(o,w[0]);if(!((-1===at.Bullet.SelfLockVelX))){ao=true;aa.VelX=$imul(au,at.Bullet.SelfLockVelX);}if(!((-1===at.Bullet.SelfLockVelY))){ao=true;aa.VelY=at.Bullet.SelfLockVelY;}}if(false===ao&&false===y.InAir){aa.VelX=0;}aa.CharacterState=al.BoundChState;u++;$s=1;continue;}if(0===y.FramesToRecover){if(!((0===ae))||!((0===af))){ax=ae;ay=af;aa.DirX=ax;aa.DirY=ay;aa.VelX=$imul(ae,y.Speed);aa.CharacterState=1;}else{aa.CharacterState=0;aa.VelX=0;}}u++;$s=1;continue;case 2:az=$makeSlice(BR,b.PlayersArr.$length,b.PlayersArr.$length);ba=b.PlayersArr;bb=0;case 4:if(!(bb=ba.$length)?($throwRuntimeError("index out of range"),undefined):ba.$array[ba.$offset+bb]);be=bd.JoinIndex;bf=0;bg=0;(bh=be-1>>0,((bh<0||bh>=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+bh])).X=bf;(bi=be-1>>0,((bi<0||bi>=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+bi])).Y=bg;bj=((bc<0||bc>=g.$length)?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+bc]);bk=bd.VirtualGridX+bd.VelX>>0;bl=bd.VirtualGridY+bd.VelY>>0;bm=bk;bn=bl;if(((bc<0||bc>=r.$length)?($throwRuntimeError("index out of range"),undefined):r.$array[r.$offset+bc])){bn=bn+(bj.JumpingInitVelY)>>0;}bo=AK(bm,bn);bp=bo[0];bq=bo[1];br=$imul(bd.ColliderRadius,2);bs=$imul(bd.ColliderRadius,4);bt=br;bu=bs;bv=bd.CharacterState;if(bv===(9)){bw=$imul(bd.ColliderRadius,4);bx=$imul(bd.ColliderRadius,2);bt=bw;bu=bx;}else if((bv===(8))||(bv===(4))||(bv===(5))){by=$imul(bd.ColliderRadius,2);bz=$imul(bd.ColliderRadius,2);bt=by;bu=bz;}ca=AK(bt,bu);cb=ca[0];cc=ca[1];cd=AS(bp,bq,cb,cc,0.1,0.1,0.1,0.1,e,f,bd,"Player");$s=6;case 6:if($c){$c=false;cd=cd.$blk();}if(cd&&cd.$blk!==undefined){break s;}ce=cd;((bc<0||bc>=az.$length)?($throwRuntimeError("index out of range"),undefined):az.$array[az.$offset+bc]=ce);$r=c.Add(new BR([ce]));$s=7;case 7:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}cf=((bc<0||bc>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+bc]);if(bd.InAir){cf.VelX=cf.VelX+(0)>>0;cf.VelY=cf.VelY+(-50)>>0;}bb++;$s=4;continue;case 5:cg=$makeSlice(BR,0,b.MeleeBullets.$length);ch=b.MeleeBullets;ci=0;case 8:if(!(ci=ch.$length)?($throwRuntimeError("index out of range"),undefined):ch.$array[ch.$offset+ci]);if(((cj.Bullet.OriginatedRenderFrameId+cj.Bullet.StartupFrames>>0)<=b.Id)&&(((cj.Bullet.OriginatedRenderFrameId+cj.Bullet.StartupFrames>>0)+cj.Bullet.ActiveFrames>>0)>b.Id)){$s=10;continue;}if(((cj.Bullet.OriginatedRenderFrameId+cj.Bullet.StartupFrames>>0)+cj.Bullet.ActiveFrames>>0)>b.Id){$s=11;continue;}$s=12;continue;case 10:cm=(ck=b.PlayersArr,cl=cj.Bullet.OffenderJoinIndex-1>>0,((cl<0||cl>=ck.$length)?($throwRuntimeError("index out of range"),undefined):ck.$array[ck.$offset+cl]));cn=1;if(0>cm.DirX){cn=-cn;}co=AK(cm.VirtualGridX+($imul(cn,cj.Bullet.HitboxOffsetX))>>0,cm.VirtualGridY);cp=co[0];cq=co[1];cr=AK(cj.Bullet.HitboxSizeX,cj.Bullet.HitboxSizeY);cs=cr[0];ct=cr[1];cu=AS(cp,cq,cs,ct,0.1,0.1,0.1,0.1,e,f,cj,"MeleeBullet");$s=13;case 13:if($c){$c=false;cu=cu.$blk();}if(cu&&cu.$blk!==undefined){break s;}cv=cu;$r=c.Add(new BR([cv]));$s=14;case 14:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}cg=$append(cg,cv);$s=12;continue;case 11:n=$append(n,cj);case 12:ci++;$s=8;continue;case 9:cw=b.FireballBullets;cx=0;case 15:if(!(cx=cw.$length)?($throwRuntimeError("index out of range"),undefined):cw.$array[cw.$offset+cx]);if(((cy.Bullet.OriginatedRenderFrameId+cy.Bullet.StartupFrames>>0)>0)+cy.Bullet.ActiveFrames>>0)>b.Id)){$s=17;continue;}if(((cy.Bullet.OriginatedRenderFrameId+cy.Bullet.StartupFrames>>0)+cy.Bullet.ActiveFrames>>0)>b.Id){$s=18;continue;}$s=19;continue;case 17:cz=AK(cy.VirtualGridX,cy.VirtualGridY);da=cz[0];db=cz[1];dc=AK(cy.Bullet.HitboxSizeX,cy.Bullet.HitboxSizeY);dd=dc[0];de=dc[1];df=AS(da,db,dd,de,0.1,0.1,0.1,0.1,e,f,cy,"FireballBullet");$s=20;case 20:if($c){$c=false;df=df.$blk();}if(df&&df.$blk!==undefined){break s;}dg=df;$r=c.Add(new BR([dg]));$s=21;case 21:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}cg=$append(cg,dg);$s=19;continue;case 18:o=$append(o,cy);case 19:cx++;$s=15;continue;case 16:dh=b.PlayersArr;di=0;case 22:if(!(di=dh.$length)?($throwRuntimeError("index out of range"),undefined):dh.$array[dh.$offset+di]);dl=dk.JoinIndex;dm=((dj<0||dj>=az.$length)?($throwRuntimeError("index out of range"),undefined):az.$array[az.$offset+dj]);dn=$assertType(dm.Shape,BI);dq=AP(dl,dm,dn,0.1,(dp=dl-1>>0,((dp<0||dp>=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+dp])));$s=24;case 24:if($c){$c=false;dq=dq.$blk();}if(dq&&dq.$blk!==undefined){break s;}(dr=dl-1>>0,((dr<0||dr>=q.$length)?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+dr]=dq));ds=((dj<0||dj>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+dj]);dt=((dj<0||dj>=g.$length)?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+dj]);du=false;dv=dm.Check(0,0,new BD([]));if(!(BE.nil===dv)){$s=25;continue;}$s=26;continue;case 25:dw=dv.Objects;dx=0;case 27:if(!(dx=dw.$length)?($throwRuntimeError("index out of range"),undefined):dw.$array[dw.$offset+dx]);dz=false;ea=false;eb=false;ec=dz;ed=ea;ee=eb;ef=dy.Data;if($assertType(ef,BG,true)[1]){ed=true;}else if($assertType(ef,BA,true)[1]||$assertType(ef,BH,true)[1]){ee=true;}else{ec=true;}if(ee){dx++;$s=27;continue;}eg=$assertType(dy.Shape,BI);ei=AG(0,0,dn,eg);$s=29;case 29:if($c){$c=false;ei=ei.$blk();}if(ei&&ei.$blk!==undefined){break s;}eh=ei;ej=eh[0];ek=eh[1];el=eh[2];em=eh[3];if(!ej){dx++;$s=27;continue;}en=em.OverlapX*0+em.OverlapY*-1;if(ed){eo=(em.Overlap-0.2)*em.OverlapX;ep=(em.Overlap-0.2)*em.OverlapY;ek=eo;el=ep;}eq=(er=dl-1>>0,((er<0||er>=q.$length)?($throwRuntimeError("index out of range"),undefined):q.$array[q.$offset+er])).$get();es=0;while(true){if(!(es=eq.$length)?($throwRuntimeError("index out of range"),undefined):eq.$array[eq.$offset+es]),C);eu=ek*et.X+el*et.Y;if(ec||(ed&&0>eu)){ek=ek-(eu*et.X);el=el-(eu*et.Y);}es++;}ev=dl-1>>0;((ev<0||ev>=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+ev]).X=((ev<0||ev>=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+ev]).X+(ek);ew=dl-1>>0;((ew<0||ew>=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+ew]).Y=((ew<0||ew>=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+ew]).Y+(el);if(0.5=dk.VelY){ds.VelY=0;ds.VelX=0;ex=(ey=X[$Int32.keyFor(ds.CharacterState)],ey!==undefined?[ey.v,true]:[false,false]);ez=ex[1];if(ez){if(8===ds.CharacterState){ds.CharacterState=9;ds.FramesToRecover=dt.LayDownFramesToRecover;}else{fa=0;fb=dk.ColliderRadius;fc=fa;fd=fb;fe=AK(fc,fd);ff=fe[1];fg=dl-1>>0;((fg<0||fg>=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+fg]).Y=((fg<0||fg>=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+fg]).Y-(ff);ds.CharacterState=0;}}}else{fh=(fi=X[$Int32.keyFor(ds.CharacterState)],fi!==undefined?[fi.v,true]:[false,false]);fj=fh[1];if(fj){if(9===ds.CharacterState){if(0===ds.FramesToRecover){ds.CharacterState=10;ds.FramesToRecover=dt.GetUpFramesToRecover;}}else if(10===ds.CharacterState){if(0===ds.FramesToRecover){ds.CharacterState=0;ds.FramesInvinsible=dt.GetUpInvinsibleFrames;}}}}}di++;$s=22;continue;case 23:fk=cg;fl=0;case 30:if(!(fl=fk.$length)?($throwRuntimeError("index out of range"),undefined):fk.$array[fk.$offset+fl]);fn=fm.Check(0,0,new BD([]));fm.Space.Remove(new BR([fm]));fo=true;if(!(BE.nil===fn)){$s=32;continue;}$s=33;continue;case 32:fp=fm.Data;if($assertType(fp,BA,true)[1]){$s=34;continue;}if($assertType(fp,BH,true)[1]){$s=35;continue;}$s=36;continue;case 34:fq=fp.$val;fs=$assertType(fm.Shape,BI);fv=(ft=b.PlayersArr,fu=fq.Bullet.OffenderJoinIndex-1>>0,((fu<0||fu>=ft.$length)?($throwRuntimeError("index out of range"),undefined):ft.$array[ft.$offset+fu]));fw=fn.Objects;fx=0;case 37:if(!(fx=fw.$length)?($throwRuntimeError("index out of range"),undefined):fw.$array[fw.$offset+fx]);fz=$assertType(fy.Shape,BI);ga=fy.Data;if($assertType(ga,BG,true)[1]){$s=39;continue;}$s=40;continue;case 39:gb=ga.$val;if(fq.Bullet.OffenderJoinIndex===gb.JoinIndex){fx++;$s=37;continue;}ge=AG(0,0,fs,fz);$s=42;case 42:if($c){$c=false;ge=ge.$blk();}if(ge&&ge.$blk!==undefined){break s;}gd=ge;gf=gd[0];if(!gf){fx++;$s=37;continue;}fo=false;gg=(gh=W[$Int32.keyFor(gb.CharacterState)],gh!==undefined?[gh.v,true]:[false,false]);gi=gg[1];if(gi){fx++;$s=37;continue;}if(0fv.DirX){gj=-gj;}gk=$imul(gj,fq.Bullet.PushbackVelX);gl=fq.Bullet.PushbackVelY;gm=gk;gn=gl;gp=(go=gb.JoinIndex-1>>0,((go<0||go>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+go]));gp.VelX=gm;gp.VelY=gn;if(fq.Bullet.BlowUp){gp.CharacterState=8;}else{gp.CharacterState=3;}gr=(gq=gb.JoinIndex-1>>0,((gq<0||gq>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+gq])).FramesToRecover;if(fq.Bullet.HitStunFrames>gr){gp.FramesToRecover=fq.Bullet.HitStunFrames;}$s=41;continue;case 40:gc=ga;fo=false;case 41:fx++;$s=37;continue;case 38:$s=36;continue;case 35:fr=fp.$val;gs=$assertType(fm.Shape,BI);gv=(gt=b.PlayersArr,gu=fr.Bullet.OffenderJoinIndex-1>>0,((gu<0||gu>=gt.$length)?($throwRuntimeError("index out of range"),undefined):gt.$array[gt.$offset+gu]));gw=fn.Objects;gx=0;case 43:if(!(gx=gw.$length)?($throwRuntimeError("index out of range"),undefined):gw.$array[gw.$offset+gx]);gz=$assertType(gy.Shape,BI);ha=gy.Data;if($assertType(ha,BG,true)[1]){$s=45;continue;}$s=46;continue;case 45:hb=ha.$val;if(fr.Bullet.OffenderJoinIndex===hb.JoinIndex){gx++;$s=43;continue;}he=AG(0,0,gs,gz);$s=48;case 48:if($c){$c=false;he=he.$blk();}if(he&&he.$blk!==undefined){break s;}hd=he;hf=hd[0];if(!hf){gx++;$s=43;continue;}fo=false;hg=(hh=W[$Int32.keyFor(hb.CharacterState)],hh!==undefined?[hh.v,true]:[false,false]);hi=hg[1];if(hi){gx++;$s=43;continue;}if(0gv.DirX){hj=-hj;}hk=$imul(hj,fr.Bullet.PushbackVelX);hl=fr.Bullet.PushbackVelY;hm=hk;hn=hl;hp=(ho=hb.JoinIndex-1>>0,((ho<0||ho>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+ho]));hp.VelX=hm;hp.VelY=hn;if(fr.Bullet.BlowUp){hp.CharacterState=8;}else{hp.CharacterState=3;}hr=(hq=hb.JoinIndex-1>>0,((hq<0||hq>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+hq])).FramesToRecover;if(fr.Bullet.HitStunFrames>hr){hp.FramesToRecover=fr.Bullet.HitStunFrames;}$s=47;continue;case 46:hc=ha;fo=false;case 47:gx++;$s=43;continue;case 44:case 36:case 33:if(fo){hs=fm.Data;if($assertType(hs,BA,true)[1]){ht=hs.$val;n=$append(n,ht);}else if($assertType(hs,BH,true)[1]){hu=hs.$val;hv=hu.VirtualGridX+hu.VelX>>0;hw=hu.VirtualGridY+hu.VelY>>0;hu.VirtualGridX=hv;hu.VirtualGridY=hw;o=$append(o,hu);}}fl++;$s=30;continue;case 31:hx=b.PlayersArr;hy=0;while(true){if(!(hy=hx.$length)?($throwRuntimeError("index out of range"),undefined):hx.$array[hx.$offset+hy]);ib=ia.JoinIndex;ic=((hz<0||hz>=az.$length)?($throwRuntimeError("index out of range"),undefined):az.$array[az.$offset+hz]);id=((hz<0||hz>=i.$length)?($throwRuntimeError("index out of range"),undefined):i.$array[i.$offset+hz]);ie=AN(ic.X-(ig=ib-1>>0,((ig<0||ig>=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+ig])).X,ic.Y-(ih=ib-1>>0,((ih<0||ih>=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+ih])).Y,ic.W*0.5,ic.H*0.5,0,0,0,0,e,f);id.VirtualGridX=ie[0];id.VirtualGridY=ie[1];if(id.InAir){ii=id.CharacterState;ij=ii;if((ij===(0))||(ij===(1))){if(((hz<0||hz>=r.$length)?($throwRuntimeError("index out of range"),undefined):r.$array[r.$offset+hz])||(5===ia.CharacterState)){id.CharacterState=5;}else{id.CharacterState=4;}}else if(ij===(2)){id.CharacterState=6;}else if(ij===(3)){id.CharacterState=7;}}if(!((id.CharacterState===ia.CharacterState))){id.FramesInChState=0;}ik=(il=X[$Int32.keyFor(id.CharacterState)],il!==undefined?[il.v,true]:[false,false]);im=ik[1];if(im){id.ActiveSkillId=-1;id.ActiveSkillHit=-1;}hy++;}io=az;ip=0;while(true){if(!(ip=io.$length)?($throwRuntimeError("index out of range"),undefined):io.$array[io.$offset+ip]);iq.Space.Remove(new BR([iq]));ip++;}$s=-1;return new M.ptr(b.Id+1>>0,i,new $Int64(0,0),n,o,new $Uint64(0,0),false,0);}return;}var $f={$blk:AR,$c:true,$r,a,aa,ab,ac,ad,ae,af,ag,ah,ai,aj,ak,al,am,an,ao,ap,aq,ar,as,at,au,av,aw,ax,ay,az,b,ba,bb,bc,bd,be,bf,bg,bh,bi,bj,bk,bl,bm,bn,bo,bp,bq,br,bs,bt,bu,bv,bw,bx,by,bz,c,ca,cb,cc,cd,ce,cf,cg,ch,ci,cj,ck,cl,cm,cn,co,cp,cq,cr,cs,ct,cu,cv,cw,cx,cy,cz,d,da,db,dc,dd,de,df,dg,dh,di,dj,dk,dl,dm,dn,dp,dq,dr,ds,dt,du,dv,dw,dx,dy,dz,e,ea,eb,ec,ed,ee,ef,eg,eh,ei,ej,ek,el,em,en,eo,ep,eq,er,es,et,eu,ev,ew,ex,ey,ez,f,fa,fb,fc,fd,fe,ff,fg,fh,fi,fj,fk,fl,fm,fn,fo,fp,fq,fr,fs,ft,fu,fv,fw,fx,fy,fz,g,ga,gb,gc,gd,ge,gf,gg,gh,gi,gj,gk,gl,gm,gn,go,gp,gq,gr,gs,gt,gu,gv,gw,gx,gy,gz,h,ha,hb,hc,hd,he,hf,hg,hh,hi,hj,hk,hl,hm,hn,ho,hp,hq,hr,hs,ht,hu,hv,hw,hx,hy,hz,i,ia,ib,ic,id,ie,ig,ih,ii,ij,ik,il,im,io,ip,iq,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,$s};return $f;};$pkg.ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame=AR;AS=function(a,b,c,d,e,f,g,h,i,j,k,l){var{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,$s,$r,$c}=$restore(this,{a,b,c,d,e,f,g,h,i,j,k,l});$s=$s||0;s:while(true){switch($s){case 0:m=AL(a,b,c*0.5,d*0.5,e,f,g,h,i,j);n=m[0];o=m[1];p=AT(n,o,g+c+h,f+d+e,k,l);$s=1;case 1:if($c){$c=false;p=p.$blk();}if(p&&p.$blk!==undefined){break s;}q=p;$s=2;case 2:return q;}return;}var $f={$blk:AS,$c:true,$r,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,$s};return $f;};$pkg.GenerateRectCollider=AS;AT=function(a,b,c,d,e,f){var{a,b,c,d,e,f,g,h,$s,$r,$c}=$restore(this,{a,b,c,d,e,f});$s=$s||0;s:while(true){switch($s){case 0:g=B.NewObject(a,b,c,d,new BD([f]));h=B.NewRectangle(0,0,c,d);$r=g.SetShape(h);$s=1;case 1:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}g.Data=e;$s=-1;return g;}return;}var $f={$blk:AT,$c:true,$r,a,b,c,d,e,f,g,h,$s};return $f;};AU=function(a,b,c,d,e){var{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,$s,$r,$c}=$restore(this,{a,b,c,d,e});$s=$s||0;s:while(true){switch($s){case 0:f=AV(a);g=0;h=0;i=g;j=h;k=B.NewConvexPolygon(BS.nil);l=f.Points;m=0;while(true){if(!(m=l.$length)?($throwRuntimeError("index out of range"),undefined):l.$array[l.$offset+m]);p=f.Points;q=0;while(true){if(!(q=p.$length)?($throwRuntimeError("index out of range"),undefined):p.$array[p.$offset+q]);if(n===r){q++;continue;}if(A.Abs(s.X-o.X)>i){i=A.Abs(s.X-o.X);}if(A.Abs(s.Y-o.Y)>j){j=A.Abs(s.Y-o.Y);}q++;}m++;}t=0;while(true){if(!(t=u.$length)?($throwRuntimeError("index out of range"),undefined):u.$array[u.$offset+t]));k.AddPoints(new BS([v.X,v.Y]));t=t+(1)>>0;}w=B.NewObject(f.Anchor.X+b,f.Anchor.Y+c,i,j,new BD([e]));$r=w.SetShape(k);$s=1;case 1:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}w.Data=d;$s=-1;return w;}return;}var $f={$blk:AU,$c:true,$r,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,$s};return $f;};$pkg.GenerateConvexPolygonCollider=AU;AV=function(a){var a,b,c,d,e,f,g,h,i,j,k;b=new C.ptr(1.7e+308,1.7e+308);c=a.Points;d=0;while(true){if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);if(e.X=g.$length)?($throwRuntimeError("index out of range"),undefined):g.$array[g.$offset+h]);(k=f.Points,((i<0||i>=k.$length)?($throwRuntimeError("index out of range"),undefined):k.$array[k.$offset+i]=new C.ptr(j.X-b.X,j.Y-b.Y)));h++;}return f;};$pkg.AlignPolygon2DToBoundingBox=AV;BX.methods=[{prop:"Put",name:"Put",pkg:"",typ:$funcType([$emptyInterface],[],false)},{prop:"Pop",name:"Pop",pkg:"",typ:$funcType([],[$emptyInterface],false)},{prop:"GetArrIdxByOffset",name:"GetArrIdxByOffset",pkg:"",typ:$funcType([$Int32],[$Int32],false)},{prop:"GetByOffset",name:"GetByOffset",pkg:"",typ:$funcType([$Int32],[$emptyInterface],false)},{prop:"GetByFrameId",name:"GetByFrameId",pkg:"",typ:$funcType([$Int32],[$emptyInterface],false)},{prop:"SetByFrameId",name:"SetByFrameId",pkg:"",typ:$funcType([$emptyInterface,$Int32],[$Int32,$Int32,$Int32],false)}];C.init("",[{prop:"X",name:"X",embedded:false,exported:true,typ:$Float64,tag:""},{prop:"Y",name:"Y",embedded:false,exported:true,typ:$Float64,tag:""}]);D.init("",[{prop:"Anchor",name:"Anchor",embedded:false,exported:true,typ:BT,tag:""},{prop:"Points",name:"Points",embedded:false,exported:true,typ:BU,tag:""}]);E.init("",[{prop:"Id",name:"Id",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"VirtualGridX",name:"VirtualGridX",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"VirtualGridY",name:"VirtualGridY",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"DirX",name:"DirX",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"DirY",name:"DirY",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"VelX",name:"VelX",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"VelY",name:"VelY",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"Speed",name:"Speed",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"BattleState",name:"BattleState",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"JoinIndex",name:"JoinIndex",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"ColliderRadius",name:"ColliderRadius",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"Removed",name:"Removed",embedded:false,exported:true,typ:$Bool,tag:""},{prop:"Score",name:"Score",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"LastMoveGmtMillis",name:"LastMoveGmtMillis",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"FramesToRecover",name:"FramesToRecover",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"FramesInChState",name:"FramesInChState",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"Hp",name:"Hp",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"MaxHp",name:"MaxHp",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"CharacterState",name:"CharacterState",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"InAir",name:"InAir",embedded:false,exported:true,typ:$Bool,tag:""},{prop:"ActiveSkillId",name:"ActiveSkillId",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"ActiveSkillHit",name:"ActiveSkillHit",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"FramesInvinsible",name:"FramesInvinsible",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"BulletTeamId",name:"BulletTeamId",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"ChCollisionTeamId",name:"ChCollisionTeamId",embedded:false,exported:true,typ:$Int32,tag:""}]);F.init("",[{prop:"Dx",name:"Dx",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"Dy",name:"Dy",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"BtnALevel",name:"BtnALevel",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"BtnBLevel",name:"BtnBLevel",embedded:false,exported:true,typ:$Int32,tag:""}]);H.init("",[{prop:"Boundary",name:"Boundary",embedded:false,exported:true,typ:BV,tag:""}]);I.init("",[{prop:"BulletLocalId",name:"BulletLocalId",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"OriginatedRenderFrameId",name:"OriginatedRenderFrameId",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"OffenderJoinIndex",name:"OffenderJoinIndex",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"StartupFrames",name:"StartupFrames",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"CancellableStFrame",name:"CancellableStFrame",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"CancellableEdFrame",name:"CancellableEdFrame",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"ActiveFrames",name:"ActiveFrames",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"HitStunFrames",name:"HitStunFrames",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"BlockStunFrames",name:"BlockStunFrames",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"PushbackVelX",name:"PushbackVelX",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"PushbackVelY",name:"PushbackVelY",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"Damage",name:"Damage",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"SelfLockVelX",name:"SelfLockVelX",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"SelfLockVelY",name:"SelfLockVelY",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"HitboxOffsetX",name:"HitboxOffsetX",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"HitboxOffsetY",name:"HitboxOffsetY",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"HitboxSizeX",name:"HitboxSizeX",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"HitboxSizeY",name:"HitboxSizeY",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"BlowUp",name:"BlowUp",embedded:false,exported:true,typ:$Bool,tag:""},{prop:"CancelTransit",name:"CancelTransit",embedded:false,exported:true,typ:BW,tag:""},{prop:"TeamId",name:"TeamId",embedded:false,exported:true,typ:$Int32,tag:""}]);J.init("",[{prop:"Bullet",name:"Bullet",embedded:true,exported:true,typ:I,tag:""}]);K.init("",[{prop:"VirtualGridX",name:"VirtualGridX",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"VirtualGridY",name:"VirtualGridY",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"DirX",name:"DirX",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"DirY",name:"DirY",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"VelX",name:"VelX",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"VelY",name:"VelY",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"Speed",name:"Speed",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"Bullet",name:"Bullet",embedded:true,exported:true,typ:I,tag:""}]);L.init("",[{prop:"BattleLocalId",name:"BattleLocalId",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"RecoveryFrames",name:"RecoveryFrames",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"RecoveryFramesOnBlock",name:"RecoveryFramesOnBlock",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"RecoveryFramesOnHit",name:"RecoveryFramesOnHit",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"ReleaseTriggerType",name:"ReleaseTriggerType",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"BoundChState",name:"BoundChState",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"Hits",name:"Hits",embedded:false,exported:true,typ:AY,tag:""}]);M.init("",[{prop:"Id",name:"Id",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"PlayersArr",name:"PlayersArr",embedded:false,exported:true,typ:BL,tag:""},{prop:"CountdownNanos",name:"CountdownNanos",embedded:false,exported:true,typ:$Int64,tag:""},{prop:"MeleeBullets",name:"MeleeBullets",embedded:false,exported:true,typ:BM,tag:""},{prop:"FireballBullets",name:"FireballBullets",embedded:false,exported:true,typ:BN,tag:""},{prop:"BackendUnconfirmedMask",name:"BackendUnconfirmedMask",embedded:false,exported:true,typ:$Uint64,tag:""},{prop:"ShouldForceResync",name:"ShouldForceResync",embedded:false,exported:true,typ:$Bool,tag:""},{prop:"BulletLocalIdCounter",name:"BulletLocalIdCounter",embedded:false,exported:true,typ:$Int32,tag:""}]);N.init("",[{prop:"InputFrameId",name:"InputFrameId",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"InputList",name:"InputList",embedded:false,exported:true,typ:BK,tag:""},{prop:"ConfirmedList",name:"ConfirmedList",embedded:false,exported:true,typ:$Uint64,tag:""}]);O.init("",[{prop:"FlAct",name:"FlAct",embedded:false,exported:true,typ:$Uint64,tag:""},{prop:"FrAct",name:"FrAct",embedded:false,exported:true,typ:$Uint64,tag:""},{prop:"X",name:"X",embedded:false,exported:true,typ:$Float64,tag:""},{prop:"Y",name:"Y",embedded:false,exported:true,typ:$Float64,tag:""}]);P.init("",[{prop:"Ed",name:"Ed",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"St",name:"St",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"EdFrameId",name:"EdFrameId",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"StFrameId",name:"StFrameId",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"N",name:"N",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"Cnt",name:"Cnt",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"Eles",name:"Eles",embedded:false,exported:true,typ:AY,tag:""}]);R.init([$Int,BG],[$Int],false);S.init("",[{prop:"SpeciesId",name:"SpeciesId",embedded:false,exported:true,typ:$Int,tag:""},{prop:"SpeciesName",name:"SpeciesName",embedded:false,exported:true,typ:$String,tag:""},{prop:"InAirIdleFrameIdxTurningPoint",name:"InAirIdleFrameIdxTurningPoint",embedded:false,exported:true,typ:$Int,tag:""},{prop:"InAirIdleFrameIdxTurnedCycle",name:"InAirIdleFrameIdxTurnedCycle",embedded:false,exported:true,typ:$Int,tag:""},{prop:"LayDownFrames",name:"LayDownFrames",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"LayDownFramesToRecover",name:"LayDownFramesToRecover",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"GetUpInvinsibleFrames",name:"GetUpInvinsibleFrames",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"GetUpFramesToRecover",name:"GetUpFramesToRecover",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"Speed",name:"Speed",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"JumpingInitVelY",name:"JumpingInitVelY",embedded:false,exported:true,typ:$Int32,tag:""},{prop:"SkillMapper",name:"SkillMapper",embedded:false,exported:true,typ:R,tag:""}]);AF.init("",[{prop:"Overlap",name:"Overlap",embedded:false,exported:true,typ:$Float64,tag:""},{prop:"OverlapX",name:"OverlapX",embedded:false,exported:true,typ:$Float64,tag:""},{prop:"OverlapY",name:"OverlapY",embedded:false,exported:true,typ:$Float64,tag:""},{prop:"AContainedInB",name:"AContainedInB",embedded:false,exported:true,typ:$Bool,tag:""},{prop:"BContainedInA",name:"BContainedInA",embedded:false,exported:true,typ:$Bool,tag:""},{prop:"Axis",name:"Axis",embedded:false,exported:true,typ:B.Vector,tag:""}]);$init=function(){$pkg.$init=function(){};var $f,$c=false,$s=0,$r;if(this!==undefined&&this.$blk!==undefined){$f=this;$c=true;$s=$f.$s;$r=$f.$r;}s:while(true){switch($s){case 0:$r=A.$init();$s=1;case 1:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}$r=B.$init();$s=2;case 2:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}$pkg.DIRECTION_DECODER=new AX([new AW([0,0]),new AW([0,2]),new AW([0,-2]),new AW([2,0]),new AW([-2,0]),new AW([1,1]),new AW([-1,-1]),new AW([1,-1]),new AW([-1,1])]);T=$makeMap($Int.keyFor,[{k:1,v:new L.ptr(0,30,30,30,1,2,new AY([new J.ptr(new I.ptr(0,0,0,7,13,30,22,13,9,50,0,5,5,-1,1200,0,2400,3200,false,$makeMap($Int.keyFor,[{k:1,v:2}]),0))]))},{k:2,v:new L.ptr(0,36,36,36,1,11,new AY([new J.ptr(new I.ptr(0,0,0,18,22,36,18,18,9,50,0,5,10,-1,1800,0,2400,3200,false,$makeMap($Int.keyFor,[{k:1,v:3}]),0))]))},{k:3,v:new L.ptr(0,50,50,50,1,12,new AY([new J.ptr(new I.ptr(0,0,0,15,0,0,30,999999999,9,200,700,10,50,500,3200,0,4800,3200,true,false,0))]))},{k:4,v:new L.ptr(0,30,30,30,1,2,new AY([new J.ptr(new I.ptr(0,0,0,7,13,30,22,13,9,50,0,5,5,-1,1200,0,2400,3200,false,$makeMap($Int.keyFor,[{k:1,v:5}]),0))]))},{k:5,v:new L.ptr(0,36,36,36,1,11,new AY([new J.ptr(new I.ptr(0,0,0,18,22,36,18,18,9,50,0,5,10,-1,1800,0,2400,3200,false,$makeMap($Int.keyFor,[{k:1,v:6}]),0))]))},{k:6,v:new L.ptr(0,45,45,45,1,12,new AY([new J.ptr(new I.ptr(0,0,0,15,0,0,28,999999999,9,200,700,10,-10,-1,2400,0,3200,3200,true,false,0))]))},{k:7,v:new L.ptr(0,30,30,30,1,2,new AY([new J.ptr(new I.ptr(0,0,0,7,13,30,22,13,9,50,0,5,5,-1,1200,0,2400,3200,false,$makeMap($Int.keyFor,[{k:1,v:2}]),0))]))},{k:8,v:new L.ptr(0,36,36,36,1,11,new AY([new J.ptr(new I.ptr(0,0,0,18,22,36,18,18,9,50,0,5,10,-1,1800,0,2400,3200,false,$makeMap($Int.keyFor,[{k:1,v:3}]),0))]))},{k:9,v:new L.ptr(0,50,50,50,1,12,new AY([new J.ptr(new I.ptr(0,0,0,15,0,0,30,999999999,9,200,700,10,50,500,3200,0,4800,3200,false,false,0))]))},{k:10,v:new L.ptr(0,40,40,40,1,13,new AY([new K.ptr(0,0,0,0,0,0,800,new I.ptr(0,0,0,15,0,0,999999999,15,9,200,0,20,-1,-1,3200,0,4800,3200,false,false,0))]))},{k:255,v:new L.ptr(0,30,30,30,1,6,new AY([new J.ptr(new I.ptr(0,0,0,3,0,0,20,18,9,50,0,5,-1,-1,1200,0,3200,2400,false,false,0))]))},{k:256,v:new L.ptr(0,20,20,20,1,6,new AY([new J.ptr(new I.ptr(0,0,0,3,0,0,10,15,9,50,0,5,-1,-1,1200,0,3200,2400,false,false,0))]))},{k:257,v:new L.ptr(0,30,30,30,1,6,new AY([new J.ptr(new I.ptr(0,0,0,3,0,0,20,18,9,50,0,5,-1,-1,1200,0,3200,2400,false,false,0))]))}]);$pkg.Characters=$makeMap($Int.keyFor,[{k:0,v:new S.ptr(0,"MonkGirl",11,1,16,16,10,27,120,800,(function(a,b){var a,b,c,d,e,f,g,h,i,j,k,l,m,n;if(1===a){if(0===b.FramesToRecover){if(b.InAir){return 255;}else{return 1;}}else{c=(d=T[$Int.keyFor(((b.ActiveSkillId>>0)))],d!==undefined?[d.v,true]:[AZ.nil,false]);e=c[0];f=c[1];if(f){g=(h=e.Hits,i=b.ActiveSkillHit,((i<0||i>=h.$length)?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+i]));if($assertType(g,BA,true)[1]){j=g.$val;if(j.Bullet.CancellableStFrame<=b.FramesInChState&&b.FramesInChState>0)))],d!==undefined?[d.v,true]:[AZ.nil,false]);e=c[0];f=c[1];if(f){g=(h=e.Hits,i=b.ActiveSkillHit,((i<0||i>=h.$length)?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+i]));if($assertType(g,BA,true)[1]){j=g.$val;if(j.Bullet.CancellableStFrame<=b.FramesInChState&&b.FramesInChState>0)))],d!==undefined?[d.v,true]:[AZ.nil,false]);e=c[0];f=c[1];if(f){g=(h=e.Hits,i=b.ActiveSkillHit,((i<0||i>=h.$length)?($throwRuntimeError("index out of range"),undefined):h.$array[h.$offset+i]));if($assertType(g,BA,true)[1]){j=g.$val;if(j.Bullet.CancellableStFrame<=b.FramesInChState&&b.FramesInChState=d.$length)?($throwRuntimeError("index out of range"),undefined):d.$array[d.$offset+e]);g=A.MakeFullWrapper(f);$s=3;case 3:if($c){$c=false;g=g.$blk();}if(g&&g.$blk!==undefined){break s;}c=$append(c,g);e++;$s=1;continue;case 2:$s=-1;return c;}return;}var $f={$blk:O,$c:true,$r,a,b,c,d,e,f,g,$s};return $f;};$pkg.GetCollisionSpaceObjsJs=O;P=function(a,b,c,d,e,f,g,h){var{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,$s,$r,$c}=$restore(this,{a,b,c,d,e,f,g,h});$s=$s||0;s:while(true){switch($s){case 0:i=0.1;j=0.1;k=0.1;l=0.1;m=i;n=j;o=k;p=l;q=B.GenerateRectCollider(a,b,c,d,m,n,o,p,e,f,g,h);$s=1;case 1:if($c){$c=false;q=q.$blk();}if(q&&q.$blk!==undefined){break s;}r=A.MakeFullWrapper(q);$s=2;case 2:if($c){$c=false;r=r.$blk();}if(r&&r.$blk!==undefined){break s;}s=r;$s=3;case 3:return s;}return;}var $f={$blk:P,$c:true,$r,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,$s};return $f;};$pkg.GenerateRectColliderJs=P;Q=function(a,b,c,d,e){var{a,b,c,d,e,f,g,h,$s,$r,$c}=$restore(this,{a,b,c,d,e});$s=$s||0;s:while(true){switch($s){case 0:f=B.GenerateConvexPolygonCollider(a,b,c,d,e);$s=1;case 1:if($c){$c=false;f=f.$blk();}if(f&&f.$blk!==undefined){break s;}g=A.MakeFullWrapper(f);$s=2;case 2:if($c){$c=false;g=g.$blk();}if(g&&g.$blk!==undefined){break s;}h=g;$s=3;case 3:return h;}return;}var $f={$blk:Q,$c:true,$r,a,b,c,d,e,f,g,h,$s};return $f;};$pkg.GenerateConvexPolygonColliderJs=Q;R=function(a){var{a,b,c,d,e,f,g,h,$s,$r,$c}=$restore(this,{a});$s=$s||0;s:while(true){switch($s){case 0:b=$makeSlice(AF,a.$length,a.$length);c=a;d=0;case 1:if(!(d=c.$length)?($throwRuntimeError("index out of range"),undefined):c.$array[c.$offset+d]);h=A.MakeFullWrapper((g=B.Characters[$Int.keyFor(f)],g!==undefined?g.v:AG.nil));$s=3;case 3:if($c){$c=false;h=h.$blk();}if(h&&h.$blk!==undefined){break s;}((e<0||e>=b.$length)?($throwRuntimeError("index out of range"),undefined):b.$array[b.$offset+e]=h);d++;$s=1;continue;case 2:$s=-1;return b;}return;}var $f={$blk:R,$c:true,$r,a,b,c,d,e,f,g,h,$s};return $f;};$pkg.GetCharacterConfigsOrderedByJoinIndex=R;S=function(a,b,c,d,e,f,g){var{a,b,c,d,e,f,g,h,i,j,$s,$r,$c}=$restore(this,{a,b,c,d,e,f,g});$s=$s||0;s:while(true){switch($s){case 0:h=B.ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame(a,b,c,d,e,f,g);$s=1;case 1:if($c){$c=false;h=h.$blk();}if(h&&h.$blk!==undefined){break s;}i=A.MakeFullWrapper(h);$s=2;case 2:if($c){$c=false;i=i.$blk();}if(i&&i.$blk!==undefined){break s;}j=i;$s=3;case 3:return j;}return;}var $f={$blk:S,$c:true,$r,a,b,c,d,e,f,g,h,i,j,$s};return $f;};$pkg.ApplyInputFrameDownsyncDynamicsOnSingleRenderFrameJs=S;T=function(){$global.gopkgs=$externalize($makeMap($String.keyFor,[{k:"NewVec2DJs",v:new AH(G)},{k:"NewPolygon2DJs",v:new AI(H)},{k:"NewBarrierJs",v:new AJ(I)},{k:"NewPlayerDownsyncJs",v:new AK(J)},{k:"NewMeleeBulletJs",v:new AL(K)},{k:"NewFireballBulletJs",v:new AM(L)},{k:"NewNpcPatrolCue",v:new AN(M)},{k:"NewRoomDownsyncFrameJs",v:new AO(N)},{k:"NewCollisionSpaceJs",v:new AP(F)},{k:"NewInputFrameDownsync",v:new AQ(D)},{k:"NewRingBufferJs",v:new AR(E)},{k:"GenerateRectColliderJs",v:new AS(P)},{k:"GenerateConvexPolygonColliderJs",v:new AT(Q)},{k:"GetCollisionSpaceObjsJs",v:new AV(O)},{k:"WorldToPolygonColliderBLPos",v:new AW(B.WorldToPolygonColliderBLPos)},{k:"PolygonColliderBLToWorldPos",v:new AW(B.PolygonColliderBLToWorldPos)},{k:"WorldToVirtualGridPos",v:new AX(B.WorldToVirtualGridPos)},{k:"VirtualGridToWorldPos",v:new AY(B.VirtualGridToWorldPos)},{k:"GetCharacterConfigsOrderedByJoinIndex",v:new BA(R)},{k:"ApplyInputFrameDownsyncDynamicsOnSingleRenderFrameJs",v:new BG(S)},{k:"ConvertToDelayedInputFrameId",v:new BH(B.ConvertToDelayedInputFrameId)},{k:"ConvertToNoDelayInputFrameId",v:new BH(B.ConvertToNoDelayInputFrameId)},{k:"ConvertToFirstUsedRenderFrameId",v:new BH(B.ConvertToFirstUsedRenderFrameId)},{k:"ConvertToLastUsedRenderFrameId",v:new BH(B.ConvertToLastUsedRenderFrameId)},{k:"ShouldGenerateInputFrameUpsync",v:new BI(B.ShouldGenerateInputFrameUpsync)}]),BJ);};$init=function(){$pkg.$init=function(){};var $f,$c=false,$s=0,$r;if(this!==undefined&&this.$blk!==undefined){$f=this;$c=true;$s=$f.$s;$r=$f.$r;}s:while(true){switch($s){case 0:$r=A.$init();$s=1;case 1:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}$r=B.$init();$s=2;case 2:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}$r=C.$init();$s=3;case 3:if($c){$c=false;$r=$r.$blk();}if($r&&$r.$blk!==undefined){break s;}if($pkg===$mainPkg){T();$mainFinished=true;}}return;}if($f===undefined){$f={$blk:$init};}$f.$s=$s;$f.$r=$r;return $f;};$pkg.$init=$init;return $pkg;})(); +var $NaN = NaN; +var $global, $module; +if (typeof window !== "undefined") { /* web page */ + $global = window; +} else if (typeof self !== "undefined") { /* web worker */ + $global = self; +} else if (typeof global !== "undefined") { /* Node.js */ + $global = global; + $global.require = require; +} else { /* others (e.g. Nashorn) */ + $global = this; +} + +if ($global === undefined || $global.Array === undefined) { + throw new Error("no global object found"); +} +if (typeof module !== "undefined") { + $module = module; +} + +if (!$global.fs && $global.require) { + try { + var fs = $global.require('fs'); + if (typeof fs === "object" && fs !== null && Object.keys(fs).length !== 0) { + $global.fs = fs; + } + } catch(e) { /* Ignore if the module couldn't be loaded. */ } +} + +if (!$global.fs) { + var outputBuf = ""; + var decoder = new TextDecoder("utf-8"); + $global.fs = { + constants: { O_WRONLY: -1, O_RDWR: -1, O_CREAT: -1, O_TRUNC: -1, O_APPEND: -1, O_EXCL: -1 }, // unused + writeSync: function writeSync(fd, buf) { + outputBuf += decoder.decode(buf); + var nl = outputBuf.lastIndexOf("\n"); + if (nl != -1) { + console.log(outputBuf.substr(0, nl)); + outputBuf = outputBuf.substr(nl + 1); + } + return buf.length; + }, + write: function write(fd, buf, offset, length, position, callback) { + if (offset !== 0 || length !== buf.length || position !== null) { + callback(enosys()); + return; + } + var n = this.writeSync(fd, buf); + callback(null, n); + } + }; +} + +var $linknames = {} // Collection of functions referenced by a go:linkname directive. +var $packages = {}, $idCounter = 0; +var $keys = function(m) { return m ? Object.keys(m) : []; }; +var $flushConsole = function() {}; +var $throwRuntimeError; /* set by package "runtime" */ +var $throwNilPointerError = function() { $throwRuntimeError("invalid memory address or nil pointer dereference"); }; +var $call = function(fn, rcvr, args) { return fn.apply(rcvr, args); }; +var $makeFunc = function(fn) { return function() { return $externalize(fn(this, new ($sliceType($jsObjectPtr))($global.Array.prototype.slice.call(arguments, []))), $emptyInterface); }; }; +var $unused = function(v) {}; +var $print = console.log; +// Under Node we can emulate print() more closely by avoiding a newline. +if (($global.process !== undefined) && $global.require) { + try { + var util = $global.require('util'); + $print = function() { $global.process.stderr.write(util.format.apply(this, arguments)); }; + } catch (e) { + // Failed to require util module, keep using console.log(). + } +} +var $println = console.log + +var $initAllLinknames = function() { + var names = $keys($packages); + for (var i = 0; i < names.length; i++) { + var f = $packages[names[i]]["$initLinknames"]; + if (typeof f == 'function') { + f(); + } + } +} + +var $mapArray = function(array, f) { + var newArray = new array.constructor(array.length); + for (var i = 0; i < array.length; i++) { + newArray[i] = f(array[i]); + } + return newArray; +}; + +// Returns a method bound to the receiver instance, safe to invoke as a +// standalone function. Bound function is cached for later reuse. +var $methodVal = function(recv, name) { + var vals = recv.$methodVals || {}; + recv.$methodVals = vals; /* noop for primitives */ + var f = vals[name]; + if (f !== undefined) { + return f; + } + var method = recv[name]; + f = method.bind(recv); + vals[name] = f; + return f; +}; + +var $methodExpr = function(typ, name) { + var method = typ.prototype[name]; + if (method.$expr === undefined) { + method.$expr = function() { + $stackDepthOffset--; + try { + if (typ.wrapped) { + arguments[0] = new typ(arguments[0]); + } + return Function.call.apply(method, arguments); + } finally { + $stackDepthOffset++; + } + }; + } + return method.$expr; +}; + +var $ifaceMethodExprs = {}; +var $ifaceMethodExpr = function(name) { + var expr = $ifaceMethodExprs["$" + name]; + if (expr === undefined) { + expr = $ifaceMethodExprs["$" + name] = function() { + $stackDepthOffset--; + try { + return Function.call.apply(arguments[0][name], arguments); + } finally { + $stackDepthOffset++; + } + }; + } + return expr; +}; + +var $subslice = function(slice, low, high, max) { + if (high === undefined) { + high = slice.$length; + } + if (max === undefined) { + max = slice.$capacity; + } + if (low < 0 || high < low || max < high || high > slice.$capacity || max > slice.$capacity) { + $throwRuntimeError("slice bounds out of range"); + } + if (slice === slice.constructor.nil) { + return slice; + } + var s = new slice.constructor(slice.$array); + s.$offset = slice.$offset + low; + s.$length = high - low; + s.$capacity = max - low; + return s; +}; + +var $substring = function(str, low, high) { + if (low < 0 || high < low || high > str.length) { + $throwRuntimeError("slice bounds out of range"); + } + return str.substring(low, high); +}; + +// Convert Go slice to an equivalent JS array type. +var $sliceToNativeArray = function(slice) { + if (slice.$array.constructor !== Array) { + return slice.$array.subarray(slice.$offset, slice.$offset + slice.$length); + } + return slice.$array.slice(slice.$offset, slice.$offset + slice.$length); +}; + +// Convert Go slice to a pointer to an underlying Go array. +// +// Note that an array pointer can be represented by an "unwrapped" native array +// type, and it will be wrapped back into its Go type when necessary. +var $sliceToGoArray = function(slice, arrayPtrType) { + var arrayType = arrayPtrType.elem; + if (arrayType !== undefined && slice.$length < arrayType.len) { + $throwRuntimeError("cannot convert slice with length " + slice.$length + " to pointer to array with length " + arrayType.len); + } + if (slice == slice.constructor.nil) { + return arrayPtrType.nil; // Nil slice converts to nil array pointer. + } + if (slice.$array.constructor !== Array) { + return slice.$array.subarray(slice.$offset, slice.$offset + arrayType.len); + } + if (slice.$offset == 0 && slice.$length == slice.$capacity && slice.$length == arrayType.len) { + return slice.$array; + } + if (arrayType.len == 0) { + return new arrayType([]); + } + + // Array.slice (unlike TypedArray.subarray) returns a copy of an array range, + // which is not sharing memory with the original one, which violates the spec + // for slice to array conversion. This is incompatible with the Go spec, in + // particular that the assignments to the array elements would be visible in + // the slice. Prefer to fail explicitly instead of creating subtle bugs. + $throwRuntimeError("gopherjs: non-numeric slice to underlying array conversion is not supported for subslices"); +}; + +// Convert between compatible slice types (e.g. native and names). +var $convertSliceType = function(slice, desiredType) { + if (slice == slice.constructor.nil) { + return desiredType.nil; // Preserve nil value. + } + + return $subslice(new desiredType(slice.$array), slice.$offset, slice.$offset + slice.$length); +} + +var $decodeRune = function(str, pos) { + var c0 = str.charCodeAt(pos); + + if (c0 < 0x80) { + return [c0, 1]; + } + + if (c0 !== c0 || c0 < 0xC0) { + return [0xFFFD, 1]; + } + + var c1 = str.charCodeAt(pos + 1); + if (c1 !== c1 || c1 < 0x80 || 0xC0 <= c1) { + return [0xFFFD, 1]; + } + + if (c0 < 0xE0) { + var r = (c0 & 0x1F) << 6 | (c1 & 0x3F); + if (r <= 0x7F) { + return [0xFFFD, 1]; + } + return [r, 2]; + } + + var c2 = str.charCodeAt(pos + 2); + if (c2 !== c2 || c2 < 0x80 || 0xC0 <= c2) { + return [0xFFFD, 1]; + } + + if (c0 < 0xF0) { + var r = (c0 & 0x0F) << 12 | (c1 & 0x3F) << 6 | (c2 & 0x3F); + if (r <= 0x7FF) { + return [0xFFFD, 1]; + } + if (0xD800 <= r && r <= 0xDFFF) { + return [0xFFFD, 1]; + } + return [r, 3]; + } + + var c3 = str.charCodeAt(pos + 3); + if (c3 !== c3 || c3 < 0x80 || 0xC0 <= c3) { + return [0xFFFD, 1]; + } + + if (c0 < 0xF8) { + var r = (c0 & 0x07) << 18 | (c1 & 0x3F) << 12 | (c2 & 0x3F) << 6 | (c3 & 0x3F); + if (r <= 0xFFFF || 0x10FFFF < r) { + return [0xFFFD, 1]; + } + return [r, 4]; + } + + return [0xFFFD, 1]; +}; + +var $encodeRune = function(r) { + if (r < 0 || r > 0x10FFFF || (0xD800 <= r && r <= 0xDFFF)) { + r = 0xFFFD; + } + if (r <= 0x7F) { + return String.fromCharCode(r); + } + if (r <= 0x7FF) { + return String.fromCharCode(0xC0 | r >> 6, 0x80 | (r & 0x3F)); + } + if (r <= 0xFFFF) { + return String.fromCharCode(0xE0 | r >> 12, 0x80 | (r >> 6 & 0x3F), 0x80 | (r & 0x3F)); + } + return String.fromCharCode(0xF0 | r >> 18, 0x80 | (r >> 12 & 0x3F), 0x80 | (r >> 6 & 0x3F), 0x80 | (r & 0x3F)); +}; + +var $stringToBytes = function(str) { + var array = new Uint8Array(str.length); + for (var i = 0; i < str.length; i++) { + array[i] = str.charCodeAt(i); + } + return array; +}; + +var $bytesToString = function(slice) { + if (slice.$length === 0) { + return ""; + } + var str = ""; + for (var i = 0; i < slice.$length; i += 10000) { + str += String.fromCharCode.apply(undefined, slice.$array.subarray(slice.$offset + i, slice.$offset + Math.min(slice.$length, i + 10000))); + } + return str; +}; + +var $stringToRunes = function(str) { + var array = new Int32Array(str.length); + var rune, j = 0; + for (var i = 0; i < str.length; i += rune[1], j++) { + rune = $decodeRune(str, i); + array[j] = rune[0]; + } + return array.subarray(0, j); +}; + +var $runesToString = function(slice) { + if (slice.$length === 0) { + return ""; + } + var str = ""; + for (var i = 0; i < slice.$length; i++) { + str += $encodeRune(slice.$array[slice.$offset + i]); + } + return str; +}; + +var $copyString = function(dst, src) { + var n = Math.min(src.length, dst.$length); + for (var i = 0; i < n; i++) { + dst.$array[dst.$offset + i] = src.charCodeAt(i); + } + return n; +}; + +var $copySlice = function(dst, src) { + var n = Math.min(src.$length, dst.$length); + $copyArray(dst.$array, src.$array, dst.$offset, src.$offset, n, dst.constructor.elem); + return n; +}; + +var $copyArray = function(dst, src, dstOffset, srcOffset, n, elem) { + if (n === 0 || (dst === src && dstOffset === srcOffset)) { + return; + } + + if (src.subarray) { + dst.set(src.subarray(srcOffset, srcOffset + n), dstOffset); + return; + } + + switch (elem.kind) { + case $kindArray: + case $kindStruct: + if (dst === src && dstOffset > srcOffset) { + for (var i = n - 1; i >= 0; i--) { + elem.copy(dst[dstOffset + i], src[srcOffset + i]); + } + return; + } + for (var i = 0; i < n; i++) { + elem.copy(dst[dstOffset + i], src[srcOffset + i]); + } + return; + } + + if (dst === src && dstOffset > srcOffset) { + for (var i = n - 1; i >= 0; i--) { + dst[dstOffset + i] = src[srcOffset + i]; + } + return; + } + for (var i = 0; i < n; i++) { + dst[dstOffset + i] = src[srcOffset + i]; + } +}; + +var $clone = function(src, type) { + var clone = type.zero(); + type.copy(clone, src); + return clone; +}; + +var $pointerOfStructConversion = function(obj, type) { + if(obj.$proxies === undefined) { + obj.$proxies = {}; + obj.$proxies[obj.constructor.string] = obj; + } + var proxy = obj.$proxies[type.string]; + if (proxy === undefined) { + var properties = {}; + for (var i = 0; i < type.elem.fields.length; i++) { + (function(fieldProp) { + properties[fieldProp] = { + get: function() { return obj[fieldProp]; }, + set: function(value) { obj[fieldProp] = value; } + }; + })(type.elem.fields[i].prop); + } + proxy = Object.create(type.prototype, properties); + proxy.$val = proxy; + obj.$proxies[type.string] = proxy; + proxy.$proxies = obj.$proxies; + } + return proxy; +}; + +var $append = function(slice) { + return $internalAppend(slice, arguments, 1, arguments.length - 1); +}; + +var $appendSlice = function(slice, toAppend) { + if (toAppend.constructor === String) { + var bytes = $stringToBytes(toAppend); + return $internalAppend(slice, bytes, 0, bytes.length); + } + return $internalAppend(slice, toAppend.$array, toAppend.$offset, toAppend.$length); +}; + +var $internalAppend = function(slice, array, offset, length) { + if (length === 0) { + return slice; + } + + var newArray = slice.$array; + var newOffset = slice.$offset; + var newLength = slice.$length + length; + var newCapacity = slice.$capacity; + + if (newLength > newCapacity) { + newOffset = 0; + newCapacity = Math.max(newLength, slice.$capacity < 1024 ? slice.$capacity * 2 : Math.floor(slice.$capacity * 5 / 4)); + + if (slice.$array.constructor === Array) { + newArray = slice.$array.slice(slice.$offset, slice.$offset + slice.$length); + newArray.length = newCapacity; + var zero = slice.constructor.elem.zero; + for (var i = slice.$length; i < newCapacity; i++) { + newArray[i] = zero(); + } + } else { + newArray = new slice.$array.constructor(newCapacity); + newArray.set(slice.$array.subarray(slice.$offset, slice.$offset + slice.$length)); + } + } + + $copyArray(newArray, array, newOffset + slice.$length, offset, length, slice.constructor.elem); + + var newSlice = new slice.constructor(newArray); + newSlice.$offset = newOffset; + newSlice.$length = newLength; + newSlice.$capacity = newCapacity; + return newSlice; +}; + +var $equal = function(a, b, type) { + if (type === $jsObjectPtr) { + return a === b; + } + switch (type.kind) { + case $kindComplex64: + case $kindComplex128: + return a.$real === b.$real && a.$imag === b.$imag; + case $kindInt64: + case $kindUint64: + return a.$high === b.$high && a.$low === b.$low; + case $kindArray: + if (a.length !== b.length) { + return false; + } + for (var i = 0; i < a.length; i++) { + if (!$equal(a[i], b[i], type.elem)) { + return false; + } + } + return true; + case $kindStruct: + for (var i = 0; i < type.fields.length; i++) { + var f = type.fields[i]; + if (!$equal(a[f.prop], b[f.prop], f.typ)) { + return false; + } + } + return true; + case $kindInterface: + return $interfaceIsEqual(a, b); + default: + return a === b; + } +}; + +var $interfaceIsEqual = function(a, b) { + if (a === $ifaceNil || b === $ifaceNil) { + return a === b; + } + if (a.constructor !== b.constructor) { + return false; + } + if (a.constructor === $jsObjectPtr) { + return a.object === b.object; + } + if (!a.constructor.comparable) { + $throwRuntimeError("comparing uncomparable type " + a.constructor.string); + } + return $equal(a.$val, b.$val, a.constructor); +}; + +var $min = Math.min; +var $mod = function(x, y) { return x % y; }; +var $parseInt = parseInt; +var $parseFloat = function(f) { + if (f !== undefined && f !== null && f.constructor === Number) { + return f; + } + return parseFloat(f); +}; + +var $froundBuf = new Float32Array(1); +var $fround = Math.fround || function(f) { + $froundBuf[0] = f; + return $froundBuf[0]; +}; + +var $imul = Math.imul || function(a, b) { + var ah = (a >>> 16) & 0xffff; + var al = a & 0xffff; + var bh = (b >>> 16) & 0xffff; + var bl = b & 0xffff; + return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0) >> 0); +}; + +var $floatKey = function(f) { + if (f !== f) { + $idCounter++; + return "NaN$" + $idCounter; + } + return String(f); +}; + +var $flatten64 = function(x) { + return x.$high * 4294967296 + x.$low; +}; + +var $shiftLeft64 = function(x, y) { + if (y === 0) { + return x; + } + if (y < 32) { + return new x.constructor(x.$high << y | x.$low >>> (32 - y), (x.$low << y) >>> 0); + } + if (y < 64) { + return new x.constructor(x.$low << (y - 32), 0); + } + return new x.constructor(0, 0); +}; + +var $shiftRightInt64 = function(x, y) { + if (y === 0) { + return x; + } + if (y < 32) { + return new x.constructor(x.$high >> y, (x.$low >>> y | x.$high << (32 - y)) >>> 0); + } + if (y < 64) { + return new x.constructor(x.$high >> 31, (x.$high >> (y - 32)) >>> 0); + } + if (x.$high < 0) { + return new x.constructor(-1, 4294967295); + } + return new x.constructor(0, 0); +}; + +var $shiftRightUint64 = function(x, y) { + if (y === 0) { + return x; + } + if (y < 32) { + return new x.constructor(x.$high >>> y, (x.$low >>> y | x.$high << (32 - y)) >>> 0); + } + if (y < 64) { + return new x.constructor(0, x.$high >>> (y - 32)); + } + return new x.constructor(0, 0); +}; + +var $mul64 = function(x, y) { + var x48 = x.$high >>> 16; + var x32 = x.$high & 0xFFFF; + var x16 = x.$low >>> 16; + var x00 = x.$low & 0xFFFF; + + var y48 = y.$high >>> 16; + var y32 = y.$high & 0xFFFF; + var y16 = y.$low >>> 16; + var y00 = y.$low & 0xFFFF; + + var z48 = 0, z32 = 0, z16 = 0, z00 = 0; + z00 += x00 * y00; + z16 += z00 >>> 16; + z00 &= 0xFFFF; + z16 += x16 * y00; + z32 += z16 >>> 16; + z16 &= 0xFFFF; + z16 += x00 * y16; + z32 += z16 >>> 16; + z16 &= 0xFFFF; + z32 += x32 * y00; + z48 += z32 >>> 16; + z32 &= 0xFFFF; + z32 += x16 * y16; + z48 += z32 >>> 16; + z32 &= 0xFFFF; + z32 += x00 * y32; + z48 += z32 >>> 16; + z32 &= 0xFFFF; + z48 += x48 * y00 + x32 * y16 + x16 * y32 + x00 * y48; + z48 &= 0xFFFF; + + var hi = ((z48 << 16) | z32) >>> 0; + var lo = ((z16 << 16) | z00) >>> 0; + + var r = new x.constructor(hi, lo); + return r; +}; + +var $div64 = function(x, y, returnRemainder) { + if (y.$high === 0 && y.$low === 0) { + $throwRuntimeError("integer divide by zero"); + } + + var s = 1; + var rs = 1; + + var xHigh = x.$high; + var xLow = x.$low; + if (xHigh < 0) { + s = -1; + rs = -1; + xHigh = -xHigh; + if (xLow !== 0) { + xHigh--; + xLow = 4294967296 - xLow; + } + } + + var yHigh = y.$high; + var yLow = y.$low; + if (y.$high < 0) { + s *= -1; + yHigh = -yHigh; + if (yLow !== 0) { + yHigh--; + yLow = 4294967296 - yLow; + } + } + + var high = 0, low = 0, n = 0; + while (yHigh < 2147483648 && ((xHigh > yHigh) || (xHigh === yHigh && xLow > yLow))) { + yHigh = (yHigh << 1 | yLow >>> 31) >>> 0; + yLow = (yLow << 1) >>> 0; + n++; + } + for (var i = 0; i <= n; i++) { + high = high << 1 | low >>> 31; + low = (low << 1) >>> 0; + if ((xHigh > yHigh) || (xHigh === yHigh && xLow >= yLow)) { + xHigh = xHigh - yHigh; + xLow = xLow - yLow; + if (xLow < 0) { + xHigh--; + xLow += 4294967296; + } + low++; + if (low === 4294967296) { + high++; + low = 0; + } + } + yLow = (yLow >>> 1 | yHigh << (32 - 1)) >>> 0; + yHigh = yHigh >>> 1; + } + + if (returnRemainder) { + return new x.constructor(xHigh * rs, xLow * rs); + } + return new x.constructor(high * s, low * s); +}; + +var $divComplex = function(n, d) { + var ninf = n.$real === Infinity || n.$real === -Infinity || n.$imag === Infinity || n.$imag === -Infinity; + var dinf = d.$real === Infinity || d.$real === -Infinity || d.$imag === Infinity || d.$imag === -Infinity; + var nnan = !ninf && (n.$real !== n.$real || n.$imag !== n.$imag); + var dnan = !dinf && (d.$real !== d.$real || d.$imag !== d.$imag); + if(nnan || dnan) { + return new n.constructor(NaN, NaN); + } + if (ninf && !dinf) { + return new n.constructor(Infinity, Infinity); + } + if (!ninf && dinf) { + return new n.constructor(0, 0); + } + if (d.$real === 0 && d.$imag === 0) { + if (n.$real === 0 && n.$imag === 0) { + return new n.constructor(NaN, NaN); + } + return new n.constructor(Infinity, Infinity); + } + var a = Math.abs(d.$real); + var b = Math.abs(d.$imag); + if (a <= b) { + var ratio = d.$real / d.$imag; + var denom = d.$real * ratio + d.$imag; + return new n.constructor((n.$real * ratio + n.$imag) / denom, (n.$imag * ratio - n.$real) / denom); + } + var ratio = d.$imag / d.$real; + var denom = d.$imag * ratio + d.$real; + return new n.constructor((n.$imag * ratio + n.$real) / denom, (n.$imag - n.$real * ratio) / denom); +}; + +var $kindBool = 1; +var $kindInt = 2; +var $kindInt8 = 3; +var $kindInt16 = 4; +var $kindInt32 = 5; +var $kindInt64 = 6; +var $kindUint = 7; +var $kindUint8 = 8; +var $kindUint16 = 9; +var $kindUint32 = 10; +var $kindUint64 = 11; +var $kindUintptr = 12; +var $kindFloat32 = 13; +var $kindFloat64 = 14; +var $kindComplex64 = 15; +var $kindComplex128 = 16; +var $kindArray = 17; +var $kindChan = 18; +var $kindFunc = 19; +var $kindInterface = 20; +var $kindMap = 21; +var $kindPtr = 22; +var $kindSlice = 23; +var $kindString = 24; +var $kindStruct = 25; +var $kindUnsafePointer = 26; + +var $methodSynthesizers = []; +var $addMethodSynthesizer = function(f) { + if ($methodSynthesizers === null) { + f(); + return; + } + $methodSynthesizers.push(f); +}; +var $synthesizeMethods = function() { + $methodSynthesizers.forEach(function(f) { f(); }); + $methodSynthesizers = null; +}; + +var $ifaceKeyFor = function(x) { + if (x === $ifaceNil) { + return 'nil'; + } + var c = x.constructor; + return c.string + '$' + c.keyFor(x.$val); +}; + +var $identity = function(x) { return x; }; + +var $typeIDCounter = 0; + +var $idKey = function(x) { + if (x.$id === undefined) { + $idCounter++; + x.$id = $idCounter; + } + return String(x.$id); +}; + +// Creates constructor functions for array pointer types. Returns a new function +// instace each time to make sure each type is independent of the other. +var $arrayPtrCtor = function() { + return function(array) { + this.$get = function() { return array; }; + this.$set = function(v) { typ.copy(this, v); }; + this.$val = array; + } +} + +var $newType = function(size, kind, string, named, pkg, exported, constructor) { + var typ; + switch(kind) { + case $kindBool: + case $kindInt: + case $kindInt8: + case $kindInt16: + case $kindInt32: + case $kindUint: + case $kindUint8: + case $kindUint16: + case $kindUint32: + case $kindUintptr: + case $kindUnsafePointer: + typ = function(v) { this.$val = v; }; + typ.wrapped = true; + typ.keyFor = $identity; + break; + + case $kindString: + typ = function(v) { this.$val = v; }; + typ.wrapped = true; + typ.keyFor = function(x) { return "$" + x; }; + break; + + case $kindFloat32: + case $kindFloat64: + typ = function(v) { this.$val = v; }; + typ.wrapped = true; + typ.keyFor = function(x) { return $floatKey(x); }; + break; + + case $kindInt64: + typ = function(high, low) { + this.$high = (high + Math.floor(Math.ceil(low) / 4294967296)) >> 0; + this.$low = low >>> 0; + this.$val = this; + }; + typ.keyFor = function(x) { return x.$high + "$" + x.$low; }; + break; + + case $kindUint64: + typ = function(high, low) { + this.$high = (high + Math.floor(Math.ceil(low) / 4294967296)) >>> 0; + this.$low = low >>> 0; + this.$val = this; + }; + typ.keyFor = function(x) { return x.$high + "$" + x.$low; }; + break; + + case $kindComplex64: + typ = function(real, imag) { + this.$real = $fround(real); + this.$imag = $fround(imag); + this.$val = this; + }; + typ.keyFor = function(x) { return x.$real + "$" + x.$imag; }; + break; + + case $kindComplex128: + typ = function(real, imag) { + this.$real = real; + this.$imag = imag; + this.$val = this; + }; + typ.keyFor = function(x) { return x.$real + "$" + x.$imag; }; + break; + + case $kindArray: + typ = function(v) { this.$val = v; }; + typ.wrapped = true; + typ.ptr = $newType(4, $kindPtr, "*" + string, false, "", false, $arrayPtrCtor()); + typ.init = function(elem, len) { + typ.elem = elem; + typ.len = len; + typ.comparable = elem.comparable; + typ.keyFor = function(x) { + return Array.prototype.join.call($mapArray(x, function(e) { + return String(elem.keyFor(e)).replace(/\\/g, "\\\\").replace(/\$/g, "\\$"); + }), "$"); + }; + typ.copy = function(dst, src) { + $copyArray(dst, src, 0, 0, src.length, elem); + }; + typ.ptr.init(typ); + Object.defineProperty(typ.ptr.nil, "nilCheck", { get: $throwNilPointerError }); + }; + break; + + case $kindChan: + typ = function(v) { this.$val = v; }; + typ.wrapped = true; + typ.keyFor = $idKey; + typ.init = function(elem, sendOnly, recvOnly) { + typ.elem = elem; + typ.sendOnly = sendOnly; + typ.recvOnly = recvOnly; + }; + break; + + case $kindFunc: + typ = function(v) { this.$val = v; }; + typ.wrapped = true; + typ.init = function(params, results, variadic) { + typ.params = params; + typ.results = results; + typ.variadic = variadic; + typ.comparable = false; + }; + break; + + case $kindInterface: + typ = { implementedBy: {}, missingMethodFor: {} }; + typ.keyFor = $ifaceKeyFor; + typ.init = function(methods) { + typ.methods = methods; + methods.forEach(function(m) { + $ifaceNil[m.prop] = $throwNilPointerError; + }); + }; + break; + + case $kindMap: + typ = function(v) { this.$val = v; }; + typ.wrapped = true; + typ.init = function(key, elem) { + typ.key = key; + typ.elem = elem; + typ.comparable = false; + }; + break; + + case $kindPtr: + typ = constructor || function(getter, setter, target) { + this.$get = getter; + this.$set = setter; + this.$target = target; + this.$val = this; + }; + typ.keyFor = $idKey; + typ.init = function(elem) { + typ.elem = elem; + typ.wrapped = (elem.kind === $kindArray); + typ.nil = new typ($throwNilPointerError, $throwNilPointerError); + }; + break; + + case $kindSlice: + typ = function(array) { + if (array.constructor !== typ.nativeArray) { + array = new typ.nativeArray(array); + } + this.$array = array; + this.$offset = 0; + this.$length = array.length; + this.$capacity = array.length; + this.$val = this; + }; + typ.init = function(elem) { + typ.elem = elem; + typ.comparable = false; + typ.nativeArray = $nativeArray(elem.kind); + typ.nil = new typ([]); + }; + break; + + case $kindStruct: + typ = function(v) { this.$val = v; }; + typ.wrapped = true; + typ.ptr = $newType(4, $kindPtr, "*" + string, false, pkg, exported, constructor); + typ.ptr.elem = typ; + typ.ptr.prototype.$get = function() { return this; }; + typ.ptr.prototype.$set = function(v) { typ.copy(this, v); }; + typ.init = function(pkgPath, fields) { + typ.pkgPath = pkgPath; + typ.fields = fields; + fields.forEach(function(f) { + if (!f.typ.comparable) { + typ.comparable = false; + } + }); + typ.keyFor = function(x) { + var val = x.$val; + return $mapArray(fields, function(f) { + return String(f.typ.keyFor(val[f.prop])).replace(/\\/g, "\\\\").replace(/\$/g, "\\$"); + }).join("$"); + }; + typ.copy = function(dst, src) { + for (var i = 0; i < fields.length; i++) { + var f = fields[i]; + switch (f.typ.kind) { + case $kindArray: + case $kindStruct: + f.typ.copy(dst[f.prop], src[f.prop]); + continue; + default: + dst[f.prop] = src[f.prop]; + continue; + } + } + }; + /* nil value */ + var properties = {}; + fields.forEach(function(f) { + properties[f.prop] = { get: $throwNilPointerError, set: $throwNilPointerError }; + }); + typ.ptr.nil = Object.create(constructor.prototype, properties); + typ.ptr.nil.$val = typ.ptr.nil; + /* methods for embedded fields */ + $addMethodSynthesizer(function() { + var synthesizeMethod = function(target, m, f) { + if (target.prototype[m.prop] !== undefined) { return; } + target.prototype[m.prop] = function() { + var v = this.$val[f.prop]; + if (f.typ === $jsObjectPtr) { + v = new $jsObjectPtr(v); + } + if (v.$val === undefined) { + v = new f.typ(v); + } + return v[m.prop].apply(v, arguments); + }; + }; + fields.forEach(function(f) { + if (f.embedded) { + $methodSet(f.typ).forEach(function(m) { + synthesizeMethod(typ, m, f); + synthesizeMethod(typ.ptr, m, f); + }); + $methodSet($ptrType(f.typ)).forEach(function(m) { + synthesizeMethod(typ.ptr, m, f); + }); + } + }); + }); + }; + break; + + default: + $panic(new $String("invalid kind: " + kind)); + } + + switch (kind) { + case $kindBool: + case $kindMap: + typ.zero = function() { return false; }; + break; + + case $kindInt: + case $kindInt8: + case $kindInt16: + case $kindInt32: + case $kindUint: + case $kindUint8 : + case $kindUint16: + case $kindUint32: + case $kindUintptr: + case $kindUnsafePointer: + case $kindFloat32: + case $kindFloat64: + typ.zero = function() { return 0; }; + break; + + case $kindString: + typ.zero = function() { return ""; }; + break; + + case $kindInt64: + case $kindUint64: + case $kindComplex64: + case $kindComplex128: + var zero = new typ(0, 0); + typ.zero = function() { return zero; }; + break; + + case $kindPtr: + case $kindSlice: + typ.zero = function() { return typ.nil; }; + break; + + case $kindChan: + typ.zero = function() { return $chanNil; }; + break; + + case $kindFunc: + typ.zero = function() { return $throwNilPointerError; }; + break; + + case $kindInterface: + typ.zero = function() { return $ifaceNil; }; + break; + + case $kindArray: + typ.zero = function() { + var arrayClass = $nativeArray(typ.elem.kind); + if (arrayClass !== Array) { + return new arrayClass(typ.len); + } + var array = new Array(typ.len); + for (var i = 0; i < typ.len; i++) { + array[i] = typ.elem.zero(); + } + return array; + }; + break; + + case $kindStruct: + typ.zero = function() { return new typ.ptr(); }; + break; + + default: + $panic(new $String("invalid kind: " + kind)); + } + + typ.id = $typeIDCounter; + $typeIDCounter++; + typ.size = size; + typ.kind = kind; + typ.string = string; + typ.named = named; + typ.pkg = pkg; + typ.exported = exported; + typ.methods = []; + typ.methodSetCache = null; + typ.comparable = true; + return typ; +}; + +var $methodSet = function(typ) { + if (typ.methodSetCache !== null) { + return typ.methodSetCache; + } + var base = {}; + + var isPtr = (typ.kind === $kindPtr); + if (isPtr && typ.elem.kind === $kindInterface) { + typ.methodSetCache = []; + return []; + } + + var current = [{typ: isPtr ? typ.elem : typ, indirect: isPtr}]; + + var seen = {}; + + while (current.length > 0) { + var next = []; + var mset = []; + + current.forEach(function(e) { + if (seen[e.typ.string]) { + return; + } + seen[e.typ.string] = true; + + if (e.typ.named) { + mset = mset.concat(e.typ.methods); + if (e.indirect) { + mset = mset.concat($ptrType(e.typ).methods); + } + } + + switch (e.typ.kind) { + case $kindStruct: + e.typ.fields.forEach(function(f) { + if (f.embedded) { + var fTyp = f.typ; + var fIsPtr = (fTyp.kind === $kindPtr); + next.push({typ: fIsPtr ? fTyp.elem : fTyp, indirect: e.indirect || fIsPtr}); + } + }); + break; + + case $kindInterface: + mset = mset.concat(e.typ.methods); + break; + } + }); + + mset.forEach(function(m) { + if (base[m.name] === undefined) { + base[m.name] = m; + } + }); + + current = next; + } + + typ.methodSetCache = []; + Object.keys(base).sort().forEach(function(name) { + typ.methodSetCache.push(base[name]); + }); + return typ.methodSetCache; +}; + +var $Bool = $newType( 1, $kindBool, "bool", true, "", false, null); +var $Int = $newType( 4, $kindInt, "int", true, "", false, null); +var $Int8 = $newType( 1, $kindInt8, "int8", true, "", false, null); +var $Int16 = $newType( 2, $kindInt16, "int16", true, "", false, null); +var $Int32 = $newType( 4, $kindInt32, "int32", true, "", false, null); +var $Int64 = $newType( 8, $kindInt64, "int64", true, "", false, null); +var $Uint = $newType( 4, $kindUint, "uint", true, "", false, null); +var $Uint8 = $newType( 1, $kindUint8, "uint8", true, "", false, null); +var $Uint16 = $newType( 2, $kindUint16, "uint16", true, "", false, null); +var $Uint32 = $newType( 4, $kindUint32, "uint32", true, "", false, null); +var $Uint64 = $newType( 8, $kindUint64, "uint64", true, "", false, null); +var $Uintptr = $newType( 4, $kindUintptr, "uintptr", true, "", false, null); +var $Float32 = $newType( 4, $kindFloat32, "float32", true, "", false, null); +var $Float64 = $newType( 8, $kindFloat64, "float64", true, "", false, null); +var $Complex64 = $newType( 8, $kindComplex64, "complex64", true, "", false, null); +var $Complex128 = $newType(16, $kindComplex128, "complex128", true, "", false, null); +var $String = $newType( 8, $kindString, "string", true, "", false, null); +var $UnsafePointer = $newType( 4, $kindUnsafePointer, "unsafe.Pointer", true, "unsafe", false, null); + +var $nativeArray = function(elemKind) { + switch (elemKind) { + case $kindInt: + return Int32Array; + case $kindInt8: + return Int8Array; + case $kindInt16: + return Int16Array; + case $kindInt32: + return Int32Array; + case $kindUint: + return Uint32Array; + case $kindUint8: + return Uint8Array; + case $kindUint16: + return Uint16Array; + case $kindUint32: + return Uint32Array; + case $kindUintptr: + return Uint32Array; + case $kindFloat32: + return Float32Array; + case $kindFloat64: + return Float64Array; + default: + return Array; + } +}; +var $toNativeArray = function(elemKind, array) { + var nativeArray = $nativeArray(elemKind); + if (nativeArray === Array) { + return array; + } + return new nativeArray(array); +}; +var $arrayTypes = {}; +var $arrayType = function(elem, len) { + var typeKey = elem.id + "$" + len; + var typ = $arrayTypes[typeKey]; + if (typ === undefined) { + typ = $newType(12, $kindArray, "[" + len + "]" + elem.string, false, "", false, null); + $arrayTypes[typeKey] = typ; + typ.init(elem, len); + } + return typ; +}; + +var $chanType = function(elem, sendOnly, recvOnly) { + var string = (recvOnly ? "<-" : "") + "chan" + (sendOnly ? "<- " : " "); + if (!sendOnly && !recvOnly && (elem.string[0] == "<")) { + string += "(" + elem.string + ")"; + } else { + string += elem.string; + } + var field = sendOnly ? "SendChan" : (recvOnly ? "RecvChan" : "Chan"); + var typ = elem[field]; + if (typ === undefined) { + typ = $newType(4, $kindChan, string, false, "", false, null); + elem[field] = typ; + typ.init(elem, sendOnly, recvOnly); + } + return typ; +}; +var $Chan = function(elem, capacity) { + if (capacity < 0 || capacity > 2147483647) { + $throwRuntimeError("makechan: size out of range"); + } + this.$elem = elem; + this.$capacity = capacity; + this.$buffer = []; + this.$sendQueue = []; + this.$recvQueue = []; + this.$closed = false; +}; +var $chanNil = new $Chan(null, 0); +$chanNil.$sendQueue = $chanNil.$recvQueue = { length: 0, push: function() {}, shift: function() { return undefined; }, indexOf: function() { return -1; } }; + +var $funcTypes = {}; +var $funcType = function(params, results, variadic) { + var typeKey = $mapArray(params, function(p) { return p.id; }).join(",") + "$" + $mapArray(results, function(r) { return r.id; }).join(",") + "$" + variadic; + var typ = $funcTypes[typeKey]; + if (typ === undefined) { + var paramTypes = $mapArray(params, function(p) { return p.string; }); + if (variadic) { + paramTypes[paramTypes.length - 1] = "..." + paramTypes[paramTypes.length - 1].substr(2); + } + var string = "func(" + paramTypes.join(", ") + ")"; + if (results.length === 1) { + string += " " + results[0].string; + } else if (results.length > 1) { + string += " (" + $mapArray(results, function(r) { return r.string; }).join(", ") + ")"; + } + typ = $newType(4, $kindFunc, string, false, "", false, null); + $funcTypes[typeKey] = typ; + typ.init(params, results, variadic); + } + return typ; +}; + +var $interfaceTypes = {}; +var $interfaceType = function(methods) { + var typeKey = $mapArray(methods, function(m) { return m.pkg + "," + m.name + "," + m.typ.id; }).join("$"); + var typ = $interfaceTypes[typeKey]; + if (typ === undefined) { + var string = "interface {}"; + if (methods.length !== 0) { + string = "interface { " + $mapArray(methods, function(m) { + return (m.pkg !== "" ? m.pkg + "." : "") + m.name + m.typ.string.substr(4); + }).join("; ") + " }"; + } + typ = $newType(8, $kindInterface, string, false, "", false, null); + $interfaceTypes[typeKey] = typ; + typ.init(methods); + } + return typ; +}; +var $emptyInterface = $interfaceType([]); +var $ifaceNil = {}; +var $error = $newType(8, $kindInterface, "error", true, "", false, null); +$error.init([{prop: "Error", name: "Error", pkg: "", typ: $funcType([], [$String], false)}]); + +var $mapTypes = {}; +var $mapType = function(key, elem) { + var typeKey = key.id + "$" + elem.id; + var typ = $mapTypes[typeKey]; + if (typ === undefined) { + typ = $newType(4, $kindMap, "map[" + key.string + "]" + elem.string, false, "", false, null); + $mapTypes[typeKey] = typ; + typ.init(key, elem); + } + return typ; +}; +var $makeMap = function(keyForFunc, entries) { + var m = {}; + for (var i = 0; i < entries.length; i++) { + var e = entries[i]; + m[keyForFunc(e.k)] = e; + } + return m; +}; + +var $ptrType = function(elem) { + var typ = elem.ptr; + if (typ === undefined) { + typ = $newType(4, $kindPtr, "*" + elem.string, false, "", elem.exported, null); + elem.ptr = typ; + typ.init(elem); + } + return typ; +}; + +var $newDataPointer = function(data, constructor) { + if (constructor.elem.kind === $kindStruct) { + return data; + } + return new constructor(function() { return data; }, function(v) { data = v; }); +}; + +var $indexPtr = function(array, index, constructor) { + if (array.buffer) { + // Pointers to the same underlying ArrayBuffer share cache. + var cache = array.buffer.$ptr = array.buffer.$ptr || {}; + // Pointers of different primitive types are non-comparable and stored in different caches. + var typeCache = cache[array.name] = cache[array.name] || {}; + var cacheIdx = array.BYTES_PER_ELEMENT * index + array.byteOffset; + return typeCache[cacheIdx] || (typeCache[cacheIdx] = new constructor(function() { return array[index]; }, function(v) { array[index] = v; })); + } else { + array.$ptr = array.$ptr || {}; + return array.$ptr[index] || (array.$ptr[index] = new constructor(function() { return array[index]; }, function(v) { array[index] = v; })); + } +}; + +var $sliceType = function(elem) { + var typ = elem.slice; + if (typ === undefined) { + typ = $newType(12, $kindSlice, "[]" + elem.string, false, "", false, null); + elem.slice = typ; + typ.init(elem); + } + return typ; +}; +var $makeSlice = function(typ, length, capacity) { + capacity = capacity || length; + if (length < 0 || length > 2147483647) { + $throwRuntimeError("makeslice: len out of range"); + } + if (capacity < 0 || capacity < length || capacity > 2147483647) { + $throwRuntimeError("makeslice: cap out of range"); + } + var array = new typ.nativeArray(capacity); + if (typ.nativeArray === Array) { + for (var i = 0; i < capacity; i++) { + array[i] = typ.elem.zero(); + } + } + var slice = new typ(array); + slice.$length = length; + return slice; +}; + +var $structTypes = {}; +var $structType = function(pkgPath, fields) { + var typeKey = $mapArray(fields, function(f) { return f.name + "," + f.typ.id + "," + f.tag; }).join("$"); + var typ = $structTypes[typeKey]; + if (typ === undefined) { + var string = "struct { " + $mapArray(fields, function(f) { + var str = f.typ.string + (f.tag !== "" ? (" \"" + f.tag.replace(/\\/g, "\\\\").replace(/"/g, "\\\"") + "\"") : ""); + if (f.embedded) { + return str; + } + return f.name + " " + str; + }).join("; ") + " }"; + if (fields.length === 0) { + string = "struct {}"; + } + typ = $newType(0, $kindStruct, string, false, "", false, function() { + this.$val = this; + for (var i = 0; i < fields.length; i++) { + var f = fields[i]; + if (f.name == '_') { + continue; + } + var arg = arguments[i]; + this[f.prop] = arg !== undefined ? arg : f.typ.zero(); + } + }); + $structTypes[typeKey] = typ; + typ.init(pkgPath, fields); + } + return typ; +}; + +var $assertType = function(value, type, returnTuple) { + var isInterface = (type.kind === $kindInterface), ok, missingMethod = ""; + if (value === $ifaceNil) { + ok = false; + } else if (!isInterface) { + ok = value.constructor === type; + } else { + var valueTypeString = value.constructor.string; + ok = type.implementedBy[valueTypeString]; + if (ok === undefined) { + ok = true; + var valueMethodSet = $methodSet(value.constructor); + var interfaceMethods = type.methods; + for (var i = 0; i < interfaceMethods.length; i++) { + var tm = interfaceMethods[i]; + var found = false; + for (var j = 0; j < valueMethodSet.length; j++) { + var vm = valueMethodSet[j]; + if (vm.name === tm.name && vm.pkg === tm.pkg && vm.typ === tm.typ) { + found = true; + break; + } + } + if (!found) { + ok = false; + type.missingMethodFor[valueTypeString] = tm.name; + break; + } + } + type.implementedBy[valueTypeString] = ok; + } + if (!ok) { + missingMethod = type.missingMethodFor[valueTypeString]; + } + } + + if (!ok) { + if (returnTuple) { + return [type.zero(), false]; + } + $panic(new $packages["runtime"].TypeAssertionError.ptr( + $packages["runtime"]._type.ptr.nil, + (value === $ifaceNil ? $packages["runtime"]._type.ptr.nil : new $packages["runtime"]._type.ptr(value.constructor.string)), + new $packages["runtime"]._type.ptr(type.string), + missingMethod)); + } + + if (!isInterface) { + value = value.$val; + } + if (type === $jsObjectPtr) { + value = value.object; + } + return returnTuple ? [value, true] : value; +}; + +var $stackDepthOffset = 0; +var $getStackDepth = function() { + var err = new Error(); + if (err.stack === undefined) { + return undefined; + } + return $stackDepthOffset + err.stack.split("\n").length; +}; + +var $panicStackDepth = null, $panicValue; +var $callDeferred = function(deferred, jsErr, fromPanic) { + if (!fromPanic && deferred !== null && $curGoroutine.deferStack.indexOf(deferred) == -1) { + throw jsErr; + } + if (jsErr !== null) { + var newErr = null; + try { + $panic(new $jsErrorPtr(jsErr)); + } catch (err) { + newErr = err; + } + $callDeferred(deferred, newErr); + return; + } + if ($curGoroutine.asleep) { + return; + } + + $stackDepthOffset--; + var outerPanicStackDepth = $panicStackDepth; + var outerPanicValue = $panicValue; + + var localPanicValue = $curGoroutine.panicStack.pop(); + if (localPanicValue !== undefined) { + $panicStackDepth = $getStackDepth(); + $panicValue = localPanicValue; + } + + try { + while (true) { + if (deferred === null) { + deferred = $curGoroutine.deferStack[$curGoroutine.deferStack.length - 1]; + if (deferred === undefined) { + /* The panic reached the top of the stack. Clear it and throw it as a JavaScript error. */ + $panicStackDepth = null; + if (localPanicValue.Object instanceof Error) { + throw localPanicValue.Object; + } + var msg; + if (localPanicValue.constructor === $String) { + msg = localPanicValue.$val; + } else if (localPanicValue.Error !== undefined) { + msg = localPanicValue.Error(); + } else if (localPanicValue.String !== undefined) { + msg = localPanicValue.String(); + } else { + msg = localPanicValue; + } + throw new Error(msg); + } + } + var call = deferred.pop(); + if (call === undefined) { + $curGoroutine.deferStack.pop(); + if (localPanicValue !== undefined) { + deferred = null; + continue; + } + return; + } + var r = call[0].apply(call[2], call[1]); + if (r && r.$blk !== undefined) { + deferred.push([r.$blk, [], r]); + if (fromPanic) { + throw null; + } + return; + } + + if (localPanicValue !== undefined && $panicStackDepth === null) { + /* error was recovered */ + if (fromPanic) { + throw null; + } + return; + } + } + } catch(e) { + // Deferred function threw a JavaScript exception or tries to unwind stack + // to the point where a panic was handled. + if (fromPanic) { + // Re-throw the exception to reach deferral execution call at the end + // of the function. + throw e; + } + // We are at the end of the function, handle the error or re-throw to + // continue unwinding if necessary, or simply stop unwinding if we got far + // enough. + $callDeferred(deferred, e, fromPanic); + } finally { + if (localPanicValue !== undefined) { + if ($panicStackDepth !== null) { + $curGoroutine.panicStack.push(localPanicValue); + } + $panicStackDepth = outerPanicStackDepth; + $panicValue = outerPanicValue; + } + $stackDepthOffset++; + } +}; + +var $panic = function(value) { + $curGoroutine.panicStack.push(value); + $callDeferred(null, null, true); +}; +var $recover = function() { + if ($panicStackDepth === null || ($panicStackDepth !== undefined && $panicStackDepth !== $getStackDepth() - 2)) { + return $ifaceNil; + } + $panicStackDepth = null; + return $panicValue; +}; +var $throw = function(err) { throw err; }; + +var $noGoroutine = { asleep: false, exit: false, deferStack: [], panicStack: [] }; +var $curGoroutine = $noGoroutine, $totalGoroutines = 0, $awakeGoroutines = 0, $checkForDeadlock = true, $exportedFunctions = 0; +var $mainFinished = false; +var $go = function(fun, args) { + $totalGoroutines++; + $awakeGoroutines++; + var $goroutine = function() { + try { + $curGoroutine = $goroutine; + var r = fun.apply(undefined, args); + if (r && r.$blk !== undefined) { + fun = function() { return r.$blk(); }; + args = []; + return; + } + $goroutine.exit = true; + } catch (err) { + if (!$goroutine.exit) { + throw err; + } + } finally { + $curGoroutine = $noGoroutine; + if ($goroutine.exit) { /* also set by runtime.Goexit() */ + $totalGoroutines--; + $goroutine.asleep = true; + } + if ($goroutine.asleep) { + $awakeGoroutines--; + if (!$mainFinished && $awakeGoroutines === 0 && $checkForDeadlock && $exportedFunctions === 0) { + console.error("fatal error: all goroutines are asleep - deadlock!"); + if ($global.process !== undefined) { + $global.process.exit(2); + } + } + } + } + }; + $goroutine.asleep = false; + $goroutine.exit = false; + $goroutine.deferStack = []; + $goroutine.panicStack = []; + $schedule($goroutine); +}; + +var $scheduled = []; +var $runScheduled = function() { + // For nested setTimeout calls browsers enforce 4ms minimum delay. We minimize + // the effect of this penalty by queueing the timer preemptively before we run + // the goroutines, and later cancelling it if it turns out unneeded. See: + // https://developer.mozilla.org/en-US/docs/Web/API/setTimeout#nested_timeouts + var nextRun = setTimeout($runScheduled); + try { + var start = Date.now(); + var r; + while ((r = $scheduled.shift()) !== undefined) { + r(); + // We need to interrupt this loop in order to allow the event loop to + // process timers, IO, etc. However, invoking scheduling through + // setTimeout is ~1000 times more expensive, so we amortize this cost by + // looping until the 4ms minimal delay has elapsed (assuming there are + // scheduled goroutines to run), and then yield to the event loop. + var elapsed = Date.now() - start; + if (elapsed > 4 || elapsed < 0) { break; } + } + } finally { + if ($scheduled.length == 0) { + // Cancel scheduling pass if there's nothing to run. + clearTimeout(nextRun); + } + } +}; + +var $schedule = function(goroutine) { + if (goroutine.asleep) { + goroutine.asleep = false; + $awakeGoroutines++; + } + $scheduled.push(goroutine); + if ($curGoroutine === $noGoroutine) { + $runScheduled(); + } +}; + +var $setTimeout = function(f, t) { + $awakeGoroutines++; + return setTimeout(function() { + $awakeGoroutines--; + f(); + }, t); +}; + +var $block = function() { + if ($curGoroutine === $noGoroutine) { + $throwRuntimeError("cannot block in JavaScript callback, fix by wrapping code in goroutine"); + } + $curGoroutine.asleep = true; +}; + +var $restore = function(context, params) { + if (context !== undefined && context.$blk !== undefined) { + return context; + } + return params; +} + +var $send = function(chan, value) { + if (chan.$closed) { + $throwRuntimeError("send on closed channel"); + } + var queuedRecv = chan.$recvQueue.shift(); + if (queuedRecv !== undefined) { + queuedRecv([value, true]); + return; + } + if (chan.$buffer.length < chan.$capacity) { + chan.$buffer.push(value); + return; + } + + var thisGoroutine = $curGoroutine; + var closedDuringSend; + chan.$sendQueue.push(function(closed) { + closedDuringSend = closed; + $schedule(thisGoroutine); + return value; + }); + $block(); + return { + $blk: function() { + if (closedDuringSend) { + $throwRuntimeError("send on closed channel"); + } + } + }; +}; +var $recv = function(chan) { + var queuedSend = chan.$sendQueue.shift(); + if (queuedSend !== undefined) { + chan.$buffer.push(queuedSend(false)); + } + var bufferedValue = chan.$buffer.shift(); + if (bufferedValue !== undefined) { + return [bufferedValue, true]; + } + if (chan.$closed) { + return [chan.$elem.zero(), false]; + } + + var thisGoroutine = $curGoroutine; + var f = { $blk: function() { return this.value; } }; + var queueEntry = function(v) { + f.value = v; + $schedule(thisGoroutine); + }; + chan.$recvQueue.push(queueEntry); + $block(); + return f; +}; +var $close = function(chan) { + if (chan.$closed) { + $throwRuntimeError("close of closed channel"); + } + chan.$closed = true; + while (true) { + var queuedSend = chan.$sendQueue.shift(); + if (queuedSend === undefined) { + break; + } + queuedSend(true); /* will panic */ + } + while (true) { + var queuedRecv = chan.$recvQueue.shift(); + if (queuedRecv === undefined) { + break; + } + queuedRecv([chan.$elem.zero(), false]); + } +}; +var $select = function(comms) { + var ready = []; + var selection = -1; + for (var i = 0; i < comms.length; i++) { + var comm = comms[i]; + var chan = comm[0]; + switch (comm.length) { + case 0: /* default */ + selection = i; + break; + case 1: /* recv */ + if (chan.$sendQueue.length !== 0 || chan.$buffer.length !== 0 || chan.$closed) { + ready.push(i); + } + break; + case 2: /* send */ + if (chan.$closed) { + $throwRuntimeError("send on closed channel"); + } + if (chan.$recvQueue.length !== 0 || chan.$buffer.length < chan.$capacity) { + ready.push(i); + } + break; + } + } + + if (ready.length !== 0) { + selection = ready[Math.floor(Math.random() * ready.length)]; + } + if (selection !== -1) { + var comm = comms[selection]; + switch (comm.length) { + case 0: /* default */ + return [selection]; + case 1: /* recv */ + return [selection, $recv(comm[0])]; + case 2: /* send */ + $send(comm[0], comm[1]); + return [selection]; + } + } + + var entries = []; + var thisGoroutine = $curGoroutine; + var f = { $blk: function() { return this.selection; } }; + var removeFromQueues = function() { + for (var i = 0; i < entries.length; i++) { + var entry = entries[i]; + var queue = entry[0]; + var index = queue.indexOf(entry[1]); + if (index !== -1) { + queue.splice(index, 1); + } + } + }; + for (var i = 0; i < comms.length; i++) { + (function(i) { + var comm = comms[i]; + switch (comm.length) { + case 1: /* recv */ + var queueEntry = function(value) { + f.selection = [i, value]; + removeFromQueues(); + $schedule(thisGoroutine); + }; + entries.push([comm[0].$recvQueue, queueEntry]); + comm[0].$recvQueue.push(queueEntry); + break; + case 2: /* send */ + var queueEntry = function() { + if (comm[0].$closed) { + $throwRuntimeError("send on closed channel"); + } + f.selection = [i]; + removeFromQueues(); + $schedule(thisGoroutine); + return comm[1]; + }; + entries.push([comm[0].$sendQueue, queueEntry]); + comm[0].$sendQueue.push(queueEntry); + break; + } + })(i); + } + $block(); + return f; +}; + +var $jsObjectPtr, $jsErrorPtr; + +var $needsExternalization = function(t) { + switch (t.kind) { + case $kindBool: + case $kindInt: + case $kindInt8: + case $kindInt16: + case $kindInt32: + case $kindUint: + case $kindUint8: + case $kindUint16: + case $kindUint32: + case $kindUintptr: + case $kindFloat32: + case $kindFloat64: + return false; + default: + return t !== $jsObjectPtr; + } +}; + +var $externalize = function(v, t, makeWrapper) { + if (t === $jsObjectPtr) { + return v; + } + switch (t.kind) { + case $kindBool: + case $kindInt: + case $kindInt8: + case $kindInt16: + case $kindInt32: + case $kindUint: + case $kindUint8: + case $kindUint16: + case $kindUint32: + case $kindUintptr: + case $kindFloat32: + case $kindFloat64: + return v; + case $kindInt64: + case $kindUint64: + return $flatten64(v); + case $kindArray: + if ($needsExternalization(t.elem)) { + return $mapArray(v, function(e) { return $externalize(e, t.elem, makeWrapper); }); + } + return v; + case $kindFunc: + return $externalizeFunction(v, t, false, makeWrapper); + case $kindInterface: + if (v === $ifaceNil) { + return null; + } + if (v.constructor === $jsObjectPtr) { + return v.$val.object; + } + return $externalize(v.$val, v.constructor, makeWrapper); + case $kindMap: + var m = {}; + var keys = $keys(v); + for (var i = 0; i < keys.length; i++) { + var entry = v[keys[i]]; + m[$externalize(entry.k, t.key, makeWrapper)] = $externalize(entry.v, t.elem, makeWrapper); + } + return m; + case $kindPtr: + if (v === t.nil) { + return null; + } + return $externalize(v.$get(), t.elem, makeWrapper); + case $kindSlice: + if ($needsExternalization(t.elem)) { + return $mapArray($sliceToNativeArray(v), function(e) { return $externalize(e, t.elem, makeWrapper); }); + } + return $sliceToNativeArray(v); + case $kindString: + if ($isASCII(v)) { + return v; + } + var s = "", r; + for (var i = 0; i < v.length; i += r[1]) { + r = $decodeRune(v, i); + var c = r[0]; + if (c > 0xFFFF) { + var h = Math.floor((c - 0x10000) / 0x400) + 0xD800; + var l = (c - 0x10000) % 0x400 + 0xDC00; + s += String.fromCharCode(h, l); + continue; + } + s += String.fromCharCode(c); + } + return s; + case $kindStruct: + var timePkg = $packages["time"]; + if (timePkg !== undefined && v.constructor === timePkg.Time.ptr) { + var milli = $div64(v.UnixNano(), new $Int64(0, 1000000)); + return new Date($flatten64(milli)); + } + + var noJsObject = {}; + var searchJsObject = function(v, t) { + if (t === $jsObjectPtr) { + return v; + } + switch (t.kind) { + case $kindPtr: + if (v === t.nil) { + return noJsObject; + } + return searchJsObject(v.$get(), t.elem); + case $kindStruct: + var f = t.fields[0]; + return searchJsObject(v[f.prop], f.typ); + case $kindInterface: + return searchJsObject(v.$val, v.constructor); + default: + return noJsObject; + } + }; + var o = searchJsObject(v, t); + if (o !== noJsObject) { + return o; + } + + if (makeWrapper !== undefined) { + return makeWrapper(v); + } + + o = {}; + for (var i = 0; i < t.fields.length; i++) { + var f = t.fields[i]; + if (!f.exported) { + continue; + } + o[f.name] = $externalize(v[f.prop], f.typ, makeWrapper); + } + return o; + } + $throwRuntimeError("cannot externalize " + t.string); +}; + +var $externalizeFunction = function(v, t, passThis, makeWrapper) { + if (v === $throwNilPointerError) { + return null; + } + if (v.$externalizeWrapper === undefined) { + $checkForDeadlock = false; + v.$externalizeWrapper = function() { + var args = []; + for (var i = 0; i < t.params.length; i++) { + if (t.variadic && i === t.params.length - 1) { + var vt = t.params[i].elem, varargs = []; + for (var j = i; j < arguments.length; j++) { + varargs.push($internalize(arguments[j], vt, makeWrapper)); + } + args.push(new (t.params[i])(varargs)); + break; + } + args.push($internalize(arguments[i], t.params[i], makeWrapper)); + } + var result = v.apply(passThis ? this : undefined, args); + switch (t.results.length) { + case 0: + return; + case 1: + return $externalize($copyIfRequired(result, t.results[0]), t.results[0], makeWrapper); + default: + for (var i = 0; i < t.results.length; i++) { + result[i] = $externalize($copyIfRequired(result[i], t.results[i]), t.results[i], makeWrapper); + } + return result; + } + }; + } + return v.$externalizeWrapper; +}; + +var $internalize = function(v, t, recv, seen, makeWrapper) { + if (t === $jsObjectPtr) { + return v; + } + if (t === $jsObjectPtr.elem) { + $throwRuntimeError("cannot internalize js.Object, use *js.Object instead"); + } + if (v && v.__internal_object__ !== undefined) { + return $assertType(v.__internal_object__, t, false); + } + var timePkg = $packages["time"]; + if (timePkg !== undefined && t === timePkg.Time) { + if (!(v !== null && v !== undefined && v.constructor === Date)) { + $throwRuntimeError("cannot internalize time.Time from " + typeof v + ", must be Date"); + } + return timePkg.Unix(new $Int64(0, 0), new $Int64(0, v.getTime() * 1000000)); + } + + // Cache for values we've already internalized in order to deal with circular + // references. + if (seen === undefined) { seen = new Map(); } + if (!seen.has(t)) { seen.set(t, new Map()); } + if (seen.get(t).has(v)) { return seen.get(t).get(v); } + + switch (t.kind) { + case $kindBool: + return !!v; + case $kindInt: + return parseInt(v); + case $kindInt8: + return parseInt(v) << 24 >> 24; + case $kindInt16: + return parseInt(v) << 16 >> 16; + case $kindInt32: + return parseInt(v) >> 0; + case $kindUint: + return parseInt(v); + case $kindUint8: + return parseInt(v) << 24 >>> 24; + case $kindUint16: + return parseInt(v) << 16 >>> 16; + case $kindUint32: + case $kindUintptr: + return parseInt(v) >>> 0; + case $kindInt64: + case $kindUint64: + return new t(0, v); + case $kindFloat32: + case $kindFloat64: + return parseFloat(v); + case $kindArray: + if (v.length !== t.len) { + $throwRuntimeError("got array with wrong size from JavaScript native"); + } + return $mapArray(v, function(e) { return $internalize(e, t.elem, makeWrapper); }); + case $kindFunc: + return function() { + var args = []; + for (var i = 0; i < t.params.length; i++) { + if (t.variadic && i === t.params.length - 1) { + var vt = t.params[i].elem, varargs = arguments[i]; + for (var j = 0; j < varargs.$length; j++) { + args.push($externalize(varargs.$array[varargs.$offset + j], vt, makeWrapper)); + } + break; + } + args.push($externalize(arguments[i], t.params[i], makeWrapper)); + } + var result = v.apply(recv, args); + switch (t.results.length) { + case 0: + return; + case 1: + return $internalize(result, t.results[0], makeWrapper); + default: + for (var i = 0; i < t.results.length; i++) { + result[i] = $internalize(result[i], t.results[i], makeWrapper); + } + return result; + } + }; + case $kindInterface: + if (t.methods.length !== 0) { + $throwRuntimeError("cannot internalize " + t.string); + } + if (v === null) { + return $ifaceNil; + } + if (v === undefined) { + return new $jsObjectPtr(undefined); + } + switch (v.constructor) { + case Int8Array: + return new ($sliceType($Int8))(v); + case Int16Array: + return new ($sliceType($Int16))(v); + case Int32Array: + return new ($sliceType($Int))(v); + case Uint8Array: + return new ($sliceType($Uint8))(v); + case Uint16Array: + return new ($sliceType($Uint16))(v); + case Uint32Array: + return new ($sliceType($Uint))(v); + case Float32Array: + return new ($sliceType($Float32))(v); + case Float64Array: + return new ($sliceType($Float64))(v); + case Array: + return $internalize(v, $sliceType($emptyInterface), makeWrapper); + case Boolean: + return new $Bool(!!v); + case Date: + if (timePkg === undefined) { + /* time package is not present, internalize as &js.Object{Date} so it can be externalized into original Date. */ + return new $jsObjectPtr(v); + } + return new timePkg.Time($internalize(v, timePkg.Time, makeWrapper)); + case (function () { }).constructor: // is usually Function, but in Chrome extensions it is something else + var funcType = $funcType([$sliceType($emptyInterface)], [$jsObjectPtr], true); + return new funcType($internalize(v, funcType, makeWrapper)); + case Number: + return new $Float64(parseFloat(v)); + case String: + return new $String($internalize(v, $String, makeWrapper)); + default: + if ($global.Node && v instanceof $global.Node) { + return new $jsObjectPtr(v); + } + var mapType = $mapType($String, $emptyInterface); + return new mapType($internalize(v, mapType, recv, seen, makeWrapper)); + } + case $kindMap: + var m = {}; + seen.get(t).set(v, m); + var keys = $keys(v); + for (var i = 0; i < keys.length; i++) { + var k = $internalize(keys[i], t.key, recv, seen, makeWrapper); + m[t.key.keyFor(k)] = { k: k, v: $internalize(v[keys[i]], t.elem, recv, seen, makeWrapper) }; + } + return m; + case $kindPtr: + if (t.elem.kind === $kindStruct) { + return $internalize(v, t.elem, makeWrapper); + } + case $kindSlice: + return new t($mapArray(v, function(e) { return $internalize(e, t.elem, makeWrapper); })); + case $kindString: + v = String(v); + if ($isASCII(v)) { + return v; + } + var s = ""; + var i = 0; + while (i < v.length) { + var h = v.charCodeAt(i); + if (0xD800 <= h && h <= 0xDBFF) { + var l = v.charCodeAt(i + 1); + var c = (h - 0xD800) * 0x400 + l - 0xDC00 + 0x10000; + s += $encodeRune(c); + i += 2; + continue; + } + s += $encodeRune(h); + i++; + } + return s; + case $kindStruct: + var noJsObject = {}; + var searchJsObject = function(t) { + if (t === $jsObjectPtr) { + return v; + } + if (t === $jsObjectPtr.elem) { + $throwRuntimeError("cannot internalize js.Object, use *js.Object instead"); + } + switch (t.kind) { + case $kindPtr: + return searchJsObject(t.elem); + case $kindStruct: + var f = t.fields[0]; + var o = searchJsObject(f.typ); + if (o !== noJsObject) { + var n = new t.ptr(); + n[f.prop] = o; + return n; + } + return noJsObject; + default: + return noJsObject; + } + }; + var o = searchJsObject(t); + if (o !== noJsObject) { + return o; + } + } + $throwRuntimeError("cannot internalize " + t.string); +}; + +var $copyIfRequired = function(v, typ) { + // interface values + if (v && v.constructor && v.constructor.copy) { + return new v.constructor($clone(v.$val, v.constructor)) + } + // array and struct values + if (typ.copy) { + var clone = typ.zero(); + typ.copy(clone, v); + return clone; + } + return v; +} + +/* $isASCII reports whether string s contains only ASCII characters. */ +var $isASCII = function(s) { + for (var i = 0; i < s.length; i++) { + if (s.charCodeAt(i) >= 128) { + return false; + } + } + return true; +}; + +$packages["github.com/gopherjs/gopherjs/js"] = (function() { + var $pkg = {}, $init, Object, Error, M, sliceType, ptrType, sliceType$2, funcType, funcType$1, funcType$2, ptrType$1, MakeWrapper, MakeFullWrapper, init; + Object = $pkg.Object = $newType(0, $kindStruct, "js.Object", true, "github.com/gopherjs/gopherjs/js", true, function(object_) { + this.$val = this; + if (arguments.length === 0) { + this.object = null; + return; + } + this.object = object_; + }); + Error = $pkg.Error = $newType(0, $kindStruct, "js.Error", true, "github.com/gopherjs/gopherjs/js", true, function(Object_) { + this.$val = this; + if (arguments.length === 0) { + this.Object = null; + return; + } + this.Object = Object_; + }); + M = $pkg.M = $newType(4, $kindMap, "js.M", true, "github.com/gopherjs/gopherjs/js", true, null); + sliceType = $sliceType($emptyInterface); + ptrType = $ptrType(Object); + sliceType$2 = $sliceType(ptrType); + funcType = $funcType([sliceType$2], [ptrType], true); + funcType$1 = $funcType([], [ptrType], false); + funcType$2 = $funcType([ptrType], [], false); + ptrType$1 = $ptrType(Error); + Object.ptr.prototype.Get = function(key) { + var key, o; + o = this; + return o.object[$externalize(key, $String)]; + }; + Object.prototype.Get = function(key) { return this.$val.Get(key); }; + Object.ptr.prototype.Set = function(key, value) { + var key, o, value; + o = this; + o.object[$externalize(key, $String)] = $externalize(value, $emptyInterface); + }; + Object.prototype.Set = function(key, value) { return this.$val.Set(key, value); }; + Object.ptr.prototype.Delete = function(key) { + var key, o; + o = this; + delete o.object[$externalize(key, $String)]; + }; + Object.prototype.Delete = function(key) { return this.$val.Delete(key); }; + Object.ptr.prototype.Length = function() { + var o; + o = this; + return $parseInt(o.object.length); + }; + Object.prototype.Length = function() { return this.$val.Length(); }; + Object.ptr.prototype.Index = function(i) { + var i, o; + o = this; + return o.object[i]; + }; + Object.prototype.Index = function(i) { return this.$val.Index(i); }; + Object.ptr.prototype.SetIndex = function(i, value) { + var i, o, value; + o = this; + o.object[i] = $externalize(value, $emptyInterface); + }; + Object.prototype.SetIndex = function(i, value) { return this.$val.SetIndex(i, value); }; + Object.ptr.prototype.Call = function(name, args) { + var args, name, o, obj; + o = this; + return (obj = o.object, obj[$externalize(name, $String)].apply(obj, $externalize(args, sliceType))); + }; + Object.prototype.Call = function(name, args) { return this.$val.Call(name, args); }; + Object.ptr.prototype.Invoke = function(args) { + var args, o; + o = this; + return o.object.apply(undefined, $externalize(args, sliceType)); + }; + Object.prototype.Invoke = function(args) { return this.$val.Invoke(args); }; + Object.ptr.prototype.New = function(args) { + var args, o; + o = this; + return new ($global.Function.prototype.bind.apply(o.object, [undefined].concat($externalize(args, sliceType)))); + }; + Object.prototype.New = function(args) { return this.$val.New(args); }; + Object.ptr.prototype.Bool = function() { + var o; + o = this; + return !!(o.object); + }; + Object.prototype.Bool = function() { return this.$val.Bool(); }; + Object.ptr.prototype.String = function() { + var o; + o = this; + return $internalize(o.object, $String); + }; + Object.prototype.String = function() { return this.$val.String(); }; + Object.ptr.prototype.Int = function() { + var o; + o = this; + return $parseInt(o.object) >> 0; + }; + Object.prototype.Int = function() { return this.$val.Int(); }; + Object.ptr.prototype.Int64 = function() { + var o; + o = this; + return $internalize(o.object, $Int64); + }; + Object.prototype.Int64 = function() { return this.$val.Int64(); }; + Object.ptr.prototype.Uint64 = function() { + var o; + o = this; + return $internalize(o.object, $Uint64); + }; + Object.prototype.Uint64 = function() { return this.$val.Uint64(); }; + Object.ptr.prototype.Float = function() { + var o; + o = this; + return $parseFloat(o.object); + }; + Object.prototype.Float = function() { return this.$val.Float(); }; + Object.ptr.prototype.Interface = function() { + var o; + o = this; + return $internalize(o.object, $emptyInterface); + }; + Object.prototype.Interface = function() { return this.$val.Interface(); }; + Object.ptr.prototype.Unsafe = function() { + var o; + o = this; + return o.object; + }; + Object.prototype.Unsafe = function() { return this.$val.Unsafe(); }; + Error.ptr.prototype.Error = function() { + var err; + err = this; + return "JavaScript error: " + $internalize(err.Object.message, $String); + }; + Error.prototype.Error = function() { return this.$val.Error(); }; + Error.ptr.prototype.Stack = function() { + var err; + err = this; + return $internalize(err.Object.stack, $String); + }; + Error.prototype.Stack = function() { return this.$val.Stack(); }; + MakeWrapper = function(i) { + var i, i$1, m, methods, o, v; + v = i; + o = new ($global.Object)(); + o.__internal_object__ = v; + methods = v.constructor.methods; + i$1 = 0; + while (true) { + if (!(i$1 < $parseInt(methods.length))) { break; } + m = [m]; + m[0] = methods[i$1]; + if (!($internalize(m[0].pkg, $String) === "")) { + i$1 = i$1 + (1) >> 0; + continue; + } + o[$externalize($internalize(m[0].name, $String), $String)] = $externalize((function(m) { return function(args) { + var args; + return $externalizeFunction(v[$externalize($internalize(m[0].prop, $String), $String)], m[0].typ, $externalize(true, $Bool)).apply(v, $externalize(args, sliceType$2)); + }; })(m), funcType); + i$1 = i$1 + (1) >> 0; + } + return o; + }; + $pkg.MakeWrapper = MakeWrapper; + MakeFullWrapper = function(i) { + var {constructor, defineProperty, e, f, fields, i, i$1, i$2, i$3, internalObj, m, methods, ms, pkg, pkgTyp, ptr, typ, wrapperObj, $s, $r, $c} = $restore(this, {i}); + /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: + internalObj = [internalObj]; + wrapperObj = [wrapperObj]; + internalObj[0] = i; + constructor = internalObj[0].constructor; + wrapperObj[0] = new ($global.Object)(); + defineProperty = (function(internalObj, wrapperObj) { return function(key, descriptor) { + var descriptor, key; + $global.Object.defineProperty(wrapperObj[0], $externalize(key, $String), $externalize(descriptor, M)); + }; })(internalObj, wrapperObj); + $r = defineProperty("__internal_object__", $makeMap($String.keyFor, [{ k: "value", v: new $jsObjectPtr(internalObj[0]) }])); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + typ = $internalize(constructor.string, $String); + pkg = $internalize(constructor.pkg, $String); + ptr = ""; + if (typ.charCodeAt(0) === 42) { + ptr = "*"; + } + i$1 = 0; + while (true) { + if (!(i$1 < typ.length)) { break; } + if (typ.charCodeAt(i$1) === 46) { + typ = $substring(typ, (i$1 + 1 >> 0)); + break; + } + i$1 = i$1 + (1) >> 0; + } + pkgTyp = pkg + "." + ptr + typ; + $r = defineProperty("$type", $makeMap($String.keyFor, [{ k: "value", v: new $String(pkgTyp) }])); /* */ $s = 2; case 2: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + fields = null; + methods = new ($global.Array)(); + ms = constructor.methods; + if (!(ms === undefined)) { + methods = methods.concat(ms); + } + e = constructor.elem; + if (!(e === undefined)) { + fields = e.fields; + methods = methods.concat(e.methods); + } else { + fields = constructor.fields; + } + i$2 = 0; + /* while (true) { */ case 3: + /* if (!(i$2 < $parseInt(methods.length))) { break; } */ if(!(i$2 < $parseInt(methods.length))) { $s = 4; continue; } + m = [m]; + m[0] = methods[i$2]; + if (!($internalize(m[0].pkg, $String) === "")) { + i$2 = i$2 + (1) >> 0; + /* continue; */ $s = 3; continue; + } + $r = defineProperty($internalize(m[0].prop, $String), $makeMap($String.keyFor, [{ k: "value", v: new funcType((function(internalObj, m, wrapperObj) { return function(args) { + var args; + return $externalizeFunction(internalObj[0][$externalize($internalize(m[0].prop, $String), $String)], m[0].typ, $externalize(true, $Bool), MakeFullWrapper).apply(internalObj[0], $externalize(args, sliceType$2)); + }; })(internalObj, m, wrapperObj)) }])); /* */ $s = 5; case 5: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + i$2 = i$2 + (1) >> 0; + $s = 3; continue; + case 4: + /* */ if (!(fields === undefined)) { $s = 6; continue; } + /* */ $s = 7; continue; + /* if (!(fields === undefined)) { */ case 6: + i$3 = 0; + /* while (true) { */ case 8: + /* if (!(i$3 < $parseInt(fields.length))) { break; } */ if(!(i$3 < $parseInt(fields.length))) { $s = 9; continue; } + f = [f]; + f[0] = fields[i$3]; + if (!!!(f[0].exported)) { + i$3 = i$3 + (1) >> 0; + /* continue; */ $s = 8; continue; + } + $r = defineProperty($internalize(f[0].prop, $String), $makeMap($String.keyFor, [{ k: "get", v: new funcType$1((function(f, internalObj, wrapperObj) { return function() { + var vc; + vc = $copyIfRequired(internalObj[0].$val[$externalize($internalize(f[0].prop, $String), $String)], f[0].typ); + return $externalize(vc, f[0].typ, MakeFullWrapper); + }; })(f, internalObj, wrapperObj)) }, { k: "set", v: new funcType$2((function(f, internalObj, wrapperObj) { return function(jv) { + var gv, jv; + gv = $internalize(jv, f[0].typ, MakeFullWrapper); + internalObj[0].$val[$externalize($internalize(f[0].prop, $String), $String)] = gv; + }; })(f, internalObj, wrapperObj)) }])); /* */ $s = 10; case 10: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + i$3 = i$3 + (1) >> 0; + $s = 8; continue; + case 9: + /* } */ case 7: + $s = -1; return wrapperObj[0]; + /* */ } return; } var $f = {$blk: MakeFullWrapper, $c: true, $r, constructor, defineProperty, e, f, fields, i, i$1, i$2, i$3, internalObj, m, methods, ms, pkg, pkgTyp, ptr, typ, wrapperObj, $s};return $f; + }; + $pkg.MakeFullWrapper = MakeFullWrapper; + init = function() { + var e; + e = new Error.ptr(null); + $unused(e); + }; + ptrType.methods = [{prop: "Get", name: "Get", pkg: "", typ: $funcType([$String], [ptrType], false)}, {prop: "Set", name: "Set", pkg: "", typ: $funcType([$String, $emptyInterface], [], false)}, {prop: "Delete", name: "Delete", pkg: "", typ: $funcType([$String], [], false)}, {prop: "Length", name: "Length", pkg: "", typ: $funcType([], [$Int], false)}, {prop: "Index", name: "Index", pkg: "", typ: $funcType([$Int], [ptrType], false)}, {prop: "SetIndex", name: "SetIndex", pkg: "", typ: $funcType([$Int, $emptyInterface], [], false)}, {prop: "Call", name: "Call", pkg: "", typ: $funcType([$String, sliceType], [ptrType], true)}, {prop: "Invoke", name: "Invoke", pkg: "", typ: $funcType([sliceType], [ptrType], true)}, {prop: "New", name: "New", pkg: "", typ: $funcType([sliceType], [ptrType], true)}, {prop: "Bool", name: "Bool", pkg: "", typ: $funcType([], [$Bool], false)}, {prop: "String", name: "String", pkg: "", typ: $funcType([], [$String], false)}, {prop: "Int", name: "Int", pkg: "", typ: $funcType([], [$Int], false)}, {prop: "Int64", name: "Int64", pkg: "", typ: $funcType([], [$Int64], false)}, {prop: "Uint64", name: "Uint64", pkg: "", typ: $funcType([], [$Uint64], false)}, {prop: "Float", name: "Float", pkg: "", typ: $funcType([], [$Float64], false)}, {prop: "Interface", name: "Interface", pkg: "", typ: $funcType([], [$emptyInterface], false)}, {prop: "Unsafe", name: "Unsafe", pkg: "", typ: $funcType([], [$Uintptr], false)}]; + ptrType$1.methods = [{prop: "Error", name: "Error", pkg: "", typ: $funcType([], [$String], false)}, {prop: "Stack", name: "Stack", pkg: "", typ: $funcType([], [$String], false)}]; + Object.init("github.com/gopherjs/gopherjs/js", [{prop: "object", name: "object", embedded: false, exported: false, typ: ptrType, tag: ""}]); + Error.init("", [{prop: "Object", name: "Object", embedded: true, exported: true, typ: ptrType, tag: ""}]); + M.init($String, $emptyInterface); + $init = function() { + $pkg.$init = function() {}; + /* */ var $f, $c = false, $s = 0, $r; if (this !== undefined && this.$blk !== undefined) { $f = this; $c = true; $s = $f.$s; $r = $f.$r; } s: while (true) { switch ($s) { case 0: + init(); + /* */ } return; } if ($f === undefined) { $f = { $blk: $init }; } $f.$s = $s; $f.$r = $r; return $f; + }; + $pkg.$init = $init; + return $pkg; +})(); +$packages["runtime"] = (function() { + var $pkg = {}, $init, js, _type, TypeAssertionError, errorString, ptrType$1, ptrType$2, buildVersion, init, throw$1; + js = $packages["github.com/gopherjs/gopherjs/js"]; + _type = $pkg._type = $newType(0, $kindStruct, "runtime._type", true, "runtime", false, function(str_) { + this.$val = this; + if (arguments.length === 0) { + this.str = ""; + return; + } + this.str = str_; + }); + TypeAssertionError = $pkg.TypeAssertionError = $newType(0, $kindStruct, "runtime.TypeAssertionError", true, "runtime", true, function(_interface_, concrete_, asserted_, missingMethod_) { + this.$val = this; + if (arguments.length === 0) { + this._interface = ptrType$1.nil; + this.concrete = ptrType$1.nil; + this.asserted = ptrType$1.nil; + this.missingMethod = ""; + return; + } + this._interface = _interface_; + this.concrete = concrete_; + this.asserted = asserted_; + this.missingMethod = missingMethod_; + }); + errorString = $pkg.errorString = $newType(8, $kindString, "runtime.errorString", true, "runtime", false, null); + ptrType$1 = $ptrType(_type); + ptrType$2 = $ptrType(TypeAssertionError); + _type.ptr.prototype.string = function() { + var t; + t = this; + return t.str; + }; + _type.prototype.string = function() { return this.$val.string(); }; + _type.ptr.prototype.pkgpath = function() { + var t; + t = this; + return ""; + }; + _type.prototype.pkgpath = function() { return this.$val.pkgpath(); }; + TypeAssertionError.ptr.prototype.RuntimeError = function() { + }; + TypeAssertionError.prototype.RuntimeError = function() { return this.$val.RuntimeError(); }; + TypeAssertionError.ptr.prototype.Error = function() { + var as, cs, e, inter, msg; + e = this; + inter = "interface"; + if (!(e._interface === ptrType$1.nil)) { + inter = e._interface.string(); + } + as = e.asserted.string(); + if (e.concrete === ptrType$1.nil) { + return "interface conversion: " + inter + " is nil, not " + as; + } + cs = e.concrete.string(); + if (e.missingMethod === "") { + msg = "interface conversion: " + inter + " is " + cs + ", not " + as; + if (cs === as) { + if (!(e.concrete.pkgpath() === e.asserted.pkgpath())) { + msg = msg + (" (types from different packages)"); + } else { + msg = msg + (" (types from different scopes)"); + } + } + return msg; + } + return "interface conversion: " + cs + " is not " + as + ": missing method " + e.missingMethod; + }; + TypeAssertionError.prototype.Error = function() { return this.$val.Error(); }; + init = function() { + var e, jsPkg; + jsPkg = $packages[$externalize("github.com/gopherjs/gopherjs/js", $String)]; + $jsObjectPtr = jsPkg.Object.ptr; + $jsErrorPtr = jsPkg.Error.ptr; + $throwRuntimeError = throw$1; + buildVersion = $internalize($goVersion, $String); + e = $ifaceNil; + e = new TypeAssertionError.ptr(ptrType$1.nil, ptrType$1.nil, ptrType$1.nil, ""); + $unused(e); + }; + errorString.prototype.RuntimeError = function() { + var e; + e = this.$val; + }; + $ptrType(errorString).prototype.RuntimeError = function() { return new errorString(this.$get()).RuntimeError(); }; + errorString.prototype.Error = function() { + var e; + e = this.$val; + return "runtime error: " + (e); + }; + $ptrType(errorString).prototype.Error = function() { return new errorString(this.$get()).Error(); }; + throw$1 = function(s) { + var s; + $panic(new errorString((s))); + }; + ptrType$1.methods = [{prop: "string", name: "string", pkg: "runtime", typ: $funcType([], [$String], false)}, {prop: "pkgpath", name: "pkgpath", pkg: "runtime", typ: $funcType([], [$String], false)}]; + ptrType$2.methods = [{prop: "RuntimeError", name: "RuntimeError", pkg: "", typ: $funcType([], [], false)}, {prop: "Error", name: "Error", pkg: "", typ: $funcType([], [$String], false)}]; + errorString.methods = [{prop: "RuntimeError", name: "RuntimeError", pkg: "", typ: $funcType([], [], false)}, {prop: "Error", name: "Error", pkg: "", typ: $funcType([], [$String], false)}]; + _type.init("runtime", [{prop: "str", name: "str", embedded: false, exported: false, typ: $String, tag: ""}]); + TypeAssertionError.init("runtime", [{prop: "_interface", name: "_interface", embedded: false, exported: false, typ: ptrType$1, tag: ""}, {prop: "concrete", name: "concrete", embedded: false, exported: false, typ: ptrType$1, tag: ""}, {prop: "asserted", name: "asserted", embedded: false, exported: false, typ: ptrType$1, tag: ""}, {prop: "missingMethod", name: "missingMethod", embedded: false, exported: false, typ: $String, tag: ""}]); + $init = function() { + $pkg.$init = function() {}; + /* */ var $f, $c = false, $s = 0, $r; if (this !== undefined && this.$blk !== undefined) { $f = this; $c = true; $s = $f.$s; $r = $f.$r; } s: while (true) { switch ($s) { case 0: + $r = js.$init(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + buildVersion = ""; + init(); + /* */ } return; } if ($f === undefined) { $f = { $blk: $init }; } $f.$s = $s; $f.$r = $r; return $f; + }; + $pkg.$init = $init; + return $pkg; +})(); +$packages["math/bits"] = (function() { + var $pkg = {}, $init; + $init = function() { + $pkg.$init = function() {}; + /* */ var $f, $c = false, $s = 0, $r; if (this !== undefined && this.$blk !== undefined) { $f = this; $c = true; $s = $f.$s; $r = $f.$r; } s: while (true) { switch ($s) { case 0: + /* */ } return; } if ($f === undefined) { $f = { $blk: $init }; } $f.$s = $s; $f.$r = $r; return $f; + }; + $pkg.$init = $init; + return $pkg; +})(); +$packages["math"] = (function() { + var $pkg = {}, $init, js, bits, arrayType, arrayType$1, arrayType$2, structType, math, _zero, posInf, negInf, nan, buf, max, min, Abs, Cos, Floor, Inf, IsInf, IsNaN, Max, Min, NaN, Pow, Signbit, Sin, Sqrt, init, Float64bits, Float64frombits; + js = $packages["github.com/gopherjs/gopherjs/js"]; + bits = $packages["math/bits"]; + arrayType = $arrayType($Uint32, 2); + arrayType$1 = $arrayType($Float32, 2); + arrayType$2 = $arrayType($Float64, 1); + structType = $structType("math", [{prop: "uint32array", name: "uint32array", embedded: false, exported: false, typ: arrayType, tag: ""}, {prop: "float32array", name: "float32array", embedded: false, exported: false, typ: arrayType$1, tag: ""}, {prop: "float64array", name: "float64array", embedded: false, exported: false, typ: arrayType$2, tag: ""}]); + max = function(x, y) { + var x, y; + if (IsInf(x, 1) || IsInf(y, 1)) { + return Inf(1); + } else if (IsNaN(x) || IsNaN(y)) { + return NaN(); + } else if ((x === 0) && (x === y)) { + if (Signbit(x)) { + return y; + } + return x; + } + if (x > y) { + return x; + } + return y; + }; + min = function(x, y) { + var x, y; + if (IsInf(x, -1) || IsInf(y, -1)) { + return Inf(-1); + } else if (IsNaN(x) || IsNaN(y)) { + return NaN(); + } else if ((x === 0) && (x === y)) { + if (Signbit(x)) { + return x; + } + return y; + } + if (x < y) { + return x; + } + return y; + }; + Abs = function(x) { + var x, x$1; + return Float64frombits((x$1 = Float64bits(x), new $Uint64(x$1.$high & ~2147483648, (x$1.$low & ~0) >>> 0))); + }; + $pkg.Abs = Abs; + Cos = function(x) { + var x; + return $parseFloat(math.cos(x)); + }; + $pkg.Cos = Cos; + Floor = function(x) { + var x; + return $parseFloat(math.floor(x)); + }; + $pkg.Floor = Floor; + Inf = function(sign) { + var sign; + if (sign >= 0) { + return posInf; + } else { + return negInf; + } + }; + $pkg.Inf = Inf; + IsInf = function(f, sign) { + var f, sign; + if (f === posInf) { + return sign >= 0; + } + if (f === negInf) { + return sign <= 0; + } + return false; + }; + $pkg.IsInf = IsInf; + IsNaN = function(f) { + var f, is; + is = false; + is = !((f === f)); + return is; + }; + $pkg.IsNaN = IsNaN; + Max = function(x, y) { + var x, y; + return max(x, y); + }; + $pkg.Max = Max; + Min = function(x, y) { + var x, y; + return min(x, y); + }; + $pkg.Min = Min; + NaN = function() { + return nan; + }; + $pkg.NaN = NaN; + Pow = function(x, y) { + var x, y; + if ((x === 1) || ((x === -1) && ((y === posInf) || (y === negInf)))) { + return 1; + } + return $parseFloat(math.pow(x, y)); + }; + $pkg.Pow = Pow; + Signbit = function(x) { + var x; + return x < 0 || (1 / x === negInf); + }; + $pkg.Signbit = Signbit; + Sin = function(x) { + var x; + return $parseFloat(math.sin(x)); + }; + $pkg.Sin = Sin; + Sqrt = function(x) { + var x; + return $parseFloat(math.sqrt(x)); + }; + $pkg.Sqrt = Sqrt; + init = function() { + var ab; + ab = new ($global.ArrayBuffer)(8); + buf.uint32array = new ($global.Uint32Array)(ab); + buf.float32array = new ($global.Float32Array)(ab); + buf.float64array = new ($global.Float64Array)(ab); + }; + Float64bits = function(f) { + var f, x, x$1; + buf.float64array[0] = f; + return (x = $shiftLeft64((new $Uint64(0, buf.uint32array[1])), 32), x$1 = (new $Uint64(0, buf.uint32array[0])), new $Uint64(x.$high + x$1.$high, x.$low + x$1.$low)); + }; + $pkg.Float64bits = Float64bits; + Float64frombits = function(b) { + var b; + buf.uint32array[0] = ((b.$low >>> 0)); + buf.uint32array[1] = (($shiftRightUint64(b, 32).$low >>> 0)); + return buf.float64array[0]; + }; + $pkg.Float64frombits = Float64frombits; + $init = function() { + $pkg.$init = function() {}; + /* */ var $f, $c = false, $s = 0, $r; if (this !== undefined && this.$blk !== undefined) { $f = this; $c = true; $s = $f.$s; $r = $f.$r; } s: while (true) { switch ($s) { case 0: + $r = js.$init(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + $r = bits.$init(); /* */ $s = 2; case 2: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + buf = new structType.ptr(arrayType.zero(), arrayType$1.zero(), arrayType$2.zero()); + math = $global.Math; + _zero = 0; + posInf = 1 / _zero; + negInf = -1 / _zero; + nan = $parseFloat($NaN); + init(); + /* */ } return; } if ($f === undefined) { $f = { $blk: $init }; } $f.$s = $s; $f.$r = $r; return $f; + }; + $pkg.$init = $init; + return $pkg; +})(); +$packages["resolv"] = (function() { + var $pkg = {}, $init, math, Vector, Axis, Space, Shape, Line, ConvexPolygon, ContactSet, Circle, Projection, Object, Collision, Cell, sliceType, ptrType, sliceType$1, sliceType$2, ptrType$1, ptrType$2, sliceType$3, sliceType$4, ptrType$3, sliceType$5, ptrType$4, ptrType$5, ptrType$6, sliceType$6, ptrType$7, sliceType$7, mapType, Dot, NewSpace, NewLine, NewConvexPolygon, NewContactSet, NewRectangle, NewCircle, NewObject, axpyUnitaryTo, scalUnitaryTo, NewCollision, newCell; + math = $packages["math"]; + Vector = $pkg.Vector = $newType(12, $kindSlice, "resolv.Vector", true, "resolv", true, null); + Axis = $pkg.Axis = $newType(4, $kindInt, "resolv.Axis", true, "resolv", true, null); + Space = $pkg.Space = $newType(0, $kindStruct, "resolv.Space", true, "resolv", true, function(Cells_, CellWidth_, CellHeight_) { + this.$val = this; + if (arguments.length === 0) { + this.Cells = sliceType$2.nil; + this.CellWidth = 0; + this.CellHeight = 0; + return; + } + this.Cells = Cells_; + this.CellWidth = CellWidth_; + this.CellHeight = CellHeight_; + }); + Shape = $pkg.Shape = $newType(8, $kindInterface, "resolv.Shape", true, "resolv", true, null); + Line = $pkg.Line = $newType(0, $kindStruct, "resolv.Line", true, "resolv", true, function(Start_, End_) { + this.$val = this; + if (arguments.length === 0) { + this.Start = Vector.nil; + this.End = Vector.nil; + return; + } + this.Start = Start_; + this.End = End_; + }); + ConvexPolygon = $pkg.ConvexPolygon = $newType(0, $kindStruct, "resolv.ConvexPolygon", true, "resolv", true, function(Points_, X_, Y_, Closed_) { + this.$val = this; + if (arguments.length === 0) { + this.Points = sliceType$4.nil; + this.X = 0; + this.Y = 0; + this.Closed = false; + return; + } + this.Points = Points_; + this.X = X_; + this.Y = Y_; + this.Closed = Closed_; + }); + ContactSet = $pkg.ContactSet = $newType(0, $kindStruct, "resolv.ContactSet", true, "resolv", true, function(Points_, MTV_, Center_) { + this.$val = this; + if (arguments.length === 0) { + this.Points = sliceType$4.nil; + this.MTV = Vector.nil; + this.Center = Vector.nil; + return; + } + this.Points = Points_; + this.MTV = MTV_; + this.Center = Center_; + }); + Circle = $pkg.Circle = $newType(0, $kindStruct, "resolv.Circle", true, "resolv", true, function(X_, Y_, Radius_) { + this.$val = this; + if (arguments.length === 0) { + this.X = 0; + this.Y = 0; + this.Radius = 0; + return; + } + this.X = X_; + this.Y = Y_; + this.Radius = Radius_; + }); + Projection = $pkg.Projection = $newType(0, $kindStruct, "resolv.Projection", true, "resolv", true, function(Min_, Max_) { + this.$val = this; + if (arguments.length === 0) { + this.Min = 0; + this.Max = 0; + return; + } + this.Min = Min_; + this.Max = Max_; + }); + Object = $pkg.Object = $newType(0, $kindStruct, "resolv.Object", true, "resolv", true, function(Shape_, Space_, X_, Y_, W_, H_, TouchingCells_, Data_, ignoreList_, tags_) { + this.$val = this; + if (arguments.length === 0) { + this.Shape = $ifaceNil; + this.Space = ptrType$1.nil; + this.X = 0; + this.Y = 0; + this.W = 0; + this.H = 0; + this.TouchingCells = sliceType$1.nil; + this.Data = $ifaceNil; + this.ignoreList = false; + this.tags = sliceType$6.nil; + return; + } + this.Shape = Shape_; + this.Space = Space_; + this.X = X_; + this.Y = Y_; + this.W = W_; + this.H = H_; + this.TouchingCells = TouchingCells_; + this.Data = Data_; + this.ignoreList = ignoreList_; + this.tags = tags_; + }); + Collision = $pkg.Collision = $newType(0, $kindStruct, "resolv.Collision", true, "resolv", true, function(checkingObject_, dx_, dy_, Objects_, Cells_) { + this.$val = this; + if (arguments.length === 0) { + this.checkingObject = ptrType$2.nil; + this.dx = 0; + this.dy = 0; + this.Objects = sliceType$3.nil; + this.Cells = sliceType$1.nil; + return; + } + this.checkingObject = checkingObject_; + this.dx = dx_; + this.dy = dy_; + this.Objects = Objects_; + this.Cells = Cells_; + }); + Cell = $pkg.Cell = $newType(0, $kindStruct, "resolv.Cell", true, "resolv", true, function(X_, Y_, Objects_) { + this.$val = this; + if (arguments.length === 0) { + this.X = 0; + this.Y = 0; + this.Objects = sliceType$3.nil; + return; + } + this.X = X_; + this.Y = Y_; + this.Objects = Objects_; + }); + sliceType = $sliceType($Float64); + ptrType = $ptrType(Cell); + sliceType$1 = $sliceType(ptrType); + sliceType$2 = $sliceType(sliceType$1); + ptrType$1 = $ptrType(Space); + ptrType$2 = $ptrType(Object); + sliceType$3 = $sliceType(ptrType$2); + sliceType$4 = $sliceType(Vector); + ptrType$3 = $ptrType(Line); + sliceType$5 = $sliceType(ptrType$3); + ptrType$4 = $ptrType(Circle); + ptrType$5 = $ptrType(ConvexPolygon); + ptrType$6 = $ptrType(ContactSet); + sliceType$6 = $sliceType($String); + ptrType$7 = $ptrType(Collision); + sliceType$7 = $sliceType(Axis); + mapType = $mapType(ptrType$2, $Bool); + Vector.prototype.Clone = function() { + var clone, v; + v = this; + clone = $makeSlice(Vector, v.$length); + $copySlice(clone, v); + return clone; + }; + $ptrType(Vector).prototype.Clone = function() { return this.$get().Clone(); }; + Vector.prototype.Add = function(vs) { + var _i, _ref, dim, i, v, vs; + v = this; + dim = v.$length; + _ref = vs; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + i = _i; + if (((i < 0 || i >= vs.$length) ? ($throwRuntimeError("index out of range"), undefined) : vs.$array[vs.$offset + i]).$length > dim) { + axpyUnitaryTo($convertSliceType(v, sliceType), 1, $convertSliceType(v, sliceType), $convertSliceType($subslice(((i < 0 || i >= vs.$length) ? ($throwRuntimeError("index out of range"), undefined) : vs.$array[vs.$offset + i]), 0, dim), sliceType)); + } else { + axpyUnitaryTo($convertSliceType(v, sliceType), 1, $convertSliceType(v, sliceType), $convertSliceType(((i < 0 || i >= vs.$length) ? ($throwRuntimeError("index out of range"), undefined) : vs.$array[vs.$offset + i]), sliceType)); + } + _i++; + } + return v; + }; + $ptrType(Vector).prototype.Add = function(vs) { return this.$get().Add(vs); }; + Vector.prototype.Sub = function(vs) { + var _i, _ref, dim, i, v, vs; + v = this; + dim = v.$length; + _ref = vs; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + i = _i; + if (((i < 0 || i >= vs.$length) ? ($throwRuntimeError("index out of range"), undefined) : vs.$array[vs.$offset + i]).$length > dim) { + axpyUnitaryTo($convertSliceType(v, sliceType), -1, $convertSliceType($subslice(((i < 0 || i >= vs.$length) ? ($throwRuntimeError("index out of range"), undefined) : vs.$array[vs.$offset + i]), 0, dim), sliceType), $convertSliceType(v, sliceType)); + } else { + axpyUnitaryTo($convertSliceType(v, sliceType), -1, $convertSliceType(((i < 0 || i >= vs.$length) ? ($throwRuntimeError("index out of range"), undefined) : vs.$array[vs.$offset + i]), sliceType), $convertSliceType(v, sliceType)); + } + _i++; + } + return v; + }; + $ptrType(Vector).prototype.Sub = function(vs) { return this.$get().Sub(vs); }; + Vector.prototype.Scale = function(size) { + var size, v; + v = this; + scalUnitaryTo($convertSliceType(v, sliceType), size, $convertSliceType(v, sliceType)); + return v; + }; + $ptrType(Vector).prototype.Scale = function(size) { return this.$get().Scale(size); }; + Vector.prototype.Equal = function(v2) { + var _i, _ref, i, v, v2; + v = this; + if (!((v.$length === v2.$length))) { + return false; + } + _ref = v; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + i = _i; + if (math.Abs(((i < 0 || i >= v.$length) ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + i]) - ((i < 0 || i >= v2.$length) ? ($throwRuntimeError("index out of range"), undefined) : v2.$array[v2.$offset + i])) > 1e-08) { + return false; + } + _i++; + } + return true; + }; + $ptrType(Vector).prototype.Equal = function(v2) { return this.$get().Equal(v2); }; + Vector.prototype.Magnitude = function() { + var v; + v = this; + return math.Sqrt(v.Magnitude2()); + }; + $ptrType(Vector).prototype.Magnitude = function() { return this.$get().Magnitude(); }; + Vector.prototype.Magnitude2 = function() { + var _i, _ref, result, scalar, v; + v = this; + result = 0; + _ref = v; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + scalar = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + result = result + (scalar * scalar); + _i++; + } + return result; + }; + $ptrType(Vector).prototype.Magnitude2 = function() { return this.$get().Magnitude2(); }; + Vector.prototype.Unit = function() { + var _i, _ref, i, l, v; + v = this; + l = v.Magnitude(); + if (l < 1e-08) { + return v; + } + _ref = v; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + i = _i; + ((i < 0 || i >= v.$length) ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + i] = ((i < 0 || i >= v.$length) ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + i]) / l); + _i++; + } + return v; + }; + $ptrType(Vector).prototype.Unit = function() { return this.$get().Unit(); }; + Dot = function(v1, v2) { + var _i, _ref, _tmp, _tmp$1, _tmp$2, dim1, dim2, i, result, v1, v2; + _tmp = 0; + _tmp$1 = v1.$length; + _tmp$2 = v2.$length; + result = _tmp; + dim1 = _tmp$1; + dim2 = _tmp$2; + if (dim1 > dim2) { + v2 = $appendSlice(v2, $convertSliceType($makeSlice(Vector, (dim1 - dim2 >> 0)), sliceType)); + } + if (dim1 < dim2) { + v1 = $appendSlice(v1, $convertSliceType($makeSlice(Vector, (dim2 - dim1 >> 0)), sliceType)); + } + _ref = v1; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + i = _i; + result = result + (((i < 0 || i >= v1.$length) ? ($throwRuntimeError("index out of range"), undefined) : v1.$array[v1.$offset + i]) * ((i < 0 || i >= v2.$length) ? ($throwRuntimeError("index out of range"), undefined) : v2.$array[v2.$offset + i])); + _i++; + } + return result; + }; + $pkg.Dot = Dot; + Vector.prototype.Dot = function(v2) { + var v, v2; + v = this; + return Dot(v, v2); + }; + $ptrType(Vector).prototype.Dot = function(v2) { return this.$get().Dot(v2); }; + Vector.prototype.Cross = function(v2) { + var v, v2; + v = this; + if (!((v.$length === 3)) || !((v2.$length === 3))) { + return Vector.nil; + } + return new Vector([(1 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 1]) * (2 >= v2.$length ? ($throwRuntimeError("index out of range"), undefined) : v2.$array[v2.$offset + 2]) - (2 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 2]) * (1 >= v2.$length ? ($throwRuntimeError("index out of range"), undefined) : v2.$array[v2.$offset + 1]), (2 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 2]) * (0 >= v2.$length ? ($throwRuntimeError("index out of range"), undefined) : v2.$array[v2.$offset + 0]) - (0 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 0]) * (2 >= v2.$length ? ($throwRuntimeError("index out of range"), undefined) : v2.$array[v2.$offset + 2]), (0 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 0]) * (2 >= v2.$length ? ($throwRuntimeError("index out of range"), undefined) : v2.$array[v2.$offset + 2]) - (2 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 2]) * (0 >= v2.$length ? ($throwRuntimeError("index out of range"), undefined) : v2.$array[v2.$offset + 0])]); + }; + $ptrType(Vector).prototype.Cross = function(v2) { return this.$get().Cross(v2); }; + Vector.prototype.Rotate = function(angle, as) { + var _1, _tmp, _tmp$1, _tmp$2, _tmp$3, _tmp$4, _tmp$5, angle, as, axis, cos, dim, sin, v, x, y, z, z$1; + v = this; + _tmp = 2; + _tmp$1 = v.$length; + axis = _tmp; + dim = _tmp$1; + if (dim === 0) { + return v; + } + if (as.$length > 0) { + axis = (0 >= as.$length ? ($throwRuntimeError("index out of range"), undefined) : as.$array[as.$offset + 0]); + } + if ((dim === 1) && !((axis === 2))) { + v = $append(v, 0, 0); + } + if ((dim < 2 && (axis === 2)) || ((dim === 2) && !((axis === 2)))) { + v = $append(v, 0); + } + _tmp$2 = (0 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 0]); + _tmp$3 = (1 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 1]); + x = _tmp$2; + y = _tmp$3; + _tmp$4 = math.Cos(angle); + _tmp$5 = math.Sin(angle); + cos = _tmp$4; + sin = _tmp$5; + _1 = axis; + if (_1 === (0)) { + z = (2 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 2]); + (1 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 1] = y * cos - z * sin); + (2 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 2] = y * sin + z * cos); + } else if (_1 === (1)) { + z$1 = (2 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 2]); + (0 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 0] = x * cos + z$1 * sin); + (2 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 2] = -x * sin + z$1 * cos); + } else if (_1 === (2)) { + (0 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 0] = x * cos - y * sin); + (1 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 1] = x * sin + y * cos); + } + if (dim > 3) { + return $subslice(v, 0, 3); + } + return v; + }; + $ptrType(Vector).prototype.Rotate = function(angle, as) { return this.$get().Rotate(angle, as); }; + Vector.prototype.X = function() { + var v; + v = this; + if (v.$length < 1) { + return 0; + } + return (0 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 0]); + }; + $ptrType(Vector).prototype.X = function() { return this.$get().X(); }; + Vector.prototype.Y = function() { + var v; + v = this; + if (v.$length < 2) { + return 0; + } + return (1 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 1]); + }; + $ptrType(Vector).prototype.Y = function() { return this.$get().Y(); }; + Vector.prototype.Z = function() { + var v; + v = this; + if (v.$length < 3) { + return 0; + } + return (2 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 2]); + }; + $ptrType(Vector).prototype.Z = function() { return this.$get().Z(); }; + NewSpace = function(spaceWidth, spaceHeight, cellWidth, cellHeight) { + var _q, _q$1, cellHeight, cellWidth, sp, spaceHeight, spaceWidth; + sp = new Space.ptr(sliceType$2.nil, cellWidth, cellHeight); + sp.Resize((_q = spaceWidth / cellWidth, (_q === _q && _q !== 1/0 && _q !== -1/0) ? _q >> 0 : $throwRuntimeError("integer divide by zero")), (_q$1 = spaceHeight / cellHeight, (_q$1 === _q$1 && _q$1 !== 1/0 && _q$1 !== -1/0) ? _q$1 >> 0 : $throwRuntimeError("integer divide by zero"))); + return sp; + }; + $pkg.NewSpace = NewSpace; + Space.ptr.prototype.Add = function(objects) { + var {_i, _ref, obj, objects, sp, $s, $r, $c} = $restore(this, {objects}); + /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: + sp = this; + if (sp === ptrType$1.nil) { + $panic(new $String("ERROR: space is nil")); + } + _ref = objects; + _i = 0; + /* while (true) { */ case 1: + /* if (!(_i < _ref.$length)) { break; } */ if(!(_i < _ref.$length)) { $s = 2; continue; } + obj = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + obj.Space = sp; + $r = obj.Update(); /* */ $s = 3; case 3: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + _i++; + $s = 1; continue; + case 2: + $s = -1; return; + /* */ } return; } var $f = {$blk: Space.ptr.prototype.Add, $c: true, $r, _i, _ref, obj, objects, sp, $s};return $f; + }; + Space.prototype.Add = function(objects) { return this.$val.Add(objects); }; + Space.ptr.prototype.Remove = function(objects) { + var _i, _i$1, _ref, _ref$1, cell, obj, objects, sp; + sp = this; + if (sp === ptrType$1.nil) { + $panic(new $String("ERROR: space is nil")); + } + _ref = objects; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + obj = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + _ref$1 = obj.TouchingCells; + _i$1 = 0; + while (true) { + if (!(_i$1 < _ref$1.$length)) { break; } + cell = ((_i$1 < 0 || _i$1 >= _ref$1.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$1.$array[_ref$1.$offset + _i$1]); + cell.unregister(obj); + _i$1++; + } + obj.TouchingCells = new sliceType$1([]); + obj.Space = ptrType$1.nil; + _i++; + } + }; + Space.prototype.Remove = function(objects) { return this.$val.Remove(objects); }; + Space.ptr.prototype.Objects = function() { + var _entry, _i, _i$1, _i$2, _key, _ref, _ref$1, _ref$2, _tuple, added, cx, cy, o, objects, objectsAdded, sp, x, x$1, x$2; + sp = this; + objectsAdded = $makeMap(ptrType$2.keyFor, []); + objects = new sliceType$3([]); + _ref = sp.Cells; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + cy = _i; + _ref$1 = (x = sp.Cells, ((cy < 0 || cy >= x.$length) ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + cy])); + _i$1 = 0; + while (true) { + if (!(_i$1 < _ref$1.$length)) { break; } + cx = _i$1; + _ref$2 = (x$1 = (x$2 = sp.Cells, ((cy < 0 || cy >= x$2.$length) ? ($throwRuntimeError("index out of range"), undefined) : x$2.$array[x$2.$offset + cy])), ((cx < 0 || cx >= x$1.$length) ? ($throwRuntimeError("index out of range"), undefined) : x$1.$array[x$1.$offset + cx])).Objects; + _i$2 = 0; + while (true) { + if (!(_i$2 < _ref$2.$length)) { break; } + o = ((_i$2 < 0 || _i$2 >= _ref$2.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$2.$array[_ref$2.$offset + _i$2]); + _tuple = (_entry = objectsAdded[ptrType$2.keyFor(o)], _entry !== undefined ? [_entry.v, true] : [false, false]); + added = _tuple[1]; + if (!added) { + objects = $append(objects, o); + _key = o; (objectsAdded || $throwRuntimeError("assignment to entry in nil map"))[ptrType$2.keyFor(_key)] = { k: _key, v: true }; + } + _i$2++; + } + _i$1++; + } + _i++; + } + return objects; + }; + Space.prototype.Objects = function() { return this.$val.Objects(); }; + Space.ptr.prototype.Resize = function(width, height) { + var height, sp, width, x, x$1, x$2, y; + sp = this; + sp.Cells = new sliceType$2([]); + y = 0; + while (true) { + if (!(y < height)) { break; } + sp.Cells = $append(sp.Cells, new sliceType$1([])); + x = 0; + while (true) { + if (!(x < width)) { break; } + (x$2 = sp.Cells, ((y < 0 || y >= x$2.$length) ? ($throwRuntimeError("index out of range"), undefined) : x$2.$array[x$2.$offset + y] = $append((x$1 = sp.Cells, ((y < 0 || y >= x$1.$length) ? ($throwRuntimeError("index out of range"), undefined) : x$1.$array[x$1.$offset + y])), newCell(x, y)))); + x = x + (1) >> 0; + } + y = y + (1) >> 0; + } + }; + Space.prototype.Resize = function(width, height) { return this.$val.Resize(width, height); }; + Space.ptr.prototype.Cell = function(x, y) { + var sp, x, x$1, x$2, x$3, y; + sp = this; + if (y >= 0 && y < sp.Cells.$length && x >= 0 && x < (x$1 = sp.Cells, ((y < 0 || y >= x$1.$length) ? ($throwRuntimeError("index out of range"), undefined) : x$1.$array[x$1.$offset + y])).$length) { + return (x$2 = (x$3 = sp.Cells, ((y < 0 || y >= x$3.$length) ? ($throwRuntimeError("index out of range"), undefined) : x$3.$array[x$3.$offset + y])), ((x < 0 || x >= x$2.$length) ? ($throwRuntimeError("index out of range"), undefined) : x$2.$array[x$2.$offset + x])); + } + return ptrType.nil; + }; + Space.prototype.Cell = function(x, y) { return this.$val.Cell(x, y); }; + Space.ptr.prototype.CheckCells = function(x, y, w, h, tags) { + var _i, _ref, cell, h, ix, iy, obj, sp, tags, w, x, x$1, y; + sp = this; + ix = x; + while (true) { + if (!(ix < (x + w >> 0))) { break; } + iy = y; + while (true) { + if (!(iy < (y + h >> 0))) { break; } + cell = sp.Cell(ix, iy); + if (!(cell === ptrType.nil)) { + if (tags.$length > 0) { + if (cell.ContainsTags(tags)) { + _ref = cell.Objects; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + obj = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + if (obj.HasTags(tags)) { + return obj; + } + _i++; + } + } + } else if (cell.Occupied()) { + return (x$1 = cell.Objects, (0 >= x$1.$length ? ($throwRuntimeError("index out of range"), undefined) : x$1.$array[x$1.$offset + 0])); + } + } + iy = iy + (1) >> 0; + } + ix = ix + (1) >> 0; + } + return ptrType$2.nil; + }; + Space.prototype.CheckCells = function(x, y, w, h, tags) { return this.$val.CheckCells(x, y, w, h, tags); }; + Space.ptr.prototype.CheckCellsWorld = function(x, y, w, h, tags) { + var _tuple, _tuple$1, ch, cw, h, sp, sx, sy, tags, w, x, y; + sp = this; + _tuple = sp.WorldToSpace(x, y); + sx = _tuple[0]; + sy = _tuple[1]; + _tuple$1 = sp.WorldToSpace(w, h); + cw = _tuple$1[0]; + ch = _tuple$1[1]; + return sp.CheckCells(sx, sy, cw, ch, tags); + }; + Space.prototype.CheckCellsWorld = function(x, y, w, h, tags) { return this.$val.CheckCellsWorld(x, y, w, h, tags); }; + Space.ptr.prototype.UnregisterAllObjects = function() { + var cell, sp, x, x$1, x$2, x$3, y; + sp = this; + y = 0; + while (true) { + if (!(y < sp.Cells.$length)) { break; } + x = 0; + while (true) { + if (!(x < (x$1 = sp.Cells, ((y < 0 || y >= x$1.$length) ? ($throwRuntimeError("index out of range"), undefined) : x$1.$array[x$1.$offset + y])).$length)) { break; } + cell = (x$2 = (x$3 = sp.Cells, ((y < 0 || y >= x$3.$length) ? ($throwRuntimeError("index out of range"), undefined) : x$3.$array[x$3.$offset + y])), ((x < 0 || x >= x$2.$length) ? ($throwRuntimeError("index out of range"), undefined) : x$2.$array[x$2.$offset + x])); + sp.Remove(cell.Objects); + x = x + (1) >> 0; + } + y = y + (1) >> 0; + } + }; + Space.prototype.UnregisterAllObjects = function() { return this.$val.UnregisterAllObjects(); }; + Space.ptr.prototype.WorldToSpace = function(x, y) { + var fx, fy, sp, x, y; + sp = this; + fx = ((math.Floor(x / (sp.CellWidth)) >> 0)); + fy = ((math.Floor(y / (sp.CellHeight)) >> 0)); + return [fx, fy]; + }; + Space.prototype.WorldToSpace = function(x, y) { return this.$val.WorldToSpace(x, y); }; + Space.ptr.prototype.SpaceToWorld = function(x, y) { + var fx, fy, sp, x, y; + sp = this; + fx = (($imul(x, sp.CellWidth))); + fy = (($imul(y, sp.CellHeight))); + return [fx, fy]; + }; + Space.prototype.SpaceToWorld = function(x, y) { return this.$val.SpaceToWorld(x, y); }; + Space.ptr.prototype.Height = function() { + var sp; + sp = this; + return sp.Cells.$length; + }; + Space.prototype.Height = function() { return this.$val.Height(); }; + Space.ptr.prototype.Width = function() { + var sp, x; + sp = this; + if (sp.Cells.$length > 0) { + return (x = sp.Cells, (0 >= x.$length ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + 0])).$length; + } + return 0; + }; + Space.prototype.Width = function() { return this.$val.Width(); }; + Space.ptr.prototype.CellsInLine = function(startX, startY, endX, endY) { + var _q, _q$1, _q$2, _q$3, _tuple, _tuple$1, alternate, c, cell, cells, cx, cy, dv, endCell, endX, endY, p, pX, pY, sp, startX, startY; + sp = this; + cells = new sliceType$1([]); + cell = sp.Cell(startX, startY); + endCell = sp.Cell(endX, endY); + if (!(cell === ptrType.nil) && !(endCell === ptrType.nil)) { + dv = new Vector([((endX - startX >> 0)), ((endY - startY >> 0))]).Unit(); + (0 >= dv.$length ? ($throwRuntimeError("index out of range"), undefined) : dv.$array[dv.$offset + 0] = (0 >= dv.$length ? ($throwRuntimeError("index out of range"), undefined) : dv.$array[dv.$offset + 0]) * (((_q = sp.CellWidth / 2, (_q === _q && _q !== 1/0 && _q !== -1/0) ? _q >> 0 : $throwRuntimeError("integer divide by zero"))))); + (1 >= dv.$length ? ($throwRuntimeError("index out of range"), undefined) : dv.$array[dv.$offset + 1] = (1 >= dv.$length ? ($throwRuntimeError("index out of range"), undefined) : dv.$array[dv.$offset + 1]) * (((_q$1 = sp.CellHeight / 2, (_q$1 === _q$1 && _q$1 !== 1/0 && _q$1 !== -1/0) ? _q$1 >> 0 : $throwRuntimeError("integer divide by zero"))))); + _tuple = sp.SpaceToWorld(startX, startY); + pX = _tuple[0]; + pY = _tuple[1]; + p = new Vector([pX + ((_q$2 = sp.CellWidth / 2, (_q$2 === _q$2 && _q$2 !== 1/0 && _q$2 !== -1/0) ? _q$2 >> 0 : $throwRuntimeError("integer divide by zero"))), pY + ((_q$3 = sp.CellHeight / 2, (_q$3 === _q$3 && _q$3 !== 1/0 && _q$3 !== -1/0) ? _q$3 >> 0 : $throwRuntimeError("integer divide by zero")))]); + alternate = false; + while (true) { + if (!(!(cell === ptrType.nil))) { break; } + if (cell === endCell) { + cells = $append(cells, cell); + break; + } + cells = $append(cells, cell); + if (alternate) { + (1 >= p.$length ? ($throwRuntimeError("index out of range"), undefined) : p.$array[p.$offset + 1] = (1 >= p.$length ? ($throwRuntimeError("index out of range"), undefined) : p.$array[p.$offset + 1]) + ((1 >= dv.$length ? ($throwRuntimeError("index out of range"), undefined) : dv.$array[dv.$offset + 1]))); + } else { + (0 >= p.$length ? ($throwRuntimeError("index out of range"), undefined) : p.$array[p.$offset + 0] = (0 >= p.$length ? ($throwRuntimeError("index out of range"), undefined) : p.$array[p.$offset + 0]) + ((0 >= dv.$length ? ($throwRuntimeError("index out of range"), undefined) : dv.$array[dv.$offset + 0]))); + } + _tuple$1 = sp.WorldToSpace((0 >= p.$length ? ($throwRuntimeError("index out of range"), undefined) : p.$array[p.$offset + 0]), (1 >= p.$length ? ($throwRuntimeError("index out of range"), undefined) : p.$array[p.$offset + 1])); + cx = _tuple$1[0]; + cy = _tuple$1[1]; + c = sp.Cell(cx, cy); + if (!(c === cell)) { + cell = c; + } + alternate = !alternate; + } + } + return cells; + }; + Space.prototype.CellsInLine = function(startX, startY, endX, endY) { return this.$val.CellsInLine(startX, startY, endX, endY); }; + NewLine = function(x, y, x2, y2) { + var x, x2, y, y2; + return new Line.ptr(new Vector([x, y]), new Vector([x2, y2])); + }; + $pkg.NewLine = NewLine; + Line.ptr.prototype.Project = function(axis) { + var axis, line; + line = this; + return line.Vector().Scale(axis.Dot(line.Start.Sub(new sliceType$4([line.End])))); + }; + Line.prototype.Project = function(axis) { return this.$val.Project(axis); }; + Line.ptr.prototype.Normal = function() { + var line, v; + line = this; + v = line.Vector(); + return new Vector([(1 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 1]), -(0 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 0])]).Unit(); + }; + Line.prototype.Normal = function() { return this.$val.Normal(); }; + Line.ptr.prototype.Vector = function() { + var line; + line = this; + return line.End.Clone().Sub(new sliceType$4([line.Start])).Unit(); + }; + Line.prototype.Vector = function() { return this.$val.Vector(); }; + Line.ptr.prototype.IntersectionPointsLine = function(other) { + var det, dx, dy, gamma, lambda, line, other, x, x$1, x$10, x$11, x$12, x$13, x$14, x$15, x$16, x$17, x$18, x$19, x$2, x$20, x$21, x$22, x$23, x$24, x$25, x$26, x$27, x$28, x$29, x$3, x$4, x$5, x$6, x$7, x$8, x$9; + line = this; + det = ((x = line.End, (0 >= x.$length ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + 0])) - (x$1 = line.Start, (0 >= x$1.$length ? ($throwRuntimeError("index out of range"), undefined) : x$1.$array[x$1.$offset + 0]))) * ((x$2 = other.End, (1 >= x$2.$length ? ($throwRuntimeError("index out of range"), undefined) : x$2.$array[x$2.$offset + 1])) - (x$3 = other.Start, (1 >= x$3.$length ? ($throwRuntimeError("index out of range"), undefined) : x$3.$array[x$3.$offset + 1]))) - ((x$4 = other.End, (0 >= x$4.$length ? ($throwRuntimeError("index out of range"), undefined) : x$4.$array[x$4.$offset + 0])) - (x$5 = other.Start, (0 >= x$5.$length ? ($throwRuntimeError("index out of range"), undefined) : x$5.$array[x$5.$offset + 0]))) * ((x$6 = line.End, (1 >= x$6.$length ? ($throwRuntimeError("index out of range"), undefined) : x$6.$array[x$6.$offset + 1])) - (x$7 = line.Start, (1 >= x$7.$length ? ($throwRuntimeError("index out of range"), undefined) : x$7.$array[x$7.$offset + 1]))); + if (!((det === 0))) { + lambda = ((((x$8 = line.Start, (1 >= x$8.$length ? ($throwRuntimeError("index out of range"), undefined) : x$8.$array[x$8.$offset + 1])) - (x$9 = other.Start, (1 >= x$9.$length ? ($throwRuntimeError("index out of range"), undefined) : x$9.$array[x$9.$offset + 1]))) * ((x$10 = other.End, (0 >= x$10.$length ? ($throwRuntimeError("index out of range"), undefined) : x$10.$array[x$10.$offset + 0])) - (x$11 = other.Start, (0 >= x$11.$length ? ($throwRuntimeError("index out of range"), undefined) : x$11.$array[x$11.$offset + 0])))) - (((x$12 = line.Start, (0 >= x$12.$length ? ($throwRuntimeError("index out of range"), undefined) : x$12.$array[x$12.$offset + 0])) - (x$13 = other.Start, (0 >= x$13.$length ? ($throwRuntimeError("index out of range"), undefined) : x$13.$array[x$13.$offset + 0]))) * ((x$14 = other.End, (1 >= x$14.$length ? ($throwRuntimeError("index out of range"), undefined) : x$14.$array[x$14.$offset + 1])) - (x$15 = other.Start, (1 >= x$15.$length ? ($throwRuntimeError("index out of range"), undefined) : x$15.$array[x$15.$offset + 1])))) + 1) / det; + gamma = ((((x$16 = line.Start, (1 >= x$16.$length ? ($throwRuntimeError("index out of range"), undefined) : x$16.$array[x$16.$offset + 1])) - (x$17 = other.Start, (1 >= x$17.$length ? ($throwRuntimeError("index out of range"), undefined) : x$17.$array[x$17.$offset + 1]))) * ((x$18 = line.End, (0 >= x$18.$length ? ($throwRuntimeError("index out of range"), undefined) : x$18.$array[x$18.$offset + 0])) - (x$19 = line.Start, (0 >= x$19.$length ? ($throwRuntimeError("index out of range"), undefined) : x$19.$array[x$19.$offset + 0])))) - (((x$20 = line.Start, (0 >= x$20.$length ? ($throwRuntimeError("index out of range"), undefined) : x$20.$array[x$20.$offset + 0])) - (x$21 = other.Start, (0 >= x$21.$length ? ($throwRuntimeError("index out of range"), undefined) : x$21.$array[x$21.$offset + 0]))) * ((x$22 = line.End, (1 >= x$22.$length ? ($throwRuntimeError("index out of range"), undefined) : x$22.$array[x$22.$offset + 1])) - (x$23 = line.Start, (1 >= x$23.$length ? ($throwRuntimeError("index out of range"), undefined) : x$23.$array[x$23.$offset + 1])))) + 1) / det; + if ((0 < lambda && lambda < 1) && (0 < gamma && gamma < 1)) { + dx = (x$24 = line.End, (0 >= x$24.$length ? ($throwRuntimeError("index out of range"), undefined) : x$24.$array[x$24.$offset + 0])) - (x$25 = line.Start, (0 >= x$25.$length ? ($throwRuntimeError("index out of range"), undefined) : x$25.$array[x$25.$offset + 0])); + dy = (x$26 = line.End, (1 >= x$26.$length ? ($throwRuntimeError("index out of range"), undefined) : x$26.$array[x$26.$offset + 1])) - (x$27 = line.Start, (1 >= x$27.$length ? ($throwRuntimeError("index out of range"), undefined) : x$27.$array[x$27.$offset + 1])); + return new Vector([(x$28 = line.Start, (0 >= x$28.$length ? ($throwRuntimeError("index out of range"), undefined) : x$28.$array[x$28.$offset + 0])) + (lambda * dx), (x$29 = line.Start, (1 >= x$29.$length ? ($throwRuntimeError("index out of range"), undefined) : x$29.$array[x$29.$offset + 1])) + (lambda * dy)]); + } + } + return Vector.nil; + }; + Line.prototype.IntersectionPointsLine = function(other) { return this.$val.IntersectionPointsLine(other); }; + Line.ptr.prototype.IntersectionPointsCircle = function(circle) { + var a, b, c, circle, cp, det, diff, lEnd, lStart, line, points, t, t$1, x, x$1, x$2, x$3, x$4, x$5; + line = this; + points = new sliceType$4([]); + cp = new Vector([circle.X, circle.Y]); + lStart = line.Start.Sub(new sliceType$4([cp])); + lEnd = line.End.Sub(new sliceType$4([cp])); + diff = lEnd.Sub(new sliceType$4([lStart])); + a = (0 >= diff.$length ? ($throwRuntimeError("index out of range"), undefined) : diff.$array[diff.$offset + 0]) * (0 >= diff.$length ? ($throwRuntimeError("index out of range"), undefined) : diff.$array[diff.$offset + 0]) + (1 >= diff.$length ? ($throwRuntimeError("index out of range"), undefined) : diff.$array[diff.$offset + 1]) * (1 >= diff.$length ? ($throwRuntimeError("index out of range"), undefined) : diff.$array[diff.$offset + 1]); + b = 2 * (((0 >= diff.$length ? ($throwRuntimeError("index out of range"), undefined) : diff.$array[diff.$offset + 0]) * (0 >= lStart.$length ? ($throwRuntimeError("index out of range"), undefined) : lStart.$array[lStart.$offset + 0])) + ((1 >= diff.$length ? ($throwRuntimeError("index out of range"), undefined) : diff.$array[diff.$offset + 1]) * (1 >= lStart.$length ? ($throwRuntimeError("index out of range"), undefined) : lStart.$array[lStart.$offset + 1]))); + c = ((0 >= lStart.$length ? ($throwRuntimeError("index out of range"), undefined) : lStart.$array[lStart.$offset + 0]) * (0 >= lStart.$length ? ($throwRuntimeError("index out of range"), undefined) : lStart.$array[lStart.$offset + 0])) + ((1 >= lStart.$length ? ($throwRuntimeError("index out of range"), undefined) : lStart.$array[lStart.$offset + 1]) * (1 >= lStart.$length ? ($throwRuntimeError("index out of range"), undefined) : lStart.$array[lStart.$offset + 1])) - (circle.Radius * circle.Radius); + det = b * b - (4 * a * c); + if (det < 0) { + } else if (det === 0) { + t = -b / (2 * a); + if (t >= 0 && t <= 1) { + points = $append(points, new Vector([(x = line.Start, (0 >= x.$length ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + 0])) + t * (0 >= diff.$length ? ($throwRuntimeError("index out of range"), undefined) : diff.$array[diff.$offset + 0]), (x$1 = line.Start, (1 >= x$1.$length ? ($throwRuntimeError("index out of range"), undefined) : x$1.$array[x$1.$offset + 1])) + t * (1 >= diff.$length ? ($throwRuntimeError("index out of range"), undefined) : diff.$array[diff.$offset + 1])])); + } + } else { + t$1 = (-b + math.Sqrt(det)) / (2 * a); + if (t$1 >= 0 && t$1 <= 1) { + points = $append(points, new Vector([(x$2 = line.Start, (0 >= x$2.$length ? ($throwRuntimeError("index out of range"), undefined) : x$2.$array[x$2.$offset + 0])) + t$1 * (0 >= diff.$length ? ($throwRuntimeError("index out of range"), undefined) : diff.$array[diff.$offset + 0]), (x$3 = line.Start, (1 >= x$3.$length ? ($throwRuntimeError("index out of range"), undefined) : x$3.$array[x$3.$offset + 1])) + t$1 * (1 >= diff.$length ? ($throwRuntimeError("index out of range"), undefined) : diff.$array[diff.$offset + 1])])); + } + t$1 = (-b - math.Sqrt(det)) / (2 * a); + if (t$1 >= 0 && t$1 <= 1) { + points = $append(points, new Vector([(x$4 = line.Start, (0 >= x$4.$length ? ($throwRuntimeError("index out of range"), undefined) : x$4.$array[x$4.$offset + 0])) + t$1 * (0 >= diff.$length ? ($throwRuntimeError("index out of range"), undefined) : diff.$array[diff.$offset + 0]), (x$5 = line.Start, (1 >= x$5.$length ? ($throwRuntimeError("index out of range"), undefined) : x$5.$array[x$5.$offset + 1])) + t$1 * (1 >= diff.$length ? ($throwRuntimeError("index out of range"), undefined) : diff.$array[diff.$offset + 1])])); + } + } + return points; + }; + Line.prototype.IntersectionPointsCircle = function(circle) { return this.$val.IntersectionPointsCircle(circle); }; + NewConvexPolygon = function(points) { + var cp, points; + cp = new ConvexPolygon.ptr(new sliceType$4([]), 0, 0, true); + cp.AddPoints(points); + return cp; + }; + $pkg.NewConvexPolygon = NewConvexPolygon; + ConvexPolygon.ptr.prototype.Clone = function() { + var _i, _ref, cp, newPoly, point, points; + cp = this; + points = new sliceType$4([]); + _ref = cp.Points; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + point = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + points = $append(points, point.Clone()); + _i++; + } + newPoly = NewConvexPolygon(sliceType.nil); + newPoly.X = cp.X; + newPoly.Y = cp.Y; + newPoly.AddPointsVec(points); + newPoly.Closed = cp.Closed; + return newPoly; + }; + ConvexPolygon.prototype.Clone = function() { return this.$val.Clone(); }; + ConvexPolygon.ptr.prototype.AddPointsVec = function(points) { + var cp, points; + cp = this; + cp.Points = $appendSlice(cp.Points, points); + }; + ConvexPolygon.prototype.AddPointsVec = function(points) { return this.$val.AddPointsVec(points); }; + ConvexPolygon.ptr.prototype.AddPoints = function(vertexPositions) { + var cp, v, vertexPositions, x; + cp = this; + v = 0; + while (true) { + if (!(v < vertexPositions.$length)) { break; } + cp.Points = $append(cp.Points, new Vector([((v < 0 || v >= vertexPositions.$length) ? ($throwRuntimeError("index out of range"), undefined) : vertexPositions.$array[vertexPositions.$offset + v]), (x = v + 1 >> 0, ((x < 0 || x >= vertexPositions.$length) ? ($throwRuntimeError("index out of range"), undefined) : vertexPositions.$array[vertexPositions.$offset + x]))])); + v = v + (2) >> 0; + } + }; + ConvexPolygon.prototype.AddPoints = function(vertexPositions) { return this.$val.AddPoints(vertexPositions); }; + ConvexPolygon.ptr.prototype.Lines = function() { + var _tmp, _tmp$1, cp, end, i, line, lines, start, vertices, x; + cp = this; + lines = new sliceType$5([]); + vertices = cp.Transformed(); + i = 0; + while (true) { + if (!(i < vertices.$length)) { break; } + _tmp = ((i < 0 || i >= vertices.$length) ? ($throwRuntimeError("index out of range"), undefined) : vertices.$array[vertices.$offset + i]); + _tmp$1 = (0 >= vertices.$length ? ($throwRuntimeError("index out of range"), undefined) : vertices.$array[vertices.$offset + 0]); + start = _tmp; + end = _tmp$1; + if (i < (vertices.$length - 1 >> 0)) { + end = (x = i + 1 >> 0, ((x < 0 || x >= vertices.$length) ? ($throwRuntimeError("index out of range"), undefined) : vertices.$array[vertices.$offset + x])); + } else if (!cp.Closed) { + break; + } + line = NewLine((0 >= start.$length ? ($throwRuntimeError("index out of range"), undefined) : start.$array[start.$offset + 0]), (1 >= start.$length ? ($throwRuntimeError("index out of range"), undefined) : start.$array[start.$offset + 1]), (0 >= end.$length ? ($throwRuntimeError("index out of range"), undefined) : end.$array[end.$offset + 0]), (1 >= end.$length ? ($throwRuntimeError("index out of range"), undefined) : end.$array[end.$offset + 1])); + lines = $append(lines, line); + i = i + (1) >> 0; + } + return lines; + }; + ConvexPolygon.prototype.Lines = function() { return this.$val.Lines(); }; + ConvexPolygon.ptr.prototype.Transformed = function() { + var _i, _ref, cp, point, transformed; + cp = this; + transformed = new sliceType$4([]); + _ref = cp.Points; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + point = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + transformed = $append(transformed, new Vector([(0 >= point.$length ? ($throwRuntimeError("index out of range"), undefined) : point.$array[point.$offset + 0]) + cp.X, (1 >= point.$length ? ($throwRuntimeError("index out of range"), undefined) : point.$array[point.$offset + 1]) + cp.Y])); + _i++; + } + return transformed; + }; + ConvexPolygon.prototype.Transformed = function() { return this.$val.Transformed(); }; + ConvexPolygon.ptr.prototype.Bounds = function() { + var bottomRight, cp, i, point, topLeft, transformed, x, x$1; + cp = this; + transformed = cp.Transformed(); + topLeft = new Vector([(x = (0 >= transformed.$length ? ($throwRuntimeError("index out of range"), undefined) : transformed.$array[transformed.$offset + 0]), (0 >= x.$length ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + 0])), (x$1 = (0 >= transformed.$length ? ($throwRuntimeError("index out of range"), undefined) : transformed.$array[transformed.$offset + 0]), (1 >= x$1.$length ? ($throwRuntimeError("index out of range"), undefined) : x$1.$array[x$1.$offset + 1]))]); + bottomRight = topLeft.Clone(); + i = 0; + while (true) { + if (!(i < transformed.$length)) { break; } + point = ((i < 0 || i >= transformed.$length) ? ($throwRuntimeError("index out of range"), undefined) : transformed.$array[transformed.$offset + i]); + if ((0 >= point.$length ? ($throwRuntimeError("index out of range"), undefined) : point.$array[point.$offset + 0]) < (0 >= topLeft.$length ? ($throwRuntimeError("index out of range"), undefined) : topLeft.$array[topLeft.$offset + 0])) { + (0 >= topLeft.$length ? ($throwRuntimeError("index out of range"), undefined) : topLeft.$array[topLeft.$offset + 0] = (0 >= point.$length ? ($throwRuntimeError("index out of range"), undefined) : point.$array[point.$offset + 0])); + } else if ((0 >= point.$length ? ($throwRuntimeError("index out of range"), undefined) : point.$array[point.$offset + 0]) > (0 >= bottomRight.$length ? ($throwRuntimeError("index out of range"), undefined) : bottomRight.$array[bottomRight.$offset + 0])) { + (0 >= bottomRight.$length ? ($throwRuntimeError("index out of range"), undefined) : bottomRight.$array[bottomRight.$offset + 0] = (0 >= point.$length ? ($throwRuntimeError("index out of range"), undefined) : point.$array[point.$offset + 0])); + } + if ((1 >= point.$length ? ($throwRuntimeError("index out of range"), undefined) : point.$array[point.$offset + 1]) < (1 >= topLeft.$length ? ($throwRuntimeError("index out of range"), undefined) : topLeft.$array[topLeft.$offset + 1])) { + (1 >= topLeft.$length ? ($throwRuntimeError("index out of range"), undefined) : topLeft.$array[topLeft.$offset + 1] = (1 >= point.$length ? ($throwRuntimeError("index out of range"), undefined) : point.$array[point.$offset + 1])); + } else if ((1 >= point.$length ? ($throwRuntimeError("index out of range"), undefined) : point.$array[point.$offset + 1]) > (1 >= bottomRight.$length ? ($throwRuntimeError("index out of range"), undefined) : bottomRight.$array[bottomRight.$offset + 1])) { + (1 >= bottomRight.$length ? ($throwRuntimeError("index out of range"), undefined) : bottomRight.$array[bottomRight.$offset + 1] = (1 >= point.$length ? ($throwRuntimeError("index out of range"), undefined) : point.$array[point.$offset + 1])); + } + i = i + (1) >> 0; + } + return [topLeft, bottomRight]; + }; + ConvexPolygon.prototype.Bounds = function() { return this.$val.Bounds(); }; + ConvexPolygon.ptr.prototype.Position = function() { + var cp; + cp = this; + return [cp.X, cp.Y]; + }; + ConvexPolygon.prototype.Position = function() { return this.$val.Position(); }; + ConvexPolygon.ptr.prototype.SetPosition = function(x, y) { + var cp, x, y; + cp = this; + cp.X = x; + cp.Y = y; + }; + ConvexPolygon.prototype.SetPosition = function(x, y) { return this.$val.SetPosition(x, y); }; + ConvexPolygon.ptr.prototype.SetPositionVec = function(vec) { + var cp, vec; + cp = this; + cp.X = vec.X(); + cp.Y = vec.Y(); + }; + ConvexPolygon.prototype.SetPositionVec = function(vec) { return this.$val.SetPositionVec(vec); }; + ConvexPolygon.ptr.prototype.Move = function(x, y) { + var cp, x, y; + cp = this; + cp.X = cp.X + (x); + cp.Y = cp.Y + (y); + }; + ConvexPolygon.prototype.Move = function(x, y) { return this.$val.Move(x, y); }; + ConvexPolygon.ptr.prototype.MoveVec = function(vec) { + var cp, vec; + cp = this; + cp.X = cp.X + (vec.X()); + cp.Y = cp.Y + (vec.Y()); + }; + ConvexPolygon.prototype.MoveVec = function(vec) { return this.$val.MoveVec(vec); }; + ConvexPolygon.ptr.prototype.Center = function() { + var _i, _ref, cp, pos, v; + cp = this; + pos = new Vector([0, 0]); + _ref = cp.Transformed(); + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + v = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + pos.Add(new sliceType$4([v])); + _i++; + } + (0 >= pos.$length ? ($throwRuntimeError("index out of range"), undefined) : pos.$array[pos.$offset + 0] = (0 >= pos.$length ? ($throwRuntimeError("index out of range"), undefined) : pos.$array[pos.$offset + 0]) / ((cp.Transformed().$length))); + (1 >= pos.$length ? ($throwRuntimeError("index out of range"), undefined) : pos.$array[pos.$offset + 1] = (1 >= pos.$length ? ($throwRuntimeError("index out of range"), undefined) : pos.$array[pos.$offset + 1]) / ((cp.Transformed().$length))); + return pos; + }; + ConvexPolygon.prototype.Center = function() { return this.$val.Center(); }; + ConvexPolygon.ptr.prototype.Project = function(axis) { + var axis, cp, i, max, min, p, vertices, x, x$1, x$2, x$3; + cp = this; + axis = axis.Unit(); + vertices = cp.Transformed(); + min = axis.Dot(new Vector([(x = (0 >= vertices.$length ? ($throwRuntimeError("index out of range"), undefined) : vertices.$array[vertices.$offset + 0]), (0 >= x.$length ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + 0])), (x$1 = (0 >= vertices.$length ? ($throwRuntimeError("index out of range"), undefined) : vertices.$array[vertices.$offset + 0]), (1 >= x$1.$length ? ($throwRuntimeError("index out of range"), undefined) : x$1.$array[x$1.$offset + 1]))])); + max = min; + i = 1; + while (true) { + if (!(i < vertices.$length)) { break; } + p = axis.Dot(new Vector([(x$2 = ((i < 0 || i >= vertices.$length) ? ($throwRuntimeError("index out of range"), undefined) : vertices.$array[vertices.$offset + i]), (0 >= x$2.$length ? ($throwRuntimeError("index out of range"), undefined) : x$2.$array[x$2.$offset + 0])), (x$3 = ((i < 0 || i >= vertices.$length) ? ($throwRuntimeError("index out of range"), undefined) : vertices.$array[vertices.$offset + i]), (1 >= x$3.$length ? ($throwRuntimeError("index out of range"), undefined) : x$3.$array[x$3.$offset + 1]))])); + if (p < min) { + min = p; + } else if (p > max) { + max = p; + } + i = i + (1) >> 0; + } + return new Projection.ptr(min, max); + }; + ConvexPolygon.prototype.Project = function(axis) { return this.$val.Project(axis); }; + ConvexPolygon.ptr.prototype.SATAxes = function() { + var _i, _ref, axes, cp, line; + cp = this; + axes = new sliceType$4([]); + _ref = cp.Lines(); + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + line = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + axes = $append(axes, line.Normal()); + _i++; + } + return axes; + }; + ConvexPolygon.prototype.SATAxes = function() { return this.$val.SATAxes(); }; + ConvexPolygon.ptr.prototype.PointInside = function(point) { + var _i, _ref, contactCount, line, point, pointLine, polygon; + polygon = this; + pointLine = NewLine((0 >= point.$length ? ($throwRuntimeError("index out of range"), undefined) : point.$array[point.$offset + 0]), (1 >= point.$length ? ($throwRuntimeError("index out of range"), undefined) : point.$array[point.$offset + 1]), (0 >= point.$length ? ($throwRuntimeError("index out of range"), undefined) : point.$array[point.$offset + 0]) + 9.99999999999e+11, (1 >= point.$length ? ($throwRuntimeError("index out of range"), undefined) : point.$array[point.$offset + 1])); + contactCount = 0; + _ref = polygon.Lines(); + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + line = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + if (!(line.IntersectionPointsLine(pointLine) === Vector.nil)) { + contactCount = contactCount + (1) >> 0; + } + _i++; + } + return contactCount === 1; + }; + ConvexPolygon.prototype.PointInside = function(point) { return this.$val.PointInside(point); }; + NewContactSet = function() { + return new ContactSet.ptr(new sliceType$4([]), new Vector([0, 0]), new Vector([0, 0])); + }; + $pkg.NewContactSet = NewContactSet; + ContactSet.ptr.prototype.LeftmostPoint = function() { + var _i, _ref, cs, left, point; + cs = this; + left = Vector.nil; + _ref = cs.Points; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + point = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + if (left === Vector.nil || (0 >= point.$length ? ($throwRuntimeError("index out of range"), undefined) : point.$array[point.$offset + 0]) < (0 >= left.$length ? ($throwRuntimeError("index out of range"), undefined) : left.$array[left.$offset + 0])) { + left = point; + } + _i++; + } + return left; + }; + ContactSet.prototype.LeftmostPoint = function() { return this.$val.LeftmostPoint(); }; + ContactSet.ptr.prototype.RightmostPoint = function() { + var _i, _ref, cs, point, right; + cs = this; + right = Vector.nil; + _ref = cs.Points; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + point = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + if (right === Vector.nil || (0 >= point.$length ? ($throwRuntimeError("index out of range"), undefined) : point.$array[point.$offset + 0]) > (0 >= right.$length ? ($throwRuntimeError("index out of range"), undefined) : right.$array[right.$offset + 0])) { + right = point; + } + _i++; + } + return right; + }; + ContactSet.prototype.RightmostPoint = function() { return this.$val.RightmostPoint(); }; + ContactSet.ptr.prototype.TopmostPoint = function() { + var _i, _ref, cs, point, top; + cs = this; + top = Vector.nil; + _ref = cs.Points; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + point = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + if (top === Vector.nil || (1 >= point.$length ? ($throwRuntimeError("index out of range"), undefined) : point.$array[point.$offset + 1]) < (1 >= top.$length ? ($throwRuntimeError("index out of range"), undefined) : top.$array[top.$offset + 1])) { + top = point; + } + _i++; + } + return top; + }; + ContactSet.prototype.TopmostPoint = function() { return this.$val.TopmostPoint(); }; + ContactSet.ptr.prototype.BottommostPoint = function() { + var _i, _ref, bottom, cs, point; + cs = this; + bottom = Vector.nil; + _ref = cs.Points; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + point = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + if (bottom === Vector.nil || (1 >= point.$length ? ($throwRuntimeError("index out of range"), undefined) : point.$array[point.$offset + 1]) > (1 >= bottom.$length ? ($throwRuntimeError("index out of range"), undefined) : bottom.$array[bottom.$offset + 1])) { + bottom = point; + } + _i++; + } + return bottom; + }; + ContactSet.prototype.BottommostPoint = function() { return this.$val.BottommostPoint(); }; + ConvexPolygon.ptr.prototype.Intersection = function(dx, dy, other) { + var _i, _i$1, _i$2, _i$3, _ref, _ref$1, _ref$2, _ref$3, _tuple, _tuple$1, circle, contactSet, cp, deltaMagnitude, dx, dy, isCircle, isPoly, line, line$1, mtv, ogMagnitude, ogX, ogY, other, otherLine, point, point$1, poly, x, x$1, x$2, x$3; + cp = this; + contactSet = NewContactSet(); + ogX = cp.X; + ogY = cp.Y; + cp.X = cp.X + (dx); + cp.Y = cp.Y + (dy); + _tuple = $assertType(other, ptrType$4, true); + circle = _tuple[0]; + isCircle = _tuple[1]; + if (isCircle) { + _ref = cp.Lines(); + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + line = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + contactSet.Points = $appendSlice(contactSet.Points, line.IntersectionPointsCircle(circle)); + _i++; + } + } else { + _tuple$1 = $assertType(other, ptrType$5, true); + poly = _tuple$1[0]; + isPoly = _tuple$1[1]; + if (isPoly) { + _ref$1 = cp.Lines(); + _i$1 = 0; + while (true) { + if (!(_i$1 < _ref$1.$length)) { break; } + line$1 = ((_i$1 < 0 || _i$1 >= _ref$1.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$1.$array[_ref$1.$offset + _i$1]); + _ref$2 = poly.Lines(); + _i$2 = 0; + while (true) { + if (!(_i$2 < _ref$2.$length)) { break; } + otherLine = ((_i$2 < 0 || _i$2 >= _ref$2.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$2.$array[_ref$2.$offset + _i$2]); + point = line$1.IntersectionPointsLine(otherLine); + if (!(point === Vector.nil)) { + contactSet.Points = $append(contactSet.Points, point); + } + _i$2++; + } + _i$1++; + } + } + } + if (contactSet.Points.$length > 0) { + _ref$3 = contactSet.Points; + _i$3 = 0; + while (true) { + if (!(_i$3 < _ref$3.$length)) { break; } + point$1 = ((_i$3 < 0 || _i$3 >= _ref$3.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$3.$array[_ref$3.$offset + _i$3]); + contactSet.Center = contactSet.Center.Add(new sliceType$4([point$1])); + _i$3++; + } + (x$1 = contactSet.Center, (0 >= x$1.$length ? ($throwRuntimeError("index out of range"), undefined) : x$1.$array[x$1.$offset + 0] = (x = contactSet.Center, (0 >= x.$length ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + 0])) / ((contactSet.Points.$length)))); + (x$3 = contactSet.Center, (1 >= x$3.$length ? ($throwRuntimeError("index out of range"), undefined) : x$3.$array[x$3.$offset + 1] = (x$2 = contactSet.Center, (1 >= x$2.$length ? ($throwRuntimeError("index out of range"), undefined) : x$2.$array[x$2.$offset + 1])) / ((contactSet.Points.$length)))); + mtv = cp.calculateMTV(contactSet, other); + if (!(mtv === Vector.nil)) { + contactSet.MTV = mtv; + } + } else { + contactSet = ptrType$6.nil; + } + if (!(contactSet === ptrType$6.nil) && (!((dx === 0)) || !((dy === 0)))) { + deltaMagnitude = new Vector([dx, dy]).Magnitude(); + ogMagnitude = contactSet.MTV.Magnitude(); + contactSet.MTV = contactSet.MTV.Unit().Scale(ogMagnitude - deltaMagnitude); + } + cp.X = ogX; + cp.Y = ogY; + return contactSet; + }; + ConvexPolygon.prototype.Intersection = function(dx, dy, other) { return this.$val.Intersection(dx, dy, other); }; + ConvexPolygon.ptr.prototype.calculateMTV = function(contactSet, otherShape) { + var _i, _i$1, _ref, _ref$1, _ref$2, axis, axis$1, contactSet, cp, delta, other, otherShape, overlap, overlap$1, smallest; + cp = this; + delta = new Vector([0, 0]); + smallest = new Vector([1.7976931348623157e+308, 0]); + _ref = otherShape; + if ($assertType(_ref, ptrType$5, true)[1]) { + other = _ref.$val; + _ref$1 = cp.SATAxes(); + _i = 0; + while (true) { + if (!(_i < _ref$1.$length)) { break; } + axis = ((_i < 0 || _i >= _ref$1.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$1.$array[_ref$1.$offset + _i]); + if (!$clone(cp.Project(axis), Projection).Overlapping($clone(other.Project(axis), Projection))) { + return Vector.nil; + } + overlap = $clone(cp.Project(axis), Projection).Overlap($clone(other.Project(axis), Projection)); + if (smallest.Magnitude() > overlap) { + smallest = axis.Scale(overlap); + } + _i++; + } + _ref$2 = other.SATAxes(); + _i$1 = 0; + while (true) { + if (!(_i$1 < _ref$2.$length)) { break; } + axis$1 = ((_i$1 < 0 || _i$1 >= _ref$2.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$2.$array[_ref$2.$offset + _i$1]); + if (!$clone(cp.Project(axis$1), Projection).Overlapping($clone(other.Project(axis$1), Projection))) { + return Vector.nil; + } + overlap$1 = $clone(cp.Project(axis$1), Projection).Overlap($clone(other.Project(axis$1), Projection)); + if (smallest.Magnitude() > overlap$1) { + smallest = axis$1.Scale(overlap$1); + } + _i$1++; + } + } + (0 >= delta.$length ? ($throwRuntimeError("index out of range"), undefined) : delta.$array[delta.$offset + 0] = (0 >= smallest.$length ? ($throwRuntimeError("index out of range"), undefined) : smallest.$array[smallest.$offset + 0])); + (1 >= delta.$length ? ($throwRuntimeError("index out of range"), undefined) : delta.$array[delta.$offset + 1] = (1 >= smallest.$length ? ($throwRuntimeError("index out of range"), undefined) : smallest.$array[smallest.$offset + 1])); + return delta; + }; + ConvexPolygon.prototype.calculateMTV = function(contactSet, otherShape) { return this.$val.calculateMTV(contactSet, otherShape); }; + ConvexPolygon.ptr.prototype.ContainedBy = function(otherShape) { + var _i, _i$1, _ref, _ref$1, _ref$2, axis, axis$1, cp, other, otherShape; + cp = this; + _ref = otherShape; + if ($assertType(_ref, ptrType$5, true)[1]) { + other = _ref.$val; + _ref$1 = cp.SATAxes(); + _i = 0; + while (true) { + if (!(_i < _ref$1.$length)) { break; } + axis = ((_i < 0 || _i >= _ref$1.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$1.$array[_ref$1.$offset + _i]); + if (!$clone(cp.Project(axis), Projection).IsInside($clone(other.Project(axis), Projection))) { + return false; + } + _i++; + } + _ref$2 = other.SATAxes(); + _i$1 = 0; + while (true) { + if (!(_i$1 < _ref$2.$length)) { break; } + axis$1 = ((_i$1 < 0 || _i$1 >= _ref$2.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$2.$array[_ref$2.$offset + _i$1]); + if (!$clone(cp.Project(axis$1), Projection).IsInside($clone(other.Project(axis$1), Projection))) { + return false; + } + _i$1++; + } + } + return true; + }; + ConvexPolygon.prototype.ContainedBy = function(otherShape) { return this.$val.ContainedBy(otherShape); }; + ConvexPolygon.ptr.prototype.FlipH = function() { + var _i, _ref, cp, v; + cp = this; + _ref = cp.Points; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + v = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + (0 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 0] = -(0 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 0])); + _i++; + } + cp.ReverseVertexOrder(); + }; + ConvexPolygon.prototype.FlipH = function() { return this.$val.FlipH(); }; + ConvexPolygon.ptr.prototype.FlipV = function() { + var _i, _ref, cp, v; + cp = this; + _ref = cp.Points; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + v = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + (1 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 1] = -(1 >= v.$length ? ($throwRuntimeError("index out of range"), undefined) : v.$array[v.$offset + 1])); + _i++; + } + cp.ReverseVertexOrder(); + }; + ConvexPolygon.prototype.FlipV = function() { return this.$val.FlipV(); }; + ConvexPolygon.ptr.prototype.ReverseVertexOrder = function() { + var cp, i, verts, x, x$1; + cp = this; + verts = new sliceType$4([(x = cp.Points, (0 >= x.$length ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + 0]))]); + i = cp.Points.$length - 1 >> 0; + while (true) { + if (!(i >= 1)) { break; } + verts = $append(verts, (x$1 = cp.Points, ((i < 0 || i >= x$1.$length) ? ($throwRuntimeError("index out of range"), undefined) : x$1.$array[x$1.$offset + i]))); + i = i - (1) >> 0; + } + cp.Points = verts; + }; + ConvexPolygon.prototype.ReverseVertexOrder = function() { return this.$val.ReverseVertexOrder(); }; + NewRectangle = function(x, y, w, h) { + var h, w, x, y; + return NewConvexPolygon(new sliceType([x, y, x + w, y, x + w, y + h, x, y + h])); + }; + $pkg.NewRectangle = NewRectangle; + NewCircle = function(x, y, radius) { + var circle, radius, x, y; + circle = new Circle.ptr(x, y, radius); + return circle; + }; + $pkg.NewCircle = NewCircle; + Circle.ptr.prototype.Clone = function() { + var circle; + circle = this; + return NewCircle(circle.X, circle.Y, circle.Radius); + }; + Circle.prototype.Clone = function() { return this.$val.Clone(); }; + Circle.ptr.prototype.Bounds = function() { + var circle; + circle = this; + return [new Vector([circle.X - circle.Radius, circle.Y - circle.Radius]), new Vector([circle.X + circle.Radius, circle.Y + circle.Radius])]; + }; + Circle.prototype.Bounds = function() { return this.$val.Bounds(); }; + Circle.ptr.prototype.Intersection = function(dx, dy, other) { + var _i, _ref, _ref$1, circle, contactSet, dist, dx, dy, other, ox, oy, point, shape, shape$1, x, x$1, x$2, x$3; + circle = this; + contactSet = ptrType$6.nil; + ox = circle.X; + oy = circle.Y; + circle.X = circle.X + (dx); + circle.Y = circle.Y + (dy); + _ref = other; + if ($assertType(_ref, ptrType$5, true)[1]) { + shape = _ref.$val; + contactSet = shape.Intersection(-dx, -dy, circle); + if (!(contactSet === ptrType$6.nil)) { + contactSet.MTV = contactSet.MTV.Scale(-1); + } + } else if ($assertType(_ref, ptrType$4, true)[1]) { + shape$1 = _ref.$val; + contactSet = NewContactSet(); + contactSet.Points = circle.IntersectionPointsCircle(shape$1); + if (contactSet.Points.$length === 0) { + return ptrType$6.nil; + } + contactSet.MTV = new Vector([circle.X - shape$1.X, circle.Y - shape$1.Y]); + dist = contactSet.MTV.Magnitude(); + contactSet.MTV = contactSet.MTV.Unit().Scale(circle.Radius + shape$1.Radius - dist); + _ref$1 = contactSet.Points; + _i = 0; + while (true) { + if (!(_i < _ref$1.$length)) { break; } + point = ((_i < 0 || _i >= _ref$1.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$1.$array[_ref$1.$offset + _i]); + contactSet.Center = contactSet.Center.Add(new sliceType$4([point])); + _i++; + } + (x$1 = contactSet.Center, (0 >= x$1.$length ? ($throwRuntimeError("index out of range"), undefined) : x$1.$array[x$1.$offset + 0] = (x = contactSet.Center, (0 >= x.$length ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + 0])) / ((contactSet.Points.$length)))); + (x$3 = contactSet.Center, (1 >= x$3.$length ? ($throwRuntimeError("index out of range"), undefined) : x$3.$array[x$3.$offset + 1] = (x$2 = contactSet.Center, (1 >= x$2.$length ? ($throwRuntimeError("index out of range"), undefined) : x$2.$array[x$2.$offset + 1])) / ((contactSet.Points.$length)))); + } + circle.X = ox; + circle.Y = oy; + return contactSet; + }; + Circle.prototype.Intersection = function(dx, dy, other) { return this.$val.Intersection(dx, dy, other); }; + Circle.ptr.prototype.Move = function(x, y) { + var circle, x, y; + circle = this; + circle.X = circle.X + (x); + circle.Y = circle.Y + (y); + }; + Circle.prototype.Move = function(x, y) { return this.$val.Move(x, y); }; + Circle.ptr.prototype.MoveVec = function(vec) { + var circle, vec; + circle = this; + circle.X = circle.X + (vec.X()); + circle.Y = circle.Y + (vec.Y()); + }; + Circle.prototype.MoveVec = function(vec) { return this.$val.MoveVec(vec); }; + Circle.ptr.prototype.SetPosition = function(x, y) { + var circle, x, y; + circle = this; + circle.X = x; + circle.Y = y; + }; + Circle.prototype.SetPosition = function(x, y) { return this.$val.SetPosition(x, y); }; + Circle.ptr.prototype.SetPositionVec = function(vec) { + var circle, vec; + circle = this; + circle.X = vec.X(); + circle.Y = vec.Y(); + }; + Circle.prototype.SetPositionVec = function(vec) { return this.$val.SetPositionVec(vec); }; + Circle.ptr.prototype.Position = function() { + var circle; + circle = this; + return [circle.X, circle.Y]; + }; + Circle.prototype.Position = function() { return this.$val.Position(); }; + Circle.ptr.prototype.PointInside = function(point) { + var circle, point; + circle = this; + return point.Sub(new sliceType$4([new Vector([circle.X, circle.Y])])).Magnitude() <= circle.Radius; + }; + Circle.prototype.PointInside = function(point) { return this.$val.PointInside(point); }; + Circle.ptr.prototype.IntersectionPointsCircle = function(other) { + var a, circle, d, h, other, x2, y2; + circle = this; + d = math.Sqrt(math.Pow(other.X - circle.X, 2) + math.Pow(other.Y - circle.Y, 2)); + if (d > circle.Radius + other.Radius || d < math.Abs(circle.Radius - other.Radius) || (d === 0) && (circle.Radius === other.Radius)) { + return sliceType$4.nil; + } + a = (math.Pow(circle.Radius, 2) - math.Pow(other.Radius, 2) + math.Pow(d, 2)) / (2 * d); + h = math.Sqrt(math.Pow(circle.Radius, 2) - math.Pow(a, 2)); + x2 = circle.X + a * (other.X - circle.X) / d; + y2 = circle.Y + a * (other.Y - circle.Y) / d; + return new sliceType$4([new Vector([x2 + h * (other.Y - circle.Y) / d, y2 - h * (other.X - circle.X) / d]), new Vector([x2 - h * (other.Y - circle.Y) / d, y2 + h * (other.X - circle.X) / d])]); + }; + Circle.prototype.IntersectionPointsCircle = function(other) { return this.$val.IntersectionPointsCircle(other); }; + Projection.ptr.prototype.Overlapping = function(other) { + var other, projection; + projection = this; + return $clone(projection, Projection).Overlap($clone(other, Projection)) > 0; + }; + Projection.prototype.Overlapping = function(other) { return this.$val.Overlapping(other); }; + Projection.ptr.prototype.Overlap = function(other) { + var other, projection; + projection = this; + return math.Min(projection.Max, other.Max) - math.Max(projection.Min, other.Min); + }; + Projection.prototype.Overlap = function(other) { return this.$val.Overlap(other); }; + Projection.ptr.prototype.IsInside = function(other) { + var other, projection; + projection = this; + return projection.Min >= other.Min && projection.Max <= other.Max; + }; + Projection.prototype.IsInside = function(other) { return this.$val.IsInside(other); }; + NewObject = function(x, y, w, h, tags) { + var h, o, tags, w, x, y; + o = new Object.ptr($ifaceNil, ptrType$1.nil, x, y, w, h, sliceType$1.nil, $ifaceNil, $makeMap(ptrType$2.keyFor, []), new sliceType$6([])); + if (tags.$length > 0) { + o.AddTags(tags); + } + return o; + }; + $pkg.NewObject = NewObject; + Object.ptr.prototype.Clone = function() { + var {_entry, _i, _keys, _r, _ref, k, newObj, obj, $s, $r, $c} = $restore(this, {}); + /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: + obj = this; + newObj = NewObject(obj.X, obj.Y, obj.W, obj.H, obj.Tags()); + newObj.Data = obj.Data; + /* */ if (!($interfaceIsEqual(obj.Shape, $ifaceNil))) { $s = 1; continue; } + /* */ $s = 2; continue; + /* if (!($interfaceIsEqual(obj.Shape, $ifaceNil))) { */ case 1: + _r = obj.Shape.Clone(); /* */ $s = 3; case 3: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; } + $r = newObj.SetShape(_r); /* */ $s = 4; case 4: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + /* } */ case 2: + _ref = obj.ignoreList; + _i = 0; + _keys = $keys(_ref); + while (true) { + if (!(_i < _keys.length)) { break; } + _entry = _ref[_keys[_i]]; + if (_entry === undefined) { + _i++; + continue; + } + k = _entry.k; + newObj.AddToIgnoreList(k); + _i++; + } + $s = -1; return newObj; + /* */ } return; } var $f = {$blk: Object.ptr.prototype.Clone, $c: true, $r, _entry, _i, _keys, _r, _ref, k, newObj, obj, $s};return $f; + }; + Object.prototype.Clone = function() { return this.$val.Clone(); }; + Object.ptr.prototype.Update = function() { + var {_tuple, c, cx, cy, ex, ey, obj, space, x, y, $s, $r, $c} = $restore(this, {}); + /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: + obj = this; + if (!(obj.Space === ptrType$1.nil)) { + space = obj.Space; + obj.Space.Remove(new sliceType$3([obj])); + obj.Space = space; + _tuple = obj.BoundsToSpace(0, 0); + cx = _tuple[0]; + cy = _tuple[1]; + ex = _tuple[2]; + ey = _tuple[3]; + y = cy; + while (true) { + if (!(y <= ey)) { break; } + x = cx; + while (true) { + if (!(x <= ex)) { break; } + c = obj.Space.Cell(x, y); + if (!(c === ptrType.nil)) { + c.register(obj); + obj.TouchingCells = $append(obj.TouchingCells, c); + } + x = x + (1) >> 0; + } + y = y + (1) >> 0; + } + } + /* */ if (!($interfaceIsEqual(obj.Shape, $ifaceNil))) { $s = 1; continue; } + /* */ $s = 2; continue; + /* if (!($interfaceIsEqual(obj.Shape, $ifaceNil))) { */ case 1: + $r = obj.Shape.SetPosition(obj.X, obj.Y); /* */ $s = 3; case 3: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + /* } */ case 2: + $s = -1; return; + /* */ } return; } var $f = {$blk: Object.ptr.prototype.Update, $c: true, $r, _tuple, c, cx, cy, ex, ey, obj, space, x, y, $s};return $f; + }; + Object.prototype.Update = function() { return this.$val.Update(); }; + Object.ptr.prototype.AddTags = function(tags) { + var obj, tags; + obj = this; + obj.tags = $appendSlice(obj.tags, tags); + }; + Object.prototype.AddTags = function(tags) { return this.$val.AddTags(tags); }; + Object.ptr.prototype.RemoveTags = function(tags) { + var _i, _i$1, _ref, _ref$1, i, obj, t, tag, tags; + obj = this; + _ref = tags; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + tag = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + _ref$1 = obj.tags; + _i$1 = 0; + while (true) { + if (!(_i$1 < _ref$1.$length)) { break; } + i = _i$1; + t = ((_i$1 < 0 || _i$1 >= _ref$1.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$1.$array[_ref$1.$offset + _i$1]); + if (t === tag) { + obj.tags = $appendSlice($subslice(obj.tags, 0, i), $subslice(obj.tags, (i + 1 >> 0))); + break; + } + _i$1++; + } + _i++; + } + }; + Object.prototype.RemoveTags = function(tags) { return this.$val.RemoveTags(tags); }; + Object.ptr.prototype.HasTags = function(tags) { + var _i, _i$1, _ref, _ref$1, obj, t, tag, tags; + obj = this; + _ref = tags; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + tag = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + _ref$1 = obj.tags; + _i$1 = 0; + while (true) { + if (!(_i$1 < _ref$1.$length)) { break; } + t = ((_i$1 < 0 || _i$1 >= _ref$1.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$1.$array[_ref$1.$offset + _i$1]); + if (t === tag) { + return true; + } + _i$1++; + } + _i++; + } + return false; + }; + Object.prototype.HasTags = function(tags) { return this.$val.HasTags(tags); }; + Object.ptr.prototype.Tags = function() { + var obj; + obj = this; + return $appendSlice(new sliceType$6([]), obj.tags); + }; + Object.prototype.Tags = function() { return this.$val.Tags(); }; + Object.ptr.prototype.SetShape = function(shape) { + var {obj, shape, $s, $r, $c} = $restore(this, {shape}); + /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: + obj = this; + /* */ if (!($interfaceIsEqual(obj.Shape, shape))) { $s = 1; continue; } + /* */ $s = 2; continue; + /* if (!($interfaceIsEqual(obj.Shape, shape))) { */ case 1: + obj.Shape = shape; + $r = obj.Update(); /* */ $s = 3; case 3: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + /* } */ case 2: + $s = -1; return; + /* */ } return; } var $f = {$blk: Object.ptr.prototype.SetShape, $c: true, $r, obj, shape, $s};return $f; + }; + Object.prototype.SetShape = function(shape) { return this.$val.SetShape(shape); }; + Object.ptr.prototype.BoundsToSpace = function(dx, dy) { + var _tuple, _tuple$1, cx, cy, dx, dy, ex, ey, obj; + obj = this; + _tuple = obj.Space.WorldToSpace(obj.X + dx, obj.Y + dy); + cx = _tuple[0]; + cy = _tuple[1]; + _tuple$1 = obj.Space.WorldToSpace(obj.X + obj.W + dx - 1, obj.Y + obj.H + dy - 1); + ex = _tuple$1[0]; + ey = _tuple$1[1]; + return [cx, cy, ex, ey]; + }; + Object.prototype.BoundsToSpace = function(dx, dy) { return this.$val.BoundsToSpace(dx, dy); }; + Object.ptr.prototype.SharesCells = function(other) { + var _i, _ref, cell, obj, other; + obj = this; + _ref = obj.TouchingCells; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + cell = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + if (cell.Contains(other)) { + return true; + } + _i++; + } + return false; + }; + Object.prototype.SharesCells = function(other) { return this.$val.SharesCells(other); }; + Object.ptr.prototype.SharesCellsTags = function(tags) { + var _i, _ref, cell, obj, tags; + obj = this; + _ref = obj.TouchingCells; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + cell = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + if (cell.ContainsTags(tags)) { + return true; + } + _i++; + } + return false; + }; + Object.prototype.SharesCellsTags = function(tags) { return this.$val.SharesCellsTags(tags); }; + Object.ptr.prototype.Center = function() { + var obj; + obj = this; + return [obj.X + (obj.W / 2), obj.Y + (obj.H / 2)]; + }; + Object.prototype.Center = function() { return this.$val.Center(); }; + Object.ptr.prototype.SetCenter = function(x, y) { + var obj, x, y; + obj = this; + obj.X = x - (obj.W / 2); + obj.Y = y - (obj.H / 2); + }; + Object.prototype.SetCenter = function(x, y) { return this.$val.SetCenter(x, y); }; + Object.ptr.prototype.CellPosition = function() { + var _tuple, obj; + obj = this; + _tuple = obj.Center(); + return obj.Space.WorldToSpace(_tuple[0], _tuple[1]); + }; + Object.prototype.CellPosition = function() { return this.$val.CellPosition(); }; + Object.ptr.prototype.SetRight = function(x) { + var obj, x; + obj = this; + obj.X = x - obj.W; + }; + Object.prototype.SetRight = function(x) { return this.$val.SetRight(x); }; + Object.ptr.prototype.SetBottom = function(y) { + var obj, y; + obj = this; + obj.Y = y - obj.H; + }; + Object.prototype.SetBottom = function(y) { return this.$val.SetBottom(y); }; + Object.ptr.prototype.Bottom = function() { + var obj; + obj = this; + return obj.Y + obj.H; + }; + Object.prototype.Bottom = function() { return this.$val.Bottom(); }; + Object.ptr.prototype.Right = function() { + var obj; + obj = this; + return obj.X + obj.W; + }; + Object.prototype.Right = function() { return this.$val.Right(); }; + Object.ptr.prototype.SetBounds = function(topLeft, bottomRight) { + var bottomRight, obj, topLeft; + obj = this; + obj.X = (0 >= topLeft.$length ? ($throwRuntimeError("index out of range"), undefined) : topLeft.$array[topLeft.$offset + 0]); + obj.Y = (1 >= topLeft.$length ? ($throwRuntimeError("index out of range"), undefined) : topLeft.$array[topLeft.$offset + 1]); + obj.W = (0 >= bottomRight.$length ? ($throwRuntimeError("index out of range"), undefined) : bottomRight.$array[bottomRight.$offset + 0]) - obj.X; + obj.H = (1 >= bottomRight.$length ? ($throwRuntimeError("index out of range"), undefined) : bottomRight.$array[bottomRight.$offset + 1]) - obj.Y; + }; + Object.prototype.SetBounds = function(topLeft, bottomRight) { return this.$val.SetBounds(topLeft, bottomRight); }; + Object.ptr.prototype.Check = function(dx, dy, tags) { + var _entry, _entry$1, _entry$2, _i, _key, _key$1, _ref, _tuple, _tuple$1, _tuple$2, added, added$1, c, cc, cellsAdded, cx, cy, dx, dy, ex, ey, ignored, o, obj, objectsAdded, tags, x, y; + obj = this; + if (obj.Space === ptrType$1.nil) { + return ptrType$7.nil; + } + cc = NewCollision(); + cc.checkingObject = obj; + if (dx < 0) { + dx = math.Min(dx, -1); + } else if (dx > 0) { + dx = math.Max(dx, 1); + } + if (dy < 0) { + dy = math.Min(dy, -1); + } else if (dy > 0) { + dy = math.Max(dy, 1); + } + cc.dx = dx; + cc.dy = dy; + _tuple = obj.BoundsToSpace(dx, dy); + cx = _tuple[0]; + cy = _tuple[1]; + ex = _tuple[2]; + ey = _tuple[3]; + objectsAdded = $makeMap(ptrType$2.keyFor, []); + cellsAdded = $makeMap(ptrType.keyFor, []); + y = cy; + while (true) { + if (!(y <= ey)) { break; } + x = cx; + while (true) { + if (!(x <= ex)) { break; } + c = obj.Space.Cell(x, y); + if (!(c === ptrType.nil)) { + _ref = c.Objects; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + o = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + ignored = (_entry = obj.ignoreList[ptrType$2.keyFor(o)], _entry !== undefined ? _entry.v : false); + if (o === obj || ignored) { + _i++; + continue; + } + _tuple$1 = (_entry$1 = objectsAdded[ptrType$2.keyFor(o)], _entry$1 !== undefined ? [_entry$1.v, true] : [false, false]); + added = _tuple$1[1]; + if (((tags.$length === 0) || o.HasTags(tags)) && !added) { + cc.Objects = $append(cc.Objects, o); + _key = o; (objectsAdded || $throwRuntimeError("assignment to entry in nil map"))[ptrType$2.keyFor(_key)] = { k: _key, v: true }; + _tuple$2 = (_entry$2 = cellsAdded[ptrType.keyFor(c)], _entry$2 !== undefined ? [_entry$2.v, true] : [false, false]); + added$1 = _tuple$2[1]; + if (!added$1) { + cc.Cells = $append(cc.Cells, c); + _key$1 = c; (cellsAdded || $throwRuntimeError("assignment to entry in nil map"))[ptrType.keyFor(_key$1)] = { k: _key$1, v: true }; + } + _i++; + continue; + } + _i++; + } + } + x = x + (1) >> 0; + } + y = y + (1) >> 0; + } + if (cc.Objects.$length === 0) { + return ptrType$7.nil; + } + return cc; + }; + Object.prototype.Check = function(dx, dy, tags) { return this.$val.Check(dx, dy, tags); }; + Object.ptr.prototype.Overlaps = function(other) { + var obj, other; + obj = this; + return other.X <= obj.X + obj.W && other.X + other.W >= obj.X && other.Y <= obj.Y + obj.H && other.Y + other.H >= obj.Y; + }; + Object.prototype.Overlaps = function(other) { return this.$val.Overlaps(other); }; + Object.ptr.prototype.AddToIgnoreList = function(ignoreObj) { + var _key, ignoreObj, obj; + obj = this; + _key = ignoreObj; (obj.ignoreList || $throwRuntimeError("assignment to entry in nil map"))[ptrType$2.keyFor(_key)] = { k: _key, v: true }; + }; + Object.prototype.AddToIgnoreList = function(ignoreObj) { return this.$val.AddToIgnoreList(ignoreObj); }; + Object.ptr.prototype.RemoveFromIgnoreList = function(ignoreObj) { + var ignoreObj, obj; + obj = this; + delete obj.ignoreList[ptrType$2.keyFor(ignoreObj)]; + }; + Object.prototype.RemoveFromIgnoreList = function(ignoreObj) { return this.$val.RemoveFromIgnoreList(ignoreObj); }; + axpyUnitaryTo = function(dst, alpha, x, y) { + var _i, _ref, alpha, dim, dst, i, v, x, y; + dim = y.$length; + _ref = x; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + i = _i; + v = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + if (i === dim) { + return; + } + ((i < 0 || i >= dst.$length) ? ($throwRuntimeError("index out of range"), undefined) : dst.$array[dst.$offset + i] = alpha * v + ((i < 0 || i >= y.$length) ? ($throwRuntimeError("index out of range"), undefined) : y.$array[y.$offset + i])); + _i++; + } + }; + scalUnitaryTo = function(dst, alpha, x) { + var _i, _ref, alpha, dst, i, x; + _ref = x; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + i = _i; + ((i < 0 || i >= dst.$length) ? ($throwRuntimeError("index out of range"), undefined) : dst.$array[dst.$offset + i] = ((i < 0 || i >= dst.$length) ? ($throwRuntimeError("index out of range"), undefined) : dst.$array[dst.$offset + i]) * (alpha)); + _i++; + } + }; + NewCollision = function() { + return new Collision.ptr(ptrType$2.nil, 0, 0, new sliceType$3([]), sliceType$1.nil); + }; + $pkg.NewCollision = NewCollision; + Collision.ptr.prototype.HasTags = function(tags) { + var _i, _ref, cc, o, tags; + cc = this; + _ref = cc.Objects; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + o = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + if (o === cc.checkingObject) { + _i++; + continue; + } + if (o.HasTags(tags)) { + return true; + } + _i++; + } + return false; + }; + Collision.prototype.HasTags = function(tags) { return this.$val.HasTags(tags); }; + Collision.ptr.prototype.ObjectsByTags = function(tags) { + var _i, _ref, cc, o, objects, tags; + cc = this; + objects = new sliceType$3([]); + _ref = cc.Objects; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + o = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + if (o === cc.checkingObject) { + _i++; + continue; + } + if (o.HasTags(tags)) { + objects = $append(objects, o); + } + _i++; + } + return objects; + }; + Collision.prototype.ObjectsByTags = function(tags) { return this.$val.ObjectsByTags(tags); }; + Collision.ptr.prototype.ContactWithObject = function(object) { + var cc, delta, object; + cc = this; + delta = new Vector([0, 0]); + if (cc.dx < 0) { + (0 >= delta.$length ? ($throwRuntimeError("index out of range"), undefined) : delta.$array[delta.$offset + 0] = object.X + object.W - cc.checkingObject.X); + } else if (cc.dx > 0) { + (0 >= delta.$length ? ($throwRuntimeError("index out of range"), undefined) : delta.$array[delta.$offset + 0] = object.X - cc.checkingObject.W - cc.checkingObject.X); + } + if (cc.dy < 0) { + (1 >= delta.$length ? ($throwRuntimeError("index out of range"), undefined) : delta.$array[delta.$offset + 1] = object.Y + object.H - cc.checkingObject.Y); + } else if (cc.dy > 0) { + (1 >= delta.$length ? ($throwRuntimeError("index out of range"), undefined) : delta.$array[delta.$offset + 1] = object.Y - cc.checkingObject.H - cc.checkingObject.Y); + } + return delta; + }; + Collision.prototype.ContactWithObject = function(object) { return this.$val.ContactWithObject(object); }; + Collision.ptr.prototype.ContactWithCell = function(cell) { + var cc, cell, cx, cy, delta; + cc = this; + delta = new Vector([0, 0]); + cx = (($imul(cell.X, cc.checkingObject.Space.CellWidth))); + cy = (($imul(cell.Y, cc.checkingObject.Space.CellHeight))); + if (cc.dx < 0) { + (0 >= delta.$length ? ($throwRuntimeError("index out of range"), undefined) : delta.$array[delta.$offset + 0] = cx + (cc.checkingObject.Space.CellWidth) - cc.checkingObject.X); + } else if (cc.dx > 0) { + (0 >= delta.$length ? ($throwRuntimeError("index out of range"), undefined) : delta.$array[delta.$offset + 0] = cx - cc.checkingObject.W - cc.checkingObject.X); + } + if (cc.dy < 0) { + (1 >= delta.$length ? ($throwRuntimeError("index out of range"), undefined) : delta.$array[delta.$offset + 1] = cy + (cc.checkingObject.Space.CellHeight) - cc.checkingObject.Y); + } else if (cc.dy > 0) { + (1 >= delta.$length ? ($throwRuntimeError("index out of range"), undefined) : delta.$array[delta.$offset + 1] = cy - cc.checkingObject.H - cc.checkingObject.Y); + } + return delta; + }; + Collision.prototype.ContactWithCell = function(cell) { return this.$val.ContactWithCell(cell); }; + Collision.ptr.prototype.SlideAgainstCell = function(cell, avoidTags) { + var _tuple, _tuple$1, avoidTags, cc, ccX, ccY, cell, collidingCell, diffX, diffY, down, hX, hY, left, oX, oY, right, slide, sp, up, x; + cc = this; + sp = cc.checkingObject.Space; + collidingCell = (x = cc.Cells, (0 >= x.$length ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + 0])); + _tuple = sp.SpaceToWorld(collidingCell.X, collidingCell.Y); + ccX = _tuple[0]; + ccY = _tuple[1]; + hX = (sp.CellWidth) / 2; + hY = (sp.CellHeight) / 2; + ccX = ccX + (hX); + ccY = ccY + (hY); + _tuple$1 = cc.checkingObject.Center(); + oX = _tuple$1[0]; + oY = _tuple$1[1]; + diffX = oX - ccX; + diffY = oY - ccY; + left = sp.Cell(collidingCell.X - 1 >> 0, collidingCell.Y); + right = sp.Cell(collidingCell.X + 1 >> 0, collidingCell.Y); + up = sp.Cell(collidingCell.X, collidingCell.Y - 1 >> 0); + down = sp.Cell(collidingCell.X, collidingCell.Y + 1 >> 0); + slide = new Vector([0, 0]); + if (!((cc.dy === 0))) { + if (diffX > 0 && (right === ptrType.nil || !right.ContainsTags(avoidTags))) { + (0 >= slide.$length ? ($throwRuntimeError("index out of range"), undefined) : slide.$array[slide.$offset + 0] = ccX + hX - cc.checkingObject.X); + } else if (diffX < 0 && (left === ptrType.nil || !left.ContainsTags(avoidTags))) { + (0 >= slide.$length ? ($throwRuntimeError("index out of range"), undefined) : slide.$array[slide.$offset + 0] = ccX - hX - (cc.checkingObject.X + cc.checkingObject.W)); + } else { + return Vector.nil; + } + } + if (!((cc.dx === 0))) { + if (diffY > 0 && (down === ptrType.nil || !down.ContainsTags(avoidTags))) { + (1 >= slide.$length ? ($throwRuntimeError("index out of range"), undefined) : slide.$array[slide.$offset + 1] = ccY + hY - cc.checkingObject.Y); + } else if (diffY < 0 && (up === ptrType.nil || !up.ContainsTags(avoidTags))) { + (1 >= slide.$length ? ($throwRuntimeError("index out of range"), undefined) : slide.$array[slide.$offset + 1] = ccY - hY - (cc.checkingObject.Y + cc.checkingObject.H)); + } else { + return Vector.nil; + } + } + return slide; + }; + Collision.prototype.SlideAgainstCell = function(cell, avoidTags) { return this.$val.SlideAgainstCell(cell, avoidTags); }; + newCell = function(x, y) { + var x, y; + return new Cell.ptr(x, y, new sliceType$3([])); + }; + Cell.ptr.prototype.register = function(obj) { + var cell, obj; + cell = this; + if (!cell.Contains(obj)) { + cell.Objects = $append(cell.Objects, obj); + } + }; + Cell.prototype.register = function(obj) { return this.$val.register(obj); }; + Cell.ptr.prototype.unregister = function(obj) { + var _i, _ref, cell, i, o, obj, x, x$1, x$2; + cell = this; + _ref = cell.Objects; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + i = _i; + o = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + if (o === obj) { + (x$2 = cell.Objects, ((i < 0 || i >= x$2.$length) ? ($throwRuntimeError("index out of range"), undefined) : x$2.$array[x$2.$offset + i] = (x = cell.Objects, x$1 = cell.Objects.$length - 1 >> 0, ((x$1 < 0 || x$1 >= x.$length) ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + x$1])))); + cell.Objects = $subslice(cell.Objects, 0, (cell.Objects.$length - 1 >> 0)); + break; + } + _i++; + } + }; + Cell.prototype.unregister = function(obj) { return this.$val.unregister(obj); }; + Cell.ptr.prototype.Contains = function(obj) { + var _i, _ref, cell, o, obj; + cell = this; + _ref = cell.Objects; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + o = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + if (o === obj) { + return true; + } + _i++; + } + return false; + }; + Cell.prototype.Contains = function(obj) { return this.$val.Contains(obj); }; + Cell.ptr.prototype.ContainsTags = function(tags) { + var _i, _ref, cell, o, tags; + cell = this; + _ref = cell.Objects; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + o = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + if (o.HasTags(tags)) { + return true; + } + _i++; + } + return false; + }; + Cell.prototype.ContainsTags = function(tags) { return this.$val.ContainsTags(tags); }; + Cell.ptr.prototype.Occupied = function() { + var cell; + cell = this; + return cell.Objects.$length > 0; + }; + Cell.prototype.Occupied = function() { return this.$val.Occupied(); }; + Vector.methods = [{prop: "Clone", name: "Clone", pkg: "", typ: $funcType([], [Vector], false)}, {prop: "Add", name: "Add", pkg: "", typ: $funcType([sliceType$4], [Vector], true)}, {prop: "Sub", name: "Sub", pkg: "", typ: $funcType([sliceType$4], [Vector], true)}, {prop: "Scale", name: "Scale", pkg: "", typ: $funcType([$Float64], [Vector], false)}, {prop: "Equal", name: "Equal", pkg: "", typ: $funcType([Vector], [$Bool], false)}, {prop: "Magnitude", name: "Magnitude", pkg: "", typ: $funcType([], [$Float64], false)}, {prop: "Magnitude2", name: "Magnitude2", pkg: "", typ: $funcType([], [$Float64], false)}, {prop: "Unit", name: "Unit", pkg: "", typ: $funcType([], [Vector], false)}, {prop: "Dot", name: "Dot", pkg: "", typ: $funcType([Vector], [$Float64], false)}, {prop: "Cross", name: "Cross", pkg: "", typ: $funcType([Vector], [Vector], false)}, {prop: "Rotate", name: "Rotate", pkg: "", typ: $funcType([$Float64, sliceType$7], [Vector], true)}, {prop: "X", name: "X", pkg: "", typ: $funcType([], [$Float64], false)}, {prop: "Y", name: "Y", pkg: "", typ: $funcType([], [$Float64], false)}, {prop: "Z", name: "Z", pkg: "", typ: $funcType([], [$Float64], false)}]; + ptrType$1.methods = [{prop: "Add", name: "Add", pkg: "", typ: $funcType([sliceType$3], [], true)}, {prop: "Remove", name: "Remove", pkg: "", typ: $funcType([sliceType$3], [], true)}, {prop: "Objects", name: "Objects", pkg: "", typ: $funcType([], [sliceType$3], false)}, {prop: "Resize", name: "Resize", pkg: "", typ: $funcType([$Int, $Int], [], false)}, {prop: "Cell", name: "Cell", pkg: "", typ: $funcType([$Int, $Int], [ptrType], false)}, {prop: "CheckCells", name: "CheckCells", pkg: "", typ: $funcType([$Int, $Int, $Int, $Int, sliceType$6], [ptrType$2], true)}, {prop: "CheckCellsWorld", name: "CheckCellsWorld", pkg: "", typ: $funcType([$Float64, $Float64, $Float64, $Float64, sliceType$6], [ptrType$2], true)}, {prop: "UnregisterAllObjects", name: "UnregisterAllObjects", pkg: "", typ: $funcType([], [], false)}, {prop: "WorldToSpace", name: "WorldToSpace", pkg: "", typ: $funcType([$Float64, $Float64], [$Int, $Int], false)}, {prop: "SpaceToWorld", name: "SpaceToWorld", pkg: "", typ: $funcType([$Int, $Int], [$Float64, $Float64], false)}, {prop: "Height", name: "Height", pkg: "", typ: $funcType([], [$Int], false)}, {prop: "Width", name: "Width", pkg: "", typ: $funcType([], [$Int], false)}, {prop: "CellsInLine", name: "CellsInLine", pkg: "", typ: $funcType([$Int, $Int, $Int, $Int], [sliceType$1], false)}]; + ptrType$3.methods = [{prop: "Project", name: "Project", pkg: "", typ: $funcType([Vector], [Vector], false)}, {prop: "Normal", name: "Normal", pkg: "", typ: $funcType([], [Vector], false)}, {prop: "Vector", name: "Vector", pkg: "", typ: $funcType([], [Vector], false)}, {prop: "IntersectionPointsLine", name: "IntersectionPointsLine", pkg: "", typ: $funcType([ptrType$3], [Vector], false)}, {prop: "IntersectionPointsCircle", name: "IntersectionPointsCircle", pkg: "", typ: $funcType([ptrType$4], [sliceType$4], false)}]; + ptrType$5.methods = [{prop: "Clone", name: "Clone", pkg: "", typ: $funcType([], [Shape], false)}, {prop: "AddPointsVec", name: "AddPointsVec", pkg: "", typ: $funcType([sliceType$4], [], true)}, {prop: "AddPoints", name: "AddPoints", pkg: "", typ: $funcType([sliceType], [], true)}, {prop: "Lines", name: "Lines", pkg: "", typ: $funcType([], [sliceType$5], false)}, {prop: "Transformed", name: "Transformed", pkg: "", typ: $funcType([], [sliceType$4], false)}, {prop: "Bounds", name: "Bounds", pkg: "", typ: $funcType([], [Vector, Vector], false)}, {prop: "Position", name: "Position", pkg: "", typ: $funcType([], [$Float64, $Float64], false)}, {prop: "SetPosition", name: "SetPosition", pkg: "", typ: $funcType([$Float64, $Float64], [], false)}, {prop: "SetPositionVec", name: "SetPositionVec", pkg: "", typ: $funcType([Vector], [], false)}, {prop: "Move", name: "Move", pkg: "", typ: $funcType([$Float64, $Float64], [], false)}, {prop: "MoveVec", name: "MoveVec", pkg: "", typ: $funcType([Vector], [], false)}, {prop: "Center", name: "Center", pkg: "", typ: $funcType([], [Vector], false)}, {prop: "Project", name: "Project", pkg: "", typ: $funcType([Vector], [Projection], false)}, {prop: "SATAxes", name: "SATAxes", pkg: "", typ: $funcType([], [sliceType$4], false)}, {prop: "PointInside", name: "PointInside", pkg: "", typ: $funcType([Vector], [$Bool], false)}, {prop: "Intersection", name: "Intersection", pkg: "", typ: $funcType([$Float64, $Float64, Shape], [ptrType$6], false)}, {prop: "calculateMTV", name: "calculateMTV", pkg: "resolv", typ: $funcType([ptrType$6, Shape], [Vector], false)}, {prop: "ContainedBy", name: "ContainedBy", pkg: "", typ: $funcType([Shape], [$Bool], false)}, {prop: "FlipH", name: "FlipH", pkg: "", typ: $funcType([], [], false)}, {prop: "FlipV", name: "FlipV", pkg: "", typ: $funcType([], [], false)}, {prop: "ReverseVertexOrder", name: "ReverseVertexOrder", pkg: "", typ: $funcType([], [], false)}]; + ptrType$6.methods = [{prop: "LeftmostPoint", name: "LeftmostPoint", pkg: "", typ: $funcType([], [Vector], false)}, {prop: "RightmostPoint", name: "RightmostPoint", pkg: "", typ: $funcType([], [Vector], false)}, {prop: "TopmostPoint", name: "TopmostPoint", pkg: "", typ: $funcType([], [Vector], false)}, {prop: "BottommostPoint", name: "BottommostPoint", pkg: "", typ: $funcType([], [Vector], false)}]; + ptrType$4.methods = [{prop: "Clone", name: "Clone", pkg: "", typ: $funcType([], [Shape], false)}, {prop: "Bounds", name: "Bounds", pkg: "", typ: $funcType([], [Vector, Vector], false)}, {prop: "Intersection", name: "Intersection", pkg: "", typ: $funcType([$Float64, $Float64, Shape], [ptrType$6], false)}, {prop: "Move", name: "Move", pkg: "", typ: $funcType([$Float64, $Float64], [], false)}, {prop: "MoveVec", name: "MoveVec", pkg: "", typ: $funcType([Vector], [], false)}, {prop: "SetPosition", name: "SetPosition", pkg: "", typ: $funcType([$Float64, $Float64], [], false)}, {prop: "SetPositionVec", name: "SetPositionVec", pkg: "", typ: $funcType([Vector], [], false)}, {prop: "Position", name: "Position", pkg: "", typ: $funcType([], [$Float64, $Float64], false)}, {prop: "PointInside", name: "PointInside", pkg: "", typ: $funcType([Vector], [$Bool], false)}, {prop: "IntersectionPointsCircle", name: "IntersectionPointsCircle", pkg: "", typ: $funcType([ptrType$4], [sliceType$4], false)}]; + Projection.methods = [{prop: "Overlapping", name: "Overlapping", pkg: "", typ: $funcType([Projection], [$Bool], false)}, {prop: "Overlap", name: "Overlap", pkg: "", typ: $funcType([Projection], [$Float64], false)}, {prop: "IsInside", name: "IsInside", pkg: "", typ: $funcType([Projection], [$Bool], false)}]; + ptrType$2.methods = [{prop: "Clone", name: "Clone", pkg: "", typ: $funcType([], [ptrType$2], false)}, {prop: "Update", name: "Update", pkg: "", typ: $funcType([], [], false)}, {prop: "AddTags", name: "AddTags", pkg: "", typ: $funcType([sliceType$6], [], true)}, {prop: "RemoveTags", name: "RemoveTags", pkg: "", typ: $funcType([sliceType$6], [], true)}, {prop: "HasTags", name: "HasTags", pkg: "", typ: $funcType([sliceType$6], [$Bool], true)}, {prop: "Tags", name: "Tags", pkg: "", typ: $funcType([], [sliceType$6], false)}, {prop: "SetShape", name: "SetShape", pkg: "", typ: $funcType([Shape], [], false)}, {prop: "BoundsToSpace", name: "BoundsToSpace", pkg: "", typ: $funcType([$Float64, $Float64], [$Int, $Int, $Int, $Int], false)}, {prop: "SharesCells", name: "SharesCells", pkg: "", typ: $funcType([ptrType$2], [$Bool], false)}, {prop: "SharesCellsTags", name: "SharesCellsTags", pkg: "", typ: $funcType([sliceType$6], [$Bool], true)}, {prop: "Center", name: "Center", pkg: "", typ: $funcType([], [$Float64, $Float64], false)}, {prop: "SetCenter", name: "SetCenter", pkg: "", typ: $funcType([$Float64, $Float64], [], false)}, {prop: "CellPosition", name: "CellPosition", pkg: "", typ: $funcType([], [$Int, $Int], false)}, {prop: "SetRight", name: "SetRight", pkg: "", typ: $funcType([$Float64], [], false)}, {prop: "SetBottom", name: "SetBottom", pkg: "", typ: $funcType([$Float64], [], false)}, {prop: "Bottom", name: "Bottom", pkg: "", typ: $funcType([], [$Float64], false)}, {prop: "Right", name: "Right", pkg: "", typ: $funcType([], [$Float64], false)}, {prop: "SetBounds", name: "SetBounds", pkg: "", typ: $funcType([Vector, Vector], [], false)}, {prop: "Check", name: "Check", pkg: "", typ: $funcType([$Float64, $Float64, sliceType$6], [ptrType$7], true)}, {prop: "Overlaps", name: "Overlaps", pkg: "", typ: $funcType([ptrType$2], [$Bool], false)}, {prop: "AddToIgnoreList", name: "AddToIgnoreList", pkg: "", typ: $funcType([ptrType$2], [], false)}, {prop: "RemoveFromIgnoreList", name: "RemoveFromIgnoreList", pkg: "", typ: $funcType([ptrType$2], [], false)}]; + ptrType$7.methods = [{prop: "HasTags", name: "HasTags", pkg: "", typ: $funcType([sliceType$6], [$Bool], true)}, {prop: "ObjectsByTags", name: "ObjectsByTags", pkg: "", typ: $funcType([sliceType$6], [sliceType$3], true)}, {prop: "ContactWithObject", name: "ContactWithObject", pkg: "", typ: $funcType([ptrType$2], [Vector], false)}, {prop: "ContactWithCell", name: "ContactWithCell", pkg: "", typ: $funcType([ptrType], [Vector], false)}, {prop: "SlideAgainstCell", name: "SlideAgainstCell", pkg: "", typ: $funcType([ptrType, sliceType$6], [Vector], true)}]; + ptrType.methods = [{prop: "register", name: "register", pkg: "resolv", typ: $funcType([ptrType$2], [], false)}, {prop: "unregister", name: "unregister", pkg: "resolv", typ: $funcType([ptrType$2], [], false)}, {prop: "Contains", name: "Contains", pkg: "", typ: $funcType([ptrType$2], [$Bool], false)}, {prop: "ContainsTags", name: "ContainsTags", pkg: "", typ: $funcType([sliceType$6], [$Bool], true)}, {prop: "Occupied", name: "Occupied", pkg: "", typ: $funcType([], [$Bool], false)}]; + Vector.init($Float64); + Space.init("", [{prop: "Cells", name: "Cells", embedded: false, exported: true, typ: sliceType$2, tag: ""}, {prop: "CellWidth", name: "CellWidth", embedded: false, exported: true, typ: $Int, tag: ""}, {prop: "CellHeight", name: "CellHeight", embedded: false, exported: true, typ: $Int, tag: ""}]); + Shape.init([{prop: "Bounds", name: "Bounds", pkg: "", typ: $funcType([], [Vector, Vector], false)}, {prop: "Clone", name: "Clone", pkg: "", typ: $funcType([], [Shape], false)}, {prop: "Intersection", name: "Intersection", pkg: "", typ: $funcType([$Float64, $Float64, Shape], [ptrType$6], false)}, {prop: "Position", name: "Position", pkg: "", typ: $funcType([], [$Float64, $Float64], false)}, {prop: "SetPosition", name: "SetPosition", pkg: "", typ: $funcType([$Float64, $Float64], [], false)}]); + Line.init("", [{prop: "Start", name: "Start", embedded: false, exported: true, typ: Vector, tag: ""}, {prop: "End", name: "End", embedded: false, exported: true, typ: Vector, tag: ""}]); + ConvexPolygon.init("", [{prop: "Points", name: "Points", embedded: false, exported: true, typ: sliceType$4, tag: ""}, {prop: "X", name: "X", embedded: false, exported: true, typ: $Float64, tag: ""}, {prop: "Y", name: "Y", embedded: false, exported: true, typ: $Float64, tag: ""}, {prop: "Closed", name: "Closed", embedded: false, exported: true, typ: $Bool, tag: ""}]); + ContactSet.init("", [{prop: "Points", name: "Points", embedded: false, exported: true, typ: sliceType$4, tag: ""}, {prop: "MTV", name: "MTV", embedded: false, exported: true, typ: Vector, tag: ""}, {prop: "Center", name: "Center", embedded: false, exported: true, typ: Vector, tag: ""}]); + Circle.init("", [{prop: "X", name: "X", embedded: false, exported: true, typ: $Float64, tag: ""}, {prop: "Y", name: "Y", embedded: false, exported: true, typ: $Float64, tag: ""}, {prop: "Radius", name: "Radius", embedded: false, exported: true, typ: $Float64, tag: ""}]); + Projection.init("", [{prop: "Min", name: "Min", embedded: false, exported: true, typ: $Float64, tag: ""}, {prop: "Max", name: "Max", embedded: false, exported: true, typ: $Float64, tag: ""}]); + Object.init("resolv", [{prop: "Shape", name: "Shape", embedded: false, exported: true, typ: Shape, tag: ""}, {prop: "Space", name: "Space", embedded: false, exported: true, typ: ptrType$1, tag: ""}, {prop: "X", name: "X", embedded: false, exported: true, typ: $Float64, tag: ""}, {prop: "Y", name: "Y", embedded: false, exported: true, typ: $Float64, tag: ""}, {prop: "W", name: "W", embedded: false, exported: true, typ: $Float64, tag: ""}, {prop: "H", name: "H", embedded: false, exported: true, typ: $Float64, tag: ""}, {prop: "TouchingCells", name: "TouchingCells", embedded: false, exported: true, typ: sliceType$1, tag: ""}, {prop: "Data", name: "Data", embedded: false, exported: true, typ: $emptyInterface, tag: ""}, {prop: "ignoreList", name: "ignoreList", embedded: false, exported: false, typ: mapType, tag: ""}, {prop: "tags", name: "tags", embedded: false, exported: false, typ: sliceType$6, tag: ""}]); + Collision.init("resolv", [{prop: "checkingObject", name: "checkingObject", embedded: false, exported: false, typ: ptrType$2, tag: ""}, {prop: "dx", name: "dx", embedded: false, exported: false, typ: $Float64, tag: ""}, {prop: "dy", name: "dy", embedded: false, exported: false, typ: $Float64, tag: ""}, {prop: "Objects", name: "Objects", embedded: false, exported: true, typ: sliceType$3, tag: ""}, {prop: "Cells", name: "Cells", embedded: false, exported: true, typ: sliceType$1, tag: ""}]); + Cell.init("", [{prop: "X", name: "X", embedded: false, exported: true, typ: $Int, tag: ""}, {prop: "Y", name: "Y", embedded: false, exported: true, typ: $Int, tag: ""}, {prop: "Objects", name: "Objects", embedded: false, exported: true, typ: sliceType$3, tag: ""}]); + $init = function() { + $pkg.$init = function() {}; + /* */ var $f, $c = false, $s = 0, $r; if (this !== undefined && this.$blk !== undefined) { $f = this; $c = true; $s = $f.$s; $r = $f.$r; } s: while (true) { switch ($s) { case 0: + $r = math.$init(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + /* */ } return; } if ($f === undefined) { $f = { $blk: $init }; } $f.$s = $s; $f.$r = $r; return $f; + }; + $pkg.$init = $init; + return $pkg; +})(); +$packages["jsexport/battle"] = (function() { + var $pkg = {}, $init, math, resolv, Vec2D, Polygon2D, PlayerDownsync, InputFrameDecoded, Barrier, Bullet, MeleeBullet, FireballBullet, Skill, RoomDownsyncFrame, InputFrameDownsync, NpcPatrolCue, RingBuffer, SkillMapperType, CharacterConfig, SatResult, sliceType, sliceType$1, sliceType$2, ptrType, ptrType$1, ptrType$2, sliceType$3, sliceType$4, ptrType$3, ptrType$4, ptrType$5, ptrType$6, ptrType$7, ptrType$8, sliceType$5, sliceType$6, sliceType$7, sliceType$8, sliceType$9, sliceType$10, ptrType$9, sliceType$11, sliceType$12, ptrType$10, sliceType$13, ptrType$11, mapType, ptrType$12, skills, inAirSet, noOpSet, invinsibleSet, nonAttackingSet, NewRingBuffer, ShouldGenerateInputFrameUpsync, ConvertToDelayedInputFrameId, ConvertToNoDelayInputFrameId, ConvertToFirstUsedRenderFrameId, ConvertToLastUsedRenderFrameId, decodeInput, CalcPushbacks, isPolygonPairOverlapped, isPolygonPairSeparatedByDir, WorldToVirtualGridPos, VirtualGridToWorldPos, WorldToPolygonColliderBLPos, PolygonColliderBLToWorldPos, PolygonColliderBLToVirtualGridPos, calcHardPushbacksNorms, deriveOpPattern, ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame, GenerateRectCollider, generateRectColliderInCollisionSpace, GenerateConvexPolygonCollider, AlignPolygon2DToBoundingBox; + math = $packages["math"]; + resolv = $packages["resolv"]; + Vec2D = $pkg.Vec2D = $newType(0, $kindStruct, "battle.Vec2D", true, "jsexport/battle", true, function(X_, Y_) { + this.$val = this; + if (arguments.length === 0) { + this.X = 0; + this.Y = 0; + return; + } + this.X = X_; + this.Y = Y_; + }); + Polygon2D = $pkg.Polygon2D = $newType(0, $kindStruct, "battle.Polygon2D", true, "jsexport/battle", true, function(Anchor_, Points_) { + this.$val = this; + if (arguments.length === 0) { + this.Anchor = ptrType$10.nil; + this.Points = sliceType$13.nil; + return; + } + this.Anchor = Anchor_; + this.Points = Points_; + }); + PlayerDownsync = $pkg.PlayerDownsync = $newType(0, $kindStruct, "battle.PlayerDownsync", true, "jsexport/battle", true, function(Id_, VirtualGridX_, VirtualGridY_, DirX_, DirY_, VelX_, VelY_, Speed_, BattleState_, JoinIndex_, ColliderRadius_, Removed_, Score_, LastMoveGmtMillis_, FramesToRecover_, FramesInChState_, Hp_, MaxHp_, CharacterState_, InAir_, OnWall_, ActiveSkillId_, ActiveSkillHit_, FramesInvinsible_, BulletTeamId_, ChCollisionTeamId_) { + this.$val = this; + if (arguments.length === 0) { + this.Id = 0; + this.VirtualGridX = 0; + this.VirtualGridY = 0; + this.DirX = 0; + this.DirY = 0; + this.VelX = 0; + this.VelY = 0; + this.Speed = 0; + this.BattleState = 0; + this.JoinIndex = 0; + this.ColliderRadius = 0; + this.Removed = false; + this.Score = 0; + this.LastMoveGmtMillis = 0; + this.FramesToRecover = 0; + this.FramesInChState = 0; + this.Hp = 0; + this.MaxHp = 0; + this.CharacterState = 0; + this.InAir = false; + this.OnWall = false; + this.ActiveSkillId = 0; + this.ActiveSkillHit = 0; + this.FramesInvinsible = 0; + this.BulletTeamId = 0; + this.ChCollisionTeamId = 0; + return; + } + this.Id = Id_; + this.VirtualGridX = VirtualGridX_; + this.VirtualGridY = VirtualGridY_; + this.DirX = DirX_; + this.DirY = DirY_; + this.VelX = VelX_; + this.VelY = VelY_; + this.Speed = Speed_; + this.BattleState = BattleState_; + this.JoinIndex = JoinIndex_; + this.ColliderRadius = ColliderRadius_; + this.Removed = Removed_; + this.Score = Score_; + this.LastMoveGmtMillis = LastMoveGmtMillis_; + this.FramesToRecover = FramesToRecover_; + this.FramesInChState = FramesInChState_; + this.Hp = Hp_; + this.MaxHp = MaxHp_; + this.CharacterState = CharacterState_; + this.InAir = InAir_; + this.OnWall = OnWall_; + this.ActiveSkillId = ActiveSkillId_; + this.ActiveSkillHit = ActiveSkillHit_; + this.FramesInvinsible = FramesInvinsible_; + this.BulletTeamId = BulletTeamId_; + this.ChCollisionTeamId = ChCollisionTeamId_; + }); + InputFrameDecoded = $pkg.InputFrameDecoded = $newType(0, $kindStruct, "battle.InputFrameDecoded", true, "jsexport/battle", true, function(Dx_, Dy_, BtnALevel_, BtnBLevel_) { + this.$val = this; + if (arguments.length === 0) { + this.Dx = 0; + this.Dy = 0; + this.BtnALevel = 0; + this.BtnBLevel = 0; + return; + } + this.Dx = Dx_; + this.Dy = Dy_; + this.BtnALevel = BtnALevel_; + this.BtnBLevel = BtnBLevel_; + }); + Barrier = $pkg.Barrier = $newType(0, $kindStruct, "battle.Barrier", true, "jsexport/battle", true, function(Boundary_) { + this.$val = this; + if (arguments.length === 0) { + this.Boundary = ptrType$11.nil; + return; + } + this.Boundary = Boundary_; + }); + Bullet = $pkg.Bullet = $newType(0, $kindStruct, "battle.Bullet", true, "jsexport/battle", true, function(BulletLocalId_, OriginatedRenderFrameId_, OffenderJoinIndex_, StartupFrames_, CancellableStFrame_, CancellableEdFrame_, ActiveFrames_, HitStunFrames_, BlockStunFrames_, PushbackVelX_, PushbackVelY_, Damage_, SelfLockVelX_, SelfLockVelY_, HitboxOffsetX_, HitboxOffsetY_, HitboxSizeX_, HitboxSizeY_, BlowUp_, CancelTransit_, TeamId_) { + this.$val = this; + if (arguments.length === 0) { + this.BulletLocalId = 0; + this.OriginatedRenderFrameId = 0; + this.OffenderJoinIndex = 0; + this.StartupFrames = 0; + this.CancellableStFrame = 0; + this.CancellableEdFrame = 0; + this.ActiveFrames = 0; + this.HitStunFrames = 0; + this.BlockStunFrames = 0; + this.PushbackVelX = 0; + this.PushbackVelY = 0; + this.Damage = 0; + this.SelfLockVelX = 0; + this.SelfLockVelY = 0; + this.HitboxOffsetX = 0; + this.HitboxOffsetY = 0; + this.HitboxSizeX = 0; + this.HitboxSizeY = 0; + this.BlowUp = false; + this.CancelTransit = false; + this.TeamId = 0; + return; + } + this.BulletLocalId = BulletLocalId_; + this.OriginatedRenderFrameId = OriginatedRenderFrameId_; + this.OffenderJoinIndex = OffenderJoinIndex_; + this.StartupFrames = StartupFrames_; + this.CancellableStFrame = CancellableStFrame_; + this.CancellableEdFrame = CancellableEdFrame_; + this.ActiveFrames = ActiveFrames_; + this.HitStunFrames = HitStunFrames_; + this.BlockStunFrames = BlockStunFrames_; + this.PushbackVelX = PushbackVelX_; + this.PushbackVelY = PushbackVelY_; + this.Damage = Damage_; + this.SelfLockVelX = SelfLockVelX_; + this.SelfLockVelY = SelfLockVelY_; + this.HitboxOffsetX = HitboxOffsetX_; + this.HitboxOffsetY = HitboxOffsetY_; + this.HitboxSizeX = HitboxSizeX_; + this.HitboxSizeY = HitboxSizeY_; + this.BlowUp = BlowUp_; + this.CancelTransit = CancelTransit_; + this.TeamId = TeamId_; + }); + MeleeBullet = $pkg.MeleeBullet = $newType(0, $kindStruct, "battle.MeleeBullet", true, "jsexport/battle", true, function(Bullet_) { + this.$val = this; + if (arguments.length === 0) { + this.Bullet = new Bullet.ptr(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, false, false, 0); + return; + } + this.Bullet = Bullet_; + }); + FireballBullet = $pkg.FireballBullet = $newType(0, $kindStruct, "battle.FireballBullet", true, "jsexport/battle", true, function(VirtualGridX_, VirtualGridY_, DirX_, DirY_, VelX_, VelY_, Speed_, SpeciesId_, Bullet_) { + this.$val = this; + if (arguments.length === 0) { + this.VirtualGridX = 0; + this.VirtualGridY = 0; + this.DirX = 0; + this.DirY = 0; + this.VelX = 0; + this.VelY = 0; + this.Speed = 0; + this.SpeciesId = 0; + this.Bullet = new Bullet.ptr(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, false, false, 0); + return; + } + this.VirtualGridX = VirtualGridX_; + this.VirtualGridY = VirtualGridY_; + this.DirX = DirX_; + this.DirY = DirY_; + this.VelX = VelX_; + this.VelY = VelY_; + this.Speed = Speed_; + this.SpeciesId = SpeciesId_; + this.Bullet = Bullet_; + }); + Skill = $pkg.Skill = $newType(0, $kindStruct, "battle.Skill", true, "jsexport/battle", true, function(BattleLocalId_, RecoveryFrames_, RecoveryFramesOnBlock_, RecoveryFramesOnHit_, ReleaseTriggerType_, BoundChState_, Hits_) { + this.$val = this; + if (arguments.length === 0) { + this.BattleLocalId = 0; + this.RecoveryFrames = 0; + this.RecoveryFramesOnBlock = 0; + this.RecoveryFramesOnHit = 0; + this.ReleaseTriggerType = 0; + this.BoundChState = 0; + this.Hits = sliceType$2.nil; + return; + } + this.BattleLocalId = BattleLocalId_; + this.RecoveryFrames = RecoveryFrames_; + this.RecoveryFramesOnBlock = RecoveryFramesOnBlock_; + this.RecoveryFramesOnHit = RecoveryFramesOnHit_; + this.ReleaseTriggerType = ReleaseTriggerType_; + this.BoundChState = BoundChState_; + this.Hits = Hits_; + }); + RoomDownsyncFrame = $pkg.RoomDownsyncFrame = $newType(0, $kindStruct, "battle.RoomDownsyncFrame", true, "jsexport/battle", true, function(Id_, PlayersArr_, CountdownNanos_, MeleeBullets_, FireballBullets_, BackendUnconfirmedMask_, ShouldForceResync_, BulletLocalIdCounter_) { + this.$val = this; + if (arguments.length === 0) { + this.Id = 0; + this.PlayersArr = sliceType$6.nil; + this.CountdownNanos = new $Int64(0, 0); + this.MeleeBullets = sliceType$7.nil; + this.FireballBullets = sliceType$8.nil; + this.BackendUnconfirmedMask = new $Uint64(0, 0); + this.ShouldForceResync = false; + this.BulletLocalIdCounter = 0; + return; + } + this.Id = Id_; + this.PlayersArr = PlayersArr_; + this.CountdownNanos = CountdownNanos_; + this.MeleeBullets = MeleeBullets_; + this.FireballBullets = FireballBullets_; + this.BackendUnconfirmedMask = BackendUnconfirmedMask_; + this.ShouldForceResync = ShouldForceResync_; + this.BulletLocalIdCounter = BulletLocalIdCounter_; + }); + InputFrameDownsync = $pkg.InputFrameDownsync = $newType(0, $kindStruct, "battle.InputFrameDownsync", true, "jsexport/battle", true, function(InputFrameId_, InputList_, ConfirmedList_) { + this.$val = this; + if (arguments.length === 0) { + this.InputFrameId = 0; + this.InputList = sliceType$5.nil; + this.ConfirmedList = new $Uint64(0, 0); + return; + } + this.InputFrameId = InputFrameId_; + this.InputList = InputList_; + this.ConfirmedList = ConfirmedList_; + }); + NpcPatrolCue = $pkg.NpcPatrolCue = $newType(0, $kindStruct, "battle.NpcPatrolCue", true, "jsexport/battle", true, function(FlAct_, FrAct_, X_, Y_) { + this.$val = this; + if (arguments.length === 0) { + this.FlAct = new $Uint64(0, 0); + this.FrAct = new $Uint64(0, 0); + this.X = 0; + this.Y = 0; + return; + } + this.FlAct = FlAct_; + this.FrAct = FrAct_; + this.X = X_; + this.Y = Y_; + }); + RingBuffer = $pkg.RingBuffer = $newType(0, $kindStruct, "battle.RingBuffer", true, "jsexport/battle", true, function(Ed_, St_, EdFrameId_, StFrameId_, N_, Cnt_, Eles_) { + this.$val = this; + if (arguments.length === 0) { + this.Ed = 0; + this.St = 0; + this.EdFrameId = 0; + this.StFrameId = 0; + this.N = 0; + this.Cnt = 0; + this.Eles = sliceType$2.nil; + return; + } + this.Ed = Ed_; + this.St = St_; + this.EdFrameId = EdFrameId_; + this.StFrameId = StFrameId_; + this.N = N_; + this.Cnt = Cnt_; + this.Eles = Eles_; + }); + SkillMapperType = $pkg.SkillMapperType = $newType(4, $kindFunc, "battle.SkillMapperType", true, "jsexport/battle", true, null); + CharacterConfig = $pkg.CharacterConfig = $newType(0, $kindStruct, "battle.CharacterConfig", true, "jsexport/battle", true, function(SpeciesId_, SpeciesName_, InAirIdleFrameIdxTurningPoint_, InAirIdleFrameIdxTurnedCycle_, LayDownFrames_, LayDownFramesToRecover_, GetUpInvinsibleFrames_, GetUpFramesToRecover_, Speed_, JumpingInitVelY_, SkillMapper_) { + this.$val = this; + if (arguments.length === 0) { + this.SpeciesId = 0; + this.SpeciesName = ""; + this.InAirIdleFrameIdxTurningPoint = 0; + this.InAirIdleFrameIdxTurnedCycle = 0; + this.LayDownFrames = 0; + this.LayDownFramesToRecover = 0; + this.GetUpInvinsibleFrames = 0; + this.GetUpFramesToRecover = 0; + this.Speed = 0; + this.JumpingInitVelY = 0; + this.SkillMapper = $throwNilPointerError; + return; + } + this.SpeciesId = SpeciesId_; + this.SpeciesName = SpeciesName_; + this.InAirIdleFrameIdxTurningPoint = InAirIdleFrameIdxTurningPoint_; + this.InAirIdleFrameIdxTurnedCycle = InAirIdleFrameIdxTurnedCycle_; + this.LayDownFrames = LayDownFrames_; + this.LayDownFramesToRecover = LayDownFramesToRecover_; + this.GetUpInvinsibleFrames = GetUpInvinsibleFrames_; + this.GetUpFramesToRecover = GetUpFramesToRecover_; + this.Speed = Speed_; + this.JumpingInitVelY = JumpingInitVelY_; + this.SkillMapper = SkillMapper_; + }); + SatResult = $pkg.SatResult = $newType(0, $kindStruct, "battle.SatResult", true, "jsexport/battle", true, function(Overlap_, OverlapX_, OverlapY_, AContainedInB_, BContainedInA_, Axis_) { + this.$val = this; + if (arguments.length === 0) { + this.Overlap = 0; + this.OverlapX = 0; + this.OverlapY = 0; + this.AContainedInB = false; + this.BContainedInA = false; + this.Axis = resolv.Vector.nil; + return; + } + this.Overlap = Overlap_; + this.OverlapX = OverlapX_; + this.OverlapY = OverlapY_; + this.AContainedInB = AContainedInB_; + this.BContainedInA = BContainedInA_; + this.Axis = Axis_; + }); + sliceType = $sliceType($Int32); + sliceType$1 = $sliceType(sliceType); + sliceType$2 = $sliceType($emptyInterface); + ptrType = $ptrType(Skill); + ptrType$1 = $ptrType(MeleeBullet); + ptrType$2 = $ptrType(SatResult); + sliceType$3 = $sliceType(Vec2D); + sliceType$4 = $sliceType($String); + ptrType$3 = $ptrType(resolv.Collision); + ptrType$4 = $ptrType(sliceType$3); + ptrType$5 = $ptrType(PlayerDownsync); + ptrType$6 = $ptrType(FireballBullet); + ptrType$7 = $ptrType(resolv.ConvexPolygon); + ptrType$8 = $ptrType(InputFrameDownsync); + sliceType$5 = $sliceType($Uint64); + sliceType$6 = $sliceType(ptrType$5); + sliceType$7 = $sliceType(ptrType$1); + sliceType$8 = $sliceType(ptrType$6); + sliceType$9 = $sliceType(ptrType$4); + sliceType$10 = $sliceType($Bool); + ptrType$9 = $ptrType(resolv.Object); + sliceType$11 = $sliceType(ptrType$9); + sliceType$12 = $sliceType($Float64); + ptrType$10 = $ptrType(Vec2D); + sliceType$13 = $sliceType(ptrType$10); + ptrType$11 = $ptrType(Polygon2D); + mapType = $mapType($Int, $Int); + ptrType$12 = $ptrType(RingBuffer); + NewRingBuffer = function(n) { + var n; + return new RingBuffer.ptr(0, 0, 0, 0, n, 0, $makeSlice(sliceType$2, n)); + }; + $pkg.NewRingBuffer = NewRingBuffer; + RingBuffer.ptr.prototype.Put = function(pItem) { + var pItem, rb, x, x$1; + rb = this; + while (true) { + if (!(0 < rb.Cnt && rb.Cnt >= rb.N)) { break; } + rb.Pop(); + } + (x = rb.Eles, x$1 = rb.Ed, ((x$1 < 0 || x$1 >= x.$length) ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + x$1] = pItem)); + rb.EdFrameId = rb.EdFrameId + (1) >> 0; + rb.Cnt = rb.Cnt + (1) >> 0; + rb.Ed = rb.Ed + (1) >> 0; + if (rb.Ed >= rb.N) { + rb.Ed = rb.Ed - (rb.N) >> 0; + } + }; + RingBuffer.prototype.Put = function(pItem) { return this.$val.Put(pItem); }; + RingBuffer.ptr.prototype.Pop = function() { + var pItem, rb, x, x$1; + rb = this; + if (0 === rb.Cnt) { + return $ifaceNil; + } + pItem = (x = rb.Eles, x$1 = rb.St, ((x$1 < 0 || x$1 >= x.$length) ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + x$1])); + rb.StFrameId = rb.StFrameId + (1) >> 0; + rb.Cnt = rb.Cnt - (1) >> 0; + rb.St = rb.St + (1) >> 0; + if (rb.St >= rb.N) { + rb.St = rb.St - (rb.N) >> 0; + } + return pItem; + }; + RingBuffer.prototype.Pop = function() { return this.$val.Pop(); }; + RingBuffer.ptr.prototype.GetArrIdxByOffset = function(offsetFromSt) { + var arrIdx, offsetFromSt, rb; + rb = this; + if ((0 === rb.Cnt) || 0 > offsetFromSt) { + return -1; + } + arrIdx = rb.St + offsetFromSt >> 0; + if (rb.St < rb.Ed) { + if (rb.St <= arrIdx && arrIdx < rb.Ed) { + return arrIdx; + } + } else { + if (arrIdx >= rb.N) { + arrIdx = arrIdx - (rb.N) >> 0; + } + if (arrIdx >= rb.St || arrIdx < rb.Ed) { + return arrIdx; + } + } + return -1; + }; + RingBuffer.prototype.GetArrIdxByOffset = function(offsetFromSt) { return this.$val.GetArrIdxByOffset(offsetFromSt); }; + RingBuffer.ptr.prototype.GetByOffset = function(offsetFromSt) { + var arrIdx, offsetFromSt, rb, x; + rb = this; + arrIdx = rb.GetArrIdxByOffset(offsetFromSt); + if (-1 === arrIdx) { + return $ifaceNil; + } + return (x = rb.Eles, ((arrIdx < 0 || arrIdx >= x.$length) ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + arrIdx])); + }; + RingBuffer.prototype.GetByOffset = function(offsetFromSt) { return this.$val.GetByOffset(offsetFromSt); }; + RingBuffer.ptr.prototype.GetByFrameId = function(frameId) { + var frameId, rb; + rb = this; + if (frameId >= rb.EdFrameId || frameId < rb.StFrameId) { + return $ifaceNil; + } + return rb.GetByOffset(frameId - rb.StFrameId >> 0); + }; + RingBuffer.prototype.GetByFrameId = function(frameId) { return this.$val.GetByFrameId(frameId); }; + RingBuffer.ptr.prototype.SetByFrameId = function(pItem, frameId) { + var _tmp, _tmp$1, _tmp$2, _tmp$3, _tmp$4, _tmp$5, arrIdx, frameId, oldEdFrameId, oldStFrameId, pItem, rb, ret, x; + rb = this; + _tmp = rb.StFrameId; + _tmp$1 = rb.EdFrameId; + oldStFrameId = _tmp; + oldEdFrameId = _tmp$1; + if (frameId < oldStFrameId) { + return [2, oldStFrameId, oldEdFrameId]; + } + if (oldEdFrameId > frameId) { + arrIdx = rb.GetArrIdxByOffset(frameId - rb.StFrameId >> 0); + if (!((-1 === arrIdx))) { + (x = rb.Eles, ((arrIdx < 0 || arrIdx >= x.$length) ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + arrIdx] = pItem)); + return [0, oldStFrameId, oldEdFrameId]; + } + } + ret = 0; + if (oldEdFrameId < frameId) { + _tmp$2 = 0; + _tmp$3 = 0; + rb.St = _tmp$2; + rb.Ed = _tmp$3; + _tmp$4 = frameId; + _tmp$5 = frameId; + rb.StFrameId = _tmp$4; + rb.EdFrameId = _tmp$5; + rb.Cnt = 0; + ret = 1; + } + rb.Put(pItem); + return [ret, oldStFrameId, oldEdFrameId]; + }; + RingBuffer.prototype.SetByFrameId = function(pItem, frameId) { return this.$val.SetByFrameId(pItem, frameId); }; + ShouldGenerateInputFrameUpsync = function(renderFrameId) { + var renderFrameId; + return (((renderFrameId & 3)) === 0); + }; + $pkg.ShouldGenerateInputFrameUpsync = ShouldGenerateInputFrameUpsync; + ConvertToDelayedInputFrameId = function(renderFrameId) { + var renderFrameId; + if (renderFrameId < 8) { + return 0; + } + return (((renderFrameId - 8 >> 0)) >> 2 >> 0); + }; + $pkg.ConvertToDelayedInputFrameId = ConvertToDelayedInputFrameId; + ConvertToNoDelayInputFrameId = function(renderFrameId) { + var renderFrameId; + return (renderFrameId >> 2 >> 0); + }; + $pkg.ConvertToNoDelayInputFrameId = ConvertToNoDelayInputFrameId; + ConvertToFirstUsedRenderFrameId = function(inputFrameId) { + var inputFrameId; + return (((inputFrameId << 2 >> 0)) + 8 >> 0); + }; + $pkg.ConvertToFirstUsedRenderFrameId = ConvertToFirstUsedRenderFrameId; + ConvertToLastUsedRenderFrameId = function(inputFrameId) { + var inputFrameId; + return (((((inputFrameId << 2 >> 0)) + 8 >> 0) + 4 >> 0) - 1 >> 0); + }; + $pkg.ConvertToLastUsedRenderFrameId = ConvertToLastUsedRenderFrameId; + decodeInput = function(encodedInput) { + var btnALevel, btnBLevel, encodedDirection, encodedInput, x, x$1, x$2, x$3; + encodedDirection = new $Uint64(encodedInput.$high & 0, (encodedInput.$low & 15) >>> 0); + btnALevel = (((x = $shiftRightUint64(encodedInput, 4), new $Uint64(x.$high & 0, (x.$low & 1) >>> 0)).$low >> 0)); + btnBLevel = (((x$1 = $shiftRightUint64(encodedInput, 5), new $Uint64(x$1.$high & 0, (x$1.$low & 1) >>> 0)).$low >> 0)); + return new InputFrameDecoded.ptr((x$2 = (($flatten64(encodedDirection) < 0 || $flatten64(encodedDirection) >= $pkg.DIRECTION_DECODER.$length) ? ($throwRuntimeError("index out of range"), undefined) : $pkg.DIRECTION_DECODER.$array[$pkg.DIRECTION_DECODER.$offset + $flatten64(encodedDirection)]), (0 >= x$2.$length ? ($throwRuntimeError("index out of range"), undefined) : x$2.$array[x$2.$offset + 0])), (x$3 = (($flatten64(encodedDirection) < 0 || $flatten64(encodedDirection) >= $pkg.DIRECTION_DECODER.$length) ? ($throwRuntimeError("index out of range"), undefined) : $pkg.DIRECTION_DECODER.$array[$pkg.DIRECTION_DECODER.$offset + $flatten64(encodedDirection)]), (1 >= x$3.$length ? ($throwRuntimeError("index out of range"), undefined) : x$3.$array[x$3.$offset + 1])), btnALevel, btnBLevel); + }; + CalcPushbacks = function(oldDx, oldDy, playerShape, barrierShape) { + var {$24r, $24r$1, _tmp, _tmp$1, _tuple, barrierShape, oldDx, oldDy, origX, origY, overlapResult, overlapped, playerShape, pushbackX, pushbackY, $s, $deferred, $r, $c} = $restore(this, {oldDx, oldDy, playerShape, barrierShape}); + /* */ $s = $s || 0; var $err = null; try { s: while (true) { switch ($s) { case 0: $deferred = []; $curGoroutine.deferStack.push($deferred); + origX = [origX]; + origY = [origY]; + playerShape = [playerShape]; + _tuple = playerShape[0].Position(); + origX[0] = _tuple[0]; + origY[0] = _tuple[1]; + $deferred.push([(function(origX, origY, playerShape) { return function() { + playerShape[0].SetPosition(origX[0], origY[0]); + }; })(origX, origY, playerShape), []]); + playerShape[0].SetPosition(origX[0] + oldDx, origY[0] + oldDy); + overlapResult = new SatResult.ptr(0, 0, 0, true, true, new resolv.Vector([0, 0])); + overlapped = isPolygonPairOverlapped(playerShape[0], barrierShape, overlapResult); + /* */ if (overlapped) { $s = 1; continue; } + /* */ $s = 2; continue; + /* if (overlapped) { */ case 1: + _tmp = overlapResult.Overlap * overlapResult.OverlapX; + _tmp$1 = overlapResult.Overlap * overlapResult.OverlapY; + pushbackX = _tmp; + pushbackY = _tmp$1; + $24r = [true, pushbackX, pushbackY, overlapResult]; + $s = 4; case 4: return $24r; + /* } else { */ case 2: + $24r$1 = [false, 0, 0, overlapResult]; + $s = 5; case 5: return $24r$1; + /* } */ case 3: + $s = -1; return [false, 0, 0, ptrType$2.nil]; + /* */ } return; } } catch(err) { $err = err; $s = -1; return [false, 0, 0, ptrType$2.nil]; } finally { $callDeferred($deferred, $err); if($curGoroutine.asleep) { var $f = {$blk: CalcPushbacks, $c: true, $r, $24r, $24r$1, _tmp, _tmp$1, _tuple, barrierShape, oldDx, oldDy, origX, origY, overlapResult, overlapped, playerShape, pushbackX, pushbackY, $s, $deferred};return $f; } } + }; + $pkg.CalcPushbacks = CalcPushbacks; + isPolygonPairOverlapped = function(a, b, result) { + var _i, _i$1, _ref, _ref$1, _tmp, _tmp$1, a, aCnt, axis, axis$1, b, bCnt, result, x, x$1, x$2, x$3, x$4, x$5, x$6, x$7; + _tmp = a.Points.$length; + _tmp$1 = b.Points.$length; + aCnt = _tmp; + bCnt = _tmp$1; + if ((1 === aCnt) && (1 === bCnt)) { + if (!(ptrType$2.nil === result)) { + result.Overlap = 0; + } + return ((x = (x$1 = a.Points, (0 >= x$1.$length ? ($throwRuntimeError("index out of range"), undefined) : x$1.$array[x$1.$offset + 0])), (0 >= x.$length ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + 0])) === (x$2 = (x$3 = b.Points, (0 >= x$3.$length ? ($throwRuntimeError("index out of range"), undefined) : x$3.$array[x$3.$offset + 0])), (0 >= x$2.$length ? ($throwRuntimeError("index out of range"), undefined) : x$2.$array[x$2.$offset + 0]))) && ((x$4 = (x$5 = a.Points, (0 >= x$5.$length ? ($throwRuntimeError("index out of range"), undefined) : x$5.$array[x$5.$offset + 0])), (1 >= x$4.$length ? ($throwRuntimeError("index out of range"), undefined) : x$4.$array[x$4.$offset + 1])) === (x$6 = (x$7 = b.Points, (0 >= x$7.$length ? ($throwRuntimeError("index out of range"), undefined) : x$7.$array[x$7.$offset + 0])), (1 >= x$6.$length ? ($throwRuntimeError("index out of range"), undefined) : x$6.$array[x$6.$offset + 1]))); + } + if (1 < aCnt) { + _ref = a.SATAxes(); + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + axis = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + if (isPolygonPairSeparatedByDir(a, b, axis.Unit(), result)) { + return false; + } + _i++; + } + } + if (1 < bCnt) { + _ref$1 = b.SATAxes(); + _i$1 = 0; + while (true) { + if (!(_i$1 < _ref$1.$length)) { break; } + axis$1 = ((_i$1 < 0 || _i$1 >= _ref$1.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$1.$array[_ref$1.$offset + _i$1]); + if (isPolygonPairSeparatedByDir(a, b, axis$1.Unit(), result)) { + return false; + } + _i$1++; + } + } + return true; + }; + isPolygonPairSeparatedByDir = function(a, b, e, result) { + var _i, _i$1, _ref, _ref$1, _tmp, _tmp$1, _tmp$2, _tmp$3, a, aEnd, aStart, absoluteOverlap, b, bEnd, bStart, currentOverlap, dot, dot$1, e, option1, option1$1, option2, option2$1, overlap, p, p$1, result, sign, x, x$1; + _tmp = 1.7e+308; + _tmp$1 = -1.7e+308; + _tmp$2 = 1.7e+308; + _tmp$3 = -1.7e+308; + aStart = _tmp; + aEnd = _tmp$1; + bStart = _tmp$2; + bEnd = _tmp$3; + _ref = a.Points; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + p = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + dot = ((0 >= p.$length ? ($throwRuntimeError("index out of range"), undefined) : p.$array[p.$offset + 0]) + a.X) * (0 >= e.$length ? ($throwRuntimeError("index out of range"), undefined) : e.$array[e.$offset + 0]) + ((1 >= p.$length ? ($throwRuntimeError("index out of range"), undefined) : p.$array[p.$offset + 1]) + a.Y) * (1 >= e.$length ? ($throwRuntimeError("index out of range"), undefined) : e.$array[e.$offset + 1]); + if (aStart > dot) { + aStart = dot; + } + if (aEnd < dot) { + aEnd = dot; + } + _i++; + } + _ref$1 = b.Points; + _i$1 = 0; + while (true) { + if (!(_i$1 < _ref$1.$length)) { break; } + p$1 = ((_i$1 < 0 || _i$1 >= _ref$1.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$1.$array[_ref$1.$offset + _i$1]); + dot$1 = ((0 >= p$1.$length ? ($throwRuntimeError("index out of range"), undefined) : p$1.$array[p$1.$offset + 0]) + b.X) * (0 >= e.$length ? ($throwRuntimeError("index out of range"), undefined) : e.$array[e.$offset + 0]) + ((1 >= p$1.$length ? ($throwRuntimeError("index out of range"), undefined) : p$1.$array[p$1.$offset + 1]) + b.Y) * (1 >= e.$length ? ($throwRuntimeError("index out of range"), undefined) : e.$array[e.$offset + 1]); + if (bStart > dot$1) { + bStart = dot$1; + } + if (bEnd < dot$1) { + bEnd = dot$1; + } + _i$1++; + } + if (aStart > bEnd || aEnd < bStart) { + return true; + } + if (!(ptrType$2.nil === result)) { + overlap = 0; + if (aStart < bStart) { + result.AContainedInB = false; + if (aEnd < bEnd) { + overlap = aEnd - bStart; + result.BContainedInA = false; + } else { + option1 = aEnd - bStart; + option2 = bEnd - aStart; + if (option1 < option2) { + overlap = option1; + } else { + overlap = -option2; + } + } + } else { + result.BContainedInA = false; + if (aEnd > bEnd) { + overlap = aStart - bEnd; + result.AContainedInB = false; + } else { + option1$1 = aEnd - bStart; + option2$1 = bEnd - aStart; + if (option1$1 < option2$1) { + overlap = option1$1; + } else { + overlap = -option2$1; + } + } + } + currentOverlap = result.Overlap; + absoluteOverlap = overlap; + if (overlap < 0) { + absoluteOverlap = -overlap; + } + if (((0 === (x = result.Axis, (0 >= x.$length ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + 0]))) && (0 === (x$1 = result.Axis, (1 >= x$1.$length ? ($throwRuntimeError("index out of range"), undefined) : x$1.$array[x$1.$offset + 1])))) || currentOverlap > absoluteOverlap) { + sign = 1; + if (overlap < 0) { + sign = -1; + } + result.Overlap = absoluteOverlap; + result.OverlapX = (0 >= e.$length ? ($throwRuntimeError("index out of range"), undefined) : e.$array[e.$offset + 0]) * sign; + result.OverlapY = (1 >= e.$length ? ($throwRuntimeError("index out of range"), undefined) : e.$array[e.$offset + 1]) * sign; + } + result.Axis = e; + } + return false; + }; + WorldToVirtualGridPos = function(wx, wy) { + var virtualGridX, virtualGridY, wx, wy; + virtualGridX = ((math.Floor(wx * 100) >> 0)); + virtualGridY = ((math.Floor(wy * 100) >> 0)); + return [virtualGridX, virtualGridY]; + }; + $pkg.WorldToVirtualGridPos = WorldToVirtualGridPos; + VirtualGridToWorldPos = function(vx, vy) { + var vx, vy, wx, wy; + wx = (vx) * 0.01; + wy = (vy) * 0.01; + return [wx, wy]; + }; + $pkg.VirtualGridToWorldPos = VirtualGridToWorldPos; + WorldToPolygonColliderBLPos = function(wx, wy, halfBoundingW, halfBoundingH, topPadding, bottomPadding, leftPadding, rightPadding, collisionSpaceOffsetX, collisionSpaceOffsetY) { + var bottomPadding, collisionSpaceOffsetX, collisionSpaceOffsetY, halfBoundingH, halfBoundingW, leftPadding, rightPadding, topPadding, wx, wy; + return [wx - halfBoundingW - leftPadding + collisionSpaceOffsetX, wy - halfBoundingH - bottomPadding + collisionSpaceOffsetY]; + }; + $pkg.WorldToPolygonColliderBLPos = WorldToPolygonColliderBLPos; + PolygonColliderBLToWorldPos = function(cx, cy, halfBoundingW, halfBoundingH, topPadding, bottomPadding, leftPadding, rightPadding, collisionSpaceOffsetX, collisionSpaceOffsetY) { + var bottomPadding, collisionSpaceOffsetX, collisionSpaceOffsetY, cx, cy, halfBoundingH, halfBoundingW, leftPadding, rightPadding, topPadding; + return [cx + halfBoundingW + leftPadding - collisionSpaceOffsetX, cy + halfBoundingH + bottomPadding - collisionSpaceOffsetY]; + }; + $pkg.PolygonColliderBLToWorldPos = PolygonColliderBLToWorldPos; + PolygonColliderBLToVirtualGridPos = function(cx, cy, halfBoundingW, halfBoundingH, topPadding, bottomPadding, leftPadding, rightPadding, collisionSpaceOffsetX, collisionSpaceOffsetY) { + var _tuple, bottomPadding, collisionSpaceOffsetX, collisionSpaceOffsetY, cx, cy, halfBoundingH, halfBoundingW, leftPadding, rightPadding, topPadding, wx, wy; + _tuple = PolygonColliderBLToWorldPos(cx, cy, halfBoundingW, halfBoundingH, topPadding, bottomPadding, leftPadding, rightPadding, collisionSpaceOffsetX, collisionSpaceOffsetY); + wx = _tuple[0]; + wy = _tuple[1]; + return WorldToVirtualGridPos(wx, wy); + }; + $pkg.PolygonColliderBLToVirtualGridPos = PolygonColliderBLToVirtualGridPos; + calcHardPushbacksNorms = function(joinIndex, playerCollider, playerShape, snapIntoPlatformOverlap, pEffPushback) { + var {_i, _r, _ref, _ref$1, _tmp, _tmp$1, _tuple, barrierShape, collision, isBarrier, joinIndex, obj, overlapResult, overlapped, pEffPushback, playerCollider, playerShape, pushbackX, pushbackY, ret, snapIntoPlatformOverlap, $s, $r, $c} = $restore(this, {joinIndex, playerCollider, playerShape, snapIntoPlatformOverlap, pEffPushback}); + /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: + ret = [ret]; + ret[0] = $makeSlice(sliceType$3, 0, 10); + collision = playerCollider.Check(0, 0, new sliceType$4([])); + if (ptrType$3.nil === collision) { + $s = -1; return (ret.$ptr || (ret.$ptr = new ptrType$4(function() { return this.$target[0]; }, function($v) { this.$target[0] = $v; }, ret))); + } + _ref = collision.Objects; + _i = 0; + /* while (true) { */ case 1: + /* if (!(_i < _ref.$length)) { break; } */ if(!(_i < _ref.$length)) { $s = 2; continue; } + obj = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + isBarrier = false; + _ref$1 = obj.Data; + if ($assertType(_ref$1, ptrType$5, true)[1]) { + } else if ($assertType(_ref$1, ptrType$1, true)[1] || $assertType(_ref$1, ptrType$6, true)[1]) { + } else { + isBarrier = true; + } + if (!isBarrier) { + _i++; + /* continue; */ $s = 1; continue; + } + barrierShape = $assertType(obj.Shape, ptrType$7); + _r = CalcPushbacks(0, 0, playerShape, barrierShape); /* */ $s = 3; case 3: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; } + _tuple = _r; + overlapped = _tuple[0]; + pushbackX = _tuple[1]; + pushbackY = _tuple[2]; + overlapResult = _tuple[3]; + if (!overlapped) { + _i++; + /* continue; */ $s = 1; continue; + } + _tmp = (overlapResult.Overlap - snapIntoPlatformOverlap) * overlapResult.OverlapX; + _tmp$1 = (overlapResult.Overlap - snapIntoPlatformOverlap) * overlapResult.OverlapY; + pushbackX = _tmp; + pushbackY = _tmp$1; + ret[0] = $append(ret[0], new Vec2D.ptr(overlapResult.OverlapX, overlapResult.OverlapY)); + pEffPushback.X = pEffPushback.X + (pushbackX); + pEffPushback.Y = pEffPushback.Y + (pushbackY); + _i++; + $s = 1; continue; + case 2: + $s = -1; return (ret.$ptr || (ret.$ptr = new ptrType$4(function() { return this.$target[0]; }, function($v) { this.$target[0] = $v; }, ret))); + /* */ } return; } var $f = {$blk: calcHardPushbacksNorms, $c: true, $r, _i, _r, _ref, _ref$1, _tmp, _tmp$1, _tuple, barrierShape, collision, isBarrier, joinIndex, obj, overlapResult, overlapped, pEffPushback, playerCollider, playerShape, pushbackX, pushbackY, ret, snapIntoPlatformOverlap, $s};return $f; + }; + deriveOpPattern = function(currPlayerDownsync, thatPlayerInNextFrame, currRenderFrame, inputsBuffer) { + var _entry, _entry$1, _tmp, _tmp$1, _tmp$2, _tmp$3, _tmp$4, _tmp$5, _tuple, _tuple$1, currPlayerDownsync, currRenderFrame, decodedInput, delayedInputFrameId, delayedInputFrameIdForPrevRdf, delayedInputList, delayedInputListForPrevRdf, effDx, effDy, existent, existent$1, inputsBuffer, joinIndex, jumpedOrNot, patternId, prevBtnALevel, prevBtnBLevel, prevDecodedInput, thatPlayerInNextFrame, x, x$1; + delayedInputFrameId = ConvertToDelayedInputFrameId(currRenderFrame.Id); + delayedInputFrameIdForPrevRdf = ConvertToDelayedInputFrameId(currRenderFrame.Id - 1 >> 0); + if (0 >= delayedInputFrameId) { + return [-2, false, 0, 0]; + } + _tuple = (_entry = noOpSet[$Int32.keyFor(currPlayerDownsync.CharacterState)], _entry !== undefined ? [_entry.v, true] : [false, false]); + existent = _tuple[1]; + if (existent) { + return [-2, false, 0, 0]; + } + delayedInputList = $assertType(inputsBuffer.GetByFrameId(delayedInputFrameId), ptrType$8).InputList; + delayedInputListForPrevRdf = sliceType$5.nil; + if (0 < delayedInputFrameIdForPrevRdf) { + delayedInputListForPrevRdf = $assertType(inputsBuffer.GetByFrameId(delayedInputFrameIdForPrevRdf), ptrType$8).InputList; + } + jumpedOrNot = false; + joinIndex = currPlayerDownsync.JoinIndex; + decodedInput = decodeInput((x = joinIndex - 1 >> 0, ((x < 0 || x >= delayedInputList.$length) ? ($throwRuntimeError("index out of range"), undefined) : delayedInputList.$array[delayedInputList.$offset + x]))); + _tmp = 0; + _tmp$1 = 0; + effDx = _tmp; + effDy = _tmp$1; + _tmp$2 = 0; + _tmp$3 = 0; + prevBtnALevel = _tmp$2; + prevBtnBLevel = _tmp$3; + if (!(sliceType$5.nil === delayedInputListForPrevRdf)) { + prevDecodedInput = decodeInput((x$1 = joinIndex - 1 >> 0, ((x$1 < 0 || x$1 >= delayedInputListForPrevRdf.$length) ? ($throwRuntimeError("index out of range"), undefined) : delayedInputListForPrevRdf.$array[delayedInputListForPrevRdf.$offset + x$1]))); + prevBtnALevel = prevDecodedInput.BtnALevel; + prevBtnBLevel = prevDecodedInput.BtnBLevel; + } + if (0 === currPlayerDownsync.FramesToRecover) { + _tmp$4 = decodedInput.Dx; + _tmp$5 = decodedInput.Dy; + effDx = _tmp$4; + effDy = _tmp$5; + if (decodedInput.BtnBLevel > prevBtnBLevel) { + _tuple$1 = (_entry$1 = inAirSet[$Int32.keyFor(currPlayerDownsync.CharacterState)], _entry$1 !== undefined ? [_entry$1.v, true] : [false, false]); + existent$1 = _tuple$1[1]; + if (!existent$1) { + jumpedOrNot = true; + } + } + } + patternId = -1; + if (decodedInput.BtnALevel > prevBtnALevel) { + patternId = 1; + } + return [patternId, jumpedOrNot, effDx, effDy]; + }; + ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame = function(inputsBuffer, currRenderFrame, collisionSys, collisionSysMap, collisionSpaceOffsetX, collisionSpaceOffsetY, chConfigsOrderedByJoinIndex) { + var {_1, _2, _entry, _entry$1, _entry$2, _entry$3, _entry$4, _entry$5, _i, _i$1, _i$10, _i$11, _i$12, _i$2, _i$3, _i$4, _i$5, _i$6, _i$7, _i$8, _i$9, _index, _index$1, _index$2, _r, _r$1, _r$2, _r$3, _r$4, _r$5, _r$6, _r$7, _ref, _ref$1, _ref$10, _ref$11, _ref$12, _ref$13, _ref$14, _ref$15, _ref$16, _ref$17, _ref$18, _ref$2, _ref$3, _ref$4, _ref$5, _ref$6, _ref$7, _ref$8, _ref$9, _tmp, _tmp$1, _tmp$10, _tmp$11, _tmp$12, _tmp$13, _tmp$14, _tmp$15, _tmp$16, _tmp$17, _tmp$18, _tmp$19, _tmp$2, _tmp$20, _tmp$21, _tmp$22, _tmp$23, _tmp$24, _tmp$25, _tmp$26, _tmp$3, _tmp$4, _tmp$5, _tmp$6, _tmp$7, _tmp$8, _tmp$9, _tuple, _tuple$1, _tuple$10, _tuple$11, _tuple$12, _tuple$13, _tuple$14, _tuple$15, _tuple$16, _tuple$17, _tuple$2, _tuple$3, _tuple$4, _tuple$5, _tuple$6, _tuple$7, _tuple$8, _tuple$9, addToNextRenderFrame, atkedPlayerInNextFrame, atkedPlayerInNextFrame$1, bShape, bulletCollider, bulletColliders, bulletLocalId, bulletShape, bulletShape$1, bulletWx, bulletWx$1, bulletWy, bulletWy$1, chConfig, chConfig$1, chConfig$2, chConfigsOrderedByJoinIndex, colliderHeight, colliderWidth, colliderWorldHeight, colliderWorldWidth, collision, collision$1, collisionSpaceOffsetX, collisionSpaceOffsetY, collisionSys, collisionSysMap, currPlayerDownsync, currPlayerDownsync$1, currPlayerDownsync$2, currPlayerDownsync$3, currPlayerDownsync$4, currRenderFrame, defenderShape, defenderShape$1, effDx, effDy, effPushbacks, existent, existent$1, existent$2, existent$3, existent$4, existent$5, fireballBullet, halfColliderHeightDiff, halfColliderWidthDiff, halfColliderWorldHeightDiff, hardPushbackNorm, hardPushbackNorms, hasLockVel, hitboxSizeWx, hitboxSizeWx$1, hitboxSizeWy, hitboxSizeWy$1, i, i$1, i$2, i$3, i$4, inputsBuffer, isAnotherPlayer, isBarrier, isBullet, joinIndex, joinIndex$1, joinIndex$2, joinIndex$3, jumpedOrNot, jumpedOrNotList, landedOnGravityPushback, meleeBullet, newBullet, newBullet$1, newBulletCollider, newBulletCollider$1, newVx, newVy, nextRenderFrameFireballBullets, nextRenderFrameMeleeBullets, nextRenderFramePlayers, normAlignmentWithGravity, obj, obj$1, obj$2, offender, offender$1, offender$2, oldFramesToRecover, oldFramesToRecover$1, oldNextCharacterState, overlapResult, overlapped, overlapped$1, overlapped$2, patternId, playerCollider, playerCollider$1, playerCollider$2, playerCollider$3, playerColliders, playerShape, projectedMagnitude, pushbackVelX, pushbackVelX$1, pushbackVelY, pushbackVelY$1, pushbackX, pushbackY, roomCapacity, skillConfig, skillId, t, t$1, t$2, t$3, thatPlayerInNextFrame, thatPlayerInNextFrame$1, thatPlayerInNextFrame$2, thatPlayerInNextFrame$3, v, v$1, v$2, v$3, v$4, v$5, wx, wy, x, x$1, x$10, x$11, x$12, x$13, x$14, x$15, x$16, x$17, x$18, x$2, x$3, x$4, x$5, x$6, x$7, x$8, x$9, xfac, xfac$1, xfac$2, xfac$3, xfac$4, $s, $r, $c} = $restore(this, {inputsBuffer, currRenderFrame, collisionSys, collisionSysMap, collisionSpaceOffsetX, collisionSpaceOffsetY, chConfigsOrderedByJoinIndex}); + /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: + roomCapacity = currRenderFrame.PlayersArr.$length; + nextRenderFramePlayers = $makeSlice(sliceType$6, roomCapacity); + _ref = currRenderFrame.PlayersArr; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + i = _i; + currPlayerDownsync = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + ((i < 0 || i >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + i] = new PlayerDownsync.ptr(currPlayerDownsync.Id, currPlayerDownsync.VirtualGridX, currPlayerDownsync.VirtualGridY, currPlayerDownsync.DirX, currPlayerDownsync.DirY, currPlayerDownsync.VelX, currPlayerDownsync.VelY, currPlayerDownsync.Speed, currPlayerDownsync.BattleState, currPlayerDownsync.JoinIndex, currPlayerDownsync.ColliderRadius, currPlayerDownsync.Removed, currPlayerDownsync.Score, 0, currPlayerDownsync.FramesToRecover - 1 >> 0, currPlayerDownsync.FramesInChState + 1 >> 0, currPlayerDownsync.Hp, currPlayerDownsync.MaxHp, currPlayerDownsync.CharacterState, true, false, currPlayerDownsync.ActiveSkillId, currPlayerDownsync.ActiveSkillHit, currPlayerDownsync.FramesInvinsible - 1 >> 0, 0, 0)); + if (((i < 0 || i >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + i]).FramesToRecover < 0) { + ((i < 0 || i >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + i]).FramesToRecover = 0; + } + if (((i < 0 || i >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + i]).FramesInvinsible < 0) { + ((i < 0 || i >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + i]).FramesInvinsible = 0; + } + _i++; + } + nextRenderFrameMeleeBullets = $makeSlice(sliceType$7, 0, currRenderFrame.MeleeBullets.$length); + nextRenderFrameFireballBullets = $makeSlice(sliceType$8, 0, currRenderFrame.FireballBullets.$length); + effPushbacks = $makeSlice(sliceType$3, roomCapacity); + hardPushbackNorms = $makeSlice(sliceType$9, roomCapacity); + jumpedOrNotList = $makeSlice(sliceType$10, roomCapacity); + bulletLocalId = currRenderFrame.BulletLocalIdCounter; + _ref$1 = currRenderFrame.PlayersArr; + _i$1 = 0; + /* while (true) { */ case 1: + /* if (!(_i$1 < _ref$1.$length)) { break; } */ if(!(_i$1 < _ref$1.$length)) { $s = 2; continue; } + newBullet = [newBullet]; + newBullet$1 = [newBullet$1]; + i$1 = _i$1; + currPlayerDownsync$1 = ((_i$1 < 0 || _i$1 >= _ref$1.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$1.$array[_ref$1.$offset + _i$1]); + ((i$1 < 0 || i$1 >= jumpedOrNotList.$length) ? ($throwRuntimeError("index out of range"), undefined) : jumpedOrNotList.$array[jumpedOrNotList.$offset + i$1] = false); + chConfig = ((i$1 < 0 || i$1 >= chConfigsOrderedByJoinIndex.$length) ? ($throwRuntimeError("index out of range"), undefined) : chConfigsOrderedByJoinIndex.$array[chConfigsOrderedByJoinIndex.$offset + i$1]); + thatPlayerInNextFrame = ((i$1 < 0 || i$1 >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + i$1]); + _tuple = deriveOpPattern(currPlayerDownsync$1, thatPlayerInNextFrame, currRenderFrame, inputsBuffer); + patternId = _tuple[0]; + jumpedOrNot = _tuple[1]; + effDx = _tuple[2]; + effDy = _tuple[3]; + if (jumpedOrNot) { + thatPlayerInNextFrame.VelY = (chConfig.JumpingInitVelY); + ((i$1 < 0 || i$1 >= jumpedOrNotList.$length) ? ($throwRuntimeError("index out of range"), undefined) : jumpedOrNotList.$array[jumpedOrNotList.$offset + i$1] = true); + } + joinIndex = currPlayerDownsync$1.JoinIndex; + _r = chConfig.SkillMapper(patternId, currPlayerDownsync$1); /* */ $s = 3; case 3: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; } + skillId = _r; + _tuple$1 = (_entry = skills[$Int.keyFor(skillId)], _entry !== undefined ? [_entry.v, true] : [ptrType.nil, false]); + skillConfig = _tuple$1[0]; + existent = _tuple$1[1]; + if (existent) { + thatPlayerInNextFrame.ActiveSkillId = ((skillId >> 0)); + thatPlayerInNextFrame.ActiveSkillHit = 0; + thatPlayerInNextFrame.FramesToRecover = skillConfig.RecoveryFrames; + xfac = 1; + if (0 > thatPlayerInNextFrame.DirX) { + xfac = -xfac; + } + hasLockVel = false; + _ref$2 = (x = skillConfig.Hits, x$1 = thatPlayerInNextFrame.ActiveSkillHit, ((x$1 < 0 || x$1 >= x.$length) ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + x$1])); + if ($assertType(_ref$2, ptrType$1, true)[1]) { + v = _ref$2.$val; + newBullet[0] = $clone(v, MeleeBullet); + newBullet[0].Bullet.BulletLocalId = bulletLocalId; + bulletLocalId = bulletLocalId + (1) >> 0; + newBullet[0].Bullet.OriginatedRenderFrameId = currRenderFrame.Id; + newBullet[0].Bullet.OffenderJoinIndex = joinIndex; + nextRenderFrameMeleeBullets = $append(nextRenderFrameMeleeBullets, newBullet[0]); + if (!((-1 === v.Bullet.SelfLockVelX))) { + hasLockVel = true; + thatPlayerInNextFrame.VelX = $imul(xfac, v.Bullet.SelfLockVelX); + } + if (!((-1 === v.Bullet.SelfLockVelY))) { + hasLockVel = true; + thatPlayerInNextFrame.VelY = v.Bullet.SelfLockVelY; + } + } else if ($assertType(_ref$2, ptrType$6, true)[1]) { + v$1 = _ref$2.$val; + newBullet$1[0] = $clone(v$1, FireballBullet); + newBullet$1[0].Bullet.BulletLocalId = bulletLocalId; + bulletLocalId = bulletLocalId + (1) >> 0; + xfac$1 = 1; + if (0 > thatPlayerInNextFrame.DirX) { + xfac$1 = -xfac$1; + } + _tmp = currPlayerDownsync$1.VirtualGridX + ($imul(xfac$1, newBullet$1[0].Bullet.HitboxOffsetX)) >> 0; + _tmp$1 = currPlayerDownsync$1.VirtualGridY; + newBullet$1[0].VirtualGridX = _tmp; + newBullet$1[0].VirtualGridY = _tmp$1; + newBullet$1[0].Bullet.OriginatedRenderFrameId = currRenderFrame.Id; + newBullet$1[0].Bullet.OffenderJoinIndex = joinIndex; + newBullet$1[0].VelX = $imul(newBullet$1[0].Speed, xfac$1); + newBullet$1[0].VelY = 0; + nextRenderFrameFireballBullets = $append(nextRenderFrameFireballBullets, newBullet$1[0]); + if (!((-1 === v$1.Bullet.SelfLockVelX))) { + hasLockVel = true; + thatPlayerInNextFrame.VelX = $imul(xfac$1, v$1.Bullet.SelfLockVelX); + } + if (!((-1 === v$1.Bullet.SelfLockVelY))) { + hasLockVel = true; + thatPlayerInNextFrame.VelY = v$1.Bullet.SelfLockVelY; + } + } + if (false === hasLockVel && false === currPlayerDownsync$1.InAir) { + thatPlayerInNextFrame.VelX = 0; + } + thatPlayerInNextFrame.CharacterState = skillConfig.BoundChState; + _i$1++; + /* continue; */ $s = 1; continue; + } + if (0 === currPlayerDownsync$1.FramesToRecover) { + if (!((0 === effDx)) || !((0 === effDy))) { + _tmp$2 = effDx; + _tmp$3 = effDy; + thatPlayerInNextFrame.DirX = _tmp$2; + thatPlayerInNextFrame.DirY = _tmp$3; + thatPlayerInNextFrame.VelX = $imul(effDx, currPlayerDownsync$1.Speed); + thatPlayerInNextFrame.CharacterState = 1; + } else { + thatPlayerInNextFrame.CharacterState = 0; + thatPlayerInNextFrame.VelX = 0; + } + } + _i$1++; + $s = 1; continue; + case 2: + playerColliders = $makeSlice(sliceType$11, currRenderFrame.PlayersArr.$length, currRenderFrame.PlayersArr.$length); + _ref$3 = currRenderFrame.PlayersArr; + _i$2 = 0; + /* while (true) { */ case 4: + /* if (!(_i$2 < _ref$3.$length)) { break; } */ if(!(_i$2 < _ref$3.$length)) { $s = 5; continue; } + i$2 = _i$2; + currPlayerDownsync$2 = ((_i$2 < 0 || _i$2 >= _ref$3.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$3.$array[_ref$3.$offset + _i$2]); + joinIndex$1 = currPlayerDownsync$2.JoinIndex; + _tmp$4 = 0; + _tmp$5 = 0; + (x$2 = joinIndex$1 - 1 >> 0, ((x$2 < 0 || x$2 >= effPushbacks.$length) ? ($throwRuntimeError("index out of range"), undefined) : effPushbacks.$array[effPushbacks.$offset + x$2])).X = _tmp$4; + (x$3 = joinIndex$1 - 1 >> 0, ((x$3 < 0 || x$3 >= effPushbacks.$length) ? ($throwRuntimeError("index out of range"), undefined) : effPushbacks.$array[effPushbacks.$offset + x$3])).Y = _tmp$5; + chConfig$1 = ((i$2 < 0 || i$2 >= chConfigsOrderedByJoinIndex.$length) ? ($throwRuntimeError("index out of range"), undefined) : chConfigsOrderedByJoinIndex.$array[chConfigsOrderedByJoinIndex.$offset + i$2]); + _tmp$6 = currPlayerDownsync$2.VirtualGridX + currPlayerDownsync$2.VelX >> 0; + _tmp$7 = currPlayerDownsync$2.VirtualGridY + currPlayerDownsync$2.VelY >> 0; + newVx = _tmp$6; + newVy = _tmp$7; + if (((i$2 < 0 || i$2 >= jumpedOrNotList.$length) ? ($throwRuntimeError("index out of range"), undefined) : jumpedOrNotList.$array[jumpedOrNotList.$offset + i$2])) { + newVy = newVy + (chConfig$1.JumpingInitVelY) >> 0; + } + _tuple$2 = VirtualGridToWorldPos(newVx, newVy); + wx = _tuple$2[0]; + wy = _tuple$2[1]; + _tmp$8 = $imul(currPlayerDownsync$2.ColliderRadius, 2); + _tmp$9 = $imul(currPlayerDownsync$2.ColliderRadius, 4); + colliderWidth = _tmp$8; + colliderHeight = _tmp$9; + _1 = currPlayerDownsync$2.CharacterState; + if (_1 === (9)) { + _tmp$10 = $imul(currPlayerDownsync$2.ColliderRadius, 4); + _tmp$11 = $imul(currPlayerDownsync$2.ColliderRadius, 2); + colliderWidth = _tmp$10; + colliderHeight = _tmp$11; + } else if ((_1 === (8)) || (_1 === (4)) || (_1 === (5))) { + _tmp$12 = $imul(currPlayerDownsync$2.ColliderRadius, 2); + _tmp$13 = $imul(currPlayerDownsync$2.ColliderRadius, 2); + colliderWidth = _tmp$12; + colliderHeight = _tmp$13; + } + _tuple$3 = VirtualGridToWorldPos(colliderWidth, colliderHeight); + colliderWorldWidth = _tuple$3[0]; + colliderWorldHeight = _tuple$3[1]; + _r$1 = GenerateRectCollider(wx, wy, colliderWorldWidth, colliderWorldHeight, 0.1, 0.1, 0.1, 0.1, collisionSpaceOffsetX, collisionSpaceOffsetY, currPlayerDownsync$2, "Player"); /* */ $s = 6; case 6: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; } + playerCollider = _r$1; + ((i$2 < 0 || i$2 >= playerColliders.$length) ? ($throwRuntimeError("index out of range"), undefined) : playerColliders.$array[playerColliders.$offset + i$2] = playerCollider); + $r = collisionSys.Add(new sliceType$11([playerCollider])); /* */ $s = 7; case 7: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + thatPlayerInNextFrame$1 = ((i$2 < 0 || i$2 >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + i$2]); + if (currPlayerDownsync$2.InAir) { + thatPlayerInNextFrame$1.VelX = thatPlayerInNextFrame$1.VelX + (0) >> 0; + thatPlayerInNextFrame$1.VelY = thatPlayerInNextFrame$1.VelY + (-50) >> 0; + } + _i$2++; + $s = 4; continue; + case 5: + bulletColliders = $makeSlice(sliceType$11, 0, currRenderFrame.MeleeBullets.$length); + _ref$4 = currRenderFrame.MeleeBullets; + _i$3 = 0; + /* while (true) { */ case 8: + /* if (!(_i$3 < _ref$4.$length)) { break; } */ if(!(_i$3 < _ref$4.$length)) { $s = 9; continue; } + meleeBullet = ((_i$3 < 0 || _i$3 >= _ref$4.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$4.$array[_ref$4.$offset + _i$3]); + /* */ if (((meleeBullet.Bullet.OriginatedRenderFrameId + meleeBullet.Bullet.StartupFrames >> 0) <= currRenderFrame.Id) && (((meleeBullet.Bullet.OriginatedRenderFrameId + meleeBullet.Bullet.StartupFrames >> 0) + meleeBullet.Bullet.ActiveFrames >> 0) > currRenderFrame.Id)) { $s = 10; continue; } + /* */ if (((meleeBullet.Bullet.OriginatedRenderFrameId + meleeBullet.Bullet.StartupFrames >> 0) + meleeBullet.Bullet.ActiveFrames >> 0) > currRenderFrame.Id) { $s = 11; continue; } + /* */ $s = 12; continue; + /* if (((meleeBullet.Bullet.OriginatedRenderFrameId + meleeBullet.Bullet.StartupFrames >> 0) <= currRenderFrame.Id) && (((meleeBullet.Bullet.OriginatedRenderFrameId + meleeBullet.Bullet.StartupFrames >> 0) + meleeBullet.Bullet.ActiveFrames >> 0) > currRenderFrame.Id)) { */ case 10: + offender = (x$4 = currRenderFrame.PlayersArr, x$5 = meleeBullet.Bullet.OffenderJoinIndex - 1 >> 0, ((x$5 < 0 || x$5 >= x$4.$length) ? ($throwRuntimeError("index out of range"), undefined) : x$4.$array[x$4.$offset + x$5])); + xfac$2 = 1; + if (0 > offender.DirX) { + xfac$2 = -xfac$2; + } + _tuple$4 = VirtualGridToWorldPos(offender.VirtualGridX + ($imul(xfac$2, meleeBullet.Bullet.HitboxOffsetX)) >> 0, offender.VirtualGridY); + bulletWx = _tuple$4[0]; + bulletWy = _tuple$4[1]; + _tuple$5 = VirtualGridToWorldPos(meleeBullet.Bullet.HitboxSizeX, meleeBullet.Bullet.HitboxSizeY); + hitboxSizeWx = _tuple$5[0]; + hitboxSizeWy = _tuple$5[1]; + _r$2 = GenerateRectCollider(bulletWx, bulletWy, hitboxSizeWx, hitboxSizeWy, 0.1, 0.1, 0.1, 0.1, collisionSpaceOffsetX, collisionSpaceOffsetY, meleeBullet, "MeleeBullet"); /* */ $s = 13; case 13: if($c) { $c = false; _r$2 = _r$2.$blk(); } if (_r$2 && _r$2.$blk !== undefined) { break s; } + newBulletCollider = _r$2; + $r = collisionSys.Add(new sliceType$11([newBulletCollider])); /* */ $s = 14; case 14: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + bulletColliders = $append(bulletColliders, newBulletCollider); + $s = 12; continue; + /* } else if (((meleeBullet.Bullet.OriginatedRenderFrameId + meleeBullet.Bullet.StartupFrames >> 0) + meleeBullet.Bullet.ActiveFrames >> 0) > currRenderFrame.Id) { */ case 11: + nextRenderFrameMeleeBullets = $append(nextRenderFrameMeleeBullets, meleeBullet); + /* } */ case 12: + _i$3++; + $s = 8; continue; + case 9: + _ref$5 = currRenderFrame.FireballBullets; + _i$4 = 0; + /* while (true) { */ case 15: + /* if (!(_i$4 < _ref$5.$length)) { break; } */ if(!(_i$4 < _ref$5.$length)) { $s = 16; continue; } + fireballBullet = ((_i$4 < 0 || _i$4 >= _ref$5.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$5.$array[_ref$5.$offset + _i$4]); + /* */ if (((fireballBullet.Bullet.OriginatedRenderFrameId + fireballBullet.Bullet.StartupFrames >> 0) < currRenderFrame.Id) && (((fireballBullet.Bullet.OriginatedRenderFrameId + fireballBullet.Bullet.StartupFrames >> 0) + fireballBullet.Bullet.ActiveFrames >> 0) > currRenderFrame.Id)) { $s = 17; continue; } + /* */ if (((fireballBullet.Bullet.OriginatedRenderFrameId + fireballBullet.Bullet.StartupFrames >> 0) + fireballBullet.Bullet.ActiveFrames >> 0) > currRenderFrame.Id) { $s = 18; continue; } + /* */ $s = 19; continue; + /* if (((fireballBullet.Bullet.OriginatedRenderFrameId + fireballBullet.Bullet.StartupFrames >> 0) < currRenderFrame.Id) && (((fireballBullet.Bullet.OriginatedRenderFrameId + fireballBullet.Bullet.StartupFrames >> 0) + fireballBullet.Bullet.ActiveFrames >> 0) > currRenderFrame.Id)) { */ case 17: + _tuple$6 = VirtualGridToWorldPos(fireballBullet.VirtualGridX, fireballBullet.VirtualGridY); + bulletWx$1 = _tuple$6[0]; + bulletWy$1 = _tuple$6[1]; + _tuple$7 = VirtualGridToWorldPos(fireballBullet.Bullet.HitboxSizeX, fireballBullet.Bullet.HitboxSizeY); + hitboxSizeWx$1 = _tuple$7[0]; + hitboxSizeWy$1 = _tuple$7[1]; + _r$3 = GenerateRectCollider(bulletWx$1, bulletWy$1, hitboxSizeWx$1, hitboxSizeWy$1, 0.1, 0.1, 0.1, 0.1, collisionSpaceOffsetX, collisionSpaceOffsetY, fireballBullet, "FireballBullet"); /* */ $s = 20; case 20: if($c) { $c = false; _r$3 = _r$3.$blk(); } if (_r$3 && _r$3.$blk !== undefined) { break s; } + newBulletCollider$1 = _r$3; + $r = collisionSys.Add(new sliceType$11([newBulletCollider$1])); /* */ $s = 21; case 21: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + bulletColliders = $append(bulletColliders, newBulletCollider$1); + $s = 19; continue; + /* } else if (((fireballBullet.Bullet.OriginatedRenderFrameId + fireballBullet.Bullet.StartupFrames >> 0) + fireballBullet.Bullet.ActiveFrames >> 0) > currRenderFrame.Id) { */ case 18: + nextRenderFrameFireballBullets = $append(nextRenderFrameFireballBullets, fireballBullet); + /* } */ case 19: + _i$4++; + $s = 15; continue; + case 16: + _ref$6 = currRenderFrame.PlayersArr; + _i$5 = 0; + /* while (true) { */ case 22: + /* if (!(_i$5 < _ref$6.$length)) { break; } */ if(!(_i$5 < _ref$6.$length)) { $s = 23; continue; } + i$3 = _i$5; + currPlayerDownsync$3 = ((_i$5 < 0 || _i$5 >= _ref$6.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$6.$array[_ref$6.$offset + _i$5]); + joinIndex$2 = currPlayerDownsync$3.JoinIndex; + playerCollider$1 = ((i$3 < 0 || i$3 >= playerColliders.$length) ? ($throwRuntimeError("index out of range"), undefined) : playerColliders.$array[playerColliders.$offset + i$3]); + playerShape = $assertType(playerCollider$1.Shape, ptrType$7); + _r$4 = calcHardPushbacksNorms(joinIndex$2, playerCollider$1, playerShape, 0.1, (x$6 = joinIndex$2 - 1 >> 0, ((x$6 < 0 || x$6 >= effPushbacks.$length) ? ($throwRuntimeError("index out of range"), undefined) : effPushbacks.$array[effPushbacks.$offset + x$6]))); /* */ $s = 24; case 24: if($c) { $c = false; _r$4 = _r$4.$blk(); } if (_r$4 && _r$4.$blk !== undefined) { break s; } + (x$7 = joinIndex$2 - 1 >> 0, ((x$7 < 0 || x$7 >= hardPushbackNorms.$length) ? ($throwRuntimeError("index out of range"), undefined) : hardPushbackNorms.$array[hardPushbackNorms.$offset + x$7] = _r$4)); + thatPlayerInNextFrame$2 = ((i$3 < 0 || i$3 >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + i$3]); + chConfig$2 = ((i$3 < 0 || i$3 >= chConfigsOrderedByJoinIndex.$length) ? ($throwRuntimeError("index out of range"), undefined) : chConfigsOrderedByJoinIndex.$array[chConfigsOrderedByJoinIndex.$offset + i$3]); + landedOnGravityPushback = false; + collision = playerCollider$1.Check(0, 0, new sliceType$4([])); + /* */ if (!(ptrType$3.nil === collision)) { $s = 25; continue; } + /* */ $s = 26; continue; + /* if (!(ptrType$3.nil === collision)) { */ case 25: + _ref$7 = collision.Objects; + _i$6 = 0; + /* while (true) { */ case 27: + /* if (!(_i$6 < _ref$7.$length)) { break; } */ if(!(_i$6 < _ref$7.$length)) { $s = 28; continue; } + obj = ((_i$6 < 0 || _i$6 >= _ref$7.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$7.$array[_ref$7.$offset + _i$6]); + _tmp$14 = false; + _tmp$15 = false; + _tmp$16 = false; + isBarrier = _tmp$14; + isAnotherPlayer = _tmp$15; + isBullet = _tmp$16; + _ref$8 = obj.Data; + if ($assertType(_ref$8, ptrType$5, true)[1]) { + isAnotherPlayer = true; + } else if ($assertType(_ref$8, ptrType$1, true)[1] || $assertType(_ref$8, ptrType$6, true)[1]) { + isBullet = true; + } else { + isBarrier = true; + } + if (isBullet) { + _i$6++; + /* continue; */ $s = 27; continue; + } + bShape = $assertType(obj.Shape, ptrType$7); + _r$5 = CalcPushbacks(0, 0, playerShape, bShape); /* */ $s = 29; case 29: if($c) { $c = false; _r$5 = _r$5.$blk(); } if (_r$5 && _r$5.$blk !== undefined) { break s; } + _tuple$8 = _r$5; + overlapped = _tuple$8[0]; + pushbackX = _tuple$8[1]; + pushbackY = _tuple$8[2]; + overlapResult = _tuple$8[3]; + if (!overlapped) { + _i$6++; + /* continue; */ $s = 27; continue; + } + normAlignmentWithGravity = overlapResult.OverlapX * 0 + overlapResult.OverlapY * -1; + if (isAnotherPlayer) { + _tmp$17 = (overlapResult.Overlap - 0.2) * overlapResult.OverlapX; + _tmp$18 = (overlapResult.Overlap - 0.2) * overlapResult.OverlapY; + pushbackX = _tmp$17; + pushbackY = _tmp$18; + } + _ref$9 = (x$8 = joinIndex$2 - 1 >> 0, ((x$8 < 0 || x$8 >= hardPushbackNorms.$length) ? ($throwRuntimeError("index out of range"), undefined) : hardPushbackNorms.$array[hardPushbackNorms.$offset + x$8])).$get(); + _i$7 = 0; + while (true) { + if (!(_i$7 < _ref$9.$length)) { break; } + hardPushbackNorm = $clone(((_i$7 < 0 || _i$7 >= _ref$9.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$9.$array[_ref$9.$offset + _i$7]), Vec2D); + projectedMagnitude = pushbackX * hardPushbackNorm.X + pushbackY * hardPushbackNorm.Y; + if (isBarrier || (isAnotherPlayer && 0 > projectedMagnitude)) { + pushbackX = pushbackX - (projectedMagnitude * hardPushbackNorm.X); + pushbackY = pushbackY - (projectedMagnitude * hardPushbackNorm.Y); + } + _i$7++; + } + _index = joinIndex$2 - 1 >> 0; + ((_index < 0 || _index >= effPushbacks.$length) ? ($throwRuntimeError("index out of range"), undefined) : effPushbacks.$array[effPushbacks.$offset + _index]).X = ((_index < 0 || _index >= effPushbacks.$length) ? ($throwRuntimeError("index out of range"), undefined) : effPushbacks.$array[effPushbacks.$offset + _index]).X + (pushbackX); + _index$1 = joinIndex$2 - 1 >> 0; + ((_index$1 < 0 || _index$1 >= effPushbacks.$length) ? ($throwRuntimeError("index out of range"), undefined) : effPushbacks.$array[effPushbacks.$offset + _index$1]).Y = ((_index$1 < 0 || _index$1 >= effPushbacks.$length) ? ($throwRuntimeError("index out of range"), undefined) : effPushbacks.$array[effPushbacks.$offset + _index$1]).Y + (pushbackY); + if (0.5 < normAlignmentWithGravity) { + landedOnGravityPushback = true; + } + _i$6++; + $s = 27; continue; + case 28: + /* } */ case 26: + if (landedOnGravityPushback) { + thatPlayerInNextFrame$2.InAir = false; + if (currPlayerDownsync$3.InAir && 0 >= currPlayerDownsync$3.VelY) { + thatPlayerInNextFrame$2.VelY = 0; + thatPlayerInNextFrame$2.VelX = 0; + _tuple$9 = (_entry$1 = nonAttackingSet[$Int32.keyFor(thatPlayerInNextFrame$2.CharacterState)], _entry$1 !== undefined ? [_entry$1.v, true] : [false, false]); + existent$1 = _tuple$9[1]; + if (existent$1) { + if (8 === thatPlayerInNextFrame$2.CharacterState) { + thatPlayerInNextFrame$2.CharacterState = 9; + thatPlayerInNextFrame$2.FramesToRecover = chConfig$2.LayDownFramesToRecover; + } else { + _tmp$19 = 0; + _tmp$20 = currPlayerDownsync$3.ColliderRadius; + halfColliderWidthDiff = _tmp$19; + halfColliderHeightDiff = _tmp$20; + _tuple$10 = VirtualGridToWorldPos(halfColliderWidthDiff, halfColliderHeightDiff); + halfColliderWorldHeightDiff = _tuple$10[1]; + _index$2 = joinIndex$2 - 1 >> 0; + ((_index$2 < 0 || _index$2 >= effPushbacks.$length) ? ($throwRuntimeError("index out of range"), undefined) : effPushbacks.$array[effPushbacks.$offset + _index$2]).Y = ((_index$2 < 0 || _index$2 >= effPushbacks.$length) ? ($throwRuntimeError("index out of range"), undefined) : effPushbacks.$array[effPushbacks.$offset + _index$2]).Y - (halfColliderWorldHeightDiff); + thatPlayerInNextFrame$2.CharacterState = 0; + } + } + } else { + _tuple$11 = (_entry$2 = nonAttackingSet[$Int32.keyFor(thatPlayerInNextFrame$2.CharacterState)], _entry$2 !== undefined ? [_entry$2.v, true] : [false, false]); + existent$2 = _tuple$11[1]; + if (existent$2) { + if (9 === thatPlayerInNextFrame$2.CharacterState) { + if (0 === thatPlayerInNextFrame$2.FramesToRecover) { + thatPlayerInNextFrame$2.CharacterState = 10; + thatPlayerInNextFrame$2.FramesToRecover = chConfig$2.GetUpFramesToRecover; + } + } else if (10 === thatPlayerInNextFrame$2.CharacterState) { + if (0 === thatPlayerInNextFrame$2.FramesToRecover) { + thatPlayerInNextFrame$2.CharacterState = 0; + thatPlayerInNextFrame$2.FramesInvinsible = chConfig$2.GetUpInvinsibleFrames; + } + } + } + } + } + _i$5++; + $s = 22; continue; + case 23: + _ref$10 = bulletColliders; + _i$8 = 0; + /* while (true) { */ case 30: + /* if (!(_i$8 < _ref$10.$length)) { break; } */ if(!(_i$8 < _ref$10.$length)) { $s = 31; continue; } + bulletCollider = ((_i$8 < 0 || _i$8 >= _ref$10.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$10.$array[_ref$10.$offset + _i$8]); + collision$1 = bulletCollider.Check(0, 0, new sliceType$4([])); + bulletCollider.Space.Remove(new sliceType$11([bulletCollider])); + addToNextRenderFrame = true; + /* */ if (!(ptrType$3.nil === collision$1)) { $s = 32; continue; } + /* */ $s = 33; continue; + /* if (!(ptrType$3.nil === collision$1)) { */ case 32: + _ref$11 = bulletCollider.Data; + /* */ if ($assertType(_ref$11, ptrType$1, true)[1]) { $s = 34; continue; } + /* */ if ($assertType(_ref$11, ptrType$6, true)[1]) { $s = 35; continue; } + /* */ $s = 36; continue; + /* if ($assertType(_ref$11, ptrType$1, true)[1]) { */ case 34: + v$2 = _ref$11.$val; + bulletShape = $assertType(bulletCollider.Shape, ptrType$7); + offender$1 = (x$9 = currRenderFrame.PlayersArr, x$10 = v$2.Bullet.OffenderJoinIndex - 1 >> 0, ((x$10 < 0 || x$10 >= x$9.$length) ? ($throwRuntimeError("index out of range"), undefined) : x$9.$array[x$9.$offset + x$10])); + _ref$12 = collision$1.Objects; + _i$9 = 0; + /* while (true) { */ case 37: + /* if (!(_i$9 < _ref$12.$length)) { break; } */ if(!(_i$9 < _ref$12.$length)) { $s = 38; continue; } + obj$1 = ((_i$9 < 0 || _i$9 >= _ref$12.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$12.$array[_ref$12.$offset + _i$9]); + defenderShape = $assertType(obj$1.Shape, ptrType$7); + _ref$13 = obj$1.Data; + /* */ if ($assertType(_ref$13, ptrType$5, true)[1]) { $s = 39; continue; } + /* */ $s = 40; continue; + /* if ($assertType(_ref$13, ptrType$5, true)[1]) { */ case 39: + t = _ref$13.$val; + if (v$2.Bullet.OffenderJoinIndex === t.JoinIndex) { + _i$9++; + /* continue; */ $s = 37; continue; + } + _r$6 = CalcPushbacks(0, 0, bulletShape, defenderShape); /* */ $s = 42; case 42: if($c) { $c = false; _r$6 = _r$6.$blk(); } if (_r$6 && _r$6.$blk !== undefined) { break s; } + _tuple$12 = _r$6; + overlapped$1 = _tuple$12[0]; + if (!overlapped$1) { + _i$9++; + /* continue; */ $s = 37; continue; + } + addToNextRenderFrame = false; + _tuple$13 = (_entry$3 = invinsibleSet[$Int32.keyFor(t.CharacterState)], _entry$3 !== undefined ? [_entry$3.v, true] : [false, false]); + existent$3 = _tuple$13[1]; + if (existent$3) { + _i$9++; + /* continue; */ $s = 37; continue; + } + if (0 < t.FramesInvinsible) { + _i$9++; + /* continue; */ $s = 37; continue; + } + xfac$3 = 1; + if (0 > offender$1.DirX) { + xfac$3 = -xfac$3; + } + _tmp$21 = $imul(xfac$3, v$2.Bullet.PushbackVelX); + _tmp$22 = v$2.Bullet.PushbackVelY; + pushbackVelX = _tmp$21; + pushbackVelY = _tmp$22; + atkedPlayerInNextFrame = (x$11 = t.JoinIndex - 1 >> 0, ((x$11 < 0 || x$11 >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + x$11])); + atkedPlayerInNextFrame.VelX = pushbackVelX; + atkedPlayerInNextFrame.VelY = pushbackVelY; + if (v$2.Bullet.BlowUp) { + atkedPlayerInNextFrame.CharacterState = 8; + } else { + atkedPlayerInNextFrame.CharacterState = 3; + } + oldFramesToRecover = (x$12 = t.JoinIndex - 1 >> 0, ((x$12 < 0 || x$12 >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + x$12])).FramesToRecover; + if (v$2.Bullet.HitStunFrames > oldFramesToRecover) { + atkedPlayerInNextFrame.FramesToRecover = v$2.Bullet.HitStunFrames; + } + $s = 41; continue; + /* } else { */ case 40: + t$1 = _ref$13; + addToNextRenderFrame = false; + /* } */ case 41: + _i$9++; + $s = 37; continue; + case 38: + $s = 36; continue; + /* } else if ($assertType(_ref$11, ptrType$6, true)[1]) { */ case 35: + v$3 = _ref$11.$val; + bulletShape$1 = $assertType(bulletCollider.Shape, ptrType$7); + offender$2 = (x$13 = currRenderFrame.PlayersArr, x$14 = v$3.Bullet.OffenderJoinIndex - 1 >> 0, ((x$14 < 0 || x$14 >= x$13.$length) ? ($throwRuntimeError("index out of range"), undefined) : x$13.$array[x$13.$offset + x$14])); + _ref$14 = collision$1.Objects; + _i$10 = 0; + /* while (true) { */ case 43: + /* if (!(_i$10 < _ref$14.$length)) { break; } */ if(!(_i$10 < _ref$14.$length)) { $s = 44; continue; } + obj$2 = ((_i$10 < 0 || _i$10 >= _ref$14.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$14.$array[_ref$14.$offset + _i$10]); + defenderShape$1 = $assertType(obj$2.Shape, ptrType$7); + _ref$15 = obj$2.Data; + /* */ if ($assertType(_ref$15, ptrType$5, true)[1]) { $s = 45; continue; } + /* */ $s = 46; continue; + /* if ($assertType(_ref$15, ptrType$5, true)[1]) { */ case 45: + t$2 = _ref$15.$val; + if (v$3.Bullet.OffenderJoinIndex === t$2.JoinIndex) { + _i$10++; + /* continue; */ $s = 43; continue; + } + _r$7 = CalcPushbacks(0, 0, bulletShape$1, defenderShape$1); /* */ $s = 48; case 48: if($c) { $c = false; _r$7 = _r$7.$blk(); } if (_r$7 && _r$7.$blk !== undefined) { break s; } + _tuple$14 = _r$7; + overlapped$2 = _tuple$14[0]; + if (!overlapped$2) { + _i$10++; + /* continue; */ $s = 43; continue; + } + addToNextRenderFrame = false; + _tuple$15 = (_entry$4 = invinsibleSet[$Int32.keyFor(t$2.CharacterState)], _entry$4 !== undefined ? [_entry$4.v, true] : [false, false]); + existent$4 = _tuple$15[1]; + if (existent$4) { + _i$10++; + /* continue; */ $s = 43; continue; + } + if (0 < t$2.FramesInvinsible) { + _i$10++; + /* continue; */ $s = 43; continue; + } + xfac$4 = 1; + if (0 > offender$2.DirX) { + xfac$4 = -xfac$4; + } + _tmp$23 = $imul(xfac$4, v$3.Bullet.PushbackVelX); + _tmp$24 = v$3.Bullet.PushbackVelY; + pushbackVelX$1 = _tmp$23; + pushbackVelY$1 = _tmp$24; + atkedPlayerInNextFrame$1 = (x$15 = t$2.JoinIndex - 1 >> 0, ((x$15 < 0 || x$15 >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + x$15])); + atkedPlayerInNextFrame$1.VelX = pushbackVelX$1; + atkedPlayerInNextFrame$1.VelY = pushbackVelY$1; + if (v$3.Bullet.BlowUp) { + atkedPlayerInNextFrame$1.CharacterState = 8; + } else { + atkedPlayerInNextFrame$1.CharacterState = 3; + } + oldFramesToRecover$1 = (x$16 = t$2.JoinIndex - 1 >> 0, ((x$16 < 0 || x$16 >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + x$16])).FramesToRecover; + if (v$3.Bullet.HitStunFrames > oldFramesToRecover$1) { + atkedPlayerInNextFrame$1.FramesToRecover = v$3.Bullet.HitStunFrames; + } + $s = 47; continue; + /* } else { */ case 46: + t$3 = _ref$15; + addToNextRenderFrame = false; + /* } */ case 47: + _i$10++; + $s = 43; continue; + case 44: + /* } */ case 36: + /* } */ case 33: + if (addToNextRenderFrame) { + _ref$16 = bulletCollider.Data; + if ($assertType(_ref$16, ptrType$1, true)[1]) { + v$4 = _ref$16.$val; + nextRenderFrameMeleeBullets = $append(nextRenderFrameMeleeBullets, v$4); + } else if ($assertType(_ref$16, ptrType$6, true)[1]) { + v$5 = _ref$16.$val; + _tmp$25 = v$5.VirtualGridX + v$5.VelX >> 0; + _tmp$26 = v$5.VirtualGridY + v$5.VelY >> 0; + v$5.VirtualGridX = _tmp$25; + v$5.VirtualGridY = _tmp$26; + nextRenderFrameFireballBullets = $append(nextRenderFrameFireballBullets, v$5); + } + } + _i$8++; + $s = 30; continue; + case 31: + _ref$17 = currRenderFrame.PlayersArr; + _i$11 = 0; + while (true) { + if (!(_i$11 < _ref$17.$length)) { break; } + i$4 = _i$11; + currPlayerDownsync$4 = ((_i$11 < 0 || _i$11 >= _ref$17.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$17.$array[_ref$17.$offset + _i$11]); + joinIndex$3 = currPlayerDownsync$4.JoinIndex; + playerCollider$2 = ((i$4 < 0 || i$4 >= playerColliders.$length) ? ($throwRuntimeError("index out of range"), undefined) : playerColliders.$array[playerColliders.$offset + i$4]); + thatPlayerInNextFrame$3 = ((i$4 < 0 || i$4 >= nextRenderFramePlayers.$length) ? ($throwRuntimeError("index out of range"), undefined) : nextRenderFramePlayers.$array[nextRenderFramePlayers.$offset + i$4]); + _tuple$16 = PolygonColliderBLToVirtualGridPos(playerCollider$2.X - (x$17 = joinIndex$3 - 1 >> 0, ((x$17 < 0 || x$17 >= effPushbacks.$length) ? ($throwRuntimeError("index out of range"), undefined) : effPushbacks.$array[effPushbacks.$offset + x$17])).X, playerCollider$2.Y - (x$18 = joinIndex$3 - 1 >> 0, ((x$18 < 0 || x$18 >= effPushbacks.$length) ? ($throwRuntimeError("index out of range"), undefined) : effPushbacks.$array[effPushbacks.$offset + x$18])).Y, playerCollider$2.W * 0.5, playerCollider$2.H * 0.5, 0, 0, 0, 0, collisionSpaceOffsetX, collisionSpaceOffsetY); + thatPlayerInNextFrame$3.VirtualGridX = _tuple$16[0]; + thatPlayerInNextFrame$3.VirtualGridY = _tuple$16[1]; + if (thatPlayerInNextFrame$3.InAir) { + oldNextCharacterState = thatPlayerInNextFrame$3.CharacterState; + _2 = oldNextCharacterState; + if ((_2 === (0)) || (_2 === (1))) { + if (((i$4 < 0 || i$4 >= jumpedOrNotList.$length) ? ($throwRuntimeError("index out of range"), undefined) : jumpedOrNotList.$array[jumpedOrNotList.$offset + i$4]) || (5 === currPlayerDownsync$4.CharacterState)) { + thatPlayerInNextFrame$3.CharacterState = 5; + } else { + thatPlayerInNextFrame$3.CharacterState = 4; + } + } else if (_2 === (2)) { + thatPlayerInNextFrame$3.CharacterState = 6; + } else if (_2 === (3)) { + thatPlayerInNextFrame$3.CharacterState = 7; + } + } + if (!((thatPlayerInNextFrame$3.CharacterState === currPlayerDownsync$4.CharacterState))) { + thatPlayerInNextFrame$3.FramesInChState = 0; + } + _tuple$17 = (_entry$5 = nonAttackingSet[$Int32.keyFor(thatPlayerInNextFrame$3.CharacterState)], _entry$5 !== undefined ? [_entry$5.v, true] : [false, false]); + existent$5 = _tuple$17[1]; + if (existent$5) { + thatPlayerInNextFrame$3.ActiveSkillId = -1; + thatPlayerInNextFrame$3.ActiveSkillHit = -1; + } + _i$11++; + } + _ref$18 = playerColliders; + _i$12 = 0; + while (true) { + if (!(_i$12 < _ref$18.$length)) { break; } + playerCollider$3 = ((_i$12 < 0 || _i$12 >= _ref$18.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$18.$array[_ref$18.$offset + _i$12]); + playerCollider$3.Space.Remove(new sliceType$11([playerCollider$3])); + _i$12++; + } + $s = -1; return new RoomDownsyncFrame.ptr(currRenderFrame.Id + 1 >> 0, nextRenderFramePlayers, new $Int64(0, 0), nextRenderFrameMeleeBullets, nextRenderFrameFireballBullets, new $Uint64(0, 0), false, bulletLocalId); + /* */ } return; } var $f = {$blk: ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame, $c: true, $r, _1, _2, _entry, _entry$1, _entry$2, _entry$3, _entry$4, _entry$5, _i, _i$1, _i$10, _i$11, _i$12, _i$2, _i$3, _i$4, _i$5, _i$6, _i$7, _i$8, _i$9, _index, _index$1, _index$2, _r, _r$1, _r$2, _r$3, _r$4, _r$5, _r$6, _r$7, _ref, _ref$1, _ref$10, _ref$11, _ref$12, _ref$13, _ref$14, _ref$15, _ref$16, _ref$17, _ref$18, _ref$2, _ref$3, _ref$4, _ref$5, _ref$6, _ref$7, _ref$8, _ref$9, _tmp, _tmp$1, _tmp$10, _tmp$11, _tmp$12, _tmp$13, _tmp$14, _tmp$15, _tmp$16, _tmp$17, _tmp$18, _tmp$19, _tmp$2, _tmp$20, _tmp$21, _tmp$22, _tmp$23, _tmp$24, _tmp$25, _tmp$26, _tmp$3, _tmp$4, _tmp$5, _tmp$6, _tmp$7, _tmp$8, _tmp$9, _tuple, _tuple$1, _tuple$10, _tuple$11, _tuple$12, _tuple$13, _tuple$14, _tuple$15, _tuple$16, _tuple$17, _tuple$2, _tuple$3, _tuple$4, _tuple$5, _tuple$6, _tuple$7, _tuple$8, _tuple$9, addToNextRenderFrame, atkedPlayerInNextFrame, atkedPlayerInNextFrame$1, bShape, bulletCollider, bulletColliders, bulletLocalId, bulletShape, bulletShape$1, bulletWx, bulletWx$1, bulletWy, bulletWy$1, chConfig, chConfig$1, chConfig$2, chConfigsOrderedByJoinIndex, colliderHeight, colliderWidth, colliderWorldHeight, colliderWorldWidth, collision, collision$1, collisionSpaceOffsetX, collisionSpaceOffsetY, collisionSys, collisionSysMap, currPlayerDownsync, currPlayerDownsync$1, currPlayerDownsync$2, currPlayerDownsync$3, currPlayerDownsync$4, currRenderFrame, defenderShape, defenderShape$1, effDx, effDy, effPushbacks, existent, existent$1, existent$2, existent$3, existent$4, existent$5, fireballBullet, halfColliderHeightDiff, halfColliderWidthDiff, halfColliderWorldHeightDiff, hardPushbackNorm, hardPushbackNorms, hasLockVel, hitboxSizeWx, hitboxSizeWx$1, hitboxSizeWy, hitboxSizeWy$1, i, i$1, i$2, i$3, i$4, inputsBuffer, isAnotherPlayer, isBarrier, isBullet, joinIndex, joinIndex$1, joinIndex$2, joinIndex$3, jumpedOrNot, jumpedOrNotList, landedOnGravityPushback, meleeBullet, newBullet, newBullet$1, newBulletCollider, newBulletCollider$1, newVx, newVy, nextRenderFrameFireballBullets, nextRenderFrameMeleeBullets, nextRenderFramePlayers, normAlignmentWithGravity, obj, obj$1, obj$2, offender, offender$1, offender$2, oldFramesToRecover, oldFramesToRecover$1, oldNextCharacterState, overlapResult, overlapped, overlapped$1, overlapped$2, patternId, playerCollider, playerCollider$1, playerCollider$2, playerCollider$3, playerColliders, playerShape, projectedMagnitude, pushbackVelX, pushbackVelX$1, pushbackVelY, pushbackVelY$1, pushbackX, pushbackY, roomCapacity, skillConfig, skillId, t, t$1, t$2, t$3, thatPlayerInNextFrame, thatPlayerInNextFrame$1, thatPlayerInNextFrame$2, thatPlayerInNextFrame$3, v, v$1, v$2, v$3, v$4, v$5, wx, wy, x, x$1, x$10, x$11, x$12, x$13, x$14, x$15, x$16, x$17, x$18, x$2, x$3, x$4, x$5, x$6, x$7, x$8, x$9, xfac, xfac$1, xfac$2, xfac$3, xfac$4, $s};return $f; + }; + $pkg.ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame = ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame; + GenerateRectCollider = function(wx, wy, w, h, topPadding, bottomPadding, leftPadding, rightPadding, spaceOffsetX, spaceOffsetY, data, tag) { + var {$24r, _r, _tuple, blX, blY, bottomPadding, data, h, leftPadding, rightPadding, spaceOffsetX, spaceOffsetY, tag, topPadding, w, wx, wy, $s, $r, $c} = $restore(this, {wx, wy, w, h, topPadding, bottomPadding, leftPadding, rightPadding, spaceOffsetX, spaceOffsetY, data, tag}); + /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: + _tuple = WorldToPolygonColliderBLPos(wx, wy, w * 0.5, h * 0.5, topPadding, bottomPadding, leftPadding, rightPadding, spaceOffsetX, spaceOffsetY); + blX = _tuple[0]; + blY = _tuple[1]; + _r = generateRectColliderInCollisionSpace(blX, blY, leftPadding + w + rightPadding, bottomPadding + h + topPadding, data, tag); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; } + $24r = _r; + $s = 2; case 2: return $24r; + /* */ } return; } var $f = {$blk: GenerateRectCollider, $c: true, $r, $24r, _r, _tuple, blX, blY, bottomPadding, data, h, leftPadding, rightPadding, spaceOffsetX, spaceOffsetY, tag, topPadding, w, wx, wy, $s};return $f; + }; + $pkg.GenerateRectCollider = GenerateRectCollider; + generateRectColliderInCollisionSpace = function(blX, blY, w, h, data, tag) { + var {blX, blY, collider, data, h, shape, tag, w, $s, $r, $c} = $restore(this, {blX, blY, w, h, data, tag}); + /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: + collider = resolv.NewObject(blX, blY, w, h, new sliceType$4([tag])); + shape = resolv.NewRectangle(0, 0, w, h); + $r = collider.SetShape(shape); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + collider.Data = data; + $s = -1; return collider; + /* */ } return; } var $f = {$blk: generateRectColliderInCollisionSpace, $c: true, $r, blX, blY, collider, data, h, shape, tag, w, $s};return $f; + }; + GenerateConvexPolygonCollider = function(unalignedSrc, spaceOffsetX, spaceOffsetY, data, tag) { + var {_i, _i$1, _ref, _ref$1, _tmp, _tmp$1, aligned, collider, data, h, i, i$1, j, p, pi, pj, shape, spaceOffsetX, spaceOffsetY, tag, unalignedSrc, w, x, $s, $r, $c} = $restore(this, {unalignedSrc, spaceOffsetX, spaceOffsetY, data, tag}); + /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: + aligned = AlignPolygon2DToBoundingBox(unalignedSrc); + _tmp = 0; + _tmp$1 = 0; + w = _tmp; + h = _tmp$1; + shape = resolv.NewConvexPolygon(sliceType$12.nil); + _ref = aligned.Points; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + i = _i; + pi = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + _ref$1 = aligned.Points; + _i$1 = 0; + while (true) { + if (!(_i$1 < _ref$1.$length)) { break; } + j = _i$1; + pj = ((_i$1 < 0 || _i$1 >= _ref$1.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$1.$array[_ref$1.$offset + _i$1]); + if (i === j) { + _i$1++; + continue; + } + if (math.Abs(pj.X - pi.X) > w) { + w = math.Abs(pj.X - pi.X); + } + if (math.Abs(pj.Y - pi.Y) > h) { + h = math.Abs(pj.Y - pi.Y); + } + _i$1++; + } + _i++; + } + i$1 = 0; + while (true) { + if (!(i$1 < aligned.Points.$length)) { break; } + p = (x = aligned.Points, ((i$1 < 0 || i$1 >= x.$length) ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + i$1])); + shape.AddPoints(new sliceType$12([p.X, p.Y])); + i$1 = i$1 + (1) >> 0; + } + collider = resolv.NewObject(aligned.Anchor.X + spaceOffsetX, aligned.Anchor.Y + spaceOffsetY, w, h, new sliceType$4([tag])); + $r = collider.SetShape(shape); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + collider.Data = data; + $s = -1; return collider; + /* */ } return; } var $f = {$blk: GenerateConvexPolygonCollider, $c: true, $r, _i, _i$1, _ref, _ref$1, _tmp, _tmp$1, aligned, collider, data, h, i, i$1, j, p, pi, pj, shape, spaceOffsetX, spaceOffsetY, tag, unalignedSrc, w, x, $s};return $f; + }; + $pkg.GenerateConvexPolygonCollider = GenerateConvexPolygonCollider; + AlignPolygon2DToBoundingBox = function(input) { + var _i, _i$1, _ref, _ref$1, boundingBoxBL, i, input, output, p, p$1, x; + boundingBoxBL = new Vec2D.ptr(1.7e+308, 1.7e+308); + _ref = input.Points; + _i = 0; + while (true) { + if (!(_i < _ref.$length)) { break; } + p = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + if (p.X < boundingBoxBL.X) { + boundingBoxBL.X = p.X; + } + if (p.Y < boundingBoxBL.Y) { + boundingBoxBL.Y = p.Y; + } + _i++; + } + output = new Polygon2D.ptr(new Vec2D.ptr(input.Anchor.X + boundingBoxBL.X, input.Anchor.Y + boundingBoxBL.Y), $makeSlice(sliceType$13, input.Points.$length)); + _ref$1 = input.Points; + _i$1 = 0; + while (true) { + if (!(_i$1 < _ref$1.$length)) { break; } + i = _i$1; + p$1 = ((_i$1 < 0 || _i$1 >= _ref$1.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref$1.$array[_ref$1.$offset + _i$1]); + (x = output.Points, ((i < 0 || i >= x.$length) ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + i] = new Vec2D.ptr(p$1.X - boundingBoxBL.X, p$1.Y - boundingBoxBL.Y))); + _i$1++; + } + return output; + }; + $pkg.AlignPolygon2DToBoundingBox = AlignPolygon2DToBoundingBox; + ptrType$12.methods = [{prop: "Put", name: "Put", pkg: "", typ: $funcType([$emptyInterface], [], false)}, {prop: "Pop", name: "Pop", pkg: "", typ: $funcType([], [$emptyInterface], false)}, {prop: "GetArrIdxByOffset", name: "GetArrIdxByOffset", pkg: "", typ: $funcType([$Int32], [$Int32], false)}, {prop: "GetByOffset", name: "GetByOffset", pkg: "", typ: $funcType([$Int32], [$emptyInterface], false)}, {prop: "GetByFrameId", name: "GetByFrameId", pkg: "", typ: $funcType([$Int32], [$emptyInterface], false)}, {prop: "SetByFrameId", name: "SetByFrameId", pkg: "", typ: $funcType([$emptyInterface, $Int32], [$Int32, $Int32, $Int32], false)}]; + Vec2D.init("", [{prop: "X", name: "X", embedded: false, exported: true, typ: $Float64, tag: ""}, {prop: "Y", name: "Y", embedded: false, exported: true, typ: $Float64, tag: ""}]); + Polygon2D.init("", [{prop: "Anchor", name: "Anchor", embedded: false, exported: true, typ: ptrType$10, tag: ""}, {prop: "Points", name: "Points", embedded: false, exported: true, typ: sliceType$13, tag: ""}]); + PlayerDownsync.init("", [{prop: "Id", name: "Id", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "VirtualGridX", name: "VirtualGridX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "VirtualGridY", name: "VirtualGridY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "DirX", name: "DirX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "DirY", name: "DirY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "VelX", name: "VelX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "VelY", name: "VelY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Speed", name: "Speed", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "BattleState", name: "BattleState", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "JoinIndex", name: "JoinIndex", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "ColliderRadius", name: "ColliderRadius", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Removed", name: "Removed", embedded: false, exported: true, typ: $Bool, tag: ""}, {prop: "Score", name: "Score", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "LastMoveGmtMillis", name: "LastMoveGmtMillis", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "FramesToRecover", name: "FramesToRecover", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "FramesInChState", name: "FramesInChState", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Hp", name: "Hp", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "MaxHp", name: "MaxHp", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "CharacterState", name: "CharacterState", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "InAir", name: "InAir", embedded: false, exported: true, typ: $Bool, tag: ""}, {prop: "OnWall", name: "OnWall", embedded: false, exported: true, typ: $Bool, tag: ""}, {prop: "ActiveSkillId", name: "ActiveSkillId", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "ActiveSkillHit", name: "ActiveSkillHit", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "FramesInvinsible", name: "FramesInvinsible", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "BulletTeamId", name: "BulletTeamId", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "ChCollisionTeamId", name: "ChCollisionTeamId", embedded: false, exported: true, typ: $Int32, tag: ""}]); + InputFrameDecoded.init("", [{prop: "Dx", name: "Dx", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Dy", name: "Dy", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "BtnALevel", name: "BtnALevel", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "BtnBLevel", name: "BtnBLevel", embedded: false, exported: true, typ: $Int32, tag: ""}]); + Barrier.init("", [{prop: "Boundary", name: "Boundary", embedded: false, exported: true, typ: ptrType$11, tag: ""}]); + Bullet.init("", [{prop: "BulletLocalId", name: "BulletLocalId", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "OriginatedRenderFrameId", name: "OriginatedRenderFrameId", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "OffenderJoinIndex", name: "OffenderJoinIndex", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "StartupFrames", name: "StartupFrames", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "CancellableStFrame", name: "CancellableStFrame", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "CancellableEdFrame", name: "CancellableEdFrame", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "ActiveFrames", name: "ActiveFrames", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "HitStunFrames", name: "HitStunFrames", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "BlockStunFrames", name: "BlockStunFrames", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "PushbackVelX", name: "PushbackVelX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "PushbackVelY", name: "PushbackVelY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Damage", name: "Damage", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "SelfLockVelX", name: "SelfLockVelX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "SelfLockVelY", name: "SelfLockVelY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "HitboxOffsetX", name: "HitboxOffsetX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "HitboxOffsetY", name: "HitboxOffsetY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "HitboxSizeX", name: "HitboxSizeX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "HitboxSizeY", name: "HitboxSizeY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "BlowUp", name: "BlowUp", embedded: false, exported: true, typ: $Bool, tag: ""}, {prop: "CancelTransit", name: "CancelTransit", embedded: false, exported: true, typ: mapType, tag: ""}, {prop: "TeamId", name: "TeamId", embedded: false, exported: true, typ: $Int32, tag: ""}]); + MeleeBullet.init("", [{prop: "Bullet", name: "Bullet", embedded: true, exported: true, typ: Bullet, tag: ""}]); + FireballBullet.init("", [{prop: "VirtualGridX", name: "VirtualGridX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "VirtualGridY", name: "VirtualGridY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "DirX", name: "DirX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "DirY", name: "DirY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "VelX", name: "VelX", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "VelY", name: "VelY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Speed", name: "Speed", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "SpeciesId", name: "SpeciesId", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Bullet", name: "Bullet", embedded: true, exported: true, typ: Bullet, tag: ""}]); + Skill.init("", [{prop: "BattleLocalId", name: "BattleLocalId", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "RecoveryFrames", name: "RecoveryFrames", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "RecoveryFramesOnBlock", name: "RecoveryFramesOnBlock", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "RecoveryFramesOnHit", name: "RecoveryFramesOnHit", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "ReleaseTriggerType", name: "ReleaseTriggerType", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "BoundChState", name: "BoundChState", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Hits", name: "Hits", embedded: false, exported: true, typ: sliceType$2, tag: ""}]); + RoomDownsyncFrame.init("", [{prop: "Id", name: "Id", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "PlayersArr", name: "PlayersArr", embedded: false, exported: true, typ: sliceType$6, tag: ""}, {prop: "CountdownNanos", name: "CountdownNanos", embedded: false, exported: true, typ: $Int64, tag: ""}, {prop: "MeleeBullets", name: "MeleeBullets", embedded: false, exported: true, typ: sliceType$7, tag: ""}, {prop: "FireballBullets", name: "FireballBullets", embedded: false, exported: true, typ: sliceType$8, tag: ""}, {prop: "BackendUnconfirmedMask", name: "BackendUnconfirmedMask", embedded: false, exported: true, typ: $Uint64, tag: ""}, {prop: "ShouldForceResync", name: "ShouldForceResync", embedded: false, exported: true, typ: $Bool, tag: ""}, {prop: "BulletLocalIdCounter", name: "BulletLocalIdCounter", embedded: false, exported: true, typ: $Int32, tag: ""}]); + InputFrameDownsync.init("", [{prop: "InputFrameId", name: "InputFrameId", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "InputList", name: "InputList", embedded: false, exported: true, typ: sliceType$5, tag: ""}, {prop: "ConfirmedList", name: "ConfirmedList", embedded: false, exported: true, typ: $Uint64, tag: ""}]); + NpcPatrolCue.init("", [{prop: "FlAct", name: "FlAct", embedded: false, exported: true, typ: $Uint64, tag: ""}, {prop: "FrAct", name: "FrAct", embedded: false, exported: true, typ: $Uint64, tag: ""}, {prop: "X", name: "X", embedded: false, exported: true, typ: $Float64, tag: ""}, {prop: "Y", name: "Y", embedded: false, exported: true, typ: $Float64, tag: ""}]); + RingBuffer.init("", [{prop: "Ed", name: "Ed", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "St", name: "St", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "EdFrameId", name: "EdFrameId", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "StFrameId", name: "StFrameId", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "N", name: "N", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Cnt", name: "Cnt", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Eles", name: "Eles", embedded: false, exported: true, typ: sliceType$2, tag: ""}]); + SkillMapperType.init([$Int, ptrType$5], [$Int], false); + CharacterConfig.init("", [{prop: "SpeciesId", name: "SpeciesId", embedded: false, exported: true, typ: $Int, tag: ""}, {prop: "SpeciesName", name: "SpeciesName", embedded: false, exported: true, typ: $String, tag: ""}, {prop: "InAirIdleFrameIdxTurningPoint", name: "InAirIdleFrameIdxTurningPoint", embedded: false, exported: true, typ: $Int, tag: ""}, {prop: "InAirIdleFrameIdxTurnedCycle", name: "InAirIdleFrameIdxTurnedCycle", embedded: false, exported: true, typ: $Int, tag: ""}, {prop: "LayDownFrames", name: "LayDownFrames", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "LayDownFramesToRecover", name: "LayDownFramesToRecover", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "GetUpInvinsibleFrames", name: "GetUpInvinsibleFrames", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "GetUpFramesToRecover", name: "GetUpFramesToRecover", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "Speed", name: "Speed", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "JumpingInitVelY", name: "JumpingInitVelY", embedded: false, exported: true, typ: $Int32, tag: ""}, {prop: "SkillMapper", name: "SkillMapper", embedded: false, exported: true, typ: SkillMapperType, tag: ""}]); + SatResult.init("", [{prop: "Overlap", name: "Overlap", embedded: false, exported: true, typ: $Float64, tag: ""}, {prop: "OverlapX", name: "OverlapX", embedded: false, exported: true, typ: $Float64, tag: ""}, {prop: "OverlapY", name: "OverlapY", embedded: false, exported: true, typ: $Float64, tag: ""}, {prop: "AContainedInB", name: "AContainedInB", embedded: false, exported: true, typ: $Bool, tag: ""}, {prop: "BContainedInA", name: "BContainedInA", embedded: false, exported: true, typ: $Bool, tag: ""}, {prop: "Axis", name: "Axis", embedded: false, exported: true, typ: resolv.Vector, tag: ""}]); + $init = function() { + $pkg.$init = function() {}; + /* */ var $f, $c = false, $s = 0, $r; if (this !== undefined && this.$blk !== undefined) { $f = this; $c = true; $s = $f.$s; $r = $f.$r; } s: while (true) { switch ($s) { case 0: + $r = math.$init(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + $r = resolv.$init(); /* */ $s = 2; case 2: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + $pkg.DIRECTION_DECODER = new sliceType$1([new sliceType([0, 0]), new sliceType([0, 2]), new sliceType([0, -2]), new sliceType([2, 0]), new sliceType([-2, 0]), new sliceType([1, 1]), new sliceType([-1, -1]), new sliceType([1, -1]), new sliceType([-1, 1])]); + skills = $makeMap($Int.keyFor, [{ k: 1, v: new Skill.ptr(0, 30, 30, 30, 1, 2, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 0, 7, 13, 30, 22, 13, 9, 50, 0, 5, 5, -1, 1200, 0, 2400, 3200, false, $makeMap($Int.keyFor, [{ k: 1, v: 2 }]), 0))])) }, { k: 2, v: new Skill.ptr(0, 36, 36, 36, 1, 11, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 0, 18, 22, 36, 18, 18, 9, 50, 0, 5, 10, -1, 1800, 0, 2400, 3200, false, $makeMap($Int.keyFor, [{ k: 1, v: 3 }]), 0))])) }, { k: 3, v: new Skill.ptr(0, 50, 50, 50, 1, 12, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 0, 15, 0, 0, 30, 999999999, 9, 200, 700, 10, 50, 500, 3200, 0, 4800, 3200, true, false, 0))])) }, { k: 4, v: new Skill.ptr(0, 30, 30, 30, 1, 2, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 0, 7, 13, 30, 22, 13, 9, 50, 0, 5, 5, -1, 1200, 0, 2400, 3200, false, $makeMap($Int.keyFor, [{ k: 1, v: 5 }]), 0))])) }, { k: 5, v: new Skill.ptr(0, 36, 36, 36, 1, 11, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 0, 18, 22, 36, 18, 18, 9, 50, 0, 5, 10, -1, 1800, 0, 2400, 3200, false, $makeMap($Int.keyFor, [{ k: 1, v: 6 }]), 0))])) }, { k: 6, v: new Skill.ptr(0, 45, 45, 45, 1, 12, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 0, 15, 0, 0, 28, 999999999, 9, 200, 700, 10, -10, -1, 2400, 0, 3200, 3200, true, false, 0))])) }, { k: 7, v: new Skill.ptr(0, 30, 30, 30, 1, 2, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 0, 7, 13, 30, 22, 13, 9, 50, 0, 5, 5, -1, 1200, 0, 2400, 3200, false, $makeMap($Int.keyFor, [{ k: 1, v: 2 }]), 0))])) }, { k: 8, v: new Skill.ptr(0, 36, 36, 36, 1, 11, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 0, 18, 22, 36, 18, 18, 9, 50, 0, 5, 10, -1, 1800, 0, 2400, 3200, false, $makeMap($Int.keyFor, [{ k: 1, v: 3 }]), 0))])) }, { k: 9, v: new Skill.ptr(0, 50, 50, 50, 1, 12, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 0, 15, 0, 0, 30, 999999999, 9, 200, 700, 10, 50, 500, 3200, 0, 4800, 3200, false, false, 0))])) }, { k: 10, v: new Skill.ptr(0, 40, 40, 40, 1, 13, new sliceType$2([new FireballBullet.ptr(0, 0, 0, 0, 0, 0, 800, 1, new Bullet.ptr(0, 0, 0, 15, 0, 0, 999999999, 15, 9, 200, 0, 20, -1, -1, 3200, 0, 4800, 3200, false, false, 0))])) }, { k: 255, v: new Skill.ptr(0, 30, 30, 30, 1, 6, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 0, 3, 0, 0, 20, 18, 9, 50, 0, 5, -1, -1, 1200, 0, 3200, 2400, false, false, 0))])) }, { k: 256, v: new Skill.ptr(0, 20, 20, 20, 1, 6, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 0, 3, 0, 0, 10, 15, 9, 50, 0, 5, -1, -1, 1200, 0, 3200, 2400, false, false, 0))])) }, { k: 257, v: new Skill.ptr(0, 30, 30, 30, 1, 6, new sliceType$2([new MeleeBullet.ptr(new Bullet.ptr(0, 0, 0, 3, 0, 0, 20, 18, 9, 50, 0, 5, -1, -1, 1200, 0, 3200, 2400, false, false, 0))])) }]); + $pkg.Characters = $makeMap($Int.keyFor, [{ k: 0, v: new CharacterConfig.ptr(0, "MonkGirl", 11, 1, 16, 16, 10, 27, 120, 800, (function(patternId, currPlayerDownsync) { + var _entry, _entry$1, _ref, _tuple, _tuple$1, currPlayerDownsync, existent1, existent2, nextSkillId, patternId, skillConfig, v, x, x$1; + if (1 === patternId) { + if (0 === currPlayerDownsync.FramesToRecover) { + if (currPlayerDownsync.InAir) { + return 255; + } else { + return 1; + } + } else { + _tuple = (_entry = skills[$Int.keyFor(((currPlayerDownsync.ActiveSkillId >> 0)))], _entry !== undefined ? [_entry.v, true] : [ptrType.nil, false]); + skillConfig = _tuple[0]; + existent1 = _tuple[1]; + if (existent1) { + _ref = (x = skillConfig.Hits, x$1 = currPlayerDownsync.ActiveSkillHit, ((x$1 < 0 || x$1 >= x.$length) ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + x$1])); + if ($assertType(_ref, ptrType$1, true)[1]) { + v = _ref.$val; + if (v.Bullet.CancellableStFrame <= currPlayerDownsync.FramesInChState && currPlayerDownsync.FramesInChState < v.Bullet.CancellableEdFrame) { + _tuple$1 = (_entry$1 = v.Bullet.CancelTransit[$Int.keyFor(patternId)], _entry$1 !== undefined ? [_entry$1.v, true] : [0, false]); + nextSkillId = _tuple$1[0]; + existent2 = _tuple$1[1]; + if (existent2) { + return nextSkillId; + } + } + } + } + } + } + return -1; + })) }, { k: 1, v: new CharacterConfig.ptr(1, "KnifeGirl", 9, 1, 16, 16, 10, 27, 140, 750, (function(patternId, currPlayerDownsync) { + var _entry, _entry$1, _ref, _tuple, _tuple$1, currPlayerDownsync, existent1, existent2, nextSkillId, patternId, skillConfig, v, x, x$1; + if (1 === patternId) { + if (0 === currPlayerDownsync.FramesToRecover) { + if (currPlayerDownsync.InAir) { + return 256; + } else { + return 4; + } + } else { + _tuple = (_entry = skills[$Int.keyFor(((currPlayerDownsync.ActiveSkillId >> 0)))], _entry !== undefined ? [_entry.v, true] : [ptrType.nil, false]); + skillConfig = _tuple[0]; + existent1 = _tuple[1]; + if (existent1) { + _ref = (x = skillConfig.Hits, x$1 = currPlayerDownsync.ActiveSkillHit, ((x$1 < 0 || x$1 >= x.$length) ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + x$1])); + if ($assertType(_ref, ptrType$1, true)[1]) { + v = _ref.$val; + if (v.Bullet.CancellableStFrame <= currPlayerDownsync.FramesInChState && currPlayerDownsync.FramesInChState < v.Bullet.CancellableEdFrame) { + _tuple$1 = (_entry$1 = v.Bullet.CancelTransit[$Int.keyFor(patternId)], _entry$1 !== undefined ? [_entry$1.v, true] : [0, false]); + nextSkillId = _tuple$1[0]; + existent2 = _tuple$1[1]; + if (existent2) { + return nextSkillId; + } + } + } + } + } + } + return -1; + })) }, { k: 4096, v: new CharacterConfig.ptr(4096, "Monk", 42, 2, 14, 14, 8, 30, 100, 750, (function(patternId, currPlayerDownsync) { + var _entry, _entry$1, _ref, _tuple, _tuple$1, currPlayerDownsync, existent1, existent2, nextSkillId, patternId, skillConfig, v, x, x$1; + if (1 === patternId) { + if (0 === currPlayerDownsync.FramesToRecover) { + if (currPlayerDownsync.InAir) { + return 257; + } else { + return 10; + } + } else { + _tuple = (_entry = skills[$Int.keyFor(((currPlayerDownsync.ActiveSkillId >> 0)))], _entry !== undefined ? [_entry.v, true] : [ptrType.nil, false]); + skillConfig = _tuple[0]; + existent1 = _tuple[1]; + if (existent1) { + _ref = (x = skillConfig.Hits, x$1 = currPlayerDownsync.ActiveSkillHit, ((x$1 < 0 || x$1 >= x.$length) ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + x$1])); + if ($assertType(_ref, ptrType$1, true)[1]) { + v = _ref.$val; + if (v.Bullet.CancellableStFrame <= currPlayerDownsync.FramesInChState && currPlayerDownsync.FramesInChState < v.Bullet.CancellableEdFrame) { + _tuple$1 = (_entry$1 = v.Bullet.CancelTransit[$Int.keyFor(patternId)], _entry$1 !== undefined ? [_entry$1.v, true] : [0, false]); + nextSkillId = _tuple$1[0]; + existent2 = _tuple$1[1]; + if (existent2) { + return nextSkillId; + } + } + } + } + } + } + return -1; + })) }]); + inAirSet = $makeMap($Int32.keyFor, [{ k: 4, v: true }, { k: 5, v: true }, { k: 6, v: true }, { k: 7, v: true }, { k: 8, v: true }]); + noOpSet = $makeMap($Int32.keyFor, [{ k: 3, v: true }, { k: 7, v: true }, { k: 8, v: true }, { k: 9, v: true }]); + invinsibleSet = $makeMap($Int32.keyFor, [{ k: 8, v: true }, { k: 9, v: true }, { k: 10, v: true }]); + nonAttackingSet = $makeMap($Int32.keyFor, [{ k: 0, v: true }, { k: 1, v: true }, { k: 4, v: true }, { k: 5, v: true }, { k: 3, v: true }, { k: 7, v: true }, { k: 8, v: true }, { k: 9, v: true }, { k: 10, v: true }]); + /* */ } return; } if ($f === undefined) { $f = { $blk: $init }; } $f.$s = $s; $f.$r = $r; return $f; + }; + $pkg.$init = $init; + return $pkg; +})(); +$packages["jsexport"] = (function() { + var $pkg = {}, $init, js, battle, resolv, sliceType, ptrType, sliceType$1, ptrType$1, ptrType$2, sliceType$2, ptrType$3, sliceType$3, ptrType$4, sliceType$4, ptrType$5, sliceType$5, ptrType$6, funcType, funcType$1, funcType$2, funcType$3, funcType$4, funcType$5, funcType$6, funcType$7, funcType$8, funcType$9, funcType$10, funcType$11, funcType$12, ptrType$7, funcType$13, funcType$14, funcType$15, funcType$16, sliceType$6, funcType$17, ptrType$8, ptrType$9, ptrType$10, mapType, sliceType$7, funcType$18, funcType$19, funcType$20, mapType$1, NewInputFrameDownsync, NewRingBufferJs, NewCollisionSpaceJs, NewVec2DJs, NewPolygon2DJs, NewBarrierJs, NewPlayerDownsyncJs, NewMeleeBulletJs, NewFireballBulletJs, NewNpcPatrolCue, NewRoomDownsyncFrameJs, GetCollisionSpaceObjsJs, GenerateRectColliderJs, GenerateConvexPolygonColliderJs, GetCharacterConfigsOrderedByJoinIndex, ApplyInputFrameDownsyncDynamicsOnSingleRenderFrameJs, main; + js = $packages["github.com/gopherjs/gopherjs/js"]; + battle = $packages["jsexport/battle"]; + resolv = $packages["resolv"]; + sliceType = $sliceType($Uint64); + ptrType = $ptrType(battle.Vec2D); + sliceType$1 = $sliceType(ptrType); + ptrType$1 = $ptrType(battle.Polygon2D); + ptrType$2 = $ptrType(battle.PlayerDownsync); + sliceType$2 = $sliceType(ptrType$2); + ptrType$3 = $ptrType(battle.MeleeBullet); + sliceType$3 = $sliceType(ptrType$3); + ptrType$4 = $ptrType(battle.FireballBullet); + sliceType$4 = $sliceType(ptrType$4); + ptrType$5 = $ptrType(js.Object); + sliceType$5 = $sliceType(ptrType$5); + ptrType$6 = $ptrType(battle.CharacterConfig); + funcType = $funcType([$Float64, $Float64], [ptrType$5], false); + funcType$1 = $funcType([ptrType, sliceType$1], [ptrType$5], false); + funcType$2 = $funcType([ptrType$1], [ptrType$5], false); + funcType$3 = $funcType([$Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Bool, $Int32, $Int32], [ptrType$5], false); + funcType$4 = $funcType([$Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Bool, $Int32], [ptrType$5], false); + funcType$5 = $funcType([$Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Bool, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32, $Int32], [ptrType$5], false); + funcType$6 = $funcType([$Uint64, $Uint64, $Float64, $Float64], [ptrType$5], false); + funcType$7 = $funcType([$Int32, sliceType$2, $Int32, sliceType$3, sliceType$4], [ptrType$5], false); + funcType$8 = $funcType([$Int, $Int, $Int, $Int], [ptrType$5], false); + funcType$9 = $funcType([$Int32, sliceType, $Uint64], [ptrType$5], false); + funcType$10 = $funcType([$Int32], [ptrType$5], false); + funcType$11 = $funcType([$Float64, $Float64, $Float64, $Float64, $Float64, $Float64, $emptyInterface, $String], [ptrType$5], false); + funcType$12 = $funcType([ptrType$1, $Float64, $Float64, $emptyInterface, $String], [ptrType$5], false); + ptrType$7 = $ptrType(resolv.Space); + funcType$13 = $funcType([ptrType$7], [sliceType$5], false); + funcType$14 = $funcType([$Float64, $Float64, $Float64, $Float64, $Float64, $Float64, $Float64, $Float64, $Float64, $Float64], [$Float64, $Float64], false); + funcType$15 = $funcType([$Float64, $Float64], [$Int32, $Int32], false); + funcType$16 = $funcType([$Int32, $Int32], [$Float64, $Float64], false); + sliceType$6 = $sliceType($Int); + funcType$17 = $funcType([sliceType$6], [sliceType$5], false); + ptrType$8 = $ptrType(battle.RingBuffer); + ptrType$9 = $ptrType(battle.RoomDownsyncFrame); + ptrType$10 = $ptrType(resolv.Object); + mapType = $mapType($Int32, ptrType$10); + sliceType$7 = $sliceType(ptrType$6); + funcType$18 = $funcType([ptrType$8, ptrType$9, ptrType$7, mapType, $Float64, $Float64, sliceType$7], [ptrType$5], false); + funcType$19 = $funcType([$Int32], [$Int32], false); + funcType$20 = $funcType([$Int32], [$Bool], false); + mapType$1 = $mapType($String, $emptyInterface); + NewInputFrameDownsync = function(inputFrameId, inputList, confirmedList) { + var {$24r, _r, confirmedList, inputFrameId, inputList, $s, $r, $c} = $restore(this, {inputFrameId, inputList, confirmedList}); + /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: + _r = js.MakeFullWrapper(new battle.InputFrameDownsync.ptr(inputFrameId, inputList, confirmedList)); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; } + $24r = _r; + $s = 2; case 2: return $24r; + /* */ } return; } var $f = {$blk: NewInputFrameDownsync, $c: true, $r, $24r, _r, confirmedList, inputFrameId, inputList, $s};return $f; + }; + $pkg.NewInputFrameDownsync = NewInputFrameDownsync; + NewRingBufferJs = function(n) { + var {$24r, _r, n, $s, $r, $c} = $restore(this, {n}); + /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: + _r = js.MakeFullWrapper(battle.NewRingBuffer(n)); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; } + $24r = _r; + $s = 2; case 2: return $24r; + /* */ } return; } var $f = {$blk: NewRingBufferJs, $c: true, $r, $24r, _r, n, $s};return $f; + }; + $pkg.NewRingBufferJs = NewRingBufferJs; + NewCollisionSpaceJs = function(spaceW, spaceH, minStepW, minStepH) { + var minStepH, minStepW, spaceH, spaceW; + return js.MakeWrapper(resolv.NewSpace(spaceW, spaceH, minStepW, minStepH)); + }; + $pkg.NewCollisionSpaceJs = NewCollisionSpaceJs; + NewVec2DJs = function(x, y) { + var {$24r, _r, x, y, $s, $r, $c} = $restore(this, {x, y}); + /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: + _r = js.MakeFullWrapper(new battle.Vec2D.ptr(x, y)); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; } + $24r = _r; + $s = 2; case 2: return $24r; + /* */ } return; } var $f = {$blk: NewVec2DJs, $c: true, $r, $24r, _r, x, y, $s};return $f; + }; + $pkg.NewVec2DJs = NewVec2DJs; + NewPolygon2DJs = function(anchor, points) { + var {$24r, _r, anchor, points, $s, $r, $c} = $restore(this, {anchor, points}); + /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: + _r = js.MakeFullWrapper(new battle.Polygon2D.ptr(anchor, points)); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; } + $24r = _r; + $s = 2; case 2: return $24r; + /* */ } return; } var $f = {$blk: NewPolygon2DJs, $c: true, $r, $24r, _r, anchor, points, $s};return $f; + }; + $pkg.NewPolygon2DJs = NewPolygon2DJs; + NewBarrierJs = function(boundary) { + var boundary; + return js.MakeWrapper(new battle.Barrier.ptr(boundary)); + }; + $pkg.NewBarrierJs = NewBarrierJs; + NewPlayerDownsyncJs = function(id, virtualGridX, virtualGridY, dirX, dirY, velX, velY, framesToRecover, framesInChState, activeSkillId, activeSkillHit, framesInvinsible, speed, battleState, characterState, joinIndex, hp, maxHp, colliderRadius, inAir, bulletTeamId, chCollisionTeamId) { + var activeSkillHit, activeSkillId, battleState, bulletTeamId, chCollisionTeamId, characterState, colliderRadius, dirX, dirY, framesInChState, framesInvinsible, framesToRecover, hp, id, inAir, joinIndex, maxHp, speed, velX, velY, virtualGridX, virtualGridY; + return js.MakeWrapper(new battle.PlayerDownsync.ptr(id, virtualGridX, virtualGridY, dirX, dirY, velX, velY, speed, battleState, joinIndex, colliderRadius, false, 0, 0, framesToRecover, framesInChState, hp, maxHp, characterState, inAir, false, activeSkillId, activeSkillHit, framesInvinsible, bulletTeamId, chCollisionTeamId)); + }; + $pkg.NewPlayerDownsyncJs = NewPlayerDownsyncJs; + NewMeleeBulletJs = function(bulletLocalId, originatedRenderFrameId, offenderJoinIndex, startupFrames, cancellableStFrame, cancellableEdFrame, activeFrames, hitStunFrames, blockStunFrames, pushbackVelX, pushbackVelY, damage, selfLockVelX, selfLockVelY, hitboxOffsetX, hitboxOffsetY, hitboxSizeX, hitboxSizeY, blowUp, teamId) { + var activeFrames, blockStunFrames, blowUp, bulletLocalId, cancellableEdFrame, cancellableStFrame, damage, hitStunFrames, hitboxOffsetX, hitboxOffsetY, hitboxSizeX, hitboxSizeY, offenderJoinIndex, originatedRenderFrameId, pushbackVelX, pushbackVelY, selfLockVelX, selfLockVelY, startupFrames, teamId; + return js.MakeWrapper(new battle.MeleeBullet.ptr(new battle.Bullet.ptr(bulletLocalId, originatedRenderFrameId, offenderJoinIndex, startupFrames, cancellableStFrame, cancellableEdFrame, activeFrames, hitStunFrames, blockStunFrames, pushbackVelX, pushbackVelY, damage, selfLockVelX, selfLockVelY, hitboxOffsetX, hitboxOffsetY, hitboxSizeX, hitboxSizeY, blowUp, false, teamId))); + }; + $pkg.NewMeleeBulletJs = NewMeleeBulletJs; + NewFireballBulletJs = function(bulletLocalId, originatedRenderFrameId, offenderJoinIndex, startupFrames, cancellableStFrame, cancellableEdFrame, activeFrames, hitStunFrames, blockStunFrames, pushbackVelX, pushbackVelY, damage, selfLockVelX, selfLockVelY, hitboxOffsetX, hitboxOffsetY, hitboxSizeX, hitboxSizeY, blowUp, teamId, virtualGridX, virtualGridY, dirX, dirY, velX, velY, speed, speciesId) { + var activeFrames, blockStunFrames, blowUp, bulletLocalId, cancellableEdFrame, cancellableStFrame, damage, dirX, dirY, hitStunFrames, hitboxOffsetX, hitboxOffsetY, hitboxSizeX, hitboxSizeY, offenderJoinIndex, originatedRenderFrameId, pushbackVelX, pushbackVelY, selfLockVelX, selfLockVelY, speciesId, speed, startupFrames, teamId, velX, velY, virtualGridX, virtualGridY; + return js.MakeWrapper(new battle.FireballBullet.ptr(virtualGridX, virtualGridY, dirX, dirY, velX, velY, speed, speciesId, new battle.Bullet.ptr(bulletLocalId, originatedRenderFrameId, offenderJoinIndex, startupFrames, cancellableStFrame, cancellableEdFrame, activeFrames, hitStunFrames, blockStunFrames, pushbackVelX, pushbackVelY, damage, selfLockVelX, selfLockVelY, hitboxOffsetX, hitboxOffsetY, hitboxSizeX, hitboxSizeY, blowUp, false, teamId))); + }; + $pkg.NewFireballBulletJs = NewFireballBulletJs; + NewNpcPatrolCue = function(flAct, frAct, x, y) { + var {$24r, _r, flAct, frAct, x, y, $s, $r, $c} = $restore(this, {flAct, frAct, x, y}); + /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: + _r = js.MakeFullWrapper(new battle.NpcPatrolCue.ptr(flAct, frAct, x, y)); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; } + $24r = _r; + $s = 2; case 2: return $24r; + /* */ } return; } var $f = {$blk: NewNpcPatrolCue, $c: true, $r, $24r, _r, flAct, frAct, x, y, $s};return $f; + }; + $pkg.NewNpcPatrolCue = NewNpcPatrolCue; + NewRoomDownsyncFrameJs = function(id, playersArr, bulletLocalIdCounter, meleeBullets, fireballBullets) { + var {$24r, _r, bulletLocalIdCounter, fireballBullets, id, meleeBullets, playersArr, $s, $r, $c} = $restore(this, {id, playersArr, bulletLocalIdCounter, meleeBullets, fireballBullets}); + /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: + _r = js.MakeFullWrapper(new battle.RoomDownsyncFrame.ptr(id, playersArr, new $Int64(0, 0), meleeBullets, fireballBullets, new $Uint64(0, 0), false, bulletLocalIdCounter)); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; } + $24r = _r; + $s = 2; case 2: return $24r; + /* */ } return; } var $f = {$blk: NewRoomDownsyncFrameJs, $c: true, $r, $24r, _r, bulletLocalIdCounter, fireballBullets, id, meleeBullets, playersArr, $s};return $f; + }; + $pkg.NewRoomDownsyncFrameJs = NewRoomDownsyncFrameJs; + GetCollisionSpaceObjsJs = function(space) { + var {_i, _r, _ref, obj, objs, ret, space, $s, $r, $c} = $restore(this, {space}); + /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: + objs = space.Objects(); + ret = $makeSlice(sliceType$5, 0, objs.$length); + _ref = objs; + _i = 0; + /* while (true) { */ case 1: + /* if (!(_i < _ref.$length)) { break; } */ if(!(_i < _ref.$length)) { $s = 2; continue; } + obj = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + _r = js.MakeFullWrapper(obj); /* */ $s = 3; case 3: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; } + ret = $append(ret, _r); + _i++; + $s = 1; continue; + case 2: + $s = -1; return ret; + /* */ } return; } var $f = {$blk: GetCollisionSpaceObjsJs, $c: true, $r, _i, _r, _ref, obj, objs, ret, space, $s};return $f; + }; + $pkg.GetCollisionSpaceObjsJs = GetCollisionSpaceObjsJs; + GenerateRectColliderJs = function(wx, wy, w, h, spaceOffsetX, spaceOffsetY, data, tag) { + var {$24r, _r, _r$1, _tmp, _tmp$1, _tmp$2, _tmp$3, bottomPadding, data, h, leftPadding, rightPadding, spaceOffsetX, spaceOffsetY, tag, topPadding, w, wx, wy, $s, $r, $c} = $restore(this, {wx, wy, w, h, spaceOffsetX, spaceOffsetY, data, tag}); + /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: + _tmp = 0.1; + _tmp$1 = 0.1; + _tmp$2 = 0.1; + _tmp$3 = 0.1; + topPadding = _tmp; + bottomPadding = _tmp$1; + leftPadding = _tmp$2; + rightPadding = _tmp$3; + _r = battle.GenerateRectCollider(wx, wy, w, h, topPadding, bottomPadding, leftPadding, rightPadding, spaceOffsetX, spaceOffsetY, data, tag); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; } + _r$1 = js.MakeFullWrapper(_r); /* */ $s = 2; case 2: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; } + $24r = _r$1; + $s = 3; case 3: return $24r; + /* */ } return; } var $f = {$blk: GenerateRectColliderJs, $c: true, $r, $24r, _r, _r$1, _tmp, _tmp$1, _tmp$2, _tmp$3, bottomPadding, data, h, leftPadding, rightPadding, spaceOffsetX, spaceOffsetY, tag, topPadding, w, wx, wy, $s};return $f; + }; + $pkg.GenerateRectColliderJs = GenerateRectColliderJs; + GenerateConvexPolygonColliderJs = function(unalignedSrc, spaceOffsetX, spaceOffsetY, data, tag) { + var {$24r, _r, _r$1, data, spaceOffsetX, spaceOffsetY, tag, unalignedSrc, $s, $r, $c} = $restore(this, {unalignedSrc, spaceOffsetX, spaceOffsetY, data, tag}); + /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: + _r = battle.GenerateConvexPolygonCollider(unalignedSrc, spaceOffsetX, spaceOffsetY, data, tag); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; } + _r$1 = js.MakeFullWrapper(_r); /* */ $s = 2; case 2: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; } + $24r = _r$1; + $s = 3; case 3: return $24r; + /* */ } return; } var $f = {$blk: GenerateConvexPolygonColliderJs, $c: true, $r, $24r, _r, _r$1, data, spaceOffsetX, spaceOffsetY, tag, unalignedSrc, $s};return $f; + }; + $pkg.GenerateConvexPolygonColliderJs = GenerateConvexPolygonColliderJs; + GetCharacterConfigsOrderedByJoinIndex = function(speciesIdList) { + var {_entry, _i, _r, _ref, i, ret, speciesId, speciesIdList, $s, $r, $c} = $restore(this, {speciesIdList}); + /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: + ret = $makeSlice(sliceType$5, speciesIdList.$length, speciesIdList.$length); + _ref = speciesIdList; + _i = 0; + /* while (true) { */ case 1: + /* if (!(_i < _ref.$length)) { break; } */ if(!(_i < _ref.$length)) { $s = 2; continue; } + i = _i; + speciesId = ((_i < 0 || _i >= _ref.$length) ? ($throwRuntimeError("index out of range"), undefined) : _ref.$array[_ref.$offset + _i]); + _r = js.MakeFullWrapper((_entry = battle.Characters[$Int.keyFor(speciesId)], _entry !== undefined ? _entry.v : ptrType$6.nil)); /* */ $s = 3; case 3: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; } + ((i < 0 || i >= ret.$length) ? ($throwRuntimeError("index out of range"), undefined) : ret.$array[ret.$offset + i] = _r); + _i++; + $s = 1; continue; + case 2: + $s = -1; return ret; + /* */ } return; } var $f = {$blk: GetCharacterConfigsOrderedByJoinIndex, $c: true, $r, _entry, _i, _r, _ref, i, ret, speciesId, speciesIdList, $s};return $f; + }; + $pkg.GetCharacterConfigsOrderedByJoinIndex = GetCharacterConfigsOrderedByJoinIndex; + ApplyInputFrameDownsyncDynamicsOnSingleRenderFrameJs = function(inputsBuffer, currRenderFrame, collisionSys, collisionSysMap, collisionSpaceOffsetX, collisionSpaceOffsetY, chConfigsOrderedByJoinIndex) { + var {$24r, _r, _r$1, chConfigsOrderedByJoinIndex, collisionSpaceOffsetX, collisionSpaceOffsetY, collisionSys, collisionSysMap, currRenderFrame, inputsBuffer, $s, $r, $c} = $restore(this, {inputsBuffer, currRenderFrame, collisionSys, collisionSysMap, collisionSpaceOffsetX, collisionSpaceOffsetY, chConfigsOrderedByJoinIndex}); + /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0: + _r = battle.ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame(inputsBuffer, currRenderFrame, collisionSys, collisionSysMap, collisionSpaceOffsetX, collisionSpaceOffsetY, chConfigsOrderedByJoinIndex); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; } + _r$1 = js.MakeFullWrapper(_r); /* */ $s = 2; case 2: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; } + $24r = _r$1; + $s = 3; case 3: return $24r; + /* */ } return; } var $f = {$blk: ApplyInputFrameDownsyncDynamicsOnSingleRenderFrameJs, $c: true, $r, $24r, _r, _r$1, chConfigsOrderedByJoinIndex, collisionSpaceOffsetX, collisionSpaceOffsetY, collisionSys, collisionSysMap, currRenderFrame, inputsBuffer, $s};return $f; + }; + $pkg.ApplyInputFrameDownsyncDynamicsOnSingleRenderFrameJs = ApplyInputFrameDownsyncDynamicsOnSingleRenderFrameJs; + main = function() { + $global.gopkgs = $externalize($makeMap($String.keyFor, [{ k: "NewVec2DJs", v: new funcType(NewVec2DJs) }, { k: "NewPolygon2DJs", v: new funcType$1(NewPolygon2DJs) }, { k: "NewBarrierJs", v: new funcType$2(NewBarrierJs) }, { k: "NewPlayerDownsyncJs", v: new funcType$3(NewPlayerDownsyncJs) }, { k: "NewMeleeBulletJs", v: new funcType$4(NewMeleeBulletJs) }, { k: "NewFireballBulletJs", v: new funcType$5(NewFireballBulletJs) }, { k: "NewNpcPatrolCue", v: new funcType$6(NewNpcPatrolCue) }, { k: "NewRoomDownsyncFrameJs", v: new funcType$7(NewRoomDownsyncFrameJs) }, { k: "NewCollisionSpaceJs", v: new funcType$8(NewCollisionSpaceJs) }, { k: "NewInputFrameDownsync", v: new funcType$9(NewInputFrameDownsync) }, { k: "NewRingBufferJs", v: new funcType$10(NewRingBufferJs) }, { k: "GenerateRectColliderJs", v: new funcType$11(GenerateRectColliderJs) }, { k: "GenerateConvexPolygonColliderJs", v: new funcType$12(GenerateConvexPolygonColliderJs) }, { k: "GetCollisionSpaceObjsJs", v: new funcType$13(GetCollisionSpaceObjsJs) }, { k: "WorldToPolygonColliderBLPos", v: new funcType$14(battle.WorldToPolygonColliderBLPos) }, { k: "PolygonColliderBLToWorldPos", v: new funcType$14(battle.PolygonColliderBLToWorldPos) }, { k: "WorldToVirtualGridPos", v: new funcType$15(battle.WorldToVirtualGridPos) }, { k: "VirtualGridToWorldPos", v: new funcType$16(battle.VirtualGridToWorldPos) }, { k: "GetCharacterConfigsOrderedByJoinIndex", v: new funcType$17(GetCharacterConfigsOrderedByJoinIndex) }, { k: "ApplyInputFrameDownsyncDynamicsOnSingleRenderFrameJs", v: new funcType$18(ApplyInputFrameDownsyncDynamicsOnSingleRenderFrameJs) }, { k: "ConvertToDelayedInputFrameId", v: new funcType$19(battle.ConvertToDelayedInputFrameId) }, { k: "ConvertToNoDelayInputFrameId", v: new funcType$19(battle.ConvertToNoDelayInputFrameId) }, { k: "ConvertToFirstUsedRenderFrameId", v: new funcType$19(battle.ConvertToFirstUsedRenderFrameId) }, { k: "ConvertToLastUsedRenderFrameId", v: new funcType$19(battle.ConvertToLastUsedRenderFrameId) }, { k: "ShouldGenerateInputFrameUpsync", v: new funcType$20(battle.ShouldGenerateInputFrameUpsync) }]), mapType$1); + }; + $init = function() { + $pkg.$init = function() {}; + /* */ var $f, $c = false, $s = 0, $r; if (this !== undefined && this.$blk !== undefined) { $f = this; $c = true; $s = $f.$s; $r = $f.$r; } s: while (true) { switch ($s) { case 0: + $r = js.$init(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + $r = battle.$init(); /* */ $s = 2; case 2: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + $r = resolv.$init(); /* */ $s = 3; case 3: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; } + if ($pkg === $mainPkg) { + main(); + $mainFinished = true; + } + /* */ } return; } if ($f === undefined) { $f = { $blk: $init }; } $f.$s = $s; $f.$r = $r; return $f; + }; + $pkg.$init = $init; + return $pkg; +})(); $synthesizeMethods(); $initAllLinknames(); var $mainPkg = $packages["jsexport"]; diff --git a/frontend/assets/resources/animation/Fireball.meta b/frontend/assets/resources/animation/Fireball.meta new file mode 100644 index 0000000..a62ceee --- /dev/null +++ b/frontend/assets/resources/animation/Fireball.meta @@ -0,0 +1,7 @@ +{ + "ver": "1.0.1", + "uuid": "b07a911d-2d61-486d-9edc-1b3ba53c9911", + "isSubpackage": false, + "subpackageName": "", + "subMetas": {} +} \ No newline at end of file diff --git a/frontend/assets/resources/animation/Fireball/Fireball1.anim b/frontend/assets/resources/animation/Fireball/Fireball1.anim new file mode 100644 index 0000000..108a311 --- /dev/null +++ b/frontend/assets/resources/animation/Fireball/Fireball1.anim @@ -0,0 +1,145 @@ +{ + "__type__": "cc.AnimationClip", + "_name": "Fireball1", + "_objFlags": 0, + "_native": "", + "_duration": 0.35, + "sample": 60, + "speed": 1, + "wrapMode": 2, + "curveData": { + "comps": { + "cc.Sprite": { + "spriteFrame": [ + { + "frame": 0, + "value": { + "__uuid__": "dbe67025-9878-4e13-8f3d-81e04734810a" + } + }, + { + "frame": 0.016666666666666666, + "value": { + "__uuid__": "e92702d5-d5fd-49e6-ab6b-2296b43fa6d6" + } + }, + { + "frame": 0.03333333333333333, + "value": { + "__uuid__": "e1a89340-0b92-4e6b-93f2-e983302d70ce" + } + }, + { + "frame": 0.05, + "value": { + "__uuid__": "b0bb4a7a-4ae3-48fc-9913-3b6d1d36c56f" + } + }, + { + "frame": 0.06666666666666667, + "value": { + "__uuid__": "b44d585b-8e18-4767-b263-ed3a53cd3250" + } + }, + { + "frame": 0.08333333333333333, + "value": { + "__uuid__": "a87a9ea8-2d84-4a3b-83e3-a4d7b8ac96b8" + } + }, + { + "frame": 0.1, + "value": { + "__uuid__": "a1604f9d-c0ea-4f92-b09b-3608245bda8e" + } + }, + { + "frame": 0.11666666666666667, + "value": { + "__uuid__": "4372818f-1e44-4180-a0ce-4a34cee4fc5b" + } + }, + { + "frame": 0.13333333333333333, + "value": { + "__uuid__": "2ad9becb-20e0-4bbb-b83b-de21e085e706" + } + }, + { + "frame": 0.15, + "value": { + "__uuid__": "5d867617-7f50-4fa8-804d-ce28c47ea407" + } + }, + { + "frame": 0.16666666666666666, + "value": { + "__uuid__": "824c9bee-42b7-4a94-86f8-6356f11aee16" + } + }, + { + "frame": 0.18333333333333332, + "value": { + "__uuid__": "6389164e-93bb-4d4d-9740-5e2d5cdb1029" + } + }, + { + "frame": 0.2, + "value": { + "__uuid__": "d184a083-6043-4ca6-bd14-8db1b6be1d2e" + } + }, + { + "frame": 0.21666666666666667, + "value": { + "__uuid__": "361b1722-e362-46e5-939e-e2d1666df374" + } + }, + { + "frame": 0.23333333333333334, + "value": { + "__uuid__": "662fbe4f-a1f4-46f7-83e4-eafd021432da" + } + }, + { + "frame": 0.25, + "value": { + "__uuid__": "5e509118-a44b-4e7f-9686-c6bb0b30f0b0" + } + }, + { + "frame": 0.26666666666666666, + "value": { + "__uuid__": "bc1110c7-4423-4c43-965c-0cb3dd8e31ff" + } + }, + { + "frame": 0.2833333333333333, + "value": { + "__uuid__": "33cc8d11-1568-47a7-b4f1-cef4888302e5" + } + }, + { + "frame": 0.3, + "value": { + "__uuid__": "83bb5dd3-510c-4fce-b393-840f14efb8cd" + } + }, + { + "frame": 0.31666666666666665, + "value": { + "__uuid__": "1db706f5-366a-421c-843f-a4bb016f80ec" + } + }, + { + "frame": 0.3333333333333333, + "value": { + "__uuid__": "41a4f35a-01c0-4a22-b5cc-7bfe25ed4501" + } + } + ] + } + } + }, + "events": [] +} \ No newline at end of file diff --git a/frontend/assets/resources/animation/Fireball/Fireball1.anim.meta b/frontend/assets/resources/animation/Fireball/Fireball1.anim.meta new file mode 100644 index 0000000..476c5de --- /dev/null +++ b/frontend/assets/resources/animation/Fireball/Fireball1.anim.meta @@ -0,0 +1,5 @@ +{ + "ver": "2.1.0", + "uuid": "ba12416b-eec3-4260-8402-7fc25b125624", + "subMetas": {} +} \ No newline at end of file diff --git a/frontend/assets/resources/animation/Monk/InAirIdle1ByJump.anim b/frontend/assets/resources/animation/Monk/InAirIdle1ByJump.anim index 19f7630..7af5c7f 100644 --- a/frontend/assets/resources/animation/Monk/InAirIdle1ByJump.anim +++ b/frontend/assets/resources/animation/Monk/InAirIdle1ByJump.anim @@ -3,7 +3,7 @@ "_name": "InAirIdle1ByJump", "_objFlags": 0, "_native": "", - "_duration": 0.7833333333333333, + "_duration": 0.5833333333333334, "sample": 60, "speed": 1, "wrapMode": 1, @@ -18,67 +18,67 @@ } }, { - "frame": 0.05, + "frame": 0.03333333333333333, "value": { "__uuid__": "06d18871-0cb6-41eb-a484-5c6a4c04d5d5" } }, { - "frame": 0.11666666666666667, + "frame": 0.06666666666666667, "value": { "__uuid__": "f298ff82-ad9d-4945-ab19-14c3e3d54c95" } }, { - "frame": 0.18333333333333332, + "frame": 0.11666666666666667, "value": { "__uuid__": "bb5924a6-40cf-4e43-8c94-e51b27861656" } }, { - "frame": 0.25, + "frame": 0.16666666666666666, "value": { "__uuid__": "fc4b5181-77af-44ec-836e-c14eec8d20c4" } }, { - "frame": 0.3333333333333333, + "frame": 0.21666666666666667, "value": { "__uuid__": "5ddd3db3-79b2-4f0c-bb76-2446801ff665" } }, { - "frame": 0.4166666666666667, + "frame": 0.26666666666666666, "value": { "__uuid__": "032785ce-c911-479b-be1c-2e0899a586d0" } }, { - "frame": 0.48333333333333334, + "frame": 0.31666666666666665, "value": { "__uuid__": "d651269d-1c08-49f8-bc38-d301bf26b0e1" } }, { - "frame": 0.5666666666666667, + "frame": 0.36666666666666664, "value": { "__uuid__": "e270563e-d98d-4a80-82db-837183053ae3" } }, { - "frame": 0.6333333333333333, + "frame": 0.43333333333333335, "value": { "__uuid__": "aec31ef8-46dc-4f0e-9cba-18f6c96c5c33" } }, { - "frame": 0.7, + "frame": 0.5, "value": { "__uuid__": "e64b3a8d-41a9-45f6-9aeb-9e49b6317080" } }, { - "frame": 0.7666666666666667, + "frame": 0.5666666666666667, "value": { "__uuid__": "cf886091-24a9-4cfb-8cb9-e3db977035ab" } diff --git a/frontend/assets/resources/animation/Monk/Monk.plist b/frontend/assets/resources/animation/Monk/Monk.plist index 012af0b..12982ed 100644 --- a/frontend/assets/resources/animation/Monk/Monk.plist +++ b/frontend/assets/resources/animation/Monk/Monk.plist @@ -15,9 +15,9 @@ spriteSourceSize {121,107} textureRect - {{322,604},{121,107}} + {{1558,364},{121,107}} textureRotated - + Atk1_2.png @@ -30,7 +30,7 @@ spriteSourceSize {121,107} textureRect - {{340,1813},{121,107}} + {{693,681},{121,107}} textureRotated @@ -45,7 +45,7 @@ spriteSourceSize {121,107} textureRect - {{503,1080},{121,107}} + {{693,788},{121,107}} textureRotated @@ -60,7 +60,7 @@ spriteSourceSize {121,107} textureRect - {{503,1080},{121,107}} + {{693,788},{121,107}} textureRotated @@ -75,7 +75,7 @@ spriteSourceSize {121,107} textureRect - {{503,1080},{121,107}} + {{693,788},{121,107}} textureRotated @@ -90,7 +90,7 @@ spriteSourceSize {121,107} textureRect - {{503,1187},{121,107}} + {{693,895},{121,107}} textureRotated @@ -105,7 +105,7 @@ spriteSourceSize {121,107} textureRect - {{368,1294},{121,107}} + {{814,683},{121,107}} textureRotated @@ -120,7 +120,7 @@ spriteSourceSize {123,113} textureRect - {{245,1260},{123,113}} + {{140,629},{123,113}} textureRotated @@ -135,7 +135,7 @@ spriteSourceSize {123,113} textureRect - {{245,1373},{123,113}} + {{140,742},{123,113}} textureRotated @@ -150,7 +150,7 @@ spriteSourceSize {123,113} textureRect - {{245,1486},{123,113}} + {{140,855},{123,113}} textureRotated @@ -165,7 +165,7 @@ spriteSourceSize {123,113} textureRect - {{245,1599},{123,113}} + {{140,968},{123,113}} textureRotated @@ -180,7 +180,7 @@ spriteSourceSize {123,113} textureRect - {{380,741},{123,113}} + {{263,657},{123,113}} textureRotated @@ -195,7 +195,7 @@ spriteSourceSize {123,113} textureRect - {{380,854},{123,113}} + {{263,770},{123,113}} textureRotated @@ -210,7 +210,7 @@ spriteSourceSize {123,113} textureRect - {{503,741},{123,113}} + {{263,883},{123,113}} textureRotated @@ -225,7 +225,7 @@ spriteSourceSize {123,113} textureRect - {{380,967},{123,113}} + {{263,996},{123,113}} textureRotated @@ -240,7 +240,7 @@ spriteSourceSize {123,113} textureRect - {{503,854},{123,113}} + {{386,694},{123,113}} textureRotated @@ -255,7 +255,7 @@ spriteSourceSize {123,113} textureRect - {{380,1080},{123,113}} + {{386,807},{123,113}} textureRotated @@ -270,7 +270,7 @@ spriteSourceSize {123,113} textureRect - {{380,1080},{123,113}} + {{386,807},{123,113}} textureRotated @@ -285,7 +285,7 @@ spriteSourceSize {123,113} textureRect - {{503,967},{123,113}} + {{386,920},{123,113}} textureRotated @@ -300,7 +300,7 @@ spriteSourceSize {123,113} textureRect - {{503,967},{123,113}} + {{386,920},{123,113}} textureRotated @@ -315,7 +315,7 @@ spriteSourceSize {123,113} textureRect - {{245,1373},{123,113}} + {{140,742},{123,113}} textureRotated @@ -330,7 +330,7 @@ spriteSourceSize {101,123} textureRect - {{245,1712},{101,123}} + {{386,1033},{101,123}} textureRotated @@ -345,9 +345,9 @@ spriteSourceSize {101,123} textureRect - {{380,1193},{101,123}} + {{592,672},{101,123}} textureRotated - + Atk3_11.png @@ -360,7 +360,7 @@ spriteSourceSize {101,123} textureRect - {{368,1401},{101,123}} + {{592,795},{101,123}} textureRotated @@ -375,9 +375,9 @@ spriteSourceSize {101,123} textureRect - {{489,1294},{101,123}} + {{592,918},{101,123}} textureRotated - + Atk3_13.png @@ -390,7 +390,7 @@ spriteSourceSize {101,123} textureRect - {{368,1524},{101,123}} + {{814,790},{101,123}} textureRotated @@ -405,9 +405,9 @@ spriteSourceSize {101,123} textureRect - {{368,1647},{101,123}} + {{935,683},{101,123}} textureRotated - + Atk3_2.png @@ -420,9 +420,9 @@ spriteSourceSize {101,123} textureRect - {{626,743},{101,123}} + {{1058,683},{101,123}} textureRotated - + Atk3_3.png @@ -435,9 +435,9 @@ spriteSourceSize {101,123} textureRect - {{626,866},{101,123}} + {{1181,683},{101,123}} textureRotated - + Atk3_4.png @@ -450,9 +450,9 @@ spriteSourceSize {101,123} textureRect - {{727,743},{101,123}} + {{1304,683},{101,123}} textureRotated - + Atk3_5.png @@ -465,7 +465,7 @@ spriteSourceSize {101,123} textureRect - {{727,866},{101,123}} + {{814,913},{101,123}} textureRotated @@ -480,9 +480,9 @@ spriteSourceSize {101,123} textureRect - {{828,743},{101,123}} + {{1505,685},{101,123}} textureRotated - + Atk3_7.png @@ -495,9 +495,9 @@ spriteSourceSize {101,123} textureRect - {{828,743},{101,123}} + {{1505,685},{101,123}} textureRotated - + Atk3_8.png @@ -510,7 +510,7 @@ spriteSourceSize {101,123} textureRect - {{828,866},{101,123}} + {{592,1041},{101,123}} textureRotated @@ -525,7 +525,7 @@ spriteSourceSize {101,123} textureRect - {{626,989},{101,123}} + {{693,1057},{101,123}} textureRotated @@ -540,7 +540,7 @@ spriteSourceSize {135,107} textureRect - {{322,469},{135,107}} + {{1833,150},{135,107}} textureRotated @@ -555,7 +555,7 @@ spriteSourceSize {135,107} textureRect - {{707,422},{135,107}} + {{844,469},{135,107}} textureRotated @@ -570,7 +570,7 @@ spriteSourceSize {135,107} textureRect - {{842,422},{135,107}} + {{979,469},{135,107}} textureRotated @@ -585,7 +585,7 @@ spriteSourceSize {135,107} textureRect - {{429,527},{135,107}} + {{1114,469},{135,107}} textureRotated @@ -600,7 +600,7 @@ spriteSourceSize {135,107} textureRect - {{564,527},{135,107}} + {{1249,469},{135,107}} textureRotated @@ -615,7 +615,7 @@ spriteSourceSize {135,107} textureRect - {{699,529},{135,107}} + {{1384,469},{135,107}} textureRotated @@ -630,7 +630,7 @@ spriteSourceSize {135,107} textureRect - {{834,529},{135,107}} + {{1519,471},{135,107}} textureRotated @@ -645,7 +645,7 @@ spriteSourceSize {135,107} textureRect - {{429,634},{135,107}} + {{562,565},{135,107}} textureRotated @@ -660,7 +660,7 @@ spriteSourceSize {135,107} textureRect - {{564,634},{135,107}} + {{697,574},{135,107}} textureRotated @@ -675,7 +675,7 @@ spriteSourceSize {135,107} textureRect - {{699,636},{135,107}} + {{832,576},{135,107}} textureRotated @@ -690,7 +690,7 @@ spriteSourceSize {135,107} textureRect - {{834,636},{135,107}} + {{967,576},{135,107}} textureRotated @@ -705,7 +705,7 @@ spriteSourceSize {135,107} textureRect - {{245,725},{135,107}} + {{1102,576},{135,107}} textureRotated @@ -720,7 +720,7 @@ spriteSourceSize {135,107} textureRect - {{245,832},{135,107}} + {{1237,576},{135,107}} textureRotated @@ -735,7 +735,7 @@ spriteSourceSize {135,107} textureRect - {{245,939},{135,107}} + {{1372,576},{135,107}} textureRotated @@ -750,7 +750,7 @@ spriteSourceSize {135,107} textureRect - {{245,1046},{135,107}} + {{1507,578},{135,107}} textureRotated @@ -765,10 +765,175 @@ spriteSourceSize {135,107} textureRect - {{245,1153},{135,107}} + {{148,522},{135,107}} textureRotated + Atk5_1.png + + aliases + + spriteOffset + {0,0} + spriteSize + {96,150} + spriteSourceSize + {96,150} + textureRect + {{1844,0},{96,150}} + textureRotated + + + Atk5_10.png + + aliases + + spriteOffset + {0,0} + spriteSize + {96,150} + spriteSourceSize + {96,150} + textureRect + {{1683,114},{96,150}} + textureRotated + + + Atk5_11.png + + aliases + + spriteOffset + {0,0} + spriteSize + {96,150} + spriteSourceSize + {96,150} + textureRect + {{436,305},{96,150}} + textureRotated + + + Atk5_2.png + + aliases + + spriteOffset + {0,0} + spriteSize + {96,150} + spriteSourceSize + {96,150} + textureRect + {{586,268},{96,150}} + textureRotated + + + Atk5_3.png + + aliases + + spriteOffset + {0,0} + spriteSize + {96,150} + spriteSourceSize + {96,150} + textureRect + {{736,268},{96,150}} + textureRotated + + + Atk5_4.png + + aliases + + spriteOffset + {0,0} + spriteSize + {96,150} + spriteSourceSize + {96,150} + textureRect + {{886,268},{96,150}} + textureRotated + + + Atk5_5.png + + aliases + + spriteOffset + {0,0} + spriteSize + {96,150} + spriteSourceSize + {96,150} + textureRect + {{1036,268},{96,150}} + textureRotated + + + Atk5_6.png + + aliases + + spriteOffset + {0,0} + spriteSize + {96,150} + spriteSourceSize + {96,150} + textureRect + {{1186,268},{96,150}} + textureRotated + + + Atk5_7.png + + aliases + + spriteOffset + {0,0} + spriteSize + {96,150} + spriteSourceSize + {96,150} + textureRect + {{1336,268},{96,150}} + textureRotated + + + Atk5_8.png + + aliases + + spriteOffset + {0,0} + spriteSize + {96,150} + spriteSourceSize + {96,150} + textureRect + {{1486,268},{96,150}} + textureRotated + + + Atk5_9.png + + aliases + + spriteOffset + {0,0} + spriteSize + {96,150} + spriteSourceSize + {96,150} + textureRect + {{586,364},{96,150}} + textureRotated + + Atked1_1.png aliases @@ -780,7 +945,7 @@ spriteSourceSize {86,104} textureRect - {{664,1659},{86,104}} + {{1235,1027},{86,104}} textureRotated @@ -795,9 +960,9 @@ spriteSourceSize {86,104} textureRect - {{756,1806},{86,104}} + {{1321,1046},{86,104}} textureRotated - + BlownUp1_1.png @@ -975,7 +1140,7 @@ spriteSourceSize {140,114} textureRect - {{0,1000},{140,114}} + {{1004,0},{140,114}} textureRotated @@ -990,7 +1155,7 @@ spriteSourceSize {140,114} textureRect - {{0,1114},{140,114}} + {{0,1000},{140,114}} textureRotated @@ -1005,7 +1170,7 @@ spriteSourceSize {140,114} textureRect - {{0,1228},{140,114}} + {{1144,0},{140,114}} textureRotated @@ -1020,7 +1185,7 @@ spriteSourceSize {140,114} textureRect - {{0,1342},{140,114}} + {{1284,0},{140,114}} textureRotated @@ -1035,7 +1200,7 @@ spriteSourceSize {140,114} textureRect - {{0,1456},{140,114}} + {{1424,0},{140,114}} textureRotated @@ -1050,7 +1215,7 @@ spriteSourceSize {140,114} textureRect - {{0,1570},{140,114}} + {{1564,0},{140,114}} textureRotated @@ -1065,7 +1230,7 @@ spriteSourceSize {140,114} textureRect - {{0,1684},{140,114}} + {{1704,0},{140,114}} textureRotated @@ -1080,10 +1245,415 @@ spriteSourceSize {140,114} textureRect - {{0,1798},{140,114}} + {{436,191},{140,114}} textureRotated + Explosion1_1.png + + aliases + + spriteOffset + {0,0} + spriteSize + {110,63} + spriteSourceSize + {110,63} + textureRect + {{1407,1056},{110,63}} + textureRotated + + + Explosion1_2.png + + aliases + + spriteOffset + {0,0} + spriteSize + {110,63} + spriteSourceSize + {110,63} + textureRect + {{1470,1056},{110,63}} + textureRotated + + + Explosion1_3.png + + aliases + + spriteOffset + {0,0} + spriteSize + {110,63} + spriteSourceSize + {110,63} + textureRect + {{1654,471},{110,63}} + textureRotated + + + Explosion1_4.png + + aliases + + spriteOffset + {0,0} + spriteSize + {110,63} + spriteSourceSize + {110,63} + textureRect + {{1679,320},{110,63}} + textureRotated + + + Explosion1_5.png + + aliases + + spriteOffset + {0,0} + spriteSize + {110,63} + spriteSourceSize + {110,63} + textureRect + {{1533,1041},{110,63}} + textureRotated + + + Explosion1_6.png + + aliases + + spriteOffset + {0,0} + spriteSize + {110,63} + spriteSourceSize + {110,63} + textureRect + {{1603,958},{110,63}} + textureRotated + + + Fireball1_1.png + + aliases + + spriteOffset + {0,0} + spriteSize + {117,55} + spriteSourceSize + {117,55} + textureRect + {{693,1002},{117,55}} + textureRotated + + + Fireball1_10.png + + aliases + + spriteOffset + {0,0} + spriteSize + {117,55} + spriteSourceSize + {117,55} + textureRect + {{140,1081},{117,55}} + textureRotated + + + Fireball1_11.png + + aliases + + spriteOffset + {0,0} + spriteSize + {117,55} + spriteSourceSize + {117,55} + textureRect + {{257,1109},{117,55}} + textureRotated + + + Fireball1_12.png + + aliases + + spriteOffset + {0,0} + spriteSize + {117,55} + spriteSourceSize + {117,55} + textureRect + {{1638,210},{117,55}} + textureRotated + + + Fireball1_13.png + + aliases + + spriteOffset + {0,0} + spriteSize + {117,55} + spriteSourceSize + {117,55} + textureRect + {{1638,265},{117,55}} + textureRotated + + + Fireball1_14.png + + aliases + + spriteOffset + {0,0} + spriteSize + {117,55} + spriteSourceSize + {117,55} + textureRect + {{1823,619},{117,55}} + textureRotated + + + Fireball1_15.png + + aliases + + spriteOffset + {0,0} + spriteSize + {117,55} + spriteSourceSize + {117,55} + textureRect + {{1505,786},{117,55}} + textureRotated + + + Fireball1_16.png + + aliases + + spriteOffset + {0,0} + spriteSize + {117,55} + spriteSourceSize + {117,55} + textureRect + {{1603,841},{117,55}} + textureRotated + + + Fireball1_17.png + + aliases + + spriteOffset + {0,0} + spriteSize + {117,55} + spriteSourceSize + {117,55} + textureRect + {{1658,792},{117,55}} + textureRotated + + + Fireball1_18.png + + aliases + + spriteOffset + {0,0} + spriteSize + {117,55} + spriteSourceSize + {117,55} + textureRect + {{1713,866},{117,55}} + textureRotated + + + Fireball1_19.png + + aliases + + spriteOffset + {0,0} + spriteSize + {117,55} + spriteSourceSize + {117,55} + textureRect + {{1596,1068},{117,55}} + textureRotated + + + Fireball1_2.png + + aliases + + spriteOffset + {0,0} + spriteSize + {117,55} + spriteSourceSize + {117,55} + textureRect + {{1713,921},{117,55}} + textureRotated + + + Fireball1_20.png + + aliases + + spriteOffset + {0,0} + spriteSize + {117,55} + spriteSourceSize + {117,55} + textureRect + {{1830,864},{117,55}} + textureRotated + + + Fireball1_21.png + + aliases + + spriteOffset + {0,0} + spriteSize + {117,55} + spriteSourceSize + {117,55} + textureRect + {{1885,864},{117,55}} + textureRotated + + + Fireball1_3.png + + aliases + + spriteOffset + {0,0} + spriteSize + {117,55} + spriteSourceSize + {117,55} + textureRect + {{1505,786},{117,55}} + textureRotated + + + Fireball1_4.png + + aliases + + spriteOffset + {0,0} + spriteSize + {117,55} + spriteSourceSize + {117,55} + textureRect + {{1666,976},{117,55}} + textureRotated + + + Fireball1_5.png + + aliases + + spriteOffset + {0,0} + spriteSize + {117,55} + spriteSourceSize + {117,55} + textureRect + {{1783,981},{117,55}} + textureRotated + + + Fireball1_6.png + + aliases + + spriteOffset + {0,0} + spriteSize + {117,55} + spriteSourceSize + {117,55} + textureRect + {{1713,1031},{117,55}} + textureRotated + + + Fireball1_7.png + + aliases + + spriteOffset + {0,0} + spriteSize + {117,55} + spriteSourceSize + {117,55} + textureRect + {{1596,1068},{117,55}} + textureRotated + + + Fireball1_8.png + + aliases + + spriteOffset + {0,0} + spriteSize + {117,55} + spriteSourceSize + {117,55} + textureRect + {{1768,1036},{117,55}} + textureRotated + + + Fireball1_9.png + + aliases + + spriteOffset + {0,0} + spriteSize + {117,55} + spriteSourceSize + {117,55} + textureRect + {{1885,1036},{117,55}} + textureRotated + + GetUp1_1.png aliases @@ -1095,9 +1665,9 @@ spriteSourceSize {137,105} textureRect - {{140,721},{137,105}} + {{736,364},{137,105}} textureRotated - + GetUp1_10.png @@ -1110,9 +1680,9 @@ spriteSourceSize {137,105} textureRect - {{140,858},{137,105}} + {{873,364},{137,105}} textureRotated - + GetUp1_11.png @@ -1125,9 +1695,9 @@ spriteSourceSize {137,105} textureRect - {{140,995},{137,105}} + {{1010,364},{137,105}} textureRotated - + GetUp1_12.png @@ -1140,9 +1710,9 @@ spriteSourceSize {137,105} textureRect - {{140,1132},{137,105}} + {{1147,364},{137,105}} textureRotated - + GetUp1_2.png @@ -1155,9 +1725,9 @@ spriteSourceSize {137,105} textureRect - {{140,1269},{137,105}} + {{1284,364},{137,105}} textureRotated - + GetUp1_3.png @@ -1170,56 +1740,11 @@ spriteSourceSize {137,105} textureRect - {{140,1406},{137,105}} + {{1421,364},{137,105}} textureRotated - + GetUp1_4.png - - aliases - - spriteOffset - {0,0} - spriteSize - {137,105} - spriteSourceSize - {137,105} - textureRect - {{140,1543},{137,105}} - textureRotated - - - GetUp1_5.png - - aliases - - spriteOffset - {0,0} - spriteSize - {137,105} - spriteSourceSize - {137,105} - textureRect - {{140,1680},{137,105}} - textureRotated - - - GetUp1_6.png - - aliases - - spriteOffset - {0,0} - spriteSize - {137,105} - spriteSourceSize - {137,105} - textureRect - {{217,522},{137,105}} - textureRotated - - - GetUp1_7.png aliases @@ -1234,6 +1759,51 @@ textureRotated + GetUp1_5.png + + aliases + + spriteOffset + {0,0} + spriteSize + {137,105} + spriteSourceSize + {137,105} + textureRect + {{433,401},{137,105}} + textureRotated + + + GetUp1_6.png + + aliases + + spriteOffset + {0,0} + spriteSize + {137,105} + spriteSourceSize + {137,105} + textureRect + {{288,469},{137,105}} + textureRotated + + + GetUp1_7.png + + aliases + + spriteOffset + {0,0} + spriteSize + {137,105} + spriteSourceSize + {137,105} + textureRect + {{425,506},{137,105}} + textureRotated + + GetUp1_8.png aliases @@ -1245,7 +1815,7 @@ spriteSourceSize {137,105} textureRect - {{433,422},{137,105}} + {{570,460},{137,105}} textureRotated @@ -1260,7 +1830,7 @@ spriteSourceSize {137,105} textureRect - {{570,422},{137,105}} + {{707,469},{137,105}} textureRotated @@ -1275,7 +1845,7 @@ spriteSourceSize {78,111} textureRect - {{855,1200},{78,111}} + {{1427,683},{78,111}} textureRotated @@ -1290,7 +1860,7 @@ spriteSourceSize {78,111} textureRect - {{933,1200},{78,111}} + {{1642,581},{78,111}} textureRotated @@ -1305,7 +1875,7 @@ spriteSourceSize {78,111} textureRect - {{859,1311},{78,111}} + {{1755,210},{78,111}} textureRotated @@ -1320,7 +1890,7 @@ spriteSourceSize {78,111} textureRect - {{859,1422},{78,111}} + {{1742,321},{78,111}} textureRotated @@ -1335,9 +1905,9 @@ spriteSourceSize {78,111} textureRect - {{937,1311},{78,111}} + {{1829,385},{78,111}} textureRotated - + Idle1_5.png @@ -1350,9 +1920,9 @@ spriteSourceSize {78,111} textureRect - {{937,1422},{78,111}} + {{1829,463},{78,111}} textureRotated - + Idle1_6.png @@ -1365,7 +1935,7 @@ spriteSourceSize {78,111} textureRect - {{859,1533},{78,111}} + {{1829,541},{78,111}} textureRotated @@ -1380,9 +1950,9 @@ spriteSourceSize {78,111} textureRect - {{853,1611},{78,111}} + {{1731,644},{78,111}} textureRotated - + Idle1_8.png @@ -1395,7 +1965,7 @@ spriteSourceSize {78,111} textureRect - {{856,1689},{78,111}} + {{1731,755},{78,111}} textureRotated @@ -1410,9 +1980,9 @@ spriteSourceSize {78,111} textureRect - {{860,1800},{78,111}} + {{1809,786},{78,111}} textureRotated - + InAirAtk1_1.png @@ -1575,9 +2145,9 @@ spriteSourceSize {103,100} textureRect - {{140,1817},{103,100}} + {{1628,692},{103,100}} textureRotated - + InAirAtked1_2.png @@ -1590,9 +2160,9 @@ spriteSourceSize {103,100} textureRect - {{240,1817},{103,100}} + {{1833,285},{103,100}} textureRotated - + InAirAtked1_3.png @@ -1605,9 +2175,9 @@ spriteSourceSize {103,100} textureRect - {{656,1763},{103,100}} + {{1720,544},{103,100}} textureRotated - + InAirAtked1_4.png @@ -1620,7 +2190,7 @@ spriteSourceSize {103,100} textureRect - {{750,1603},{103,100}} + {{1500,841},{103,100}} textureRotated @@ -1635,9 +2205,9 @@ spriteSourceSize {103,100} textureRect - {{756,1703},{103,100}} + {{1500,941},{103,100}} textureRotated - + InAirIdle1_1.png @@ -1650,7 +2220,7 @@ spriteSourceSize {83,131} textureRect - {{749,989},{83,131}} + {{283,574},{83,131}} textureRotated @@ -1665,7 +2235,7 @@ spriteSourceSize {83,131} textureRect - {{612,1314},{83,131}} + {{414,611},{83,131}} textureRotated @@ -1680,7 +2250,7 @@ spriteSourceSize {83,131} textureRect - {{929,743},{83,131}} + {{509,694},{83,131}} textureRotated @@ -1695,7 +2265,7 @@ spriteSourceSize {83,131} textureRect - {{929,874},{83,131}} + {{509,825},{83,131}} textureRotated @@ -1710,7 +2280,7 @@ spriteSourceSize {83,131} textureRect - {{469,1401},{83,131}} + {{509,956},{83,131}} textureRotated @@ -1725,7 +2295,7 @@ spriteSourceSize {83,131} textureRect - {{469,1532},{83,131}} + {{915,790},{83,131}} textureRotated @@ -1740,7 +2310,7 @@ spriteSourceSize {83,131} textureRect - {{469,1663},{83,131}} + {{1334,784},{83,131}} textureRotated @@ -1755,7 +2325,7 @@ spriteSourceSize {83,131} textureRect - {{664,1397},{83,131}} + {{1251,896},{83,131}} textureRotated @@ -1770,7 +2340,7 @@ spriteSourceSize {83,131} textureRect - {{664,1528},{83,131}} + {{1334,915},{83,131}} textureRotated @@ -1785,7 +2355,7 @@ spriteSourceSize {83,131} textureRect - {{573,1733},{83,131}} + {{1417,794},{83,131}} textureRotated @@ -1800,9 +2370,9 @@ spriteSourceSize {83,131} textureRect - {{880,1005},{83,131}} + {{1417,925},{83,131}} textureRotated - + InAirIdle1_9.png @@ -1815,9 +2385,9 @@ spriteSourceSize {83,131} textureRect - {{749,1072},{83,131}} + {{1152,1008},{83,131}} textureRotated - + LayDown1_1.png @@ -1875,7 +2445,7 @@ spriteSourceSize {177,77} textureRect - {{436,191},{177,77}} + {{975,114},{177,77}} textureRotated @@ -1890,7 +2460,7 @@ spriteSourceSize {177,77} textureRect - {{436,268},{177,77}} + {{1152,114},{177,77}} textureRotated @@ -1905,7 +2475,7 @@ spriteSourceSize {177,77} textureRect - {{613,191},{177,77}} + {{1329,114},{177,77}} textureRotated @@ -1920,7 +2490,7 @@ spriteSourceSize {177,77} textureRect - {{613,268},{177,77}} + {{1506,114},{177,77}} textureRotated @@ -1935,7 +2505,7 @@ spriteSourceSize {177,77} textureRect - {{790,191},{177,77}} + {{576,191},{177,77}} textureRotated @@ -1950,7 +2520,7 @@ spriteSourceSize {177,77} textureRect - {{790,268},{177,77}} + {{753,191},{177,77}} textureRotated @@ -1965,7 +2535,7 @@ spriteSourceSize {177,77} textureRect - {{436,345},{177,77}} + {{930,191},{177,77}} textureRotated @@ -1980,7 +2550,7 @@ spriteSourceSize {177,77} textureRect - {{613,345},{177,77}} + {{1107,191},{177,77}} textureRotated @@ -1995,7 +2565,7 @@ spriteSourceSize {177,77} textureRect - {{790,345},{177,77}} + {{1284,191},{177,77}} textureRotated @@ -2010,9 +2580,9 @@ spriteSourceSize {177,77} textureRect - {{140,544},{177,77}} + {{1461,191},{177,77}} textureRotated - + Walking_1.png @@ -2025,7 +2595,7 @@ spriteSourceSize {112,112} textureRect - {{624,1090},{112,112}} + {{816,1036},{112,112}} textureRotated @@ -2040,7 +2610,7 @@ spriteSourceSize {112,112} textureRect - {{624,1202},{112,112}} + {{998,784},{112,112}} textureRotated @@ -2055,7 +2625,7 @@ spriteSourceSize {112,112} textureRect - {{461,1794},{112,112}} + {{1110,784},{112,112}} textureRotated @@ -2070,7 +2640,7 @@ spriteSourceSize {112,112} textureRect - {{552,1397},{112,112}} + {{1222,784},{112,112}} textureRotated @@ -2085,7 +2655,7 @@ spriteSourceSize {112,112} textureRect - {{552,1509},{112,112}} + {{915,921},{112,112}} textureRotated @@ -2100,7 +2670,7 @@ spriteSourceSize {112,112} textureRect - {{552,1621},{112,112}} + {{928,1033},{112,112}} textureRotated @@ -2115,7 +2685,7 @@ spriteSourceSize {112,112} textureRect - {{736,1155},{112,112}} + {{1027,896},{112,112}} textureRotated @@ -2130,7 +2700,7 @@ spriteSourceSize {112,112} textureRect - {{880,1088},{112,112}} + {{1139,896},{112,112}} textureRotated @@ -2145,7 +2715,7 @@ spriteSourceSize {112,112} textureRect - {{743,1267},{112,112}} + {{1040,1008},{112,112}} textureRotated @@ -2160,7 +2730,7 @@ spriteSourceSize {112,112} textureRect - {{747,1379},{112,112}} + {{1717,432},{112,112}} textureRotated @@ -2175,7 +2745,7 @@ spriteSourceSize {112,112} textureRect - {{747,1491},{112,112}} + {{1809,674},{112,112}} textureRotated @@ -2191,9 +2761,9 @@ realTextureFileName Monk.png size - {1015,1920} + {1940,1166} smartupdate - $TexturePacker:SmartUpdate:d8280b540dab8e1bf109a3736f81929b:4a17a531d96d501ac7dc0f1beee57a61:0d538e391a81baa9ecb48d28b418b896$ + $TexturePacker:SmartUpdate:e69bb2557f24713d671ba6cec82bf0ec:5a4ed9f2abb9b318f6387791be499e58:0d538e391a81baa9ecb48d28b418b896$ textureFileName Monk.png diff --git a/frontend/assets/resources/animation/Monk/Monk.plist.meta b/frontend/assets/resources/animation/Monk/Monk.plist.meta index 18f8426..61bdf2e 100644 --- a/frontend/assets/resources/animation/Monk/Monk.plist.meta +++ b/frontend/assets/resources/animation/Monk/Monk.plist.meta @@ -3,8 +3,8 @@ "uuid": "6dcd5722-8ef9-47fd-9520-861d2713e274", "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "size": { - "width": 1015, - "height": 1920 + "width": 1940, + "height": 1166 }, "type": "Texture Packer", "subMetas": { @@ -14,11 +14,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": true, + "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 322, - "trimY": 604, + "trimX": 1558, + "trimY": 364, "width": 121, "height": 107, "rawWidth": 121, @@ -39,8 +39,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 340, - "trimY": 1813, + "trimX": 693, + "trimY": 681, "width": 121, "height": 107, "rawWidth": 121, @@ -61,8 +61,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 503, - "trimY": 1080, + "trimX": 693, + "trimY": 788, "width": 121, "height": 107, "rawWidth": 121, @@ -83,8 +83,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 503, - "trimY": 1080, + "trimX": 693, + "trimY": 788, "width": 121, "height": 107, "rawWidth": 121, @@ -105,8 +105,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 503, - "trimY": 1080, + "trimX": 693, + "trimY": 788, "width": 121, "height": 107, "rawWidth": 121, @@ -127,8 +127,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 503, - "trimY": 1187, + "trimX": 693, + "trimY": 895, "width": 121, "height": 107, "rawWidth": 121, @@ -149,8 +149,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 368, - "trimY": 1294, + "trimX": 814, + "trimY": 683, "width": 121, "height": 107, "rawWidth": 121, @@ -171,8 +171,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 245, - "trimY": 1260, + "trimX": 140, + "trimY": 629, "width": 123, "height": 113, "rawWidth": 123, @@ -193,8 +193,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 245, - "trimY": 1373, + "trimX": 140, + "trimY": 742, "width": 123, "height": 113, "rawWidth": 123, @@ -215,8 +215,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 245, - "trimY": 1486, + "trimX": 140, + "trimY": 855, "width": 123, "height": 113, "rawWidth": 123, @@ -237,8 +237,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 245, - "trimY": 1599, + "trimX": 140, + "trimY": 968, "width": 123, "height": 113, "rawWidth": 123, @@ -259,8 +259,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 380, - "trimY": 741, + "trimX": 263, + "trimY": 657, "width": 123, "height": 113, "rawWidth": 123, @@ -281,8 +281,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 380, - "trimY": 854, + "trimX": 263, + "trimY": 770, "width": 123, "height": 113, "rawWidth": 123, @@ -303,8 +303,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 503, - "trimY": 741, + "trimX": 263, + "trimY": 883, "width": 123, "height": 113, "rawWidth": 123, @@ -325,8 +325,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 380, - "trimY": 967, + "trimX": 263, + "trimY": 996, "width": 123, "height": 113, "rawWidth": 123, @@ -347,8 +347,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 503, - "trimY": 854, + "trimX": 386, + "trimY": 694, "width": 123, "height": 113, "rawWidth": 123, @@ -369,8 +369,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 380, - "trimY": 1080, + "trimX": 386, + "trimY": 807, "width": 123, "height": 113, "rawWidth": 123, @@ -391,8 +391,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 380, - "trimY": 1080, + "trimX": 386, + "trimY": 807, "width": 123, "height": 113, "rawWidth": 123, @@ -413,8 +413,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 503, - "trimY": 967, + "trimX": 386, + "trimY": 920, "width": 123, "height": 113, "rawWidth": 123, @@ -435,8 +435,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 503, - "trimY": 967, + "trimX": 386, + "trimY": 920, "width": 123, "height": 113, "rawWidth": 123, @@ -457,8 +457,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 245, - "trimY": 1373, + "trimX": 140, + "trimY": 742, "width": 123, "height": 113, "rawWidth": 123, @@ -479,8 +479,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 245, - "trimY": 1712, + "trimX": 386, + "trimY": 1033, "width": 101, "height": 123, "rawWidth": 101, @@ -498,11 +498,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": true, + "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 380, - "trimY": 1193, + "trimX": 592, + "trimY": 672, "width": 101, "height": 123, "rawWidth": 101, @@ -523,8 +523,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 368, - "trimY": 1401, + "trimX": 592, + "trimY": 795, "width": 101, "height": 123, "rawWidth": 101, @@ -542,11 +542,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": true, + "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 489, - "trimY": 1294, + "trimX": 592, + "trimY": 918, "width": 101, "height": 123, "rawWidth": 101, @@ -567,8 +567,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 368, - "trimY": 1524, + "trimX": 814, + "trimY": 790, "width": 101, "height": 123, "rawWidth": 101, @@ -586,11 +586,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": false, + "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 368, - "trimY": 1647, + "trimX": 935, + "trimY": 683, "width": 101, "height": 123, "rawWidth": 101, @@ -608,11 +608,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": false, + "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 626, - "trimY": 743, + "trimX": 1058, + "trimY": 683, "width": 101, "height": 123, "rawWidth": 101, @@ -630,11 +630,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": false, + "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 626, - "trimY": 866, + "trimX": 1181, + "trimY": 683, "width": 101, "height": 123, "rawWidth": 101, @@ -652,11 +652,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": false, + "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 727, - "trimY": 743, + "trimX": 1304, + "trimY": 683, "width": 101, "height": 123, "rawWidth": 101, @@ -677,8 +677,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 727, - "trimY": 866, + "trimX": 814, + "trimY": 913, "width": 101, "height": 123, "rawWidth": 101, @@ -696,11 +696,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": false, + "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 828, - "trimY": 743, + "trimX": 1505, + "trimY": 685, "width": 101, "height": 123, "rawWidth": 101, @@ -718,11 +718,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": false, + "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 828, - "trimY": 743, + "trimX": 1505, + "trimY": 685, "width": 101, "height": 123, "rawWidth": 101, @@ -743,8 +743,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 828, - "trimY": 866, + "trimX": 592, + "trimY": 1041, "width": 101, "height": 123, "rawWidth": 101, @@ -765,8 +765,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 626, - "trimY": 989, + "trimX": 693, + "trimY": 1057, "width": 101, "height": 123, "rawWidth": 101, @@ -787,8 +787,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 322, - "trimY": 469, + "trimX": 1833, + "trimY": 150, "width": 135, "height": 107, "rawWidth": 135, @@ -809,8 +809,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 707, - "trimY": 422, + "trimX": 844, + "trimY": 469, "width": 135, "height": 107, "rawWidth": 135, @@ -831,8 +831,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 842, - "trimY": 422, + "trimX": 979, + "trimY": 469, "width": 135, "height": 107, "rawWidth": 135, @@ -853,8 +853,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 429, - "trimY": 527, + "trimX": 1114, + "trimY": 469, "width": 135, "height": 107, "rawWidth": 135, @@ -875,8 +875,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 564, - "trimY": 527, + "trimX": 1249, + "trimY": 469, "width": 135, "height": 107, "rawWidth": 135, @@ -897,8 +897,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 699, - "trimY": 529, + "trimX": 1384, + "trimY": 469, "width": 135, "height": 107, "rawWidth": 135, @@ -919,8 +919,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 834, - "trimY": 529, + "trimX": 1519, + "trimY": 471, "width": 135, "height": 107, "rawWidth": 135, @@ -941,8 +941,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 429, - "trimY": 634, + "trimX": 562, + "trimY": 565, "width": 135, "height": 107, "rawWidth": 135, @@ -963,8 +963,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 564, - "trimY": 634, + "trimX": 697, + "trimY": 574, "width": 135, "height": 107, "rawWidth": 135, @@ -985,8 +985,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 699, - "trimY": 636, + "trimX": 832, + "trimY": 576, "width": 135, "height": 107, "rawWidth": 135, @@ -1007,8 +1007,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 834, - "trimY": 636, + "trimX": 967, + "trimY": 576, "width": 135, "height": 107, "rawWidth": 135, @@ -1029,8 +1029,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 245, - "trimY": 725, + "trimX": 1102, + "trimY": 576, "width": 135, "height": 107, "rawWidth": 135, @@ -1051,8 +1051,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 245, - "trimY": 832, + "trimX": 1237, + "trimY": 576, "width": 135, "height": 107, "rawWidth": 135, @@ -1073,8 +1073,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 245, - "trimY": 939, + "trimX": 1372, + "trimY": 576, "width": 135, "height": 107, "rawWidth": 135, @@ -1095,8 +1095,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 245, - "trimY": 1046, + "trimX": 1507, + "trimY": 578, "width": 135, "height": 107, "rawWidth": 135, @@ -1117,8 +1117,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 245, - "trimY": 1153, + "trimX": 148, + "trimY": 522, "width": 135, "height": 107, "rawWidth": 135, @@ -1130,6 +1130,248 @@ "spriteType": "normal", "subMetas": {} }, + "Atk5_1.png": { + "ver": "1.0.4", + "uuid": "6aa88bb9-0427-496f-ae7d-dc06410e904e", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 1844, + "trimY": 0, + "width": 96, + "height": 150, + "rawWidth": 96, + "rawHeight": 150, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk5_10.png": { + "ver": "1.0.4", + "uuid": "bb886d03-7f3e-45c8-acfd-393091f09adb", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 1683, + "trimY": 114, + "width": 96, + "height": 150, + "rawWidth": 96, + "rawHeight": 150, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk5_11.png": { + "ver": "1.0.4", + "uuid": "1be255c3-f8c9-43ae-be68-2e500e7f1125", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 436, + "trimY": 305, + "width": 96, + "height": 150, + "rawWidth": 96, + "rawHeight": 150, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk5_2.png": { + "ver": "1.0.4", + "uuid": "cdc65f83-c526-48b6-8a96-758b098568fe", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 586, + "trimY": 268, + "width": 96, + "height": 150, + "rawWidth": 96, + "rawHeight": 150, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk5_3.png": { + "ver": "1.0.4", + "uuid": "927636af-2d1d-4801-a546-857f5eeb256d", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 736, + "trimY": 268, + "width": 96, + "height": 150, + "rawWidth": 96, + "rawHeight": 150, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk5_4.png": { + "ver": "1.0.4", + "uuid": "2aeeb833-9151-4160-9775-9e08a376fd63", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 886, + "trimY": 268, + "width": 96, + "height": 150, + "rawWidth": 96, + "rawHeight": 150, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk5_5.png": { + "ver": "1.0.4", + "uuid": "2bd1de9e-30e5-4bc5-b6c3-5c286754b0b7", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 1036, + "trimY": 268, + "width": 96, + "height": 150, + "rawWidth": 96, + "rawHeight": 150, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk5_6.png": { + "ver": "1.0.4", + "uuid": "15a6ebb3-289a-46fb-ac94-f6efa0d90510", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 1186, + "trimY": 268, + "width": 96, + "height": 150, + "rawWidth": 96, + "rawHeight": 150, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk5_7.png": { + "ver": "1.0.4", + "uuid": "6ca922c0-cb62-4b1b-8773-79685a58bbd6", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 1336, + "trimY": 268, + "width": 96, + "height": 150, + "rawWidth": 96, + "rawHeight": 150, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk5_8.png": { + "ver": "1.0.4", + "uuid": "d60ceb6f-3a45-47dd-8d3f-bcfe8c919d85", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 1486, + "trimY": 268, + "width": 96, + "height": 150, + "rawWidth": 96, + "rawHeight": 150, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Atk5_9.png": { + "ver": "1.0.4", + "uuid": "c313f6a1-e0fa-4321-8336-c32f471b2592", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 586, + "trimY": 364, + "width": 96, + "height": 150, + "rawWidth": 96, + "rawHeight": 150, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, "Atked1_1.png": { "ver": "1.0.4", "uuid": "7ceb8a79-f5bf-4918-afa1-d76a85a571b0", @@ -1139,8 +1381,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 664, - "trimY": 1659, + "trimX": 1235, + "trimY": 1027, "width": 86, "height": 104, "rawWidth": 86, @@ -1158,11 +1400,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": true, + "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 756, - "trimY": 1806, + "trimX": 1321, + "trimY": 1046, "width": 86, "height": 104, "rawWidth": 86, @@ -1425,8 +1667,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 0, - "trimY": 1000, + "trimX": 1004, + "trimY": 0, "width": 140, "height": 114, "rawWidth": 140, @@ -1448,7 +1690,7 @@ "offsetX": 0, "offsetY": 0, "trimX": 0, - "trimY": 1114, + "trimY": 1000, "width": 140, "height": 114, "rawWidth": 140, @@ -1469,8 +1711,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 0, - "trimY": 1228, + "trimX": 1144, + "trimY": 0, "width": 140, "height": 114, "rawWidth": 140, @@ -1491,8 +1733,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 0, - "trimY": 1342, + "trimX": 1284, + "trimY": 0, "width": 140, "height": 114, "rawWidth": 140, @@ -1513,8 +1755,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 0, - "trimY": 1456, + "trimX": 1424, + "trimY": 0, "width": 140, "height": 114, "rawWidth": 140, @@ -1535,8 +1777,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 0, - "trimY": 1570, + "trimX": 1564, + "trimY": 0, "width": 140, "height": 114, "rawWidth": 140, @@ -1557,8 +1799,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 0, - "trimY": 1684, + "trimX": 1704, + "trimY": 0, "width": 140, "height": 114, "rawWidth": 140, @@ -1579,8 +1821,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 0, - "trimY": 1798, + "trimX": 436, + "trimY": 191, "width": 140, "height": 114, "rawWidth": 140, @@ -1592,17 +1834,611 @@ "spriteType": "normal", "subMetas": {} }, + "Explosion1_1.png": { + "ver": "1.0.4", + "uuid": "f4ad4f9f-4890-450b-9334-68fe6b903893", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 1407, + "trimY": 1056, + "width": 110, + "height": 63, + "rawWidth": 110, + "rawHeight": 63, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Explosion1_2.png": { + "ver": "1.0.4", + "uuid": "c6a5994f-251d-4191-a550-dfef979bab59", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 1470, + "trimY": 1056, + "width": 110, + "height": 63, + "rawWidth": 110, + "rawHeight": 63, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Explosion1_3.png": { + "ver": "1.0.4", + "uuid": "417e58d9-e364-47f7-9364-f31ad3452adc", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 1654, + "trimY": 471, + "width": 110, + "height": 63, + "rawWidth": 110, + "rawHeight": 63, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Explosion1_4.png": { + "ver": "1.0.4", + "uuid": "8b566f26-b34d-4da6-bdaa-078358a5b685", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 1679, + "trimY": 320, + "width": 110, + "height": 63, + "rawWidth": 110, + "rawHeight": 63, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Explosion1_5.png": { + "ver": "1.0.4", + "uuid": "6ec5f75d-307e-4292-b667-cbbb5a52c2f6", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 1533, + "trimY": 1041, + "width": 110, + "height": 63, + "rawWidth": 110, + "rawHeight": 63, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Explosion1_6.png": { + "ver": "1.0.4", + "uuid": "d89977f1-d927-4a08-9591-9feb1daf68c8", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 1603, + "trimY": 958, + "width": 110, + "height": 63, + "rawWidth": 110, + "rawHeight": 63, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Fireball1_1.png": { + "ver": "1.0.4", + "uuid": "dbe67025-9878-4e13-8f3d-81e04734810a", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 693, + "trimY": 1002, + "width": 117, + "height": 55, + "rawWidth": 117, + "rawHeight": 55, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Fireball1_10.png": { + "ver": "1.0.4", + "uuid": "5d867617-7f50-4fa8-804d-ce28c47ea407", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 140, + "trimY": 1081, + "width": 117, + "height": 55, + "rawWidth": 117, + "rawHeight": 55, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Fireball1_11.png": { + "ver": "1.0.4", + "uuid": "824c9bee-42b7-4a94-86f8-6356f11aee16", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 257, + "trimY": 1109, + "width": 117, + "height": 55, + "rawWidth": 117, + "rawHeight": 55, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Fireball1_12.png": { + "ver": "1.0.4", + "uuid": "6389164e-93bb-4d4d-9740-5e2d5cdb1029", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 1638, + "trimY": 210, + "width": 117, + "height": 55, + "rawWidth": 117, + "rawHeight": 55, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Fireball1_13.png": { + "ver": "1.0.4", + "uuid": "d184a083-6043-4ca6-bd14-8db1b6be1d2e", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 1638, + "trimY": 265, + "width": 117, + "height": 55, + "rawWidth": 117, + "rawHeight": 55, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Fireball1_14.png": { + "ver": "1.0.4", + "uuid": "361b1722-e362-46e5-939e-e2d1666df374", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 1823, + "trimY": 619, + "width": 117, + "height": 55, + "rawWidth": 117, + "rawHeight": 55, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Fireball1_15.png": { + "ver": "1.0.4", + "uuid": "662fbe4f-a1f4-46f7-83e4-eafd021432da", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 1505, + "trimY": 786, + "width": 117, + "height": 55, + "rawWidth": 117, + "rawHeight": 55, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Fireball1_16.png": { + "ver": "1.0.4", + "uuid": "5e509118-a44b-4e7f-9686-c6bb0b30f0b0", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 1603, + "trimY": 841, + "width": 117, + "height": 55, + "rawWidth": 117, + "rawHeight": 55, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Fireball1_17.png": { + "ver": "1.0.4", + "uuid": "bc1110c7-4423-4c43-965c-0cb3dd8e31ff", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 1658, + "trimY": 792, + "width": 117, + "height": 55, + "rawWidth": 117, + "rawHeight": 55, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Fireball1_18.png": { + "ver": "1.0.4", + "uuid": "33cc8d11-1568-47a7-b4f1-cef4888302e5", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 1713, + "trimY": 866, + "width": 117, + "height": 55, + "rawWidth": 117, + "rawHeight": 55, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Fireball1_19.png": { + "ver": "1.0.4", + "uuid": "83bb5dd3-510c-4fce-b393-840f14efb8cd", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 1596, + "trimY": 1068, + "width": 117, + "height": 55, + "rawWidth": 117, + "rawHeight": 55, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Fireball1_2.png": { + "ver": "1.0.4", + "uuid": "e92702d5-d5fd-49e6-ab6b-2296b43fa6d6", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 1713, + "trimY": 921, + "width": 117, + "height": 55, + "rawWidth": 117, + "rawHeight": 55, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Fireball1_20.png": { + "ver": "1.0.4", + "uuid": "1db706f5-366a-421c-843f-a4bb016f80ec", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 1830, + "trimY": 864, + "width": 117, + "height": 55, + "rawWidth": 117, + "rawHeight": 55, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Fireball1_21.png": { + "ver": "1.0.4", + "uuid": "41a4f35a-01c0-4a22-b5cc-7bfe25ed4501", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 1885, + "trimY": 864, + "width": 117, + "height": 55, + "rawWidth": 117, + "rawHeight": 55, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Fireball1_3.png": { + "ver": "1.0.4", + "uuid": "e1a89340-0b92-4e6b-93f2-e983302d70ce", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 1505, + "trimY": 786, + "width": 117, + "height": 55, + "rawWidth": 117, + "rawHeight": 55, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Fireball1_4.png": { + "ver": "1.0.4", + "uuid": "b0bb4a7a-4ae3-48fc-9913-3b6d1d36c56f", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 1666, + "trimY": 976, + "width": 117, + "height": 55, + "rawWidth": 117, + "rawHeight": 55, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Fireball1_5.png": { + "ver": "1.0.4", + "uuid": "b44d585b-8e18-4767-b263-ed3a53cd3250", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 1783, + "trimY": 981, + "width": 117, + "height": 55, + "rawWidth": 117, + "rawHeight": 55, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Fireball1_6.png": { + "ver": "1.0.4", + "uuid": "a87a9ea8-2d84-4a3b-83e3-a4d7b8ac96b8", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 1713, + "trimY": 1031, + "width": 117, + "height": 55, + "rawWidth": 117, + "rawHeight": 55, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Fireball1_7.png": { + "ver": "1.0.4", + "uuid": "a1604f9d-c0ea-4f92-b09b-3608245bda8e", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 1596, + "trimY": 1068, + "width": 117, + "height": 55, + "rawWidth": 117, + "rawHeight": 55, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Fireball1_8.png": { + "ver": "1.0.4", + "uuid": "4372818f-1e44-4180-a0ce-4a34cee4fc5b", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": false, + "offsetX": 0, + "offsetY": 0, + "trimX": 1768, + "trimY": 1036, + "width": 117, + "height": 55, + "rawWidth": 117, + "rawHeight": 55, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, + "Fireball1_9.png": { + "ver": "1.0.4", + "uuid": "2ad9becb-20e0-4bbb-b83b-de21e085e706", + "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", + "trimType": "auto", + "trimThreshold": 1, + "rotated": true, + "offsetX": 0, + "offsetY": 0, + "trimX": 1885, + "trimY": 1036, + "width": 117, + "height": 55, + "rawWidth": 117, + "rawHeight": 55, + "borderTop": 0, + "borderBottom": 0, + "borderLeft": 0, + "borderRight": 0, + "spriteType": "normal", + "subMetas": {} + }, "GetUp1_1.png": { "ver": "1.0.4", "uuid": "ec0d05f4-3c30-4107-b9b4-3ccff5fb9a02", "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": true, + "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 140, - "trimY": 721, + "trimX": 736, + "trimY": 364, "width": 137, "height": 105, "rawWidth": 137, @@ -1620,11 +2456,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": true, + "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 140, - "trimY": 858, + "trimX": 873, + "trimY": 364, "width": 137, "height": 105, "rawWidth": 137, @@ -1642,11 +2478,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": true, + "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 140, - "trimY": 995, + "trimX": 1010, + "trimY": 364, "width": 137, "height": 105, "rawWidth": 137, @@ -1664,11 +2500,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": true, + "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 140, - "trimY": 1132, + "trimX": 1147, + "trimY": 364, "width": 137, "height": 105, "rawWidth": 137, @@ -1686,11 +2522,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": true, + "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 140, - "trimY": 1269, + "trimX": 1284, + "trimY": 364, "width": 137, "height": 105, "rawWidth": 137, @@ -1708,11 +2544,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": true, + "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 140, - "trimY": 1406, + "trimX": 1421, + "trimY": 364, "width": 137, "height": 105, "rawWidth": 137, @@ -1730,11 +2566,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": true, + "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 140, - "trimY": 1543, + "trimX": 296, + "trimY": 364, "width": 137, "height": 105, "rawWidth": 137, @@ -1752,11 +2588,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": true, + "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 140, - "trimY": 1680, + "trimX": 433, + "trimY": 401, "width": 137, "height": 105, "rawWidth": 137, @@ -1774,11 +2610,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": true, + "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 217, - "trimY": 522, + "trimX": 288, + "trimY": 469, "width": 137, "height": 105, "rawWidth": 137, @@ -1799,8 +2635,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 296, - "trimY": 364, + "trimX": 425, + "trimY": 506, "width": 137, "height": 105, "rawWidth": 137, @@ -1821,8 +2657,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 433, - "trimY": 422, + "trimX": 570, + "trimY": 460, "width": 137, "height": 105, "rawWidth": 137, @@ -1843,8 +2679,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 570, - "trimY": 422, + "trimX": 707, + "trimY": 469, "width": 137, "height": 105, "rawWidth": 137, @@ -1865,8 +2701,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 855, - "trimY": 1200, + "trimX": 1427, + "trimY": 683, "width": 78, "height": 111, "rawWidth": 78, @@ -1887,8 +2723,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 933, - "trimY": 1200, + "trimX": 1642, + "trimY": 581, "width": 78, "height": 111, "rawWidth": 78, @@ -1909,8 +2745,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 859, - "trimY": 1311, + "trimX": 1755, + "trimY": 210, "width": 78, "height": 111, "rawWidth": 78, @@ -1931,8 +2767,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 859, - "trimY": 1422, + "trimX": 1742, + "trimY": 321, "width": 78, "height": 111, "rawWidth": 78, @@ -1950,11 +2786,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": false, + "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 937, - "trimY": 1311, + "trimX": 1829, + "trimY": 385, "width": 78, "height": 111, "rawWidth": 78, @@ -1972,11 +2808,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": false, + "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 937, - "trimY": 1422, + "trimX": 1829, + "trimY": 463, "width": 78, "height": 111, "rawWidth": 78, @@ -1997,8 +2833,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 859, - "trimY": 1533, + "trimX": 1829, + "trimY": 541, "width": 78, "height": 111, "rawWidth": 78, @@ -2016,11 +2852,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": true, + "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 853, - "trimY": 1611, + "trimX": 1731, + "trimY": 644, "width": 78, "height": 111, "rawWidth": 78, @@ -2041,8 +2877,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 856, - "trimY": 1689, + "trimX": 1731, + "trimY": 755, "width": 78, "height": 111, "rawWidth": 78, @@ -2060,11 +2896,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": false, + "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 860, - "trimY": 1800, + "trimX": 1809, + "trimY": 786, "width": 78, "height": 111, "rawWidth": 78, @@ -2302,11 +3138,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": true, + "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 140, - "trimY": 1817, + "trimX": 1628, + "trimY": 692, "width": 103, "height": 100, "rawWidth": 103, @@ -2324,11 +3160,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": true, + "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 240, - "trimY": 1817, + "trimX": 1833, + "trimY": 285, "width": 103, "height": 100, "rawWidth": 103, @@ -2346,11 +3182,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": true, + "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 656, - "trimY": 1763, + "trimX": 1720, + "trimY": 544, "width": 103, "height": 100, "rawWidth": 103, @@ -2371,8 +3207,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 750, - "trimY": 1603, + "trimX": 1500, + "trimY": 841, "width": 103, "height": 100, "rawWidth": 103, @@ -2390,11 +3226,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": true, + "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 756, - "trimY": 1703, + "trimX": 1500, + "trimY": 941, "width": 103, "height": 100, "rawWidth": 103, @@ -2415,8 +3251,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 749, - "trimY": 989, + "trimX": 283, + "trimY": 574, "width": 83, "height": 131, "rawWidth": 83, @@ -2437,8 +3273,8 @@ "rotated": true, "offsetX": 0, "offsetY": 0, - "trimX": 612, - "trimY": 1314, + "trimX": 414, + "trimY": 611, "width": 83, "height": 131, "rawWidth": 83, @@ -2459,8 +3295,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 929, - "trimY": 743, + "trimX": 509, + "trimY": 694, "width": 83, "height": 131, "rawWidth": 83, @@ -2481,8 +3317,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 929, - "trimY": 874, + "trimX": 509, + "trimY": 825, "width": 83, "height": 131, "rawWidth": 83, @@ -2503,8 +3339,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 469, - "trimY": 1401, + "trimX": 509, + "trimY": 956, "width": 83, "height": 131, "rawWidth": 83, @@ -2525,8 +3361,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 469, - "trimY": 1532, + "trimX": 915, + "trimY": 790, "width": 83, "height": 131, "rawWidth": 83, @@ -2547,8 +3383,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 469, - "trimY": 1663, + "trimX": 1334, + "trimY": 784, "width": 83, "height": 131, "rawWidth": 83, @@ -2569,8 +3405,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 664, - "trimY": 1397, + "trimX": 1251, + "trimY": 896, "width": 83, "height": 131, "rawWidth": 83, @@ -2591,8 +3427,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 664, - "trimY": 1528, + "trimX": 1334, + "trimY": 915, "width": 83, "height": 131, "rawWidth": 83, @@ -2613,8 +3449,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 573, - "trimY": 1733, + "trimX": 1417, + "trimY": 794, "width": 83, "height": 131, "rawWidth": 83, @@ -2632,11 +3468,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": true, + "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 880, - "trimY": 1005, + "trimX": 1417, + "trimY": 925, "width": 83, "height": 131, "rawWidth": 83, @@ -2654,11 +3490,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": true, + "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 749, - "trimY": 1072, + "trimX": 1152, + "trimY": 1008, "width": 83, "height": 131, "rawWidth": 83, @@ -2745,8 +3581,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 436, - "trimY": 191, + "trimX": 975, + "trimY": 114, "width": 177, "height": 77, "rawWidth": 177, @@ -2767,8 +3603,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 436, - "trimY": 268, + "trimX": 1152, + "trimY": 114, "width": 177, "height": 77, "rawWidth": 177, @@ -2789,8 +3625,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 613, - "trimY": 191, + "trimX": 1329, + "trimY": 114, "width": 177, "height": 77, "rawWidth": 177, @@ -2811,8 +3647,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 613, - "trimY": 268, + "trimX": 1506, + "trimY": 114, "width": 177, "height": 77, "rawWidth": 177, @@ -2833,7 +3669,7 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 790, + "trimX": 576, "trimY": 191, "width": 177, "height": 77, @@ -2855,8 +3691,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 790, - "trimY": 268, + "trimX": 753, + "trimY": 191, "width": 177, "height": 77, "rawWidth": 177, @@ -2877,8 +3713,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 436, - "trimY": 345, + "trimX": 930, + "trimY": 191, "width": 177, "height": 77, "rawWidth": 177, @@ -2899,8 +3735,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 613, - "trimY": 345, + "trimX": 1107, + "trimY": 191, "width": 177, "height": 77, "rawWidth": 177, @@ -2921,8 +3757,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 790, - "trimY": 345, + "trimX": 1284, + "trimY": 191, "width": 177, "height": 77, "rawWidth": 177, @@ -2940,11 +3776,11 @@ "rawTextureUuid": "6e1dbec7-ad55-413b-8108-0ac881c76a8b", "trimType": "auto", "trimThreshold": 1, - "rotated": true, + "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 140, - "trimY": 544, + "trimX": 1461, + "trimY": 191, "width": 177, "height": 77, "rawWidth": 177, @@ -2965,8 +3801,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 624, - "trimY": 1090, + "trimX": 816, + "trimY": 1036, "width": 112, "height": 112, "rawWidth": 112, @@ -2987,8 +3823,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 624, - "trimY": 1202, + "trimX": 998, + "trimY": 784, "width": 112, "height": 112, "rawWidth": 112, @@ -3009,8 +3845,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 461, - "trimY": 1794, + "trimX": 1110, + "trimY": 784, "width": 112, "height": 112, "rawWidth": 112, @@ -3031,8 +3867,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 552, - "trimY": 1397, + "trimX": 1222, + "trimY": 784, "width": 112, "height": 112, "rawWidth": 112, @@ -3053,8 +3889,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 552, - "trimY": 1509, + "trimX": 915, + "trimY": 921, "width": 112, "height": 112, "rawWidth": 112, @@ -3075,8 +3911,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 552, - "trimY": 1621, + "trimX": 928, + "trimY": 1033, "width": 112, "height": 112, "rawWidth": 112, @@ -3097,8 +3933,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 736, - "trimY": 1155, + "trimX": 1027, + "trimY": 896, "width": 112, "height": 112, "rawWidth": 112, @@ -3119,8 +3955,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 880, - "trimY": 1088, + "trimX": 1139, + "trimY": 896, "width": 112, "height": 112, "rawWidth": 112, @@ -3141,8 +3977,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 743, - "trimY": 1267, + "trimX": 1040, + "trimY": 1008, "width": 112, "height": 112, "rawWidth": 112, @@ -3163,8 +3999,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 747, - "trimY": 1379, + "trimX": 1717, + "trimY": 432, "width": 112, "height": 112, "rawWidth": 112, @@ -3185,8 +4021,8 @@ "rotated": false, "offsetX": 0, "offsetY": 0, - "trimX": 747, - "trimY": 1491, + "trimX": 1809, + "trimY": 674, "width": 112, "height": 112, "rawWidth": 112, diff --git a/frontend/assets/resources/animation/Monk/Monk.png b/frontend/assets/resources/animation/Monk/Monk.png index b4fd2f285319a648f9a654c710b2cdba44734ad6..24c3670eace7b1a5af5329cf5277fd13076803af 100644 GIT binary patch literal 265584 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಼_W^xP{Pl^tN>#+GCa^h-IIjP$#^jNR&Q0{I| z&GXbuTnWl9qFQcI%B8Rg1$ArJ^Jdtn4`@Hg?NIInfDdTDZd#Esvby)Z^~&0_;*S(A z>BC`&g++$RuLv)v;{FtB&lEyG18KTV| zU+((CRh93|V>t!(xvq`A5-}hc3n+vwWRg-IM`a6TI*=UQw9u^=W-YI*k_gw=}O;pYpIt{ z7maMEd%>%fyTyH=_RcYW;gMU)U1^S8EDy7e>U{+J#c)OEZASDgYqm4mC>PUM9{}Y<6u!T< zwO})q=W}B~eVZzw@65zSOH31wrwW*i=L@vqh#Jc2EFgxFRW4aO3C zFi`Wt6QJzZ%S2;O2Zi;p8WykK1&sFV>p(fNhl8%Mi>}UHC|e}+(NCsXm&(FI`63M| zWQWQ9v3PA9oz3Jv*}0?qUDBcQkU@j86JN7s{fIs)pHXVdwl|PRd3c8k!g z0p*}Nn@T(A%U9z%8Oq_+b|E~n_eZjJVBOWJ>f^y&MWmM+Z`vr z#rgsNdsr_twXcei$pEwD0J{S9DPgTF>`g~18>1<&-59JTdj%-VDd9M#69#-D{8Io> zX6tnTWeUD-JTjtzNm=yr+&$BP)-hnvK-QWt?iLJ zZ)()tE87-h9R^OckDv)%kx4FREYI38EBz@`C(oi;tgJs~FWh3!%?BHHunSfJsL+=H z0|+v&+G#{5uEs8vG5=|{GaGF2@ay3x{I}Y`^MswA8M1{s5X!cHn06HlkjetS);S2( zDxHZ7+pqEN6N+hK7R$1Ra>~~00Ln>8p5_L9+11v`^LKq|J(badjV(rwv0gXU%e*pd z>XNc;@@g($n))>qAg`dnoNgUZGX1>PYh_~!0L*po2Wz~>;_6vP30W>&;sn#BQSVJE zyL-jC&zEdhmW17B`#UcCpghf%!Mv;2j!evd1g%IOrT8{jvrNmPGzLrMYqfv z%2PV)OjXd!l&#lUv&!boQ`v&q*|U@Wi)yKCW3Z2aa%a70$wa1qRmyGWYFsd~yn-rC zWBDaB%+VX zg28uz+b0f#Q4?Cp5JLG_D9fIls4=0uWiEZwNKbn%ki>ePJ1TcI>Q==%D3lA{WGLcg zI*kJ=XI&F^7M!_ZFG^C*)HR>AOtQTotgPAPLNc5ELO>w#4 zH!e)&#I9K%=oNIl`J~2cMII=Onh+f%Q?yiKD|t0y2hev|CsvFoSV9%voQa z@c>ZXM&+wQxu~tzWywqip=_#U1s{;g)q=CVx7i z9MQuSV^?%ya@It$q;h8GYl21stf9WsAw_`9c|>oE^90%8Qir^45UE`F#SE zQ76N;Ggb2#58k9~kjjbc#*}n@%UONYmBYPtjT3=Q26q^eSaGifI}5Uk-3bb>M0UzH za}bobQMoLyx1tLtl~rxkG76o-Q?y}|dzj@jeoz3sqoCY=v<_kNWcje*@t{C%EA1FN zNe_AoV=CUI$jKJ;62;&$G}0CV!>>hgVJJ_iy>e`A>x^Yv-bPZFcjjy6%X!)G=ACH_ z{Y{riE+3o}6>VQHbXq`}1;6p!(0=hGaa_D4m6NQS3iWB39AU}XR|GO@AYC)rhNnwg zBbOtXW-YNSF9cJ>nFM%Fv{ z2P=~zlrPgQs&T0?l$?Gm(#g0$lx1J(;7eFeJe1RZD!0UO|7}(0t{2PXL?kIuISPZm z$OM*N0m@?5>JD40_D^WMM&Q0~)Rf&1#N;dx#0+G(YmszR4x3$a?}rN?pX&;~0M2WjG47XG>+;VsMw4+c3_0b(2dYk+L6&&Txz&R>M4|u*p!%JY7fp zOsyq-hv;wz2YzCYei{xmdh}BHnu{6;!4_Vsnj)y__p9A2LO!F9I6TifhBK z55RI+=lh6E_Kbt>t2%I3-?m;-HhU73EtN^qOV>IiO|K%9XQ5Ee(k7EXmr!P%yovH$ z{|6Qd)`sJ<>h|h5BmyMS9Vm`dPsx5-1oOZ@ii9oc$yOvM zwR%5#B8Pe+Zj8!wY$Dq*=vzx=A~GOx@vz8q6$)h+61J1cD&{~hv>^kP%eo8|x9vP& zR)8+8wZa6SLdC~;e+!3W*8eK3vWB%`q^3?4$))4G!nek0%52P5v9gZ^tpNMv)KJDs zUL)_B(YE!Ha`LpZBw{Ns+~ULVkSj1*&bR|b8hDfGQ2!YsuY(fh_U1iBPp_EGA8Qj+ z1Vv~>pi`8KqL%@c9kyXJl-J0K>O-BzBe+2**U#55W)JMJR$|Zc^q?axw#RWY)tF>R zi&{BJXeJ34{g*irani(E;+7n5jUR7mAfKhk9x1sa$fd*7^J0#fRYo8692PNFu7NFzd~EK>MY?}uK$vP& z%0k4~y5#8awN$ph>{B6|#w6bceO%5&JJw4h=EiN6VL_2AFqy2^Hl{vEo8T$_@j96k zk%Q%@sP!44+GxRr)V=i}U~(!WfI)bW$}E(JjOIB9%7!c7#Pb9+oEaL*ld=>BXlQ;P z2+zr614vGax!MeRA*jDR%>*a5JINnbT8Vit)NMXh)v+_#U~E^675e6?(DMMxu)62C zNxERps7I?>%keM^Ji`4Kh1y(ISn}BIGx^+7Il)=@9flp=L1g$z*6S{n<-yNqxx6Zr zbFvPrf*N>8Cz2nmR1TH$OgUHWZu7MZe?}<({%y?U*ki{Vu$-~1j^4HG98qG&nrDCtcCFN6qdb-s=l;>nqJtHzWK~D8M)f{No1Tre4kLRQ z%2%kf*<;_F`+@PLLqeH%C5n)#4&Q4xr8GF3&A@)H!)L;W3AlEql(3^NkAyNT>zsA+ z9LTbAP?pbW1-R6${+b;Wm?GqmRDPoy||dRX0y3yk7|gU@7X9l5 z9u5;kLZ+U|A(Jos$ckASYGfCAoebK}=Vr%h1&h$edw9`{Atw!?#)m;$lv2xIw9W;!Mbvb<{*Q zgh8}DC=E{nP+7YxO!gLB-Lc`5o2;#1?z1F#REAK>M3mKP5$TE~mlf_YZ8C{VK}mu@ zKMF;wcbZe41%PWASfqEPIhD*}R~xY`tLp7aYg}^zFjXEvOR=#~W-7O!T<-$Aq3q1p zTK_(EUT^T^s^#){zpu`Xedgeao5J=*8kwPtO4(>?1rb77q4^Kq=|!b-Jgw&JRd!IO zXs=Xu;vgw_r_tVQST0BPdJ*mQf~Kz){(MBF(_5DYVKPf+b#hMw%6~kQH3?;2n|VDf zkS&%K+`}|Wn{jX{<+P>V>S0Utli6c*p$yx>oaEsyGotZCE^GqifCF|Dg{PHcP-rSU zpJC^6!c;NDJ>Mmp4Kb0{ajOIE%llgpi=xS|E7nl`pI7N_x|0cDEx z@<`wYOjyouHdmX~~CB zCLdBmEZd@9wW%WD@_qT_d3oMw*bb}%jiV(O8lPBpco4G2VnG5xz9OXZp$(V|q zgHqXJ=MqP zQ=E_8ABUszDO2I{NyQNpK_b`MloQz{fZ1^w_eVT=TMvh4Fr`U_Wxle37J0ORDXnmm zkr;ATd9#SyWD;w?4qIm?NnOnA)C~{R9onMH>HTHs81yUJp zWVymube^-d^HjG^djeVv_)8YFqg3B8+Nyp5q!HaaIN3rfr)8z2sNWH%Sq${bZi zD=oAKV187qz;s(G4~^w$V@tIVlpE`XHc7p$#qCK|;?Es2bv1|VYW0QA{&*6;e!2C#+uk8Uo{u=Nyk0X%Iquc+c>nRa>2O+0m*c3Zs9HH4G!YibtHp{ah){k<6Sbbld|cz@jlU!7$W44WrwmNj>2US>oJ$#G zJ4V@~B`$Uk25mBu3n3(p62f@;pPkEOpz>kf0;cw|ES>lDT3%($nx#+xy5U&o+7gVC zl!XeQZ2SXN7`4ZIeNMB-^JvGt5#8{l=E(|9y8%$<)t+(#Oy$B3H1g(p z0Ecb}wZkFLQ1*M?P$KArsf7R2{)xa&=gghBs27@{EG4h*m_1WWW%w(d_(#I0KFUU1 z%MeUm$XT$<#;tU_FVcAoE4HTEKjaPNsqW#Bu~r(*BgUQN ze5s7PmYqp_xb${a5(eF%Pn=5J7;29}1$R8>ky^z0)L5lll2opvhgS-kDmdD8DmC17hP!_DLB+KXpEq+`jtHot!iftC-d4Wt` zb*U^5pz;t{R(j!1EtJUZ%<4|spsA~6y1r@wx*E!jW>s{ht~;^ug>oKmH0Js_D*Fe0 z-b_Jt2JA|QY343Q&li7j`Q~=(9Rtg72v#AJ=lf(Y`jz!uqx%U@(7>%BgmOU?Jd%W3 zQwq3~?eQR%^u|=wF;np~**6iLn?*e~a3!^kutslgcXgYj%Vbgo*+4}ID7WR|Vb3Nb z8z~+`F}b!cRLjx41;Z;#ydZCGc`x5eDH5S5S4X)5o0y8j)iYNAZmOk_dMd@niZSbkxp%qHx4v7lLWi(+~#ll^)Nl?lt|Ji0138<&{A z+Q7bUT$q6Q|64h>i)H?yi#t&@@Z9fKg3#h zStf;bqF`eErIj+ybg{6(7*wZ8_1mz4$_Xa0^imn_PFWvGk2(%LKE5hgFZ64(A)mYU z3#PU<1RkgBBe?_RtcLO*-H8H)GHkIMMDwCPKN^M@{1M(ZG6~MBwC#6Dx*Z58wzeE^ z)ri)2T#S$1ST?_n(3a2;36jD zn}Of(5rD4Wv0en4Ms$018{hk*c4_eLV^3>mUj4_%dXHJ~CKLB;GN#SsA+{P$ZLudH zbug55(^+s8qwkv^rAR2uHz#=Q=#WPD1()$MbE z9g+Pi8YBYH?=kReVlW+MgSy`|HyIApq`o)9AsM?8yGq8#K^cCsc3Q+&^TgK2XU;8A z$YcV6U%_zojEnQ4JUg{bCY#%#a$6>pTvHCyff34C)*$m0xNL>8no|c35Eff(*j6g{ zP#MGh>7e8aNgQKvG1_P<`-h$=LLP`NDPYA2ftIbZl)eb9ybYJFY(shWIiTDshOcDe?Y(Wxwas)-wKB^I?-+E|Z> z>fh!EuElfuD19FVA%5j zJO&XMa#$2YI4y>Nvg9&jN!qIU2!s|To*k9il`v=2G*`D}z-A)9yu852XZ#e~p7UG# zS7%(D$_th@>ovf+E0rxIZCyl>_F%arrR+m|u9uB=A@DSy%)O%QLp%BGLlT$ycd*}G zbxyEl&=YR1I03Q+8Fs#3dmh0|#+nMTPwUUT63~55A?xfaK+SvTwrE7&vfnv`GQ`zuBUcb*%cS%#D@De>Xv^Lm=_z$G4Ll?E)$fA$Li0AvOp-$Je0GUg|fh4xcgpo zANO$|4A#PsR%TZLI$b}a1W9Emm8IxoG9Y(>4V9>ZTd@_&Mch+d1abU7*i^;;{&xv3 zS1_(rPMT6#wu`UPrnk`3DP?8=mitqcwX!kVMW~LW z{|V8^P#?T4aIY$t(l#YVE`vfY`Q14z(pvaJ8OILWB<0Kr}Hx9!nqTkoTVni<P^InI@`Da%=%vzcBA z%5-H(C?6Ox*^tZV3t0ZaP`1GVHI%cuMR4ZJY-ZUV%J*>}H;v?{C)jfT``_pqSPU~_ zKh8CKdGQ3b25d?xD$AD_zuzs)bo%h{@N@AKrE>2-V~j1wsbjTVmi<)D>MDsNVOa`R z$h3c#h~-R1FUV<`lwIwf&`$raf2FDT7WiLuFLsFhO!GFo|kK~xLnhsCdLP{!gRz8q&& zZBxoKA3b{zmNiu^IS$HMSRNU$oTbk%CDkwrecSdA+TKwpe-tR!Tn?%HCqbF-xn;5? zFh@SLT12HB4slOYzK{F3Whle=o4HI_z9bi)e!z*~#}AG8@ceBr>Q}B#kEWf?IVV$(;v@jGwcG&w#+OL54ea3fGHo8<;Br}t<4`>DTRq2+01e9H;D`0W~ zOr{1YGyA|`eN@|kJ#+UIoyv*C|L)t~ecZ?GGWq@SF?u92gItY%T$YPbWSRVt{K_2G z1yqh0$4KXr?7Z9}$WqxU<;`v=yB?2QlyXn6qpehads|lXLdVEt6;pYZqlI#l%0b&G z{tRWZXY$A0+*vAra40Lh!MVb!@NrSVT@=>K!Ay>%qq2XH=m|}v6!(4aKJMctMo(G| zvRLa!7%W$xF3ZKo_vjT~ni{x7?-YZ5`Qlv~}88uVFu=kvhA1N5%KJMd>9&#o^LQ`eMrzagpQT`ZhsM+WR zxR^AQvIZ!>zHT=3;veH^`vF z%v*KAOg=;^i>w#QB$X+ejgf5Mc*x`r3}rH4e`qLEgBH5Wh-GXZTDJ}*CfmnUHW~$E zvl)6u@4MlB+{c!|Il`A9GLBhY=y*1RH5yL=i*c0au&_6qSVb35s_D#sN+$yQ;_&L5 zj{#+b){6&mn!L22>|Cu2g-Urlld(KD_lBl^;+5%v@@%$^%3afO<)Az*rk2TvK)EfH zGnb8=Jim}uPHcxT(PZ++hVo>2OyAI36v{a@hNhbg3kYtGaCeZH%&`E`^Ro=vWV_i-P+M6Ls!Mu#DHX?E)tK9R`e=`uDtk8^;-e>R(oU@^htfEUUtFYv{S|3sS) zvOyv!Q7G3HDL_#sJy1rkG6?0ZNTyQYwNS3Aq_=KJFO$0t-LfPoqpx(TriF#_e*3iy zl4de05nb!5=cr74&(69pg=6xEhVlf2<_Bi7&Zl{-=Y06eQ7xx#aZ}4p2V$f$4nfP` zmT$$Mx>NZ+?xSa5LJ%e+Jzc<+3uk2N0fFn0eo16<3{Xa?S`>iCc-$_61fL1zxy~qT zD4$k^p%;f&2R45Up^VcOCNpF* zLir-EJ}i{Uja-AwA)29lOd6=+ew0O_fXNeiFq0+Wvo>J^lGB8kOi@&p%iJjcLmUe!ot;w^T~_i-Ov zp=`sQF-iEx)0kQr7G*JY7ELvyNX<-6JL?&0ovLer>(i_-y#W-yOy^9lG zJh4nx_~J!nClS>D2}K zng#lsXSch=q|H&b)hMlQPC}5L+8Zy~mJXHqVV%}92jw({0|CRFpsYYCD}y_9QKopY zXM2@$T0=RVWpG?dOW9|a4qH=LQ|Ntfzm`ybQd6QaN@di^F|9CFJ3X>Gp7(jD=z1WGv$)vBaQ12Wc{po~;5 zER)CZvzgj@O)43F8Gy0|Ca>292Av2nOUrI4Wiq=}!Hn(jkjf5_$YiY3(8yrQ#A$bF zOQcuUipmb4{Ot3w5)8jCia1vWw`om#@hsi@Oa^rr;j=V>6Ggf0C!0*ZL-~5!7k2%` zt%Ia8s$?sbTg9$zyqEZv-gEE}=3@Nhrg2HUQ=I`r!c^ z*3+vCX0pJF%eQ-$r|9eQ<%L79OYSsmv!SxtSyV>ZjsAlqsj-~-Aa6eez9{@4G5N(? z&QrOZS929lV}ne#sZM*LY#6nUC!q49c< zlsC@gK#Ne2mrYR)DU)GEzP|7Qgml`SJD9fyiO`I+x&)Hx!=6kEbh1_SXwfgP2SQRw)UG9Quq<<}BSD z>voJ8eqBtJugmA5j8Zv{sd=EpGJP3lPvph$R92<{1s7AmXi3)Vn28L(St>J=6GI-d z;%2j>M5~cv`cg_?%`2Oo59ON8wPFs!o@*q#@gh7cON^X@i>!?)Ih<~GfE$4A*IBxk z%0X!;dc$`pUlD3pz!mG9&lP8KF1U7?a_5 z;8%y`S3jt}fMl!b)6?Ulj*e-_GiVwg);g%C@k$ZLhZW8E6Q+Soo=L89moS_&2~3VJ zm!(?(>+(Fd$;$9jxM}nTG>%# zyf@~isoZMbkcG81hlX-jF{g>OTjK+i3dS;rc_oC?a;admUaf7*Mb14t63T4u?EAsr zlKLy7Gg;oDd}X#RXaTKO3reA|Y8h4-wWO>}T2t9(o!`jB*=hLW$AAB(9ME12?ygNc z=wxar{}|_h@anMa*n>bOU4|Y^-+2Ho#q0ZIABHsSp86adKDNf|E80pM4G?%5lToM9 zm=7BeEE6ZhA$Mhkd z>!#`YW|$oL@Y<)X(sc2#VmrVECi7p8DSGyz~g0+3iN1Wrdt#E_U$4XF!GBeWX8MY+y2FuqF?lU)Ii9I2ei*k&W?UIGEQ z7Q=B_1yHs%7?qRC7RoGNe=dm1Lt+`BoGZ$Ff|rI@aZvsRs}Gd2$&4UT=a_t}Q0^1T zfmF^8XnK4)n5kNcp`%Z5o!z zDzBjoXrhzS659}9_kdoVoac+-xU6zVWzxw-0A-B-T04s}kkV3lxF~Fs7mDJyC?&au z@~;)Hy@z#f1UoV zsDQ__&xHz1uCY8al;0aMRjCqVS1Udbn;fmz)FZ=CGIJi^CX`!38B1)Y z4Jx-<9uHmr1mkB*d(IA&vO_W)#sSK|e!@Vh3_@9>4SPS81sB*1nB0XjE*HKtsL1YA zzB-gw_6!Y+h%g+-yvF8ybh=3-Ba|`kB`*Fi+Qfy9n%gXHbQ*@mGH`ihDA(atpp!>u zvK7f?i7Uu*nS+Y#8Jd5XV~n~9D2s;$VCd9c`SBf16K(@zwa)gpi%uh8@-?SHrLzdi zxNPbI9+;JchGU>|+%?wXtK|q~G9bL@2-lU}w`Sve0cQF*;yEq-aD=wLQ% zV^8t4Yv8N=dRPFH7mN8~0q`=0^S2Wd`%#$NvtK72C^L?!5?9tPSDndhI4avv?2=u| zT_{UQY0~B57v9138mq#7Vw$DU^4nHsu4tLdo$#{rY6y|zRYUVa*$$sm)jISslalA#>D4iYg#DoZSF z*|uQQ{->D9AeIN9vP_pT7DmR`SLjraRXr99Yq*B(9OdgmyZv_<8}_n>Eo>SKico<) zWxZNcA4yyN&m$R^tSN49=idTlIpNA7?H&@D90tlZHHuo++dwZN8`0NN+Nzw%VzpkO z#E6Zq3}Shj9}rY38&K}83!>@1cr4$g@^zt{n++~nTuK{E^Pk&5FBD-ll9L-l^5n?| z*jia{V0)ZoY=^nw z4dN|5?fGg!Dh|X z!YJ&%1s6Mxo*wr`u*fv5 zH?K4>;`eoe2Aec}QW`Zf84Wc?Jiw}9Cjb2T%TYPkbND+rn2!i$naxC`Ok70h#{5rY zU<<~DmStixaK4{IfQL|3w;_n(>|EGbTa0m1B*&N#baV+e=LdA7E>C}I{7y@P{VLPo zsXWRnPs2l5u}3+#_1)NTfMe1wbqh1m$#zO@y$Bh^I0iKz0fuHc^J50**(h-@=Y@n5?9FfLCQlfUj0u5;30fqQ{V{YZHOW8qrB6~Y6re{OB zPKI(tyV?c4o)ew~_K}1sl-3ooni{NEO6N`ttJz0o5mLD~%|I8i$1<88?|8h*c*mi0 z%p!!H0l2)_l(NL?@wC7MAesDg$t@YKG3-~+6Pm=@*~5$}G;EC7EJ@jTjpl2jvX1q9 zjyu74P!?ERM_@Pim|~0Yq+o;a~8J%p{0c5YAQ z!V=lXe&tJ2$p}nXHDnoE45*3fb3BaYQYD!tCeK78lG#v!Zgweu7$~EuS0;T>&d#l| zQHoaIs79Gh5Xsmy(wC%0C?_u2Oii(o% zU}#qfP})(_hnt%x;+P^8MTRX~VRNPQNG(t+qv0%s^2Wxntu~{sWYWqy<|G_rejBF| zN}cO5wv7XVcT+@lb7CYn}QduKcL0=Vx#ZWvwhlas40vcX?8Ud59HVxr>jspfA zl!1zrxSJOmPCyLiOTTw z+^KvY2W-N$bWkBvr%8CIMWxvn0!tjUa<-uThC?A17(%#k*y)c1!sAt1(-pKlC!FGYbrcC(TS4^QO~$|8U= zY%>Bgz!&R>p9^Z?h`yP3P|APri}gZ{g+;9;)`!}6*FM>B* zV=9g)b>W^HF-t%!-d|gtPBDfu>89~r!p+^q@-?kV?Y@& zR6FskJJnfF3*7QJu8F;=G?vS^H>Lq^hIYojVP=Ji6 zi&bK3BEETqGMxvw(%6kd*$L%PDrc^hEt|1VmCBaMS#z|Y{2UbYqCl@?hQ; z>xI^6jo(;JGQ3Y&2y(#F%Nv*$wNgXVH4Ln_!&DaJ(j0E%b*V^{6UFw=>Mcn2ft}8) z#O6TTI%cfWpu#Fc>|R+aKlL<3y-zPO8HuvyJ(X4JGldM?zUoS?vbT zf{b2S>toq~@@Z1J>}N7wFkd=^q5QuFlxGQCLPYXnVVPX$4f>S#LfJX}fRaeE#+Zf-kOfaHlTJxQ9cy(rmc#nI#r$!A>;%%+m<8 zAP7{>hbAf)EXmoeYqPJgcn6|*wa)20FzoXv!+4=a;3SDg88Opm~5yS%q8Wiy!C|fMU7KUo$4&ZH6#?*0p1pVw+BNL(sgKWbl0Bq7` z%QcxQr#V(=$hrFA@TQpHe1K}0!@U5@7*$GcOfky@JI;p7{ivy&kzMqSsx|o94OSj4 zeH{QB>uPg!9fr8N#ThgVf@-OX$)}x$oCT%+fyx!B3=CiOrKn?Kaa(i|I`D8Z|NoV-Gt4+hH)nOrJ!iEhrn1%4=>M1z@54tm>AaT*J?;u-ba< z-kZPO**QHNORRVgm=m>6DRUt;hO*fQ zaEcNfuF?6QM`cl4EI)mx%hZDqnQYyJbwP+cu26w+J7^HlbA>-N4wTW3UQ4i?gRlw9 z2?xHCRHkTOOg0-B%DjA$%5QHR_!?x2R+V?KHj;Dm5JS^51iU{Qq|^zb{JhhUL8X5o z9F>baug{LIdIuY<=kqnXQ^&B|O4-e@5ouik!%~^$GBSDi86-Z07+<~g(pwHP17=cY7a*>*{#IEGlfjAFF#lf&|Roomd z2Pi&IqfVr^8gueoSuU5KavHuUgCOyPFV0jh+)>d#A+CDIa;^c1BPhfu>cO%Il5NR; z%^#P`QL4eqMkk_n8ZKb@VYU8+l_J@pUELCt(;g@%vUA|b&Xvk_cJdY|r-@5Sl}Y&$ zC81QF=_1yeUstJ(it|m3Jpi8er9_!r$FLU>ln;5-F<9o#J*8&U_<`=#=^YXRL+`>8>A=Wc~ZGd_d+@G#f_8a zC~a6AG$I-PiW|aUs}=Rg)kgNbtj_0};~ehYCQgSkaaq`hqjp_o^aRMdiuq@9Gz)an zlE=>ObxOnGkNHeiOE?aSOx8*%cD}^HA4Hr9M)7*{IXv!OEGGh}tOZ7Tfjq+vdLX6l zl$j;6rNJ^B^mFuyEl=T7g_cW;p@lxzVdNf2uG}lQT;OM%hD1duY6QZI&>crE=gPUV z(X)+_UE!n#UmDWYf+}TeTylw8EH|i}(A> zHsXsI$_EJv%{7(on=2ko0Dl4L!t+q2EefRFY+)?rv)!nEaqh}Q8^>~HG#W08_PjaN6{B%dpML= zD}9dXSonm^77Q&852fJ;p9XsN%NHvH!>}f~t+h)lkZlXlxAv`g^L%VulokesDG&9*(3ZQ}kPex(SsmbS!QO$)_d z45IQ(8l%H8)?DCK=5?+zDds{cx(`TYf-<&cp>9Qad^VQFb|!CgD)(~;18tUCpVyJ1 z7ludB@S{%y8D4P-tTl;vSmP7aKvYxPfVLz!dZ@aJrcKKf@j8-xGpjiz>ZRKswp6AfEk(9Zcz zV$;Q6n9DCO zW$9v{FXuFMOeU9C>P*34Bx~Jr=UO*)R`)J}lNVC?PY?If^CW>?RCp!_oe2_b7$>sJQCU$C zHkb7T)m&9nUbZOM$A>*kZ7(84?JLftvNe?Ums31k4e1=Kotz$l6hxx*9uNNfX%Lgk z(x03K20mLbV=~g^mP1KH*g7grC^w|?=xajonE;tg7*0tk`-2nw5;rTAd!gJHp(7L7 zhO(5^K~!#8uY;&EjI`c*WL!Vse-G=0j$`Z|&rQg3o!pi3;DcKXldSPVl-iy?&VxnuJ=J+6dOeG27A~3 z{Q2|O;$cd~vd?P|B%@v|i(?Ix8tYomRm5CY6;SyQEcZ}3p=`cv zhaKnP*TYZvZ?#d}RKiBFD0PSO@JQye7nq8iY%xmH+F}MJff@)?$m`FM%Al070ok9P zv0RtfZ3<=Tszy-0oLd>Dpn=Qwgq6DzU$$ExwT|UKHwI3+xo!A-T7PE*fUVlpi1rmH zSSR%v3Bt&ss8K$u-o}npWFK@IXx%DZSvBiU5d1Z&Q+eTv9YL~O6Ur==ONraU$W*qW z@Fhc;^kfUl2}OO~sQIl=`N%Ei8H;1sZ83B}a{foZST;1aGa3EJNxDl%Z5Hd*FX~5I zG@%Sv`OeWHhvvGBx+u{1l?IG$nx|n=l_8Krd5oFoEv;;!{Kuc50xH)~wh>S*r9Ac~ zz(*#nf-=}VrdW7Cfbv7G=hT>JvCu}FQ+O=V?*W~?L zuNI(`bxma@%ezx~P$pxEC)8D1i&UgrM-nlVdwA?%l+}NMZk*2nWnZk$L)rCB!i|v< zk^H%K^r;Y*D_drJT8{>lSE!T;$_w-d;qT+HOh`^?`wuz9QAL*&W`g^OmZC8atR8jI zd0cfGf^63*MOSeZhhWhH4q3s|srsT!uBq&xjMv67c}&Nan*u?Zicuv9<(FrX2!UTE zOyyhMP?8YJu4LX;DBE2HKfV!@K`_6)bUsZF;7{O&5eAn~9~3_bz!JG!Znbe~M|81ZCluWedt>YN>n~UD$*&j~6l=l)Qsv zV^g`FK?YDxIdln2Y`#1*ktsJs%A2)b&$^|rw{N43zj#9?BbZSVw<-~6kX|uIe&SEG zbE5e1*{z|L>ox8ptJV5J1KhbQ9yaAECwHMdB$2(PGoC9=Ik(NQt;}N?_m{*wO+)%% zUURdU$fttxBxpv{SWc3?>(-8$CSFF3I2CsL!$EmI_dPOvXFzItQ0NCx%G|#Xp^QvE zrl<*;YN@zhT_2(@rid&`FJ#1a8qsD&OP8pNNxHZji_6U8>eDDCmvx_kGvv<7E){)TjFY8>`ai$ZV3K+_%!~)I|sm!sM?3t6dxityvI^;3i2jxi%%B+@| zmklh}P$nw3q%ytIK3D(p!DeqfD5Z_k_Fu!jflhU$bT|@(qAk zDTK1lbB$m=LMkJZOS;Ep?Y(5L9o22}Qq)jJDw9@D$37DbaH{SJvORP$y}i9zp&Zx1 z^ycfL&>qU7m7q*a-eXKz8XJ`I0RM=={x?Oe^u5#5fJ_d%4dxuMi=B+9!<$KiuF3Qn zrrVP%rjN;KUCAo_j8Lv?Xk^U|DQb^${HfS@R~WXyr*VDr_$%#tIs>Qi8?iY`Dhp&X zkteW#aZpi-@0XKuFkO|#m;fl*l^RMz3WCOYu!_fUt7K$}cmvZAt(3&l4-T#pPNI&E z<=s#&$ER|5JjtkZh)fvD`0CHkSvI~?`^-TJFdS0NmJcd_awwH+p^RP~NCk{R0r+9cf|cLV?+h=u|^h%AjpJsw5HYI1L3$QlvxjyrL~@m z@u}QA6p&I*Xgv^>o8_Hvn97+f-x@dMsOI=qVJG(j_vFbN;YfaCkZ>F#(8-wr&=*{bcEAV7~q|+EDf>c@D}l z@aB$+<*iUAsVqc`%7f3OVaK0IHeVx_Mbha_I5w2Oo%}$}TrBkxKD9~5hf3vTV7=Dy zG=y^D{-WT-DcGZEMVE&%A6uKiuVM~N2I2kZZs=Eoa+orMBALeAQaPTtA>*U49ha$= z6@4zbgGCxJ+4ai#B!ylADhIvPdGuD89TCiuN-34n-Ywb(edxRlP6kY6E0vGfcSU2@ zWf0*3z|~VMgHxNgsSJ-I&q5dID?-ICO8bNY3d7UEcu2nDG(>N)A3T8}lwF+{w`fPi za`SZ1fU>V~&>*82^YyVFxGxtXT1+0F%BMqFdd<6(%j)f@|M|^XuYthRz^6Phz~m6h z#!QY?OmEbb8?mhZ?EU=lI#lK|UQHy=x$i1Vx@L;fiedzEVk^JMa1NHs$95ZUB)yO*6kJ(`to4pU zp2k@^jza71|I9-hZ&o@Kw&l^lK)Q)(i2f3MGGV3c+`8lQNMtjy1607N56IZ2vSM&qc(k@V4DGtcBtCY1R)H0qBM6rB@Uq+8fLLa9HQN?(hO zv5ZibVVB*k&E=CRWT{MN5q2FqCJPa&BB$Didmeh-sK7&MX_&AdvFD->dN{a^X>5UV zk~s4 zgB08J^3bM4|H7HWGMTQaNOj*7j>U4H*N}sJeUNQpD>1uQs0GqsBnr3RFeZ`Xjgf{z zw4PvL$B;Y>tp@DFxyCd^xU4~)w|`Fl;} zFK01%Sws0)sf>YMg^s6<=uLpKCiC@KTjtx_+uP*N9*@_P$`;CqUo5*;X)}*Kk^#`h zG`)g}&%$K0b<<$#kevCt=HoLNfvl&ug5^>=7&{(k&D8D0WvsThhJmkAdt0OpxlGEJ z=%wtJ>qlX^*J~KL!ciqNr)gwqyyanFAi~tM&iQ~cvpN`TSSZBM(@2slP9xo>ltpO1 zjv7LB3?hmCI4{>tt@G#)JrCIn<%CZK;!;qySpN3)+v)$z+fuo4tW*YYDp1L>Zf%Xm zaOCymK6XR-AgMe~tqGL_gXc(Pt}>ykxwm9v7(gSi%es%-ICgu2Pl&Rmt(+tqCiI%< z+hs2R8Gqx)>w~#WeQO|Ja3u?p#2CwcOdgub%?;YtVxvf4v|nbu<8UnZn`=phlTa2- z2KBt*L8vU+NDj{jk#JE>jKNlTQ9|{Xhn+@}Ty+{dpvSqa0CPdon zT$ZEli%eyb$}Z}xAIpbsjiM*_rsPa0my9YLgF*>{v5vC&@);N5*!tok9iGbHzaWQ^ z%iq6#X+rtm$JjCJQK;j0H?2EDh0NFSpB|w#2$Y>x?#J?|l^LnB6Hs}spI%=hi)9*` z@|@%WKqigYKr&X1fF0Tl$YiVq>8o2POj*}(d_*8?y&@>*SBEk-vS%i@!q91V@Ee6l zT1m@;TlxE>thDjhkxct7=m&4neF?E;HwM}u-J29Xz`bcg1yR2JE=P$m?A0j*3Z{{H3b zH)OPr{W{#5?Gue{5s*P2L0CRis4z?=_!*IkjH>>)|SfA zi??5I2{$`zkM8dNS!&~Y%ODZ99ofX*Q~$Q*An#FhVv1bJ>41jaiFl2AzC^u|X>5mb zkRR+`nhyn3%Oo8)N4NuJOJ&)#p$};$l8p{_u7|9BZTq%cuRa)+zfZhA{_+iDyuN+= z{`GqZ<--lxYN{!Gnt%+W7-V}hO5Jtx!BhqwztW#=Fawf*{QdW6Sl%qKQpjSliK5qn zhdyN`q>Z>9ScY6JWyT+?bWYu|hOo-+CREzxGwbvsMTkC1==N zsaiq}4CSs@8KBJe>m*ILWoI3-J@pi+2$)><5=b~u`Rpip_FDwGC1;(0Ht)=peKfQN z^x?9mZ)6(ozBCj&LwVx6hJ{Gx0y63FP~O92OXU#C>CjNF9Y;+j6R>;28?wQu{LOOr z+t=?Pkb%qJzkU1i1$48E$Nqk>P&ToiB9^I4CYF(ihuPllb*c}hvc>Uhm&;Zs|IJ)} z8l1`t>g9(m{a#;V-R>%KutxN3akZN;wQ4>jCV|L{RSr}(aM~j_PqbnzuRt!F>z75B zHIr+zLFio0f@Gl(&!&@wLo&Hf5e6)znMCz;0vw63zSy}mypd^mB=`B0WiPR8q1EA` z++cB*ZE?)Vw8i8BeK%4h4JyMyMKs=jo5^_nXXjGc{&;AkB+y%OT@5NU)Uzg1an`s}Cu_txY zc%2N-WRNVJ3gT?((sqlQ(BtFU9E;F^eMmu6u0l22Z=&oo>IZRcXGPm~W`Ge>q7g7h z@3Og6qz`VY-|bm2xRGh}9}n8r>n4;Plj(3Ue7VuA)y1agiD)2kBq;N#0J9xJ(|K66 zCG`*Fxm5mUQA-I>1Z5P+U%!6;Vx{u8@87;)@YlC<3vZqUWi>7CabBmdF+r{>8OI=! zBOOQ4<11kK^#CYiQ1Ve1euGYB(#pAB(b$+{T5>6B|H#!wD6$J4d^I1E%DlJ1uYk&v zfXbL`oyVK2-?y^itCcPUyRk_niIb^8XOF>KTMC|;x7lg3P;cZA?+-TPs*v4{ zf3NhFT_&Hg3HKZd8t(bshl2(T(~m!m?IM|PjqKbDU){zE z+6JjSokqZ9^z;@{1Z;laS40G3_ViIyX8Scl83?*rZB}M=jONtbk~t2n)l&Le+JjJ; zjes~72xS~PI8*RTU)_4`sN4|Boes;1?9>w^pLEqULfPX zzuz1!L;LudOy0&qHxaq#aL|C^=`6UBY3xGs_8521WQOu^_G{5Sg7z9kWWzXvdUn7( zWtk=|Cbz@P>T>L1{=u128Ow!y=UO44i7`+4tF>RFW0{%EG1y_a!*6~&!%jT3@0Xk}GZ#N?v*&jvHdqkTGA&*w+Egaar8L02X>M{!g+D2GOGJ+G;Je%d?Y z_{ZOW|M(F_Bav?lAydi>UDkm^=7rob*^%K3Y2Xd3tdCGs;PWt#yTST z>FE)}-WH2rKVke@w9ga|tHn*+#gdh9o5?mNz0G7f($Tc!>LKA_pl0%xA&=VlgPs3q zCZ7mpk#059ru+11OP>)8KK3;FZ_WOKG_nrDaxvHgTCWdavV*cel$__!*a>AcScx7g zw{1lDjdP&<1r66|w5CXFhBE$Q#Z19oU%vkvgff2bdYhA0wr`_q(6|($bx2Q!?l}Ho zRkB}M_0COH);SmTi1U5^fW-o#d>oS}n}yAZT5MKa%kn5F>k!Hzm8)7S!%v(+Wnl8t z)6?r_vxy>y;93`NR#xb5Zsk_OS+i^bnV4JO2Jtq=N`UTs?%W^!@kb&EMr30 zBgVLGHu2(tW6^3T>ji&jaU;S08arN=jan-93xKsTK@Eu!9XNuaJZm%eOeSX?eX&m% zIt+!|@Q^U9S$M!Sf=IK0nSAkSbeY_^Gn8-FKNsn<_FU@tKvG#`hcP*L2sx}_WGHu| z-IC#<4EX))FOtMWVkGkSf4-1z#whGBU#waC>(^_>d0F#yY#qy`=(`S?w}V{@%OQg4 zlc^i{#Tv&onA||JOjKFUtIAH5p-k!H+zm753FifRavNj@D6iMYhF=#eHw?&LJvqK~ zi1J!Fpt1!swJOo)^;HBWKRrcx&XHbxf>_jN0{+g8^gbaIK~;%vSB4V4Zzfz>b8Np2 zK2SlaPq#DmGZ`nipUGjQmLCV~rn0?HpSA;U@tq#XLQBJD>5LCNjh^FD2xPHiF0yei z25c22T1*yO&tI|u<#cQ)i^HgVo=+M1`xn`-zmiz~^5x4v@cBPPWs=Hh+Wz|W%QZJA zu17*tR?FoUDrdfI_&BXSy8y~-0t1g@{A^ke&e^>VH4D?DH_G{Yqv^2VHSEpJpdzkF7(`o&5z-HQk zayASMk8I}Awwaz*e)~qI(U?q_YbJb28o7T49?An%`OG><-ZBf>5z50+xd*u2Dga|p z8Kg4hBXiU>YGe4$*MCSWeSp*(*(`I6$L$!61yOmn=4%=sFEvpe85WNKxM8>9%ICpQn}+Y^T;139stUq zlaKT%s~iKa&B~mSyyU4I4^QRycM!_D;3kusd`eKxod+57l=;PPqjR^8xfyj;mJNU* zlR+sHl`jz8C=kkFs2Au3tt&V!w4%S$ok(WM?QxtQX}az}`P9IsZVFO%+$@?bI<@}x zjZ7mnUMGExGR4lEtPYe1>QdFQh@`v4dXjpfJSvp?0>FEze8yGyHu>@oAos8Dzp; z@+-%7tw*U<#Yx@p!Vb#$O*oYmK^d`Jc9@J( z`9gg&WH#fBkO0atPoTYv@5?a`bDEp6y$5ZiGHu88$Wz`;uR7%_JI9$dg^xRvA9NZ$ zCxoVNLCQm>5R^V0q@Qy~Cht+}Ng6_VI4U2MSI|r4b278O1C{?G1cOHYi>Un1KVKQj zR0R7kWHmO9qEegJgR(}WYe7&pz1Hh)#lEdi$J^T*?Das@!cYL&(MIc>wPxWZCXT9Z zB2Am7hw^$ozf>`0ySQ9JR8lT$^RyMj+JD0}*bLiW;!-E{2) zVmKQ$m|O-VPhDZ2;Xg*rwUJFbq+6=)s_cq7w^n-^estOm4gS_y2>k z3*`a&N_S-Pj(Nzi5~fJ60Oc)O`HV??Mebs-7sh;j`HQ78LYd;S;Tu3|gfli-zN%8L z?bp3Zxi5@SY(es}nim>mYy{-!Oay-T{QQEL{TtB18*6lN%^Z zk8lJuNOaN;d?V9n-kZ?bf25l~g!1`R7Hyd<4zZx)H5j;`c$c>QmE~nJD3dV*832sR z_^VaL=vV%WONgL&hHrlV_VxSZdTwPB$PUW7s`eYNcTxGRnlI-FQtS~Fvwl2OD|5M5 zR8!XITR3xdRp-)%OkOQu{{$#ki`6>UvnsiCpUTyl#(sTa*-}&AJ z0Kr8PNs+RhG2%GRW=lb;x&|pf>$x*dGZR0k<{}}KX|*JY)5@qLlWk(H5Iv2JvSu4QMxdH1P`xKn z1JR%@_?}F|xi@9xo!=8IvH|6zsVu58S%^+1^st2TbW(YjXS<2zqo(j326`ctDLV>e zGC&z^*C>>k$r$i8`}QsyQp6U@anh=k+mrBHsr(c-Igf*yOiIvhsl2FNds`;UD}As) zE*KRi!|yMQP|iRouP!Lmck->C>b?<<$(}FMqMVU-F58fCbb)h}7yFiJ6vfl03}vMT zv`ZWb%7|t3O#_n0lF8S%=r~UKToU1%j~L4E(@Sh#4s0l7(7z8pWmSjrY{YbrUL$LP zGTE>7W$IAqV!2FfMDFEHZf=o7qK#!(M`8a-R5&zj3%)1QFe7cmnf3Z^(zzp}xRpgs zCU+|HR)%{`3FX}_*cwfRh=fuCk&&b_vNX0j@>jNow$h9q`_BM4$uyklC^#?ScWB7Xz9x(`!@GifPeJ+|LFM}H-r+9e83*4$TEMR}{7R0! zn|6V+dpOFDpfYxd`k!x!zu(daW+h`dHvbtKufP7LCzG-GA07hnmv$`org9GF@f-t% ziGFq8Qn(As%+d1U$Fd`t>1;4h%1mRg#d3YFp{&KS!{pF3;FiXLymMcr4GSwdCeewc zj&wIYnWCP5`t<3_X3^*YryKKSB~>|cp*;6K3M!w?NGJo8Nh5O}7=Dovl;ObVB-I6E z$`-TBJEwAvjWgl?>rR62sC6Sn?>rvYEg`koE$ei|;6@w}w3XFAwPj!;Cw4L|ud9nno!)C;Mn z2j^lIMEUCJSet2D?x)y3VE_7r%RnkH#bfIcRK{XnUw=bT{wL=@ee?GW|abQdt|X zXF?K4IRA^xb}KAvrkU(yyCasxWl815VsSTAu8lhr%6eppW6(CH7s7SE_dnxL-ulz@ zXs;V$2(97$c0Dr<6shU)p;76KX;>f!I#A=DO~W~DmBzDz?Z8@e_WE8hj}+7A``(pZ zOy+At6G`o9?7*6^Z(`KFG*!rD8NjgvugKm@OjE_npj4VXC>AHIh>SPS(@>@c3335NBH4;}4C`sZK#yTTV{H6Bn%Q6p$wewu{bN!IQnFeA_ofcl;by@r4MWx<(*Z0YY}RN5xC?e z=sBZ;fjj~i0fH%M|5TepI=r~DP|k``u?(jTiI|mX(e3KuG|1VilA{dRSU!Xx{7)h> z;h3c}OJ?jL)x~}-0clr57NXV(Dc#k>aPlFA1cFGowAG)PBUB=f<6-gw~-UO@Oo88dERt)aY5 zqJABs?ypcbP!4mt@nppIGMyL~C*iW$8o&=rC@=oIp{yJzyHc4gFI<2oKPa(yY^Q*~>>J_;96{uf1xvY{K{6*%qyUzWnaFn(XI-+mI=;oe6di=JB>W1ICuKbfkjp~UusjBp%akzT zVi`ePDdCp_iT`3KUoIB<-(vW6jO8J6YS5sQVS?%_EY9CxSA)rBh>1^qVLwF-P_BlNgh7Wog`qnCQ zYvSWfVxZJ10yjfrI8Es|5*B(=-SCdblER)FJ#S1Z7ua$k?qiKE%7e}^S79HOzs0}o z!erjdL}Fulv0l^)D<>K4Iv$m&{F30VGzQC+hOY+6G;rBpUM*5xmPizz7~w#ob>NQx?j@(hoR zScVEi3fTIZV5SdNbq~;ZAK2z7%XF{4PbfJZEg~}3<>^5z` zV+P7yv|R4+EwogA_*(gF<|t*Laza$rB}H@J*R2*pb5qR#CNJdVP+mCWej2Z7 zV4IOB@{*&V92diEqx&(`(QNBXLmfMdhd+%8pnTNvpcQIyH>$a>9-A&UW37ItKt?g( zY8*-BuUoK8JpT5uP)6)>JaQ82lF+&o1yI>`1v6A0#jRXnv+&Epdle?b-lx z!p}0eZ}T~*q!f`%AO5TfK3^t2)zAv!m8acPPjD z^*sLRjZ^r@d1Fb@wIf^QZX8EtYDi&eOkrNS2KLv7T2T;)NSGzIm?L2s3p6C`RVI{a zzw(GsHfR?0B431L36uKEV40DO{^zU!sf>Qp)ac|olM%{`#WlLeD^Ly{GGocCWl3d% zG6wT=31u5_=HCgKrJh=?Kmi)ByB^HfSo5Svl4ACtM-9rbSSY)Q{h_`C<-jq4a1g>m zhJu+qRg}Qu{LP0CAJA0->kXIOy~A=&5xPiYHe>fr%TjR@$|G!&H4YuL=sZs20F;lJ zjf$Poe8HYQy#~B3W;j_S+U2LeO<%urq-la0}rwesjtCM;LD%)Vr5$ESVEDIuAH!qP&mH=Bzsb&mHr_&R88 zm+*g*C`vpR%5Lc};+@&U1wonIxM|srG&DBRlWS&4Gn4X|qOb_%Rk2z4sHie78L<=#GJyF0G=Y1hk@Z-RQoe^&#|^7 zHowPdH2=GnlvoP?$hjotaOX6HN#&$EOMZM=g@p$YJ!+0cp%VOb^r0uVW^}Y)cZ70I z)AsBcW#BBRjwWN7@Qg(M_G|MeU2NAVHQ=Z6bSI(+`@~~m>Bw6Fnh41uVM;po>k*-B zg1>}mJx0=)h-*yQfw6Hf{d|3aMXR>F&mc$V&3r;ChhfJS-8-QSN0OZdL?7@-v4NwM+IG!OW!+#Vw9bc=ZYMz*qX{MorbpBD zz4s~~xwE-jKlLU%>WHv&JWiu$nHif+Mf97G6+Lofy&Hv+ls}Z$V^)cdB-cir1V0^l z(CMJ<5XpEyi`BcNyz!BAUPb=Rd#gWV>cE5tAc&4-wVMqFApa zM6WUy`A=3k)kT>E$}{6&COAup4qjh6Q1;8LW@hqc%kdU@4!W|Xp8n#Rk_{?8<oCc-D%t6Wg3g>_ztK4xY$&+I|fj{u(}*&tHFcP$x?xEr7|?7SFVJKptbCK$S~kGKPR9 zt7J+jJ8;&K(vqO!@VN|k1`=+>=TH)L)k{T>2ER= z%3pu|-T(a0cN}buY8j!7UmyIBMkxCwl&RGawFiu_FkdJUUpX1JK`T!UWgxN?CVffz zbtp^8O8Na;7+bu0IWRfT#jd#!l;P9T2?GipDu+6jilE#|WucR9MCg>Jm`*V3j4Z~A zlt1+mQiZ@a>%6oiB1P$MB2f=EhU;&Bu6^ zT~p>AmhgU@#^Jf#uhlX*ieZ#_%<%^ZcC2Ora#zJF>GdA$=h>0(03*9lGJlQ5t}zkn zyTb{}HUS8rykdP!RF1K$8-V6O zVIY&S;Y~7+#Ev6E4ayZNvsalr7sHEOEj5&v)fO;-ZKSfObeIg~Bv`hA-*RD+!Zct8 zwQT*kht5668%mlP32gJx%~!JC!98$lx%a0sy=0#TBaTE|rVJDLjlkGamZX+iOI7op5nKov2Sv4=c{U1PbV9P3X5lNEOXh^QWe zhVuAA*&x~XiAT7jA|XxmH3}YrvcJCAUTiklbRkz6VR;^%pI^5!8K8Vtg|etn8P6Po z)OZQyu-2GOkQl2{S)fmPd?drWli1NpF3S{ctetYT_%AQvyh|)splp$BzT(bpVSNPs zP1+nZ!u^^7%Th-3ILmWHa-6{95hsuL<8eHWduHI7-EoVy*>?_xJGD@j)}f40_K3>b ze4QYZeH6+79}Z-Ts7!)^^5{&)Y-L|p2uU@SrOV_p9(v7Q<%>0(htPF_%?TFgXXj07 zHK4rICA>mMD(m3u63WYZw^TX}RH=;dZzE$Fzawj6{={z`aC}Kz#?0+Ut=uA(1HEcW zCNr)5wCR^0$Yq@?I7f$y?}u=3645-1V}>#pmVUe&kK=JXjwX}4(byHrq2AGwl}qI$ z;mr;!KBC(mIA^(~NUzPs9Ao8ZS4@(do2HgT z9M39DwuLprQYvegvfQbZ^?wmToywzP8NQ#X^yzfwMj8W>uNImx6u^`|u6BpY7Ro8x zt)({kn|MLL4rIgS&RFIOcXL~-23FAx2xT}9Dih{;FMN8B<8eHW`v>J-7%2M{!%)~W z9)YaeFPXxQ#sEMC1>qAVflP^Hw;cr)fv{CJabtx|G0;$cujT;dEK~VS9_Ki{Hx(-1 zB9G6SP_|UIQaL>YWdkj>=U?(YSt9UYYc63v=JIkxC2Yl!#o3 zi?gwEVe9DVU5+D*WM*<8^P4zZ0hB4m6hpn_%zwNYkK=JXjw3lxmL(*qyy9LI_%rcM zwdFKNe{v35fSNpS|n4!Q}GC9M=Tqii~z1y z+oZoiGS@V+!E`sV9D7zNvrYyk6O{9Op679_5>G7!$7a(vT!xRg<#9ZY$1x1b<=zES zxuh~d*=HtmJI6T39uH?{2*0tJ>}r{c2|N7@|L)56lHx$GrN7y}fBSZ`-ON1;aTHog@{xmm`%I3ocs3!Cs>?xh7+@#L?z;2gtJcE*R4=)P+1$WmuXQPUCmN6nc}Zg z(;X`uXa~m#c%#?FlWW!xGE2wblWk2_8!k$&sg| z0HN#=mABjN+s!tL^1%3-f!7#%c(+VmoO3(zN4fks?s(WXzmKCkl(7>$207arT0~_J zkat4`k$}mmPuN?;$mH{LY*ja=R!*BtHdwAedEr8N>95}sl3^GqCpYL*-T`GSohIuQ zvY5*Bi?&{ygs4iqkW(Q_OXU*FMCFu_>>b|&)F4@EBqOLx>$Qy~HX+5OT)tB-XRFmJ zyUWU9w0a%mM(C6|538~nn|#zf%N?K$_ZF#4;a))Hr9dce;ZXQ?y;*}+c9|SwlD~Ji zOhz}(`T1j7`{STA85(!QMS-+l_$|2q8>|!Yp8o)GM^rYYyZjoG1ODuU5%B$z zPDL0W@BU$-Oz8-7ovZBSX}aC&oV>T|?RuT(OP#;0nGFBvbQc4yM7T!HI@K|FBm?r^yfIGYQJCxpwny?IC|@qF z(u!0DAV+yZ;)HCA9wuvnQr-dORgKD?u|}7@l!L$(%KMr?$Z8C)pJo7M{MMISnDcmZnU-WH%PnWxsyc)>oxEg zPJY;mJwhmNDVl-DdZVQ>4`s+bu~a69&5R0{V3{#kHgYLvf_I>VV?RE;d9&k;I@J*R z=i|74?wF#)%8fn{wcbq#Wiv95usrJz z=5{9AyeMIbOkcHJv^$})g)+b)zDp`MPEw)~_obn18b}2lnG8_oCM^;6>q`{!*g*N> zf}}F*WLSz?Pe&6%d8-G$l%!X~$P45$RYEymBpwzMpwsh-sVoJSZ|5%`F?h$)xNfvQ z1(jvlM9skX&Z$hVewS0Ah|A7Vmr_UcrX~d2r7~c5vlbHLiVc^~4U@5D#YGftHqjB? zH;^=kplq58r2gf?dUJ8W=7>3=CNL_;w#sLV-8~x$ieJkdsf!1>Y-Ji;ds=u4THMK320TFR@hg2?I?t!Tt z-b{_ciz>^1)-g+2p&0-p24aLW;h3Sky}$MQfj__CZwk-62Qa?4@Gdso&T+6% z4)!y-^qRul7J)-$V~h-m%c02QB#F;%$$Y&N9_aeSuGbEgDR7v{EOra!);`8=e0Ex7 zMN!Z<%835`UCS*@c9NB)A+p~XXg@bx?zkHz^QwhC^{rK67?f8U%6I8jmMJ9&YXeKY zc8HUrF1f8^cP7uuHG|p8TN20@pjF{1!Klb}j#L&Ul#$8tG@Y!sbXw+tF=tCD-FFBR zP)S1FByVo6%_cB8m9aXnfHyAqG6;dT^x2)YHM=Lt`??tM9nj$V`qmDIh_@%0iCkJN z&#G9yV=C`*s!zT`(ZEb+031FT>fEN*WX=X>6ELHO_}afx?Xg}OE~Uh@^~8ZcnU59nqmCD`P0}Y$o zQm+cWcnsw`3-(HN_X%D#vb}bQUg@RnI_TPv!tr{*vbo@~1tNn~USg?`kZ43qjySp? zR#Q+JlK?kw(T}};zgc@LYVpZ3nFeV3DA66BZ@k6z^(nZ>)y@Q0Z7-MbxehctxmR0@ z^)@Twi8V5F;N(E61X|xZNIb<%@L6!M%v`=(ER(@tHtx3FEiUhDog`Z>zdAWli zr;>(xw_Psjz2CsQ-=_u!S=rz9I*%UPMw3!9xTJ-R*CVZV@e5SjP+7?*}l+R zoYdMpnq}OG$$n2J&&WApm&tm|PeOuG6{gG-H@%Y3%Y9>G3-k$DwAi3nCt!XD1$Ye{u1D&d`2u-1JFepvR6RwO#deiK@1C%S< z7E&3ZjDBUtFj|9D_6AWo6}2+Nel>E*?Iggvs7#(FPv->|)y#2c zOt5(sZ%V<^CW9O*HAYmpt7N21TZE&b@-gqKH-cLJOk|$5_s*KtasG$7&$;Y3tEyCrAxt??)W2Q&)UQrdkE3eUMC z9dwb5wRzBKWdbN`qg&{+h*=_*ja+tVg&qBf%BQ$1S}nU+<|X>(&7|kX>$97M@nxWk z_0S7h`*no|NM)=Sg6$gfi<`VOFze>CIs7$h=9~4!3aEUvQVs~p4JLCzgw$x$o0}Ye zBsYndQ#I}g{db9vxyn84A>>*vv1|?4W%*{g1IpE~XGb!pF7vJDv5!)QZPh{Y0VbO} z7ufQoy_gJ8E|oGs*$QQc%Ar6ntu_LfTyANc?!s89=*10`VY>z>V`VekMD8Z|Hd$q` zG~^B-6O#{I*xhHjl@`lcQ2+xyj}9fmJ!j-8b7EmisKxII3LPUoB8q09AR+f}Y zKuk7JhDRhB{nZr$c?*x-b_-{)NIyi0C$wBAkt&4;yIhi-nNs=4+|!Q9AJEQqrK~gUPcBDDq|uiHC9F)e6dDB zT&a`6T+S1WI|U%Gl3gdf9!#$H(re!|w`+89Z#L^(J@s-$fv^hOHZChr?y$j{h%e(+ z#wa$oqk?SH%Jobnjszz%yNXMhZ`?;F3AVVkFj>m|H%?zKW^z}~BpB#rung~=t>l$P z8`#kq)qh%jhl|0K001BWNklCRc+DiJgdMzVxOaDEO;Y@yE1ZqBYXnMdC8j8~hj)*NcKtUgD0abO=_m=gkf zxug89$QR9;fwk zvYX24Q0;^kCNp1zVX|oKCZ=Y>`UZ%sp^OD9)Y4z}Oo1qL$d}11Ue&rB$%a@KVvll8 ztLwL~P8O9QuZj~??q2n>!sMV2lU=2Z7r^(!HY)o;m2N&KPGfOVNiz`q>ITZVF)Fel z#{Qi_8L*iodD_4+BU#^F9i!HF$qEN@5Ba*4=8JznTSViaN2B>&FdM8P$ zW9G%WpjkY3L(R0!iA`Bp>JLu{o>t2r&d*P!lq-AlnJMQ&rvgLe15jp*2>u)ZW#4ZX z%M0sAWhB1ow%ACrcihutr7sN1v7pUz+05sbX@30UOc#UUqbcMBli>riwzR1* zKKH1iX+&sdC~G9MWcK*);e?RDw9YU??9KFU<=gAZlWM7aTNYUZ2H-hmKM>a!@7M3? zQ-7(9>oaWO@-2}_C(aU;J4j`vgBUt%Wm)rvg+A#%z_OHDsowG=(4)&#?sPWjqt|(N z#bU~4=s&}~&Ca6)^P4wgtPCU{)rMYT!Ac>b`6|ANJj#dgqE7Kw+=fLfjkYS{ajQcrUjdT?GudLb zUL%7D$`Rd`Sl)>NTM?8I%T33!OtU15+c_c_J=Ut{@}_kV^F zQ2C%km#GXNs%HTJY23Pg$z^Fy40aOdoJxLJDx=%bgfaA^a#%Gb;k+cv<=ZoTHaP#! zd8euxrC#s#h@en6Cui1stT=o*LmP@N6yG&(@4%~*^KR~$R2qLN^7$%@DItO*J-XdS zS(YX&Pc}efI`oiFL&0c`9XAI0^n_MTgTt!kxueS?*D`G^S1E$<4S> zHc42KscMQ<1>r-QLnO`xW>=t$hfh>a1+@y<(oYgpBq<<+$`{KL%b2{p(DA-+P%D2p zbiFU$>+`+p_2QMz^TcKNGihz>*No*iJe6)xrXRgxz3Nq-FcP(_rNH)MeKy$Lv!Kdk z*6Y0jXxVz=MA1@}cnk{h<`iv!os6!puRB5cz^j{enfRK?L7u}C5vyD?S#?zf(m3B7 zEaL@4FqcqnFY(dJWrZ@`Q>%(p&f(jkQH|)_#$+r=wG8%bAiNgV_AoC0M8s2;WSbiGy124vgMB~naoRy3yYaD z+-k%-u}+A`crg(cC6ievYtOcq!Qsa%#lgrqa&g2|j!fASP36tDWU_$CWq9?0$wkgc zrXpvjfpXb>PuF#&djPMDB}K@!{eh@_7|MN&#`PDsO!T>z4=;oThdP796fd&L--A>KN^0csmup|c+!0RTI@#L56 zz8juiiuwcqzsMv9p&Vxnn3{Ej!V;s^+}2|E#TcR9=&mywp#CJFbzlFB(y zAm;d!jI>#sNZwy1a=Uqp!bt2 zWd5ZGl;;Fxe#%l?|B9$wk;<*5Dg{AVmUz-o24Oh&7|M~l6DB8AxP`@XqRl`^Q1?znDUk|4(rr|stb`u+PYm)V)ld@YtGlns-^vM+|^)u>c1$}TSCRpzSkOCyw# z${G=n|D*$hDc+`Ht5~UWet%;aYJD=UQ=|oV=;x( zswp@PR2DsvJS(=_3+e>0%@fbmi9{P25OJva`gkl;FUSD_fpsKT%a$|K(lK*t4<8J)%n`G2%4mzm5DJ||}V@4x>IXY?e`$7b>z zU>sq+T=HOJ5IDwvZnl+6!Ya9-nHbR?#S@e`+pls+9AdRK$^CEDoFj}V%E~~Pvq9*c zd7er3TCdlI#|GPY*lSm@j3O0YN6$hBgrC1zRL%t}j@~N^sWJ}>J{@$J09E2&?igq@ zKq}7Xa&8X?XSGfZwbyo_td#0oy|^)fG6Ym&24NEEAS^hq-E@I+vBxWD-6{cLc`0(x zpt(|Pz~&GzVcdeCZI;1db7(ctsNS_m$X&InDZtGl*=E`#tx%3ti&72`G8v$(d*i^Z zNph8N!ilbr5KO(_x4V~9-Jf}-*lgctKwxZ(50Vg zD4Q6H6D&hnQ;brF77>*dz{oqh(Q&^>VgMkXay)yALa70uz_V`Q&HGVVn%%jDhms@l zunBKv7Rn6#JA0Ii44Ub1u%c;fyFVejCP59_@F!6jzv-Fw=qg=OT}Sc7PK9-x!dlIT znDSdD;FGr>XF^ccewOG^O;aURN}ikMas%!nB4l-e2e+rRAwXx*em0Tn5_R(zFJ>w*KfBu7ekIB zbvGGNY6VALteTO;>WKDb2QQZ3Tmdcw>sOd8a}T8Q`_0Y8dRit|p=_8;Eu+YI?UlRh zM2(&4>Xx%Wp^WMIHvdGX2*W&_2Fl1}jx@u!i*EeQ+qdu6E|eAZL1U?`;{W~M|Ali} za)Mo=(GJCy@23+4ZWuSrL)tBIBd6x4C6+0Mm!Q0gbTx*)=Ya;ACHFGp_;_a)n1rDZ zZ}ZBCOdu`IqgOVPlsl&3W-5YQ#;VElIfma|-!9;*RdotniUP)(H~#s&ci~zxQ}~su zkfyk5G?pDJih(lyu0^Vo={(t^yz)e60>Eh|p|56;Io+ zcdDd4RE8VPnUayseswH}dd7KT#4S?UV%gMvIhbh-XLGzWImw{}HF7?Y7V6Gr3+2pu z+EfoF>*(p;NHz~&HSB043;k{?Ba`X4c17(ZZLnUxLMU&x7~n}zR(BKTg+;x+NPk3h zM4Vy|7FP>c2A4RffHt50b#XUX=ut!k;#p75CWSH=x0F^V!xOq(!l^tmOvWctO*{z` z(}GOqNC|6q!IGyk939Gh0?s)88UpbTw4G{+HAeH@`0GY%&D{26YYd2P&QnR}mE|*;>n|=j{jo7@C86por zvQzrHWU@T|jX4!j!l0GO-&<>HH4^*u<%O$cVW6Ui$F2J__Ki@Azj{xz|T{W&)U znYBAYd2gNw^AJ-6w7nLV$-ft+JT^PG7uDplo=4OR$}M3yS|#I^a7@&=ME||;l>WUg zyi}9RYb})LQQu?+4du}4^px%bA3o6ALR7}yO8Bru&TB_>9-uSRnkz|e)~mf~(n*}N z{}vxVFYyDP3+?7P`qJik8K&c#2egxDNNuf*um_eUEvJ&qs|J$+%28|^+mWNEkUe8? z3MOB?!VvB}ncdy6t%$5ox$NslM`3kvC)2s~4w6Nmy-St?TLfbWWwQRtidDSnPi7_u z67VCPq_!OUd16jfD7otQ9Whzw!sp|~TDL=40*NmP%JfqY__LE1Oc4m>kiEH~De@A= zI!#cQ+CoJ+rBF5%rpbEEBDw7GX#yrjR?6tvOA_+f7ZjYN=7{5qZ4=7e!_ldSjR9a& zx|L-^9cpE0+nIRU$5%HN!!~ZPtg(P3djFm}+{8yQnKvu)Zg-)}exXa*g>sOiQyHL)&5D$wM8Mg{I`BRPSC?8U^B1U>FL~!X3x_1oxuIrnI2DP?jDS0~cgM$5j;4C%s9C(OwfbIKVL;1PlEKYQ0|7 zpsY$HJB6?*H#LeUyd@1HvnSa>vf1#>c4%o7dr?M8+Q4Z09tY+q4K*2C8cM2Q!s%>| z7?0y>aFq?PVlylcjU;Y?GMve5yf%jG@&$E#7rb@NWU@B$;l&KH#6Q1)_Mq3d<7E!Yyijfsrts4W}$QDGCy zj>m$TOk8%Etm;fg^R-tNtQfLYkW`NE36o2jkxPilOz-@F`PwvIs)*#i_GejV@^LuO zU4TuN8GrXi^-sABN+`Qbj&fGYL0K{9V}>$N*+6-LFgE8HKNY8V;&?DL84OCtmCePOFK*0*9Tfs-e zC~}azluk7IbX0EF$)=nQ*E*|4F|j|FC*?(RN1_5Sbqk*1rt`W)^7o~YxzxTxc zfp$hJ*Aa`mBELK`dG7?`xdyqSRC&PmT!^;SYCV;ZFV8*4#j_Yr;OkRd*C@8R2#}9!tl30XuJR5cm z%6LpzZ?_o#zkU1mE!k@*ahnedytBF)Vkd(#b9tq=1b&Wh*feh=HTmN8m~WvaUXYTtxD+O%hbNz z1kYhb<~Au7gJP$p?zzdbTOJE#b1cMq!LWHKiqmLh$H|ZrbTQ7$caLj%o+Femwpu4I z1Mlo(X0i_&nTpeDC=0Xooj@upGT@@6jHpafIW!HssA*zk_Ipm{9UICC1`1)12U>>) z%2LbZ04*&^VzwN3C?sezENVE~g`r?icwYv}GpaMTzF5D1&t^t~GBa6w1#3{ADoISX z8ICQKSJrgR9$o#+QLzb)0bMy{U|mwV!=Y>hdsZexdq#~L{8WwEv5taLL&Issj*UFZrm`=$xc&Z3EU&o*#g6qKx4I z>q&!JH8{q`aV(V+f^r!`=Ec3jUZk#t9qz<(31u;}SmyeBE#EKC(R>}pALnMxC3)ay zv0ErxCTA>`T@$t(@cgAkniAmgn+@OcXg@GerZf{thca0ylvjsxg~_0lFV+_%Qkcon z{QBdhGM_~+;R;~%jFbRn-`JIC>zf+Nq*N6(zOPVO*WRu(d1NTZD)CH!OcYtE3^-0n z42SG9<$Mww0*S@3$Ga@pt~tr7Dd3W*d_j)CwHHfmyIy)tV=3@3@}_~ZY{k&3L1o+q z%RF+=YQsQ|;2`-iLcmiySScmwu$} z{szkH&GuhZJ!Baav9*q?L=C>hE!9~K4juKjY1Pd?wG6 zS&}oCJ>IP)wJJj>qk+&U1!Fj}Sqa5xR|VfVcB*11Czi^^n$-;23SfgRnaqNu4BdgX zK2hwO-0jOXEw%9WC^nXwQkISQ=Q;6jThj1I^EC%p**Oq(G?2B|GeRV}kA1SsXzQ=Y(6C-n&>dnFCaIU<#Zg7xe` zIii0(EnU%N)b`uWg`<=)4m`kwW)ol4({jAKifS3ph)UU%y-u)(v&u>U_)5KU>b24+C1wo)LRWaY}|s6dZ3B z348tkSOxwjv3u28TNq(?^~e;9JFU((LsOb^kaj zQ-(E^qXASFRT)WX%1@ty{Pmn{XcKhZLS;P0mEq_6mHNM)*6MZ8f24kK@R^iy0z0OU zMWWd{NsUcMFo&3JIL|VS@p8AI#EW)^apifO%>Ju~NmHTvJy`cN9Ui1b*xN$iuhcuAN+gw*3UIwrc!=AD@r!F)f8IvjO z4Wq8PvZjRNiSO)vxCc!NWrYS>&%4;J&=WQ*!~=6uv%pIDl<%#7SU^GCBM%k~);vu@0s3csEtb);;7}5j>r# zlEl&-=}6YChiND5*^P`(k!GfJ`f{lc2}PF5L+g3DVbA5!05=TJ$;D;Qwpw}a1j<>I zJnRMK7W*|nBrpfE-@6%Du}-U13433>YGpB#l7#l|!B8e&oTf6J7Hy9Pojg?7EG(mT z`4V`JP~RVoP-OO2$M!(8d5?{hwwpC7We=os{uHx=6YSuCg*p4yQfNPVk;O8>$a=B{ zQI%n~zbE-_n|rR*$1aq+K$&Wqc^nO0Phbi6!TETYY^+29S+9Lk#ih+acb^fHD`oDyK!XCC zlo80bDHNf3HM&loQS-bD>OMkw>3Xk@VFpZPG!pCl9@^S?3L{5nDol+*Fkf7tYA!db zH3(%*WgAkZ$h%zvh^REx-Pr|YWkPz{gv}*Fyx6gyDjnwQ$~QvM@lZD9EnO>m=A;{0 zJ1v%(DKIIiDi|5c48$H#4t#&dT0B-x0Q zl^D%*DRsJ4mD(k)34gD(x1gS6Wo#9fUD<4?A{bo5f5Em0b9nkRx7op1roZnp+kxdU zq1Lt4x+_5aC{K2R|MZ2b?`dA$pQJ4Q7dbmoaeAG@OZX3|M2lZxr`Vg>ovC4!jz~hu73>!eXCPLnOe%Obz>G= zrN6R|PRV4-2WH=`HWoWY7RWOh#Rkcd4e}a$66kzP5X_dz8b@oD&2>^(c|~GJ{;XEx zhoc{WGDZKPeVXXQb^}&so+FM)zt(xEafsYH&VF6$b+~kHL+q7nvQ-7gU`4fhUV5pm zRUf4s__afU9q=dmY`~smH$a&FxXLvRH(YHXHdWLU%3@h-u|)eAjzTAGJ0oK|%G0cV zCeRsC-eIY1zLWlbc!&iU+u}YVNs!4TmFexrgBq9Zz;cpRpiB!Mb#ne+Zldl0<=6q} z5dm6_Wl&hsU=C0qJ=L6zGgZ?QN# z5tL8Tm!xEJpu@Zn%jwnPirc{HuI|1_r=7=o&F5}Bdc#h!Q8t1%YA|^MO^7aSR_Vrr z>lWp}u5Bt-v5UY7ti@=wMljEkqza>gtdjKVHaVq2T z7RmwJc3UYCNq2KqsYjNePF_7ixeJty$s(0UezOLa2XQ%x?Eg%qQ;`Hiur-vC$^dK* zprqtn49GVj2HY`r>3hs%vcoZyPrziazhCAECNFK67hI4lfU@r!Br}z#p2}L6H@aBs z(u3OmsAwx?D6b|p)AB6VtR14NzKdedsANr=38s-aAzl?06-K1Q+*u&v2u4!~7$-F4 zRY`XtQAbRQ(4Q4W$>kD6%IG#Lb(EHe7ky|rle|fZ;u;}*~ z001BWNkl(vLjfq>4ll0Rj;x2BbeSqH_fTPSkYORO?H0c&oymrks7z%I%rZeLSD>6E zz~xEW@_bxS<{SWhI!cfGUX7Y?{3H!92r74DDetulW$IF>rE(!TrZd!G_>5#=vTqDC zaimV8lnZRF?d8)Zz&lJfLYbkAWmJI4wh(+6Ob_MF+J$my1Z95)GkIDf8!mHvQd~w4 zQ>DUKQ61ePn=;aQmb41Q!nz6d!)8+O4fLkHF6oYh6(l0<%|K;`I+e|QRf;Tpi1jVr zUi7mYTP%n5VVI01Pup1N0?`RHW~&GQkR(HSmGUY{dO=y%+T5XD zt`|dXS}R*m1s9;xyI9Zp|ABykS4{N*MYtw(SdvM8gS}nh#G|mo(%?nu2xd%9rWT4> z31!yFk3xAL`r-zZk5%0*RPLY3SH+L-LOBR6l!I__bwy=LVAr@RWa%qfS|nq&S9oij zUUhbMegY^Ls~kI}#Xa*i1~b_TWi%aJQ4w&L$tQsF%*J`?hP%#z49o7Wys6P+2ip1o z$n?Uf(!CW1Cn(3UR-9%gu2j}oMu$wSoP=reu}?jnbVmv)KP6c5%-_G6TN3CS%uwzZ z_e=}XkkHLyHH#E9qu*!2F_bqd**A}}b8~C0DgAWlR=q=4J*@1W)i!EOZixx+R`3U) z3_^Y0LGq*lhuYw6w@h}d1z8SAUT-gME-+aNseH_;G+dT+S<&L+xlvw^OztX_5z0r# zqN}nbp3_W19TD)QZ}AQ&!~Vjt*Ay^vwOYx_BZv)aa}?1SSAextV|86_0M%?=g(pL@drgYW zI4V^&h$zcWGM%)&s6*M|vNH|Y9~87qW@Rw9e40UzTN5yxvR?y$+#DpSX$ zCrE}ebAj6w8te6=?fRgR*fSq7m(e-qyX8B_QTG=Ez1)O<9ehpx~B}u3Qb`K z$XGx|8^>fGQ)`re-&|jxzd4^8%EhXLGG?bvLS?rA0YDj#ralLZG=%aApe#AYOoy@x z42ZYJPaV5*q6Lk${GRF)0f=UgGEl8E8Etr{d$<;*Sk6rNYi4s@T1~a%&tc)rqfIo5 zUQE{3koTKfYpyP9M1$C>x#YNJ^g3SjrpX?R5Z&qGSAe3`}^4p6wd~7yJw#tso8AP>gnxiI}jSEP;D4Cea zKfL6UwI3eZrW_yZnSx5n13qSDpx-Vm1p? z@M-b1C~#gUgfiJL$`B%5&g_I2gyyigT5#G=8UAU0IqM ziL7ILY+HkvtS?9^myN8XA=h?|YJIa^54jln#djcCcFjsfZ^F7rl7q{MGgy3Gl(_M- zS&`qYx7*DHmJXxETdx!Qk$A@%ny0h^id|3+ zWVl90>J_{N={)Q9nP(C2dBEiB^V32(!RXME%HyRAi`oVon!*U^RjymF>0B}`l`#Vg zn?wq(c#Xd@lJK+Cv9?nqIn+KneCb6&nIums_Bn&!@G?qI#bj7_oIY>zH>HWK>$NYHGZwF`z{?TJ1MiTQ)NsVGQ z;bz0O&m@WxY~wVD%0VlWwSBL<@dEBg(IH~PrE=|MMIek)es7?hWlu-hyPH%113~=0 zP9|aUlP5p?@B@(e$q&DO_QhAvUc7wy^2gu*fIq_Vz^Lq6m`AWQPi7o#Ksj)rEY}xX zWHKBmWbF(Nu+ncdR>0)N39Q#Hlylt;2;J?tL`SW zIjnh;d#(#^Z&R%1^8p-!S)}C*`1uU`MRz$kWF&W;2))#jNG#JUGZvSZi%WfRhHVO( z%0t?2%7*E>AB_!^VFKL(B~rq2lgfe`);z5!WtEL=%E1`y71h~HCIZZpAD*yYe)+{G zIG#WM;@OX1JpcUj-=01D>eT}l&i8eYNz|`H*#L*?+icg|!c00@7JM!*pP<_X3gz+B zl+)_7M3z%5YBg8X8wq}5VYxW=CxkK!Wq1X7H&7M`#h{G$LWu@jVd|Q2gXx$o1RQ+yQ9Oprm&kxC{hL!gH*`YbDQGOaTo%jT%c3ae1=RrSs8QYb zYtJWo4*espt6G_*a+iq^k(bNM#=vWGxws-r!cf{^r|x9Xo+fHU9%M$xBSDgM3ZsOJ z51XiuZuIg&6*5KR!7L%A{C-P5M1VFL05Fp1FwLnD-j z;*e^Ab*X?LjH_qSI*`m)N1T%ev&M049Mdp2!ICtGeabTM1uenUoQ;I99V}Ou@Z@Tx zyxwlM>xUN`{Rrjz0OcSwP(~)_D3z;yM+Eh^_bW&71+|D;OtJBmROVuNRCH(?amN`` zA+RQu$AfZc8&DW1*OjtA?foGpFP$wWWwW)UU&!H1Qoff9v+qqHnT)+Fwc*(GAze@s zx7&w%QuDDOB%2o$d=fw~F_qI391E&8raG6eG?)iLd8T?u9?2Km#j+lkmt@T*pZDN5 z*UfZYCPcX`zQVHs8nYQu;R(-4+PR%B+ORxeWhNc2gZw|-9jvLwy%3jVL`vct>`wuo z9v+cj{Z8YnS6{t&`PpaBKl$_f@4tWd(@(#A`pYlBdWsu1eKpCDeLuHH~DNHLCqVn8U?FA@HC)jH|C}XmV zW-@oRY(RNAEtLg^@ftboDr91#?^OMqkjuEiNke3dWSWWyShxm)CMYJo6mU4vGqIH+ za6*B$hF%q`A2J%PEAcrzWLC3Yt+) z2W4$bUz!5}8!t>tim6VE{*tL&M;7Dw{(JcJ<@Z1T`YDgU zIpddipM3t?Z_ggFJmT|ILOFDxj0Hlxe1)kA)wNIh&7YMTaWR_$$QsIq%KXGrTLy%( z$Nhn9pH|<|%GXCgxf*;;6;ncE`f9UZ!?gT~cN#~rlQuF!dEr+IaWj{vS|id#HkI`< z_%}pl!9n8FDt0m$NVp(&3OeMM@o0m4PQpavTW8%aQ%yzsfx|z+UTpd>;m@n;;Pj-E z84gSwe24_J6W}c+Jk2clL6NELILiTNSg(F@HC?y?9pVYg4wGGfcIwO70~}9Y|NiQ$ zmsTDFjDP+0=bwLl_wLu9erZ7YZ=e1GfAQ{`4Bg3b~@3OFjZTGp)vgmi}C;d@BiTP z3n6_mdvN2)lV{If{QmOymoGsk|A{RA>D^CyG?C0)hVk?BKR#Ma>cGlVg_4>w=h7!8 zhsGM3Bb2eBZ<{k@`jw`wlt|@pd8PAzsD~g+WyG@WnpANr8z>K9vj`d`eeF>np&ZmO zh)|v|+N(SxgqF#HE0pVEc@iv}9nP)wYZlN-ovA_T9 zqh<1&a~!A3@GwQrD^M1IWK68vtT%TOq2T7=2B8CG?)geo_KZ@F#)7i+%`Q^9m8JW) zVZ9>{Qh7osS3=J0en%eVTCHJQZEa*MFKS38>WPI(lNRaDEK^hSM@orm5L8 z%A~<>#$4`-G8jwS;a(>UPYGtJeF~|pwV@E9$y{7=`AetP&oqy!v=@SldR3qt*d7WK zo(=SiW14`h934@&iX$Vw_FJzth>d8b-voS|hubg3!;{L7P_D18^YafdESRS!vx%H> zp^QSA>fmnHcgtk1jR#b|;-(A+%0y*lyW3;Zj{dK=XJ?G&vtwSig~^0$b7(1{984#b zMI{it)F4(UYZ?a=7XP&6v!upeP&po?b{G;8>n73Ct5sgu~v-BAX2;)5)6e$24=$ zNcJly0Y0$=E|l>=DMp-yl-QZecbLpn#&*uYWB-0j62JKVr=KYFx(&*ozWe0$119g=x7$5X#_{0;mdH9kiCUJv zfpWR6Ba;!ycO#T#S*VU5Z-BDkPDvNr63R)$y?rCsr#vc@L%#v#D*veR@kCUv^u`Fw z7!p#5ytnvm&2+~W%cKWF6aQ^PzNpAo>#1OxX*f(q6=El$fAQ;9^ofoJ?m8jw@zNmK zLOB%G*n}y#>@Yd3Ls@Dh`?U^>({P!qvcs!XpR>(teSea-)1qy~j{~Vt<(5J$v!u#~)ul2M{BZKl}aFv)^BS z_St7&eD(!Z^ZN2jOo{sCmz`qy*XIv51pDpVjjKRKi!wnjzrlhW(-*I_54iK>h#5)J z^<6XBQdx3e;{cPQw(sA+e+$PNgmOfE%PMhRw`a2vpiEmC9)jg;2bBW{;FD0f8VO!9 zc~N?l+hI7iSk}9K7`jMys-+toPK#x@9L^Pyb{1*Xly7$3U_uI%Om1{*#DBB z&1FXq)>7-WP?nX&YFjOb<0H{9c_}MQHc+l0d7?X_EsBz=u$o9novbWO(r4Y0a=al0 zJIEn+rA@&yR(xwXBK!6Irt&{#zrzps>d7Co7cT+7&jG)m@Ob&`8BqC)=g+_3yr`dl z-Gk)6{q2`Oe|wlne*Ye1-g>*SVi{M4aG0Xb&K76P<;9!xlSt*DMrEP9$!+e6$zg@c z1ZBxk-mWh$j8skl$r$hzSC~9pD9>sY2g0gSW|Kmb%HcFr7IvpMO1Z3ts&%q!FP@Id z!tMQ2$yJu39PLvX56i+~vP@kjFZ^9&BFlm0;j-q;g}Wsy4UTPM-N;;aE4H*j*|a#O zczC=J?mrNtKdyXdY%!74?Euk85tx9>%w%#Hgr@GD3GdQSMkF`a=TY;pR&jq}4$6kf zZg53RD0FYf8=jX~>EY8lZudf%26FHTQ{kp8MiGN5)zAJ}viM%?L zu?stmJXcuxI`XQuuW!$;hYMx5k7YovOWE8DTd6!1ltWP~F2eSI@C z+MvmAM4Pn{ainRK^Kitv8}sHI59(KBR4kWJ)?vl&2rE%nZg>K5d2}X&P%c}X+hOhv zpOxzQ1Y+dJRn+U?nOVq|w7n^A2{Sn~4~pYoF=9FOokx2dF4OCoUCM>>U&1li0F>{o zM*a$Z{0>aUAFn|vlU#oC$FtW@UO)TnGhH+U%Z5A$G=D+GL*9M57s~HmJVYcTlM%@1 zvBe%Jf;L}aEAzoUMg14w+z^(jmHO%I#eU#yquUc9nX-``7mp-~8W_1OTqp;{`Yrv~ zyxqc|dLDelWF)dszIOC-|I6Ulm@H@As64(@riO_^)GL1SF+sNQu-WZ;WT9+~=&89a zRfF-4y>~PyhYicM-hPc>cMaGRnhqSxu{1%FrR!E0b*v924Kwz*Ob#l_+*y+t^+c;A zs5zF&AwTN#D|Qr&XWO+y!Q$Ai#1quqw1vkO%VSQUo>gzwq%`J~ z^8Hil^b}fIG~1n48ninn$Hu)86WDVWZdX%kgI6W83G+Jc$X32y%L}O>sYf0**=K5H=zwVb9erlg;Gz#AN6|3O3*>0(2Qlza>p1G%FRkQq1C75MX|wN zlUT5KGuci<+c8YdH`ky&{?W0{WDQGwUzo_v5Xrua)Opuo3zRD-_xqHn{CYM+x9>Ae zWc=~EmKX(G2C4k}%g?^hFy;YB#$ua4ah=UwQu)sZR|0#zd0(uy%8R2!0hh2Kl}@6d zB_+K%K^d70e;vg)C!Cw5^7Kqr*x$+XiYzPAy0?q-VF}8ifinDIY92HdsVI-u*uW9% zb^w+|WuqhOHIR8KDDS57=uno+{ZOvjuxstE{qZ1#->sp=1Un4U>i%DXQPVIO3Cd*4 zuTaHCfj1`LJDa2qJe~&14e*AJ1-<+`n6^JEmE}$*(<*7XB~JXcsX;XvlgpKAS7qha zRGrLn>}fQa9MDP0w~0{3hR%O549b-_i?SAbtGQ-OsZ6CFkJ4$sA(5ZiWGH0w4|OdK zOn&hhK>3R=o_|t~?+MF4?Tz&M+s~iBdRR=3LEm9ZV5Jm%iXtV1&Ys{-vB=~iAtn>G zyyTR#WB=In^=FcJ?$O(ei;Q|RRzpNeD6?UR{dN}0fkG@}A9i&3nrr8Ku23Gz6i5TGE*Dtc1DgfM>dR{&Es1w=g*jS`H}y2?HN{E62JTdzjpISMa_#2c;3AypzeU zUN0jKXni^+?0(>^rlFSy_#IFl>0(z)i1xKwKVj1~KzR0wg01<-Yi+rH;{MY=zIyf& z+fiUPl!fw_SUu$DU-k**zy0mq1B0?RUvDlh3K%P9@?3k9m((eCj!e#qEZ0nq^ON_) zK1oS9fU;sJXGH-^y8b|i6zH|oPF+en!Qvt1qo#5NA7Pmry7c47D}^#J`FiO4@50)X zP`M0S5qqFKvrYVX2DAr^3uRG19fZw!IGZo35>p_K-FM+AP_CBaSlGNQ_iP~Dt>3kw zj~G<6hskvU1xtNy^fjJGaw<1s%MLQxr}GK z&$u1MvloP98WzgbEowiL|Mu?rgDUFf%?Zjl5X?#&uQikBz+@E4S%y^hVwEH}wADPo zCL;&U*Q}I*%2^6ay0*Y!cQa64wn8~jo)@VKljA6YWr|Pa_3dybx7x2oH$govl+ErL z8hsebJuxG;!LatDjtFJpw|gz?+l-To?iyom|XYxFv)`J)8wdrmo43m{o zS|~G>6VFq)nwAf;8)rB3H9|Q{mqCrn;gX>oS}2DNC|f2olvhCI^YgO>F4rTF+!e|* z*^1@y+;kSnftAT}PaG$Ah7f@Xtit_n3?H{>3n6C9pWN#J@J)~xP3HIuBg8H_w*Mvy zhsmSd9(|=-dx_O;20k-L1RSC^o<^0mpg#B3$c9Hj_goexEG--_&`Xr5K)Y{@tew|N z4*H`BWziOPwOg<2JL616^n$VsTJ7~%CPcI*2#y719$3EOd~m79CuqGU2EUm7KKrU} zy2gL;`t^$+UoepWUU4a7^!0uw|Ly1B9#EhcF&VTn4vS>WdSNC(pX`pRV0V^>=r<7&wq>CO z{$JRsWHKm|<=T3bhj&FFMXZCoe$atl6_7r8^3{tMsFYutw5U& zZ&m1agOTS6u9izoW-QaMLLg-b$w+74|G4BbnXl2U%u1O9t(`@Vd&V9pht*=kpp#+5 zah?N|KO9+=RCXqr+*F$v`yuzWO> zoBG%90cAOAk&K`_lXYRz&`OaJtj1zjp6%fb4{1faFOIexi`I#R2Z}P7&DUY_kx-VE zdRG<4|iKu0AFjkn?9wxUD>ruOwS`270yYxXL? zz?7)ZUOsyTXntwD${30L{kwfs{`Aw&AC^$|<`IHuRWOlP2xV6&$C}AlNI5j+`k2c8 z$Ao2LzK&fe2Tk9lhO%#819S6$BBIZV2qX|+T;-Iw; zj^N5I_c^K;*$2wfs&-!=5QfjB9mxloJgd}0<%@F6)sQtLcVn_yBf>Ul@|R->W$8%Y zu1x0Z5SnXu+;$>%o!G(yPL^_I1f#@WW6|#lllKW_cNXOu)!Mxul>JsH|Al{-{?!WQ zA$Q$(lIO0k&lgF&05zA~+$=m5-;PsM3R9x6fXF{UGe3Lr-+fd*Wo^DjCKpAqlgb*( zf}pHhqcxfA<&;AP*J*LI`MSkXEW7_>nT=6-Ug$?$h*~Ub$J2xe!V#b>LZ^UpquapY zlTFFwqoBNF^Y6-JYehd2$}-r8@%VqVsgc? zeEiuUtn}FKz+^4i1AB+8bg`v2<70|ysW*3>%&aetxfPk93A#t=FvA3)%G(vaG87z40j{> zzv_BTFBTw<4Oa;v4LUN3|ZuEi3g8qVluZ?1dgb{zxY4FR+_3WBId}zdw8R>eW{- zzxd?KKYs-<|I!BKpFa8R;Uq+XN}k7t$t;uEe9iF1uahd1(W))2e)iNy2IV+jsVqwa zfS~g@H6Hgs_$eRluNIe=S}lhzlRXJcRt)89ioQP5I_SHYP4_?<9>KKokKvp(0+mHm zCU@Dq-0&3x<>3OgC4#3jlgo}{Mzjxw@)1n7P_{eo;EN%HY8#;L9hY>|KwSk#Gx-P( z$vsKZ`{U3Z3-)nP-h*Uq7w^F2U<4-9M9_vakja62Jm~9Wm-Xu>AU~*|Q(1xaJq2h`A93z!)RGVEq0H1oV?vFF(hw z%D=w*sYNRP^7Cg;9#BG*0uZfA8k0<36~aOpYe&LAD4DFoyfl*?D61`wiwADL#z?OM zp=_kGUf2yL`?_B`F!@rFSiZv8UhdxkOwMHvpYQ+~j{@bHZTUui{B-}riefoMbq)WR zGTKIB^0F_JT_~GvZy1!@f!wD8lPsA`^{0ob)MJ=zpj| zLU~Uuu}~hi8IQo^y+{rZlCaL?W6uT+CRbWUc5?L$J0HllkaOQSuUetp?;-G_Xg;6& zOT*+K&yy^Rl_~b9++vSo^a3>_{=6lefj;L-~ajLC(jAh&!2zt<(J?8 zOi~#KTd_aok9U8*cu>{6l($j@W2P|=A#CLkvQsN%TT|GIB8mdFEtIhg*k<#7eeqDK zoWO|DrR-rh3hH)RX--`2f(NWi88ugnt1IlPe06zwWt1c_d6~xmWq^EqGYXX9nU(me zvYRy;s9j{zmvocVC{Pxn(EzXWmhJ9){W)}i$GxWF3&%bf9MP_}T3n{9{k7`B3O986di}++@kOp^(r1C?ha)Mnp;(3e!L!}Ht4CSNWz zl6@}+CX1Q6QSkl#eRFetJ_eL$3JuYnjnM>UVsh*q?`42}LN13ec?>Amnu9poZvUy6 zY)#=0gtC4Pf;J@gFz1&-c?gs%g+tq-9`=XCSC|}jGyWfXLoG-SJE+1+^Y7l1s2tWB zi=rC|$76B}l115=F*uy4;4pb0lq)+`Xex)y9Q$?HfO2Old%Ct%qylbcLP9wKC})`Y zsg$RvB0eTqFHzQ{Bks^op1pqd;E8G!wQhX(>z{ujpWppNTKSis z-eHmyAo7~>P<1ULsI!iM+%8FiX&=dxy$XeI; zCo4=2h8WV*%8IB7We)XnYRTzK);Y*e87PBPX00r8m1nt92<4o%8RP`Ld^$3dPYq?1 z{`ZMcvJ6-f=sb>%Q05W?7RqJtb+JkS$`4m6CtO_<>wF`Wv$PaMmzK32Zxk5BA zLD`_wj&9dN44y|DlUs@0Ed(&I|7!@8D>3k)seA1}+jpe0Uv6sMo`b}T43ve>LRrNi zm2*%E`8?Of9yw9bADhV)K4Ue`AHI6^?8OU=^m_K}t7p%i{r<)C&uRSq6M*y2KY#M~ zKYxAq?#~ymhIDL<>HKk@s9b?ECPWEsy!I)^DWjmU3YCl1D#;$ORMt@DQ50$Oux(d+ z+1MpzCVME7Wu=&{TZlo86z5ek8L3?K`7hjLLmj^&`s70Gun-P~vZ(XeY`Q(B(!%7v zM8sfKzX{|n+kYKLER=(uO|xVxk~#Len@p}tGRo{5#vv)2)hIez4djtbX7fp!2K$HX z1j136ToPG0HfvG-rps+{Kt3QxOjJVJgP;=T)sV{OVF;)WPls=xdz#8|p86p{Irdae z4Qsu5zD|X%4TteLXw{nz%PyZy1=J9eN9w;@fNJ0Cw;=2@fjIEF(Ll&=<7dVeyp zaPB_4;6|fkFquC9%DtFu-`O28xw`eiZjcU$^s1q_+`MEDCI>E)hd^0S!^#poMve8E zhpaFee(gSmb|Q;PWy?@@WU>tr8_whgk$X54oTz-MkG(@Cu@}r;Cn1BQp{$?$vJ0c# zGdizRSv?#KxG%x7X~Gv3FxCv%8p>UZlq5uDGM*+9kEb~WTqhvMsG*S+%6^`x7)xNB zm|RbO_{SH|naH2~{rP9V{V|Nm^BAoG@J_urx-V3grj{fsWZ~MD8~e3hO(Cr zfbw7}H<{csQKQD>EbR+rF?ic;GaK`+iNW=0&qyz_;yXBYdj9mh9KPOn{hnrnl!tQx zgj+i#lwCv3ju(e=xInf4n^=4dl=U@fJFdvCk?_)dl1DMwW=`s65~Alim4P_Yc;Htv zqQfSXnaXZI6oN8#rR}htfF=eklU()^Y;BdZ;cl+ho41>Flxu5hk!bgGl*~>xp1k^< z@}j={E5 z*^CI~g)^pSvZ@#>TKAl?^LPPJma7%Tx?L?UdCP8#q~#OEvC~)D2F)|gyFyvTagtbt zJmeF1c7L>A2*uWOQI!rr0 z8I_+r`QsnYF!t;7=P#Z;d-m0apkLtDP2H)~3*mdX-|3QWfQz1~j+W{%);l0#_b zv}H>1H)e(PzZjx|#!CN={JtQX zPTrzaPDm&#HCGHa&wE%w5<2%vm{ z!Cnd6q7j+==FNu>Z{D0^oYXk+%e$aFZ^uXpkPNKVJheshzk4AEz*4R7m23am@H9Nu{DQZFnuKi*t4VzlImxmuaJ99RDfh$7w zoQBSnXgeEpvli28hUjY>ge;~ zmtt7O=tD;9beyN@cDsGMy}m1-*Y;@MX2(V}ExtN~+!v6jr=dh|sih8lFHz(aat?5qEJ?U7I zMgI5{tDb^fumAkd|L?#4?Z5uxKmOz2|NYMf(~4e;y(E#T1mr;T8854pf1BnD+9B* z@P!QL3-@9R`f1~#?6e_(8O65kMLY$Eym_#Js*{~`d6s%sgdKKbgUgz8}n3<4+_H> z8{Do=jiH!WbVq9-GC+B1?pv`$$9Om(J%kG!jLWmpk3wjWY(uuha$K{O`F?&TY&(Ln`Ol39{EnD*q7s%1sk9YK6`d=H>O(g4$Q$^h#i^0Lv?{D4yPe z*Qcl86^`HybFjbQR`3p#iOHJ^0s|V48p@9q%9!*BrGNr$-%<6d&%6Ozo#Fh8AL`AN zh;Kjes(%z!PEYmztWDlAUyNknfK6lfr1;NfmP45Hw z+t^+le9mL7@kJcs+euW$`)1C9&kh>!O&iJrjC1eP@YI-3Zjdl!Yn>* zo5y^FGk^?4`283t7m@FUWb2vl+EmLNx&s*J1JIHPtoJ>jd4Jkhpp-+Pa$M(4#mA>@ zD*vaZvOfOjJf%!U$;4!^O@xjQ`ugY+KYk1+8iAR_XEM=Oiou)FB~#tX(wY@ zxTY5Q(zX`DE49uE%j1dY76ywSHUBgwVcA9A%VM)QgpLdd5z3=a!BDwGF7xHf0-|AN z%2!4|NX@!RpTok_z#Cwo9A;C*as%Z&te2jKg{zpF@L&u81g?`ru|y`jA1Fc%zJzM8TT*!cS?MEdU{1D z+fEz$`6DDF&@jmh;_|1{A-nc&Ffd-G8Z@+Be{{%}bC1fNjeVh+RPX#_Ig{~TY$9@L z1FyPlTjnZ5CQFfLUuzD|(e>J&OLkIS!c3jy&jMx5WLeF~?{`dI-U8BPkB3yNWj>Al zr>m&-p3m8Mvoo>Q;>7UXgTTmBkWL%s<>DJryEDkLNn+VQi+ZyHlbainO%Ti8Y3Q4` z0+UDMc^{r<+`p$8AGdOpB{I2K zm?R_(WqVTq&Oa`cVQ;iya^ucqi6*wVRestZ^a>*za1m*M+!TjDkjtDo%Nvt=3(K+9&}g1C-I51mEAUegAmpR!bFL^dj(ZIPHIq=(R?&1c%z~R!*O-R)Vs` zchgKbU_(G*4ho3l6PYbrCy z05*32jb8}}<+H8EguR&`m&tGR8S}0~sNv%NZmigDPl)6y%j8COpNAfh9he`9WoNhF zrZO5l)gF`=2Nau@V5w#D1(=+x&@x&5SnDknN?`I%oqiH1qjiWx>-Z^D2I~=^X6SV7 zLbVP@-Y9|0{5OWl`8vI!hoO9b7H%R2>p@`RIkY&m^fr{<_P)dNc0?E1HP50hd$%AP ziRD#q#G50M=u52$v@gMr2`J6tFgK|k86_8R? zK>lyaO|FgC-vasp2xZ*i9P`0OlwG^lrMnsKQI*YozawEi@vsm{HxxP@ldm4V+ zz@9^~?um?i;(3A!9as!ZcFAu;P(~&bjm;NPS-y>+^0}lVU=h^H8YuhqvH)eNF4YCv zM$yP!gUT(tid7sd9Fw0|!nx7>DF=~BNYhZ>2p}@ZItuP=+Kg_%BZQr7Q(7dArqAhA1a=!$_itVTbu21Im~1goa)} z1C+6Ym!@)6P4SHrxyE=Xx8^sc>8>!sdNp2m<$7p;Veos|1e`aAX#ODYtT_CW5XMF8lEeS7E= z+m@@Jdj>zwS+q`LK?}5{r(xQ+tqtWV0hI1Cr!09{-pK<*4>?U{nD8}_nf@0-lp~=W z`Bd(=H!1b_Uc3M%Ybe8~VquB?FyDyES(fW-0HLh^ z=Axl|((mj^UxpqU0A*w{D~c%Mo3B4khYHF8ehMZNlrziZs;Z=%K38o%-?+p?k*J>r z>UH@w3xkdHP9prGlaSb<2STa>ljK&4Tl|z~(K?N~5bG;`1SV4v+vaCEKqea~Ljv}8yGBnne|P7B zerv*sb?Nq^KmP{OtB3SSe91{jnyLl;5?^;Get@%RoyOOl1(xx!V6Pd)7Ag--O1dmC zdL0sx^>32O#N-IOkA(RbS4aJvhlO%w_6kC|5X-A4UQCedUvU3^fRp$k;ub&1S+ve$ zqrUDm#MT8-Wd3!6z0c&)E<29NWA%8`H5B959ia^2YgEb~2Fj(T@-!%WaCTq41y2F} zRX}|ZR)DhER=xsdLuIeGX`1qASS7PK?zmnWL>nmAWfuBO7Sm>5hz?_?#uk&Y0}3R5 z5s_Eb%3>R;Tp0fXS)_5HPGog{(n|S+N*NQtl;g>7#?BJUU{8~0_AX}2ZX@jNP;X86 z@H5{TrPS}oounUUpQ~&ZX5Yqq0Wvw?F^< z6H+fQDe^h^ypACx&R44hP`lp`)bHcx7VI>YVi>=qy!!D_p6qSc+f{Dq!&;(J{y5>D z@?Pw;XrByamS|yWRI-N6b0G5|%R+g%1fj^^#Ior_&sR^E3z{ZujOmIaaRcTiGL5=a z6Be+{oCJg3(D-XdEl*gYZ4LC4 zK}9?Tmkf6FLMgecHnJi)MF1wvelc#`^4L(34Y79!%I5z-_`2niGlR)=Mm)Ba%FRBq z{sS<%+r@A>lrw>qPnyjq*ESp4kAPBEsbW|vrMADJy!bfp@`lRWd_IiYX&0XuzYcR|DR1Q$QTcb|{P(dklWjRwKJw90&^tJnn5(8g%6yDjHF`>QsT^@g0b_;CFQ-#g z=?_{{)%6@CW6E)YkckskWZPZ-1}&U4kHc(PTr0rjZ7skrGNUyNbf`B)@*2z@mfeoA zfwH4Ay8`7tmCgSvsQnlcdHP(#m`M=lMkW)J3yfMLl>PLxHL$E#Kmzl(uq3&G^2Y&! zANy0L&^IJWJfWQbp2|j1v!4|WP<9OnmL#RTJ-r660hIZ@z6NifNaeuO=)o#j*3aFp zHBbuf9gl@_9)8t&VDokBf!`~UM=)6$2Nt2HeUXpWW6;k@2o+}fSElr@5m4sjT|p)m zS~f$@(Z7Ntl+CsxSF`;dbJqnS)lA-OckA^*zz7>q8Itx@c+vV>mZc;^yUcMJu$)@f zQux|QO5kTTHk#p~tr`ue6{?X#f_ zS4dwj4Pb*(Zm3L_vTit{1^mO7+E5 z1^ym!Ng4*kUt`1!c8|tn>KMn1uLaD{L)%v)i3?S0YUZ`gNE6F$IxXdc;OPR3knp?E zP_8wVGjoKy&|%pIrBNwE>N8kZwL{hRo6Ho!2SeCJUC(85AIX7zdB^0aSEscY%gPjR zA#Xt(f9$Ih7<25ZO5Yi!s54lknxK5He#fuxglN1C-`4-Cb8Fm3CTioJ5_*qW$~-2A z0d}PqmrE!vq{-PQT-#Id1PYxbda#B)JwQ1$RBkPS85*v`_E{7?2FwcGQ09o`%jI&0 zW48M|?4aq_&}4wGsb7kC7IY1Bc`y;ssx3 zw`kjY8zv{3$>k3FAV3-$*lNQL>jtqihdr19^S{qGYXATs07*naRQ&XGxd>=-^Zh$) z!q>Hy${|#lW6KS~a*A#p+!i3k`d8|pOjLGA_HIr;-3x?rId3<)K{B&TAot=L%7|&4 zq2hJ1TzgyKyPc-;0b6IE4kwYMwuX#3Btv9I<-d28?`uhiW&eMkbKFMBGC{riMnaj! zK;ozjP?osM1F0A0&0wEl>+ZXK%&2{k%0~2>(EfS$yte-@=M%aisESf>r>{j zmZP}}KL6DPGHG0ITbo5X6)1W^@HJTe%Aoy(Xw&`j`yVDn5c?KGM>nA)8LB_9k1@xQ z!P-22IUWnxR^~;q$Z^pYhgeVLSZOHNWv75Sw#dvT4@*8lDL+4JiH`04K%&2{l6}2Hy^2&GX#XCQ7cMnrTieVoH^!moadP)k zX%z1O$)^g}^kq()VbjNhdFii!3b5>lu0k7Y9;Nc^M_FAoby=`PduU}=QW%mW z*;e2YJGp z>ajSchmNumU>D>!ey@WIx0LO!YX{153tI(wrkT9kjmnJ7b9^Hpo05hK-{y6xvaqq| z#ZD#<5z3MKV4_bl6is!6Si#}bKskgO5`GoRrhk0A>cYc8IXsv3`TqT@afD!A>&5h% zH&o7N%;IvINMG@)Ga3HCR1Us&j78f3sVVkqy3zn`T z-#RMeq*Ex|MFuEqD#MXDC>L`)O#|Fgetm8F!<7`hwg)L?7+ajDwjv6s%#q54zrBSU zT&V}oH1)V_S{}!R>4rA#N#W_R$C$|-Gm9dBJng#)rWfX)LlP^}LyFnctI}fsMK%EP`QXkFbJg;;GDwmGQ z7_ycilw;1&9CzXHhZRJ<`^z@KHD02Z^&Sek?)n#%f@-UOrnEbKFQL$Gl zR2=%@Ae4d1lz4$}6%S1v`D$3koRu_*7 z#*(`g0lPMj*E{%cS2`%?VKbXd91f6tZC|?fRwLL{_VG&Ds`TED0fG4|LH2AgW-1Fc z$DZ#-8#)rXeMw(*HBg_>F6$4L8}IRmJE0tL;Bo|Iyjm*b6abJ|0A-#~g|el4a1W2Lg; zYahx0=|C306I&Ph>w&sgT=`IpG*BMiG2mY!Fx^mmy0kkI-40(H&EFuob1@O*3Vi{U zUtj6t^Yfp!bsZD0?5_aIcxd=Auv;Tjcl|_D^a%n>nPD-7qrivFV{?Va=46jyiLQ}M zBQV0}LdZ}r1N3U(0t!7BEW$}3@zNgWK{>OCQ1K`z-=OkYV#Bjc!Q_(P$CH&>Wf|S) z;u#w5)aMf7*XObW<%v}GpPU3C4l;cY zO>d~O_M+CkI7|B3RBrk!p-{#x^5?(*B+s3NLDe)yZ^yuFU}`jDX$}F6{%Y>kf=tFD zB^p9t+*w&9J1EnPkQTYg37Zp^3%sp$ensatb;drFF?`*LU8mj@k(y=}&ChuVlj-~V zT=o&YyfTX03xgAipc{wRhC^gh>op^l4V58|S3mNh{uC&`J_O2WNr!R%9PAB}O)Q}P zPeSY(=WmHj9uvJj5tH{d-1JO^3a5W6xIad>nlk%AJlx z!R7{(^|#@b=*7i`-$>n0*=Joxj4TG74BPblZB3JU8@xmc8y;}-U-nCLcro*R6X@!w zSC{$|l=+#k^#GKCj=2fTEzB2Wob`{EBUfR<*Lr9VLK%SRnpv1HQ%mQR4QK|KvZe*E z(^e>{wOP{6^>Qa~noBNu@;Ln%*h+?SP;esmdvxmAxw2AOW1_+h=m$ZWmY8pFd;*l$ zr*a@wh)h1_=rYd|!v6<7pCe`>N4cro+A2q6Gwm;1tnt?eg(vJuLT$;+YKPt!^}E|~;nJriyP zLYbul#B8X{Qmdc6xOUM(^7dAom!-Fv+=;tbEVmaEw&C+KsccKEScE;mI#5*JuDgZE9C|M!3YH@bu;sYEbpC`)OQ8Ae5~bJ$L< zfXRoQ0>&$}tZy+nb3!)Z9P$D}pTZy(cRT;DAXnHz*{y-!q0?LYwWSftW=DfjnKW#s zqDl|x@ANAR_oMUKj8KNjeaUzg${^$hh#6|>iorKQ)Vq(}8moeJyDW0}S>)LyybG;k*UqYF~ARRxY<-7AQ?-2dkie*uMJMpFpvP zVTyj}K9jd|a}1OqB%|9N9}DIFMxljr22p$4AUwZEMo5~2tT{IHy1fx~hWJovpM1nJ z#9Gu%$yqo=og6jWFj`FQEWp;w8BS!`y4u~1$a$ExvAjQ=KB|L(@~(Ucl-rPe z7?$5&9|h$oP9XaiomO&&;EFloK?C_r^|<$iGGtMNLXQhDJ*_D!rnjy(L!xlq=p zRF+iarCJl}O(>_Hkc2E$NWB6mW1bsAIRg34??SoOdhgm~-Ua`eilUlLX3)<1){41M zhDy!rTukG!ojA_=T_5SN)PnLIeVGn~B;2*@8xBm~>gQ+{)67CKlaXO^tQ2%45+gej z-GOr2nZB=58T;Wa!?Ff4V`vU7Ws0k0{d|fnR3UDV>rtoGa=1h%$8AWE?v7Y6z~s5< z=1REx38@kdl{Jz>5mVF*uC6F{Sl)m}{)^)a9s2QZ2dE&ZX!6lgS+?zjd|?gW4g@AD zLsov zbq|q`qB6y=Uu_tBrG2poa@Ms{77|HA+(M;{Ob*YDb=pm#3`o{wDGfcf9^qK5rkI)g z!!DHL#8A2R{n>Djx%)S}orQ8`zBp8;_LQVw-(`An#5O4F4^YaLUKs$B(+FQ!U#%11 zbBCuM-?dqFw9Ky|!{Pd-vOhrZVQru+vmAEuMWRR!;deba}nP3caY4u`YUYsdE)NDJ+9F0v{9 zTq^2Fl!sJx$60h^Rn>;_{S?7#kAlpqg;WNKN1jfmqLc!#`H z7|#3HYpG0XaUjxdg|(Haaf{f%WS4xav3xzQ$L_?g`3-*ZxWnXlg~WgJQ(IJy7%y-u zM5=6$4IPom^=EnZzCDD>Zx+hy{YaPuV7)J)P&UV6B~v%2)pH0s`RqaY7L)4?kQ|l` zKEd#oHR;uMMH^Y;HJpJsg;RH>Iq*yWFF=msK|i+I2`Y_(g=lNOfb2vQnASjkKkbcB z*8iO{m1Dr1Rs&IPE3TmV)%V0a85mCR9@^6OoGg37XbciLS})dQ=c%)T-vd-bRs{IF1_ z;10|!;MWDYP#057gokGG`3&G0!(?!df{6x@O4!_STR{%1Q<$x2P(_kj^B;7%V0_)^(3*b(c4Vmh9*3HdZ6x5^^+g&WxlG62gO@d z40I<-XUDJA*5tdGJ+>Mqi2@#N5Xx94o0{|~)$~DF>L18pcTfKg;j_z8(Id$gAYgtck~Pf z#UPjZkuv$Ioqi2OM!Py|1hW#D4U|_>;UW{X-cJ~gP(8|-8JRezhEkq^%IDpfBrl|B z>HNrdJ8t`faO0&0&y^5PD5vx+0F^flireyT=uLy5E9|d?t?3AxX5^HFb21rWr_%u( zOtem>;B|~A6h*oJq_5y7<0mre1tJ6=BAZLu%5*7AULyJL5tLy%$--?YaicOdJQ=lC zEpAi!*62F>?!B{az_4XX`-=5l@Z=9ZO#T~s-id4r<)tI1NZjWja0M<3pCi%Znr(yb^W=%82ECHEZab z;sY;}GEI$C7U7Qi#^mbz_XUC8?nbABG8<~;3qY9lGIn}GB$xI1TyWSa2PT^xQuAyU zE=Zw7zI4zFuVORwscZxU_$izqI$J^by0f+FxzM#EUfy^vkjdkeGVARjJ0{=VL*jiV zuV7olUjmEe;MjD~E;wkC&xuwOl3!a#0B&_;hqD@%pAhydRYL0_9n;2cM1{z?+3roP zP{ufNeJ)|+v%FiPTw{7xX_<^d8S%@#-0Mat+YQ#~8~tW0w7qT=+uVs5f-)i*hK9=2 z&b=yqfQ?aXRwcr>CyO5z<0gVaA_QJTc2!^o>ilgPN>%%Ztv|d}7?Z?$)pz({|5L2$NGALG6*cqo+v}hDFl1ikm0s6`vdH4Ztc{Ji6AEP; zy^f^KwbE2Rk8ll<4U>0zzM>ic-U#bMGA?Uti4R%49ZZy}ZLWlE^yO9Qej$j9L2s4p+#)Doj$ zG5Z`Q_x|#kxQveO;OXu*l=3C+jsRpI%1clW&t;19M?@|Xl86b5Wtz=Pmvdc~BiuD1 zOREW9?;_U{B4H4>rd&?P|64@ka>H+l_ zKXe}3vcuwtyDRPpD02q%zKG^h znYF1rm~alEbbj{o_Db`XgT%>@4%47q*X@WO1O*0H1pWI+s!Hn@CzYp$mvU3=3K?JU zenlw1Aa@Au@DeMO6QRh^JRj#5JFN1a(O_C&!ZlUIyXaE3 zOYMprp}gCn@K=}BqSqdj*$|Y|*?~<`4QCrR;uItAmgB^h%E;u!OL4hvW*o7l$`fP% z6Joja#{pAdrtN{b6D}~GvZ+T1{|%NZY|mF*^4 z+e#Rz%uQKh0{tR(dg_KrUD{f)Ns|+AW4TXd+oHFrUp5l}c7A93jq2A1Fh^IR zY^Yqep$t@JGoak$kwd>BI|nBzyRxgyuTZ(F&N2k4JXI;@NHSPpVyv<-P=;(}snk{_ zO{mGlZo(T#&|gXW&acA0G^IJGFjY$q|B z%A2=W=M%rk08iyM)0!cawSIylgM(#fV$=InRd?b}4!(!ZZE{?`IfjEM@%H?hwR(c_9D_;{n zbr@U=AxADe5JTMFuaJiRfT_(+<(Zg22GMHrY8wv7!q#tc2g*Cn5)0*QrmvdivZnI2 zm+w*eT#{KFm>+^vp8A?jWFnMvrJ;;M8P!sVP^OlofbE<(L5Q|OePP#W$qZcg*DNMg?mh11Io~i!!Vf^N2rutLudVq z#b44aJixxH)GRyzEN^VPge=G8eKAj*Y0STQ9mr|FdfJb;;8v=X7a_QTGA0; zBG}~mu89oEE!66q7pRr#;+d2nl}ktnslXfF_)*M{8Fl1pnPZbUKA* zr?6Q)70H{b`uNyGtomYVVxiJfL0l(ngtFQ6rD$|KtMiW=l8m5SdrT(#8g#!|udPsR zT}KR)8z^^~9LIVttAK;VKf6G@e25DCnWYsOR4NVZm-dc~cBSIf~~u#^Q0*F3*kP zmIpI zPYsmu$JS-tVRF3u0q7|Y>o$^DD3?3omtNa)JS_0kzlqBaO!jg;(lB!EpbYKaX>l4c zc}6DdmQy0O88v-_mG#lDG5^>Yoe#u3$F;uP%lU+&o*+O|6 zE}oaJP?`0s!pwOptp=ypXy?MFM&+;xrHbNoIvqZ$!vXzjPFgD?+ElBS<@UMvuEjvP zeKoAj0EbiR_wY+`tr8ab`VWO%Cq$^~Uy zYbZ18d`-WaE%Q%2yw2AFPqa*KnCx0D%%!rPR$rgI&FX38RvO74?|aA|&1944g%LO> zlP&WEhSXdKWwsNZPd0!o>Fs#MH9tPY> zhGsH_S&U%qo(cG-NrcU;_8^tfn3v7%qsyt$3}CrkDr}5AFo0davNdgoM&F=$?lLUn zlX92J0cC#JnG?D^BPGN(TYQr@gH&dI+bkRFPCfNLmCCtjdZ*;zfmiLFecU@qWlYyo zb>mPo)v3bf;I^sk(duknB_>ASB{gh837;uvq8A~RRTs*7jE3{ed0EtN#zJcigfbh1 zGNjT+^Wnt0QrYRVm>gd35}o0Wa>`mvX0WnF zECZL-;qX8Q)`FBWw#c)-l#umRP|7mao*5{ERL*mGxk$<84o@?Ww4bK^Z+-hoBrSlFF=?>SgM1Y_voRWrT9oYcaPDn4!$XrnP*DP-c^Ng-w3Rs!Y~z zwuUkm*Ju(KKxHB_c{uXVpmG2)e3mf$?vnbli2h%)|9eYSdq66nJ(+8MpLw-GH-mmTq_m!P$)wfH!Yf_M&r0n z;U+;%B_9aohR8VcVJ`~CG5s2r^${g@B>?4*_xF!IEYmKa!z7cqVB^Lgix zjB#v&^8Vl{W$YBTqdtK`3K>pMDYCh9=}-dp`3z%AUkRTIm$GLf>D~zr0Lor*{hFUfyoxi`W=D3G(hDh;XaP}XGmpBoP?u1gVdRnhz$9k z9DC*Fxv`=2S_O}g%DlVpL{Nr0yZn0)zD;xxX_T^_FZ4Z%(2H?r>xNQGv!z1WJufW9 z=IMzZ8nI!rR~Yw@H;0>mExaW~+AWNRSA{5dmeuHvfQ_fb1ICc`GKlN}>e%>*nCP|U zGCVJ*gPzr^>Qsf|0<9dgjL$1}gTzJ~K=P>!%K$8iDjxTiC!W`-X@%A(UYRx%Y!#-ZOm z+d&zqj9S?%`1lm}Yi?&BTL;8AqgXBe4aYo8)32fSsXXEq*eVwDbr=RhDL`^A!6j?r znO+VsBq?x<%WZ6Kw%f7BiYSfJ6@;?C-p2%AZd?Q(&g6{+6Wn`lHkTcf-SyP9ZP2_E z4-m?{i)2vBM`s>l8^RezaLfnpw*zW{@;vDe^^;t3N zZ@s37<>gd{4BDOtb;^vlPY237*xcJ6R)VtaFP%0w0On=CcV zGXl8^LRr5*XcA3nYI5pK!v^Z+8=>5n%C0%m{5k+A|1Y>%XP~WDRJ^>9@3PTm7RvkT zM6$3q#aor)&Wm>z8t zF~z^(yDX!&V(2iq^NtZzMlW;B-`#M`ObKO9P|jyWmoC*sgXp64kH|=?!O-AX7L%HE z_Qte%=`KSaen{qIB4_Vmqc4t(0|Blwr3%-b(SSw4a zgPAB#rl?EG%hS{pKKHbw?Gj}dzz!0O98m1M17&@FDMKnRzwoG;hv_vzqo0$BgX8d*0kri^Bc(;&@oQ*3$`U&8xpu4xReWw)sJht%>JB z86T2k%MFg3{$kB)PmkOQbDWg45P~zVs>`L)YX%6qx`_*3)i8NS#n{-dM6*oHdMi9C z1Cv?Nkie&M>_yS%)hct&(3PhsXtxNA0Zgl+B6eMcD`m2;9|+}7I}DW>n^&OR1l_Us z1)6P#vS!97?mNL ziBl4`ZQkadUhXYw>xZ=TWN!P!UT=eB>@DhxI#yZna;Tt7gn~5_IkwH3oYHpQwWBhw z91R#9vCV^p##`~z)7#TJH=lGUycR*(LOSs04=D|l^%zdc##|CZ7$Jk;${E%xN`c!z<|SZ+e-yZ3@7$e%{7o`2yuz zd)ijsSEi4G4UQp{A>o0m-41Jgs3GBGC>O1Up49Hw1+QCU#6UT6R;{yy6izM#;TL^e6cpu4gCRLG#=qL|FrgpZAg|eP@DSQoB#!j8-=Rp~Jg1FR? zCI;ln7;w|dA=qT))eV@d+g5D2(!fCtoroi(GCJ0(vi~?i zR(P0YLGTnjfBQCXV|kFug$ZCIlvB5CWJ${DQNrbmrtuBYGX)I5<05pa-`u@Fwj7K5-&Vj5zCMzj+&S>FsE-xl%8}e590QcQ**3rot%6ehX8AIW6Ji<;pFDR(=NGQ7vU9U2NHA|4s zW3qh&ok+&nfpwuA5tKjB5DJ!CdG_@5{QT$hOlxzO?bQqv;#6#*Y`0t!u-QT_m*sjv zn{3vg^2Tm@5>lEfq?n-0T^;bvBv6mSrJQ8BAQE$Z%dy(59Iaj|PhR+E88^V>SUL>~!sKj=dZoj7GEb*10rD{CIde zK4;y$(zrpgaSv%jIRTSKO(#7|W=dl8qw2o zB$k@W!6sPa7GT_k-h4YW7$$)?x!*B|t=Pl+L60M?(pOrK4M7>G>_a)lXlaByHLw<$ zzMB_W-5nPhGb^Abz67<&>QY^*{o%CV&+>ON8=*l#mM0N;rNWii#C_~|6y{Llp|528 z9ZKWsaL|gL_i6p?s+zid!Atsen8W5y}g?fN|5b znjS@*6ftVvf^y8ELj*3AVSOnRmIu#oZ;P6b+4+|Fab&_WoYL*1Wqx1gwQ1^Cy3Lw*s9MJNo17!wV z3h02X=RAP2e0mL@zb&Do5u_o>HqX7)X?&p{cBwQ;Jj$pFm}vB9$xbH-3o}#G{=nupN?W zR~m%Iy57}o&(DgAWN*7kL3}E6 zOr}otWR0ny5PDuk-(P2VFYEJPCNJjrLOWM}vopI*zXXhSntFkKMUF7AKfl0UA&=YM zW$>ae0Ycden}c+ED3uF7Xdg)7xgz<4qIh1tt^q@J0gs_~X#Iy7yO-Ahp}gQs^gK>k z^q9#Mlf`Dhq6W%wOpTjr+xST4dd7kjvxQO_3_W3f=gfsl=-v~QJwpj43CejAZ#QqN zK-nW%Y;&SfVG@-4<|a`*{dEiGEnL%9gb7XfHI$Wx^7{cQm-l-xC^%2N2*#q;J`!CN zhObSaSwmS!3Ob6SUELepQOa?A(OA}UQRyj@a!4cd+fLA>OGO2vXs`l9C_{(2F=BZf zl!vLD&VsVVG4>%dyUXrTNIxUL^Yfvs|Ep_ZI&-f;WyG>1$GRm@Hf87VG+lvmwEpcd z-BJO{VYs^iWt+zgMVWQm^3&v7-ADpK@=MoO9W=S4G823@l{J?2fw$7tTey-P2>Q81 zsReUmQ;__EIK~1??wAa1HH$|L6h^6-a6KepMEv{IbojbcnFV zwkJ@`v{qRs#jznS5-xypN~xsCJFMsJLpffZ%081Z5{#RqsS8@i?FNN3MRcGnY>m`a zC}Sd-Uboo3mIOD>ENPt@1RBcEf6s?bs(${=DxSt^B7Ds_#$ zKk6@s%i*9hyQAD=GS1M#Qn|`9V6%XF4=HD4dR>L`VEmfR9eZxOEN}^5+_yjbrLZh) z+H@U;>v}E7$p))!=McKz=3#(u^(zT&%nVf~jLO@fw3+1$%Hr0W$XeyVl7%$u8 zZgAYm1*GI=;pucj_sF%VOjG5tOJ(5lvRw+8k_(T?tOaFmEm8O*ploisabMNf5>fNw z*u>}_MP(k}hBCz)Z1(CO1J(Zc1v*o7+5;XJGP< z620{FjA>v{A^p7UE^ynfh8r@vbm*d0mZYHoLHl<|k|;|lpPm*`*)4R;E`iC4G%s&` zHq$5yrD?vXcCaj&M`hrNk;-nTCMu55`6A+HrKT>BsgcRX4UPhH44O4d zXc!2Y2-x>bh|A^q4wm7E$OC=1KHQ-18~UJbf(=;o0fY~7>N9v7%7foFLq#z^hr4+3 z>UUeM%Ra;5@e`FYI9MQ*<;n&~BNtx&sP{IdTppmrK# zOvV|q$K;&=nKBqCP&SW@dK&4ai`1iBPhrqS0cIMOLE7cAYYV(B*EW?Ga*+%xh{=H| zxNHe!@+Wgg#yvI&{$)rt#WyT6nQJK8FBfn8;RP@elP z6rIMh7LA6=g_qHHMkZ&Jv>>!z%{7!~x|TFdX7164RR~3kDQ3~`?x@Fpb<*HU;_`C2 zgs9SIKYHAM185)`r!vemG<(WgEP=w1xEX6RTS^Tn8BD7M!$t=-r;M{Gf-+nx_tO_G zQ7M0%z}EaQA*aY8xz))bE*LMY35r*@tf?%~S}2osZF0WE<>^_ks-EvbIg_w5QH@{N z@#dX}X!i#G$=KO?ER>@)pxhW7r`?~`=_mT@P+1_5@d=in)+q8$kZ^#>2<&(O$}3Zu zpq!QN*zN3FZ-UkXOm6vbXeLW!awefQgcyV}<#*?1KY4qirmcDoJ8cz8AIC`)Ye*I|nW+2{&|b19lnb+&2b;w6;E3)3sX1Cb18F3^qO6#Ty*9nRLsu4!(@J&*fK)dq!NNvL2OZmm`N^StnYOZG;XrMAl%gk)?#2ZAz#QX&ybk%js;ODu^n z+h}rHf*XrDWk|x>vhXVKaXa5AWoUwRnsOOYJlN{0h>dNCfim?%g)jia6}wcL$)KF% z_e+SOjvG|waZv=gH7sE%5;PV9H^md;cs!LyLV1|V6Qgu~&%irS{#B?fJSML$l;=kY z{Wdh-|4Rp;oUBacTF+n@d3Ft-+6@SXk{npv*-^&1;5w86$wK57$b@8svQk@=$|+De zN#@^3h&h<#8*ZU#jA|F{Co?xbUd(nbK-przLK#|YY>HKK`Tf@}+RO@ed<@2 z$}Y*|PWYOb9O);a;PCGICe*aVjL`)`-?cZ0K?aLPh~LBx+%8NOvNbN@6u*X6kp$(; zLV3QI*oL`ROw&L9_#?Ky2Dt9SmX$t~jZ)ro1-mn0{uIngGUKdyQNK49ytcEzMkg%2 zK4-+_EDtjUd8?(wjUl}tcnba=|Kfnp=wGei5>((9xcDnL%P-KM;xYxvn=438Os(~i zY8V1;9HLXx`v$NK8z0}HLrrkW?(9EsToz07{9z$?W6XXJ%Hso@1F(&XtNQ?5l1`cx zSlTPb;a8#jYfxE)9+T%c*jztM=-vhHKi2)pkj1N08RcMMhLsL%=>U?4 zE5eK#7lJhMyJ7PF0}?tF85a_&N zVDyOnWC-=yJTK>8VW4chksctGdE34yO$UmV(Z@W}*B>#Q5w{RQ#K@=Xmzi4QU$}A4 zD@3o|{8T_yEhi}Z|HBGp*eVGz>+)#^lxb(is8wU<^~WC#lqrlIcukExr3_i;XqW=8 z{XAKu<9dkkKFsj7T|WmXQD^Xg$4o<6a~OUpWHP2}WCB?BcQA>c%uB*x(Z8ID5ih3O z)ADOF*)DF6&MegwTw4~!kv@A3<^S_NS9)OuO8Lfmj;95=nH6@qM9%~-2+P+x#mH>h z)IS=^Ls*`4_u6JsY22oA56Zs+l?{_a@uM)AwV&N~>oVStUYo?Lm9=uaecOSzaNL73 zV?7sXNU_M|wHj?KfX+i~*$O=Np{!0@qH@Z_d?<5I<{|@16%qj&a&t3QNB%&&r zqv7S#;n7THGEXH3++#8wKCf0E9L#n)DA;uo??)Q0O9NJ;D!yE z`?q%H4V0-vgjp|P?=tG&23VfHsXJ;=-1wmd?m9(wYA@t?C`SXP%aKQATtEF^K7z zgYP7ija25zyf#?SvVf66EH_Y2c++qa#Pd8k>0;N>ixp+S>Ok)JBLbV$^HyNV8T8$`KYq z^I1~4zrVxL#Dfnod37kqosb{dwHK!B+C|RUBi{KTD965=u=z$kSrd`>D3z(A1;Lny znV9aw%-cxz`$p3fXsVzeNIbyog_(smW$7Jd%_{R{GkNDC> zE9D##pxFg;l*D&&c^zL8)hvJ0ftYXes+1yObIw!hW=Y9WStda!hu`5X_&?$jJdX@t z^N2UM*5cWwFr<`EI04FT;=pE~T^CTF$z=ax-es_7Ny#}0xXf{i#=EF*EtWAeUI1UG;wp$fLq9?+W zCtO43Wnz0`{U}Em|K?`Ax1mg3{pRE-_xE==m5o>^Khl<*wO-iNM@Q)PeDq)av1wjD z9lNP)6gNka3}oK#r7-Cl#vV>ho-9~=^`JTg=i6~Kg{YRwDM1-Fl4)#9xsl-;2<5+L zT()OJ^+ylNkUwNj7DMeeBvaQlOD_VToCRR`{r5;H^R^9Tmt{Va^|X9Mm2LuNX_K=o zc2G$49TrBxa)NX!Hy*y*`vz#iPF<=t3E(96w5-4^TNm9W#9Y5XqDxP+>1)8CoAzIrbU->)hHl z8Dw(P&AC;E>ijN%Q1wm_luaK{NZkE=HQJ*N1wf`R z@c0qVX^Q!uL3RULm9hvn_RH=av+Uj*G-u*2@cqLNszsctU_ZLpfa1i z9Vo-k$F?|Q!`Hln*p7WL7On>n4aA`i%`cCl73nj-*IB8!8Uht4Q@Uv zDjTJ2SSWKlBN?gOi(mgzj+;Lsl-W2cKRVINF&Pa@81sBXra#?Uix?!kV7M=dG?b4B zWsO)q3Ci3f=aFU=ZXGtfc?-7U7ICq~WNxH#{IE^s)`B2SV`DFku|)JiTK#pE0t*nO z)DWI-Fd3-~c29@*kBat`(Fg$cIC(MVA^i)#zpT%L%YlCWH@~&`gRN{Ul#$A}^S<@v z!lCERffpTM^1#Giz?KX23r<_l7}R2obMJ_+aB1i;iFWO#T*PHMptpPe{UTmpM_GK* zGwz(kZ6Oreh?rfW@pFxzC)aU`G%MrAIsg~Xt>|_4UosYuZRTymOk2qAZNfrfLO@h* zEp^gm{yxx22YsjH1gUH~ABDLbGw26mbB$0YGbxhFoo|bNOXXGB7u}Cve-V{kD;&sh zxa#FKh072nWXS-Pi$Fse_|IY1n*e3*`#QFuTy!PIOxfGNzklpcSQ3@niAeEc!^TfsB$t+#4wMtL-QeRrsiJ|4NaFz}GiHZr(Sq? z<8u_mUI-rM8eMo)2J@X1p$tELCX)%u5s3O@Q+Cmx&}Iqc4wE-T$A>|=%Vf8Gz#j!= z3}ooZV^^x8%ZNX2-aM_8-{0T&`$Kh7N=pJe5ov8O>V7CC4VCKwDyN;`^{pRyu1jpC zJi69Vnb(F_?$%<(W0`Cs=)606o^MJ#m2dS+m$K}=a#t-mzPX_X|Ar4znI4488*QfF zg|cT=K^w`&MUC>x7#lU!nB<&xE<);$8oGqkE^}=gOx})oV_g)blyi)9vvK9^+}SQQ z-e(lR9*CsR9-$&^3@+quq8Qn8|kX<#C_NYe9KnJzytDBb8TA zF;lxOk#VbaRc||BU7N>qB34HV(59QQ%(7+05_8=(BFtjbgT1dXP z_@kP0@Pq-xX>}kcl{QEqBMDZ1dpr5w4c279=(Whi*q7d#dA7b6yiTXCf$!*417%I+ z_&StR+pWzvZLx(6WnJq9R6JyZJg$j&J8=P_jD5!ZD2GF%3dP6AV zUdh#@gWvJ%$HlLQ7v$sO+-ot}xo-Gi7&X$z{P4yeEOP0dFK)Z~94Ju2(#S>^6`%AuNk6~1{Wly@P;uRR*Z(TKD@O29sx!YqR=WjU?b zP(mP=pggpvJYmsO?@DY%kxhqk@0EKhdF8?8pj^sp7HVnix^nn&)I84(lHtU;7vN^T zNWVW)+t7;tMKNn`q1<*?<@Yb-7L%FlFVaGCAIhPK!ktnw%k^71faL9VTU7&4PFiaj z9`S2AbF+r1+ma#8J6b7&Qx*0IfxcmPT%Ei90uvO9}veHN%E0lTP!;iKg`Cz^bn{^MoXTLKuad@pZm1DMw zC3$;2;H8jKhFR28=xgL(>v?cT@$1qG)`*QPBRhkWc~zCrsz~HhJ$Za6^P9y`_fCeO z3|&O?(Jvj!VUgZu^7=bPD$lMg2fQ5r0XpQE1iUM4-cg>gg7Y?Rg3XxS*iI%RWp_cX zv;GZVjr5SUP{s>k!|$K>&K2DYD_Yh``uWorsHL)gYqq`iigE`w$@_hE8_J2X!5YN! z9I5P*yy%O3WFSaM7!eXXAnA`X7itU$(nct!Lxo)2rIUB6!GFiE9|h&>J6Am{KL*O} zxGylkL{B+i2g+%ay%b^XEkYSgIl^$faY#Sg!MSb?j>d`H;!T2$!z1r*0l_TP(i5vt zIqrnb?Gnajn8go(vMRSb56V&7<@z3!q1a7}w-7qvPWI%1lqZuw!*A*2`&+u`9Wn*V zs!__f!q@2o2Aa(=8;;qx1J)jrb7*dtmtHDxo^7{bk?=*aARE6vLaz@tkW6^J)}w)P zS@3Ji3y;D4x;YZxNlZw{Rk;hHg^d`3GQ?%7K9rNREtRh(vriwPR8XKVQsDWG?k=dH zm#t7?rhjEh{~8BnYZ{txOnMtyP8lqBsQf#Az1lHB{_@8&nXwzJW2;b^d_7zRgvK&L z`N+eU31(iy=b75R^oya~&D)H7mS7w)-0pR~Li;W^S*B^+vJ$iV7-^r%Z0T^+P&P`r ztd-&uf85zXd6spp!;|cKU$-uCM4A=2Y-V~k9}i_^mIGnUx@k(z%qxA!Km(SAhGlFV zl99>O4IcYKp_gfxLz&kPI2$&cLy$Ht-`AL-jvB)HKu=6w9FOqlqyA4L`9(o26e{&M z^kH=H+ASV7d=ScP#@mwmOzuJ1w)F9!yh2k=);B5ip9_4|)uF8CRwI<*shaxJ&dB85 zJUe+R4k9QQ#WgIC2_WmWfhIC^GR!Bxba5?m9`lDRe%(uV_2rEq1vX12b)4B&sJZzf z6BD64Y$D45%4`72S5=r>U4-RrjeH-=g$dR`PI?IO-ms^XcM!dX7AWobcR%Tg8=JGV zkL79ar&hXKrA7NTRM_ey*QYf)8l)F}itL@O#q-r8YK!|DO!lapwyy0rl)nbb-VO{e z*QfF|Ca1*YbvBhXl#eg%S}TAwGMQRCRsy>3>7kIFrV3@wH!DK9F$9YSl3lpz>C-@Y z4Jz}F-C~=`RF;`W9VkZ&UlhXEmW(rwGeWtZ)#AnCN&2I~mB>uVWHV6CMkjjt>w&&j z?I&5S8@@KVL#4#4j<7N2@C#NRlQoXB+%Y*57S5Y=+6i7sc%;U7@uEg@p8{@&Qz)X`wGbP4|~|psc5# z;^n2w3+!o_!eaw6sP5hHy8GH zHY*X{J{~;mEz3$M@wxYkl?z@YjziHf*$L&TClDt??l|aiT|ll^56bLb__{7yRpt{D z)?vUIkNh*3tjRjuW}VOrLAh!x<;{?_S;}b~4PiN&{(w>gBkM%_h*m}swMuqSHfs6) zEYT!}CCTqhueC5(2;ef0c~OwZ%}pr7yrrL6AqrVOg31^_EsE|VZaYz|k?2MCA;@Jq z3ao@a@}p_&SZCo5h^+L7(|9OD6qh%!?4@SUfie|WMoD_r)Fth7)m%zt?&`$SAtqa? z+@>Tsqnz; zn7js*S;HFFbuW(eGEvV2+(0?p?Mekoc?y)%#+Q32eoel8lc7w5`KqZAZ}Lf;OR@ERH}TqbL!y!#p^Q}*>bKkB^O&4BXPTs4KSM_&1<3LBxk#Wb%> zkN=H?q8s>f#?mW3D)m1rzK z1j?2Rj>`b$wd$0aXMrEvyh|{u(l5$1l@ZEdjiP@aUXRxV_E zeS>Vs)MXKsJt*VIjM9FBSp(xHbiRzr7{2}zI#FwewZ@W$vZk`ACXn%qu6ojX;B+Dj z3KYs&m`h=|TQMzo&SMt!-IGo9y6I}&j$g;gjnzdcsUbE5{btS)dNwF<8>BSt*HJ6y zjZ8+1njVuk{6>m3mT{(^;zt>bvuwEzWiNJ3n&nOl_)hm~(>dm!f#s(MQ@MsRhkQyj zx)#poTs-8IxP3;D%Z|y*E21otWA_tz+QfYUtDLB;M4xiSSG9SFa2d# zoypOmYw%`4D5Fq@k|?os;187fr&cIK{JLM0c10?$xdp&ud=ml6Ie5MTl~F2VEz|*x zgvAf_<-*{Pv2nO8B+ilVX+Y>>*;ZE~gF>YPhb(e+Rr-gG?c@t`hu69u9U}pXI>d7R~pK& z%eozMg`Rp8G;rFfkWEfY(KC%pu|E+TT3xKX1px7DQ?Z&7 z98I9|=>8u=RE}p;x%;|$%87=l9CxT3|Ex6;>y?=N^;fND^6F51{!33^1&#d1&`4#? zCsXK9ueFPyb<1-nVV=L|0Z^EmLKKGF=HR)T~!=M}uFPN{G3@-^_{}RW! zq&AYHrSea3gh*xm`*5g2V)AmKyeWDflr1Q?q_SE5(QXQxE%_%(WukH@rT)TtidF+m z<|%74*%!*qNb#GZubqC4k!!c3JVz-H_vU5y!`EKt4gH7n`JXe^-?~(8?dmTevoJuW z2XL%^n+hRaJIrlQuyv`-)4ohbCKs?9yn?Hvet|SfY?G6e>aS2EJ8!>x2@dxk-?mhC z8?>V%*b|^UNagu=h>sYY!|k>8760R*jM+ek!!H8m3osd}TxlkM94d%jufgQtUvb=a zj!XUMbw?_<@`+ei@v8^CjgWp#6Jr(%%j7H@f-+0{OlCbO`$BnTMfvphbP1k_XcaWV(a)-I$C}s5 zhL}u3*$bL3gmUadnezX!FS(rvZj0p}w^%%ct@i2yqi>_D6sJMih7;DHG9NQKuSn&8 zdiOT1l!3{Y{VxOMlco}BWxd?^I6!jw3QYE(-0ZiqmQ6y@+hwzkR33MyIaxd=oIF?R zUz^GhGCDabdsq&hpZ~<;8ywGbgV@yh8hUgJ!t?0nBShj5jBn}Jii=e%l+!CrUQT6h z>iA6)q|~;PiCPWg_=HtuG|&UePr!~nD39ECgR`$RJI_07X_@Z3J;y$Ob_@QeCq=i{M_|DZX-6`{<0naomG62v?0b7nu+%n0Sg z1kMbU86Ht%gwMxAd9d>fZ`v8SE!TLoq0b~JZ+P4j%WFb8;^Wx;fbFuM4$CSG_rDC3 zp&lxOeX5G8bU&(fn7j%6MI;T8sN*MCv}%<-g2$gGm3QbO)G&D{!7WM}ODi+TS;V{J zq%D+}j}oYKND|=k+Z)q3R#~o>OZoTUlFOMIjeBjP(sW{s9UWKD>k)fq{K8D$g`(PT z$=cvm-+c&T1DJ6u`89ZYdVSTO=4~Nt)E55R%5A9Nk<(gPj82#^{^;i8My)QCEs}?s zj8DxHD94H40M&-CK_^Eh*Xt&gJL%5Jm1$xSTj{vY%6#Jf4v%|So_mAFLOJ>k<)NXG ztNkwoPwOyw^RGDSg`2uiW-UZ`*@T~v<9lwDa=8Nw5d^asoUdBZX>bW@ zLAkJV#Hyo&!4HI~Dq<|#?(z#Roumk}+2vt8;%zGsKJA7flxagW7r!W%HIz>$8Okjs z7rwq?r~=6R`bv8TPeA3@SNS%J%1S8P5{x>62_e7!s*P<3A=y63Jti+omH^bZpqzS8 zwi(AasoaJ#);kaO0w1LExcK!{D4T!4mJfVBHsNEK%DR zKGzV!&c!2LrM?`>z+~FXKmnTrhxMO$0$;qj?PLvQ`O921$G)k~E4CfHrXCV&DCM?L zZj^GnvHf)_k9OPQgL6te2g-cxzi6<$TKqa1y*T+t*#}&qvaEikD&@;zf6BH{79^ob z(uz>-6)<$;*H@%+`dJn==h{#?yWyC^drXd^zLC&s>5wK5TtrEPOis8|S}5lwL0PH` zXYQv@YJkHx{9NORrd}ZtXA=Y1=QDIFYN-6{iDgXU#77|vfyvnx1J`uCX?(ake-iPi&lq?lR~+~ z@?`Pr{mJ!bDnIpO2LkyrigAW=yxmN9t2a2+Oe*iA^3q>?qbFYwmYIWl5F_hMMkuF8 z?vlY$pUqp43IU5{63Picd5u~bi*{jo(PgJNRI8Ws?d`figQlWLxpKAdpj?p3#)#@k zisdaj5M1Wi4y-(4G8}j2pc>xF@g#s8*2bPYOb!}4@VMQ~K`4horkX*SCZ6tXQuAfvUq@x3ro+J+{pq3gyJJ=Hr3_*g>XZkjj}#GH*_GK^S;uS0umh z{+LEdOYAis>dSRoxKNH&oII&pK|@*l^~I6dA$fBtX_PbwOV?T%{`}+4&8p2CZ8F(h z*Oi>I7#_c-KBy{`HI;q8(hS`WWzoa?rj5#701IeLiO1`7UBK40lf<<+C7iE^QCYv( zsri&1+%DIi-!qh-B9(FB!4mArsN4!$KkfF7{+LP6dr?rd3U;ojkPP+Km(9lH+G#wPYlYOQ_gEpMkZ@z zjQy_8fq(sjLb(meH74_gU8@To1?8{~Wen9=Fl#nb8Mf>KW!YW8c7rn9O)2csQ@%$! z;T1qW)3I*ic~K0cGVci1`e(rpJ#=e}YV3Nwex~x1gL0muO!i`A$Fe7vJ;+ zNYt#)?cI19u&`wC_gRJs+YHy4!BNeGs0{A}@QzATGcLHEt9p3}%hBAG#Ms5!#GmO4+zkmV#M`_{V#mtw?S# zc_y0=G46l>03ZNKL_t)oI-{Um9Z$n&k(I-=A9jJVFZ!wRP@ms7#_IO^L z=DO5&cP9vD{3J(lN}-ox#9cWaQdwpM!2I&dX1m$udFE@O>}QmI?$NZ2Ra)d%5s!c} zY+zz0G6-ewsR?D&#sK9NuB-4;5s~#_sBDnpFC8rZU`1c;NNzH@g>7PZoiEzeiptqA zLN2SuLFQ&_IZMxKN;x7h-!^}3Go;zt2LXN zcNM-VER}0E6ndIoK7V$pOy$=T2I5kQ9vg?-l-s4USPw3iIL(o)I4(_}_tYyVXr-;~ zw1*of0%$2_s(~A4sm!*QU&z(v%R|1|{+?xs13xq0Iq#g-HF0M}NFDQX&@vDwp7-RK z93hkE(W;2G7dmB>3Cs1;>(D&s2WGQhB2JP*y5))`K1A1Ca*l z{v99NfB9M{uaoufkLR_?(1%mvjHHZ~t9?-RyfwLldBd@6dTa%2B*3WD{e4<@de~-v@Q_#YdXjd~xydVu6F3r@=DZhmOl-7bdp}e^h$CPY27WBMqS5 C(A@t;_%vf%9lWt^qynW3CRQoOuv<`Z{!04SmSOy%d} z_#yy612SW8Ede<_2=ElKoM!MlT#>PQJWxg^n|V@u@uyZgc+`o2s-B&QuaoRouOzEiprl?QRcZI2(x z06^;f0G~eY3T4^}c+XURKDr)-Zu!fOcHvV$02~>P>!oY+v8?$SN??8LrE+G+K(5?2 z-rmna%@uY-A!>=bk(sA?iPJ*2d7l5C#QiS7!^9 zb^KxFl}w&{Ae6ONNa%DznUXL1t8mirHHNNFl2w+zU!!uRx=IMyu&Qe?c{r5)@Hmu@ z1ssa9tFL405&jFkOFnkZQt9#Cc|Ci)|Z`<7i9wc8uY zc){Z7^tqp@{Cpha86QdKa_X#1=sXTFm#ivK-XoQ3P{s;ug$VEcBrKD4_$(%=3<_CT z5QLyOZf`Y}F|5!j|AbifJj_*R9o6->d3hgI6kJ0YlL$y;y}bdq;M0ABI!AJyOc0K#!6rdZzO8agb*=?3;AFfwD?D zQv4{M#Hxc-Hc&3J&ns#*dudYl6DtET_NW5-TR*4pyvHlmyH_Op7ibXrRCx8);avYF9kn2hfyFqsu)y)=r49);TKT*_!nlfO^e zmB02b7BMh6f(zh3i(N7qlPTqh#uRCpQ0`|TJqpSVp2WoVD3gGQLU4YX_c%q zc_JuRgt9TRJ@%sqLKzQlWUpfNAh)&YGW|)M*laXsrk`HL$K74+1>|4Pocy+;qx6r$ z6lOO%WeE*+rtAuQPGa@_cYX;ah%vmB;0I`!V~=UnUi-ETfEPvT;}|=JvTJ*Gn_+u0 z7K+nVr)ny&W}`)6gRM@V`41l!Fq=wp;m_POeDab<(lYD`A1GTa~70 z<(s}PKFex3=_knKyM3?W2~6wuzH@(WB(u8&wFS`xgN}CsMr4)Bya+y`3_czMl#^8i zEY=^ZZhgVS4~k!7Z7Cp`eM&jbSFs|^VlT;d`7X~{FFRDuRMV0gdo?R*%g2FaU~=-v z8lK_mTa`#|I!^h%#+e99|3)q*7+_MX3(I_;+noXT!ETN|i)*EktR`BZm79&lORJ+D zw5&6EGAIj~_Hxa%iC&|4JC}}PDk7WD>4O%Pkt_R0r;GesBIO5%vcu)Y1v=ws*Sc@> z0)F!i0B->v&&8nUII$_P*BMhCzPAL?Bj9Y3ifGEGQ;~L`m8Ms}Jb2>^YBbLdsZgDZ4Wu3DHXufF| z7vB=gl`z0#ATuak+?J}jN7Dt-X}P<&%&;=plnFnMFwS?V|1fj2{J==%>dX#ofIuGS z+b@^-CdRrjrWOG?Wz=Bc>hkDrsPEP<|c`<(g0iC>QIrE0nVg z#4gL-d7Sm?>6`fW)u!Y|Dt~;Ya#tkNQ6tu*oaCR5P_CYDHoKrbz{hVE*;rg$e2?(_ z!Mh+qm79RjP1t58QO`wz{h(}CeJho#P+r6G1W{po_ zBt^E%x7*DnMu9gQwOYp(%G9}BQn@kL+83Qh?3|v-(L6fTV14x%E@ghHq-Yn+a#o{q zzf!ME*Lg*8EKw_C_1;b)lDAuZ2T>m!&7l&)9~0sPKz0hs!0$2;P2M0)Uxs~&hHlIXt;K_Sir}{a}DuvOxFK~UO@)* z-Q8r=YQWg+2u`#KI2uji&A`Wt=emO@D3$#R72xj*t(3nolyOFtx^x<8snaV!=|vVhy` zhWys9)Fh0M#(}Z43em+xHcE{(q`?geGeCu7n^YKlkGE-UlRVa(w zic(Gh2x|*v-2f7+!hyRBWfCjefA~9a8FeyQhXRu^ervF-=1~Gj)_-yJ{h=(YqZ=wB z*(O1YvW0EkZzMT@5~)n(UO?rgKq$kT`tXo%;LWWtIfhp%@+M*O(0`6l_JGQ2^oto% z(U*+bWashUi^8ukIbLAjW~_EQ?`HSB;vR=2&GEJ`rVtnS8b*?wF|6%0({8aClJt0K`7A91G_e|v{M`fogs;n~d6H>}wwmBAhfl^*uC}T=rx1(Vv zXPZ*4qUKw3nVAe!-cfzNH3lRmqj_(Z5R)GPl*4j%Lr_Pu&4Ct<#cCf95!jNbxl(#E zl_vv)vZ9yfAxEj4IZW1bI)@UhgmN+bUn}!#ER?wrTY6+#_XAK_EPWTsUP5+j=(mO* zsLu;-m(^^ESY~Iu6mXouUX)(KyOS8DRAPX76QFJYnG53NsgTT{&(CX-fago(>0HOc zZ<*nHz*^OtN#O-e0doq z$tAjcJq9LY_&T)SSM{`h`I;4k;u%UNuv zNPb5q)0l+e?zb|mG8v$ZNtSO2Ww`E!tnZ;urFJv6C|8+ba-yQ=S!>;)yj&uXiOKWT z-5pMFAH2BbE185GApm zn1cmmQ#>mchEd*x@@0lYtg3vfw!)~u}$#u9~V`F;mBU5}>V*$#>ZOy(N z{^Myje2hfa<3g!s(f6X&+E~`n6>y43ol)lSLCSoGn*j8LgZFRJ6O}3R&@fsGk2V1u zOL=DUK^`-aKjZP{&F6P7-@bkMh`B5=6>+^tsZan^Gfwysi>s?^Cqgtg&SqOUZ13)sGZ5@EJ zsq`W$cZRZ}mZ%6_AQOc=Hc*Ba0i`nQWMHz^)6pm>4~-NznarZO=MS^F0Mi>KwW0hs z>269Ac&Rsisf<@^BxX3DYYdA_|`OM^_LYXacLMr5sGv_rls#b*4RG#8b ztts<3(-wKLrzW30h;#4b^K)1w&IKwa0q3Jg068FM@$=iihsS?~gK3OBe)kfN*RNi^ zdW~FuoJ{ru<}V-V)wTK4^;HE4MXj-xplssTS$dqwgqs#B-`*DMRZPR=Vl?x_1#0ZG zQkuy~s zNNFf5^OAWZmGZEE-U?-}x7D|Xa%itV4P`I;2E*Wz2(IHK?@8r&4!p&3yTC9R7=ojm zGa6%_?1Yf)$0p02d~vLvFN}Ree#1ZpeGCHmE%Nx)i=SS+dj0y5Vws}V zE|nJ+$*C_>x!-#+iLF6!(uv8e0UK1lU9XB2UR8L}F_Yoq8_#6zVii?K66PDsHG{rq zBuko>==-keG;Be8>XC87WwDo5NWCYjH%C<;NwKO>xg(TI+QI9wC4qdorKH4ag#i$x zvM8Y(QAT3GGXj*rzl-scH{c~vamz8F;7eASyp(46S{9v{$_X+VsZ2%xJ(xTfTHoOt z5%^n`Bw36~FQeBo&^_ez7De9k>bqA*S|%?gtSe~lPE^JhacNy;WIDy!@J>-ndp?of zCa?)0-&))QWU*5SK7lINDkBMPEFfDK>sV#wCO|x21XUg*k?*xcMu7}Ge!<7>v++;FCxdFUevW`SWgi={wd?TfD%uMDU zpemDLwS<#tBqM~wmPbk@SAJJhvLqTaksFze4Ykt5DoQXnoL7ofg~}Z>w-pJhF8SC3 zkwGdi(JCY)C=-)$X=5n&e@573raxe}Ht+ibvVBM2OPZF+@?DkLN;CPy@oPYG!V{wU zNo7nK2)aL(A?%eNHq<;$P+sqVC<4_pKNpWZU}*nR22m$T`26TdroFsQDgz`_P|68F znW&7{y?F`Q#&sG-8Y+V@&u&qg$1$2q;?6XI`#PkC6Csx4nQQ`o^UN?gO;$x^6R`Ay z+4JG>_^+sr4UjdFf8yiy>z`h|#y`9uEI+cx&#BIeiwZy~KVf^N22tufdl7 zIFlL54bWI9V?NXRL5>v4v0-u*%CJ}xjTcu^gpx)vEe{>t%tCP<$_OYMn+uEO1L5>4 zl{-SY(3xI7@-2t&ksZL~z}RdoU3P;)jfY5GGp!dsdEcuANjf??OwqwBqeLGNtXM|!JFU66@ zu2(A_f-;5M4L}*&>&g8zfd$tS{?Z0s72uevZFOKNis$7Kae9J_1~w15uCK?ho;;OH zAvsU=tCa$-)(GW1S4!E!KR-pwg0bhbB`cBM1B7Xo5tPj)K$g++bi6RP=kr1v34oK} zJ|N;vK&(P)0pz9k&&cGTOCST05y@27MO3CV@~fZB@t2>l((A>GSFiqZ3M!wCg)*Yp zCnoFI4u6R}LMY1vP^OYUTsvqevp6c0b)grX#`&Q%*BO<}Jj2wFHy+9v@Ew>O(Qrh* z0|nMc&~{*PrSncQ2#@l(l4>?bC3c_)$!ai^MOfN2hje0@rkcs^vlEK4+AF{8NaeLb zGC5LXCB0W=G7L2X()Glb7HP|S8#D6 zlQ%g^lZIxz9c5ULe)Gul}AEZrnIkGEUwJz z9AE&Ou|&O5`=N}wXid_Ks|RvJ+wER^HK=F8yHga7FdhVlw{jAZs!YsE-r<%=4W zi*w~cO@EllC6%#FJ5lR(G6j+YmH=B;StI~mC5+>$jnVDXM-)Z zzBiQ>8fRlhWu4V7)rn8k%=zQ?456&O1^2=Hv#huUhla|os>hGOmM!)P#I20p@5JQGW`C+Sz}2Cc4jpR)SrgRu12mO z_f*|Q{ZD@}xnvFHx37T2uWX7Ls5}{z&qiTc1Ysbs6oE>9)AYaprK~Hq%l?<}d>qP7 z$WSy#M72O!$p1%7=AQ~k7Cx%&c!k~eT>gt%4Yq?=05x1wLrD*k;#8SD4W0k>8ICIN#(IjM#SI@UqqGG zW+0K_Pfh~0E0kxglN%dZ+7x6sLRl;b$?%T|%4&rfAdkx@@o(v(9{SAUNJH6MXTseS zNG+6Q>%feTx>-Y6#Q&RIn$x|JR`2tkVxlal< z9lUz^idFodfyei77%snL-kK!xt0t2Hy$odxTfcbq`c?UVrjp7dnQV-YeC$%bVxfyx zB8$Z}(%6(Yb?vlwhCT{C;UXwiXIO@h7g!z3j-LE?u*k$nxQs5jg!Tfs863FEW2qt+ zUeCQ%=DP{)l)Nl8lf!yV*I|il1#CtWr)U|_wjA&T28OR&sT`V)G~6T|f-<>(^jKR2 z#R2HEgiqLoJPns;vw%?s@K5A1(-OVL4rPo~zkU14Io`grQ2wa~<=0ciug5c)5Kwj}%Rpd)x#Dou zQ7L1*+j?VJEC->x@^e}7b%1BF@opc-9x1r+GGelwClCx=kbvK^gW~m-%XYxy=gz za>j-5R4~jXdGN*svZ|7iz-!mw&Go^}`67*yem12}L*5S*zh-|BPqR7BjA-4MHv;u6 zHVkE^yJHNqJpT78Bmbn_VSg!=ZS>lPuZM3D$tRb8MuZJ7x|B~-8KrV2N~?EP${02H zv&62;r1D$$cx|h$SvkK#S4}F(#_%=#u?$~N7{5NF|Hd(y>TZ#gg437;(3njC03ZNK zL_t)k`LZ{aT`>E8+A_=0wECn0kiV>cPS*tGc}6|=S|?+T;V>rOkpiJ#(MpBxfCt@Y zWJ2?YfZTwwk+0cGuXYZT$3Pi>X6iSEavBhn!*(nyJUy?*J)vx1EbCAXuy_<4Pk%;zsn z=AYgyxn>X-E`f>6Trg1m@d*WUJg?`_H5>$d!=Dy6KSrGwQkg1IG7Dt~lX(tnfFdXd zX_3X|?i~YVU1>*!UP)Y~GC{dyGE*7PI0DKsu4Z_$4Bu6qEPv2YMx|_v%K^z4DU42E zrTK_L*fZBP2Xywx=OOyFu z((QsQM(=1lru*o=h)dBl6%Nftk#){bdR_; zl*u}nfK0v*%J2r*9eg|j${vOO=4=lW>8`g8OJ!2ZnGwpN^7QHyXR|-cp>gbpWa4o1 zc&YQw$ZS_APX^_)5lT6zDl>6KRQ3f1udjs-JNK5#bv{?Iyuf~F*2_47$|RrzzW}L> z_fM*2a%mXXcclj=E37>PYN2=kN|nsjP?pwKx<32ifKg~@4}q4TRh2w)csfxTyV3jx zl%ft=j$GgUXi#2ok=KGk*B5PC64zoA zaol@(Sj*J4uFlGHd`}3KDSWj znYx(~%D%FT(~oQZ(?=x3QOzim66S33>$;QIPa4XvU;JdOL#BoD*$66EEh_@b@gj|h z$*GeH4hKl(y;%0qxkD^5c73gL*n-_MvH~x&%WaCa-~k7(hpqAk%8{Z$Q7g5q7kUZl z^Z_3^nq6H2+fTe{BG)dJCCO#vveD{CpiF~?BWla&MP=zy*>_|z7qMZ(?Di5i``-e} zr=fBd8z{#og7V#hBD@&iy@5ZpfU6Uf*WAj)20Xa71{4~hF~DTu;yZ0?OX^^kzJJnz z%04zIAe5u{KZ~967P}v0b*AAsku^G78%%m0+1L6!H!NMzbP6_$9xfzrv7pQ(_7!Z8 z^HP`RG;Yl-J1R>O!{lu6#fVU@j2K^)MGNpmQg?Vb&8Hx%w z*MweEeEs4tSm@={c|8K9?1v4bt!rR%D$*L08Ovi90>rX!d@55wA{vNYUtL|XNY((# z@=LtR*f0)lKK)>5^jbw6<5|HcKxQQ>O)XI+i}yeo+r(_bxyofMy{4+y2}-=&*GTf) zKzi9eHeHd1Raq@cS@Re_dfj|du%9=*uNupS$ujdmDu3DRsOV^Q`r2#8^0Wc$%+r}g z{QVT`Qif2zI~3qeR*CWVIHHtoi!s^MhR9$_N#NS+Ye#f*n-Y~z!(_PMB$ph@D2sL; zZTe^+;19AaXUbD$L>XQ{s)x=!?1Z9M6_`BSe&N<9W2MU z41KV4nE&}9_!0QpOQ~VRRfAl8Ey7UV5lHT*qHCnLgk-&Aa1u#_`LuWNrK#U{RgssuGTx z*GFZ`&_ZR51*pD48P0UQfage)D=B!P4bC~7kGA0v?!R|=-Z5`E_PD#F@WzBx&dT-} zbs8vhe0QleZ9iXx;rY^8wjfHWc)w3JC=IqOunAMS8`ZD0A8i`$0yHb@| zD2I=o$~=O`FxkV<18C=1P-P>pV1ArX zhG^xQxnpR<%etj03~N*#xfY}(m$exQEHA+1Yq!K(rW(qZI?$73LI9NSdal&CyeBl3 z8HtR>*GX0#DS=Yix6ME)%}f^39Kv_UPDrQoI?zs?@Cr#>b2XJ$lL%!C-wC?Z$I4Wj$9>@K1B#GL$@u@`_E#xi+BIo17(k? z936u4tgNIqHzh+EXf5@U*S z<}x`9;lsWR%KLLcxy{(idSC0~^-Ddc;w|Xs7p|e#WYO!{(CX`;)vO{ACe%DRlo9qm zePSqIUte80>_HRP&6kIVhc6T{!;y8FAQg4qTPPEh=UluB%*+zuG+nn)nRg=&j2pt) zCSnhYHi$DU2uL#QY%S_R}zLN4g-Aq$cIU%Dp72|)W zkjgYH0_PV;w1cFaKoiPDJlnt26YXEJoVd;hc{E83isbq3YiP$CGmawKv zhBA*N*}=inV^BiRg2%li-^RqDm1VNPcVCpb8HDo6GAqu!5tUw+$$(@T2yzO8H@qg4 zgK(XhLN9DPSIOYh(W%xflVLd}V^6pM;|i1ENX;$)w*l(U5x%auUpqshKC^)c+kEkm zC{1OYrR-Q=<3x&ym^?JEya&qI#?%JoaO853Y9tH9GKH@fSGxL|)S!=4{z471a2w$y z$W=0rsJN*&lm$aM!d)^j8TOXE7x3K(cG)5AGpSpEY+nXnI2}~d7+)tGc$`)!J8oVy zjY1ymN~7w^p0}OApL>0!r80kkdijdZ^~_G(j!`JYlI>tV{K=*zY&!||&b=?H)K>h)`li^pwdA{o!^o-1%Qf~bZprnFYOlw%=-t{w;us;ylHh6e;I?Ar0L9F@_+wtmPxpXmw_1ws0`)|mQgErcnCgbR6^=U4wt^vMP7kL zvN!>glXBvrWb0%}Wqvp(Jps9lRzCO;e4c~w*gI@)*P6*|)X9?5QZ{(4efC9W{6*r? zZS0}~Wi0e^g4g`U-3q}SC5Dls&RDJqc(J5e>KOD{AEqp&)8RA$ta}@~Z;Qw7UA{S- zOTBz=k?e})pI91GzL}8x;`PhvMnt(0>|qS3Kv|?SJ%OtEoYB~k4HYN@?JEgoc1ncv%`yyZ8@K#% zQ1%@t)0U&LQuwgu^1frVnJ58y^eE`>OJ*&YF|Yjgbp_0?2+LTK{TgKQ#7rKdln+AL zZ{d&_;N_7vZ8p(0#0;g7j-!_YJ=J~OH5hQ-blX=vd@^# zfyYC2T#<9K#l^+V-Hj8#p4M~ue3Dm>W4tm}>-hFI;}Eu@Xk}o=23f-plib9Gu}f!} z4?o!_Dr0DJ3GYNmSDxcmK0TCUOXXlmK*_fc8+M4wqDX4Q1k3Rw6}}agZ*SA`f~HS4 zL&o7CiHyYejlFW!*bBmia!@9eO+1;p43(#7u#=*35@Vn&?7~1&8P_P;=<3AoFvY$i zBc7oKayfKTr)Pd3GV8jp&!0aVGINHRNQ{&w2kf^mCu6d!ls^qtW-gR{9?_V#LD`3G zd;hR?>p%)jW!8pX2+WXdu^;{mtO;|>D&vIr#o`=<^2ZK~^95H3#fxYTThqj8>&HR& zeZ0tN4e6%yDF zCQlo`{<5Jt&CaWB$&7B5H#ZA%cSrUWAxJdf1RwP6)~&m4w>Nv*#s` zdnuM~2AMavqQc}E4V2Q*%9Bx0mXutu;cMhz%#`2eSyVPMFZclSdZ;sG)HQtV?IArIk%C_7RwgQKw_@Oo)*atlRxxT%Kkwp zixwycqSt(grbuSu_}Ar-sLF^U;Kl7``{e;g2F^XYZM--_1H+3hO8H{(@d60GTSSpS zDqBkiM6$!=?jD6w>`yNXrR=VeN-jOz1`I63#%k_zShFxm_7gx^aDq}^=@(xLf^zxV z2)fBn$z)oZ=BkXw$(dZz8F3)dIXh&*kt9=4`OZ-Jd~~}Nx=NQRTclTF4!*(?eukA3>mZ>!A9Gd%+tr(BPNval&+ zQHcYXzvW%P4m1sJJAlf=T9s|FfrmpdV7JLgJ^__aF1{Je$Ymxow@AI@1}O|&PsrpM z=ws8R+*2v1!JhfO`=Ja{xqATH61mpwY-Ts6ODzAbQZEz*4h_t=n}?idIKo!#?z|(E zXBQtY&M$Vj?+2_&i{&*}eLJnc{jUEuFpKqCr)y#jXO*D+?La0|!L2>4*?2HHl(man zNTt`jTFJ%rm0v;`yVgz&Wy-QzDoe`mGnH|?vW;9P(IkpYPi#IPZQ`lCISXYJLp}{; z#8&zQD<&Dr5yp6xwu*AimpUR@hiUXXU!k(#2+s-L5QUAdI^v#){EHq4c*#K-YW6)H636NQlbU*W@0uSp2sRJGemr$y*!_ z8gs|VIY9a2MHi)f@f$*!${Rrdf>@?GrU?p9-??sO?;D_TWIT={Di4a452+{O1!>tf zIdXa^+lu>uqSrpD;&N7(Zq+_zr5C)jTO@!=jNysYW-@Xn+ykgQ&3#%z`EJzD$>L}p z3lpdGc}z0;XbMxx`)kt46iQQ7kh;9);Nn^3;$Cj+yi9ra7de}QQBjgu_;Vry(YOaWy| z@CHsVN#MJ8ExnqglyUU&xaW6$or?du0c>t)q$euO)(xPX<-2^h`LY?Z35Y99MkJ$D z)^F2fRF($H=!N@jqT&SRca>w>6P!8m>#sePa#(ZOWPj^)b^yvDMrS(RIH|vJB-PMWxqL2*=rsHbTZ3g z42Fy5Fz1$;k|SYRcEM5f8f)7yZgG933pP`HgH8@*MI$v6ZP%^eW~8!ouf)l8VF~4N zKPRKUrmzZS{Ny`>06Z?ZzP)uVihG_2gBWN`jt%74L7r+G)Kfy4B9#e7uD@)l*piAn zU>Vl)4wsVkKX5z8ebpGMzy<)5lsqs7zN#!jlW-aK{C-dkU^9=gH!9S#UEs-DY>lL{ zQ+DMHvC%sN-#{5Icz9_aayZ*qD3is5a3j_}+|6W|du_gHr_Z+=vL8Y>$cRLkLuLD#=%*{_wfeqL z&bPbmHdiWXKv_6lsXi541Ckvm-}b)PN?UTrk{owVr`Rhc9wuH$+(%qxnQw5WGgc(6 zR)s0OmK2hQV~+Xe?Fg+G1Ck?!+MKZ*Rj@qCf{$0U(>I|5*c1nnu<_&|HatUvt<4xH z6P3%hq*U_g0E$B44%bAlHI!*g`8X)2lmG<&rYSCPu!okZ*}0{%24#wu_dVY>_e@ov zDeq$_o55H91n-iRA=mdP?a{4%tkUlNO#W)AeBY1CX$eB3Pn_s=T`JSpdL+YfDj#67 zuJxij9gQ|+mC4KB^WXC<$}#~^PT+m|&kn=aorE$#`Qy#a#UjhHi-id4H8OP946iGu zNfkyXSEeZsWU{Ebw~$=cp)bJ=sVy@l$1Kav`D~dN`m4bb#=T#5>m^Qi#cnq=P;<3j zA(pL~lw=@F8@=Y&gr2Uzzg`Z0<_zVr(d+F)zWsuaJ#nC%)S)aBYLHzyQ0~uUxJcnG zfmL^LZ7s=DIV{T40m@3Z^us5LTz>&(Z3YQRQ=pY7&y==m^(OJ7``40 z<&+bEbahC+M~7)UQGrXYXVvM>5aDSuTr( zhH{tiHA&?K6$-g?9Bk$4=vE){zxHR9VajIp?Z;$MH&k=LZ2D2Bg|a*UPYY#+GJK8e z*F=7*$L@C&$~ePgRpiR{Kzfm0kfr-N=sYtGO&b2hEtE$I<;w>gWeJipt3erSZf)*C z>H$6$%C`fUjMpn+g_IAD@8l~Ozc@khHMx*Ql;SPePwz5^jYS+Mh23u8ZI4nKu$+Lj z#A2|4Tv0qwH8#Cth-ED7jWJMSSE3OYAP*r$PF>dy+T5fzDS~xgB_>Bg85T03+l4WZ zY=!GJCSfS$Yn1YrA;|8Y@)!BsjKI{R))>m3rSfvj znc<57uwSAsGC z!70hWhmpiylJMIOH;nS4ou`YhJ3+ZdWv6{lPJm=*C0mta8_Be(k7tw+PTaZ+ z>C!F{7Rt*Clvgg42OwF})CVkc!wVQ~c68(z?a(`LsUvG%Mbt> znIs9uuSqIzFdw@e6uXY~__ng6J7&wM7!!;*p{fj#3|j8#ZMZgj8veqBb^}T(n{U0m zwAlJGDyO_$I(q<|g(p)T;gD!vD>;d6l=5yfs?JMi%W*5M_ZruWRHSxNPHHcafl7J1 zeb{h6wOZ+>K9x{x13Q+ZK~y&JugV{34MaV_N*Tuo;WUvS9LgY+fyrn3$-qJu@vv=wgqCA>`2o*~Cz;2y@#Hg-Urr(d!`mHdNj|JbWQBmd`AdJ&!I27s|_8 z7rh*Ay=$O6?qOeUN~J6`loOoQ5W2JFg@rO5!;nIG9kM_b600V4VVT|njD)f-SiRPl0ZQgIfa+t+Q5})5Kx=##(@4Pr)aGz_ceYsB3 z-)UN2x(`Q%A3p0cDn(&T=YGcX0oa1#X;BeGFlSD=}9e*pfbu;CKHlZ#q38v&ORWAX9mk( z>GMD+SFA%^Dr>4%2`;-UQ0hmF>J;Z(U*u?^86x@;Xb!TfQNxgnFX9 zgmv;JU-w-?J?#;tyKJz$z-fo&U8}Fv@~}%V6%VLk*~mD2$O z^&TMQ4LZhWhtY9 zRHhQI^Ybw&<(#0rL8WZN*B(-t4AO+YSm|YDseBs@dy@ibgffB-U6h$)~6C ztuX`T8Z~+bH71)}7fEG$;vOcJSN*8GRdcWGvw=5V$Feo3xdJRwgKIiPXo$l zXCJqV*eHiR>51}$jl}Q^+Z+c})=xh4hdfnD$`s^;2C}YEmhOy-Sq+oB!I(rUlT0>{Nln$Y8NNEH zXKkvdU)kujNK4HuZBgscC2F2JP*$oa)`3gp(p<8d{+0mX0=use$g>fa9!)6wCcP%VDU@eQ zw>(m!%B;i)-E?OY_{5~J zWnLl`4JgaOZQd%GZ_$(!nLJm4DQHL{Et4&j%fx@!?rD(Z4;#(*);1Fz3R$L%WQH;@ z`6)p8?2{9{{_yqvSSb68gN*G0ZaApbqzB7t zA+}V*pnS(r#%K#BLI$w;7Hg8XzyJRGHeVWAh60um63T)0!*jyCLzaDEwYDRaF_L|a zDw%X1Q+e{Y1gTuCv07Y6nyG-*v7%An$NcFnVWpj3WGu}5HCuJEF6lNE2eXX0z-SH69FqumINgb0E$NcfN9ZGMM zayoR^q0ng+D?ajh1~Pg?FV}k?uF4EG4!}#6wE3Q7SJMcK8(i z)(=`tkE9_e%$uh)&vc$pOY!+b5f+waj0hz4l1-LMS^xj3 zR+hTBK_EAz&Qx!i310A4LrUy~N*5)R^*c5c%E)AZF{UQ4X*ejUOoi7xQyH_rg-QG4 z)=jhu}f$~keQ2ydDd6QS?j<{6DxikP}V)D~~^4Ai|v$Id{-*@-)N;^fb_fc7;W%9y~*~XNzkgi+ua)5Qc zGDes55d`o#uvC_T&MBJd6d23k>t5WnL3sunFrGCAZ@SG|v~fA5__d0>Cj@1xzCJ6D z_npJnt*{ksD^+U+_I@b0{a|W;+V}m`YVrX8UGCtrh)sftpbTQ!pFNF3c@C3}b;|J- zys(M3VvPS>1RTuW4JZevqOyiEyw9=DBF6ZlG?^?)BV>F)Qd4=5R6civa=)(k zl0u9k$3K?qYeQyoIF89-1DOaj6kRP+kjY;*Ir~vi zRWH7BL7=yssw$M3$+YszKJDer7B1~t=RA?+lvI}fekRMR?ZWtzwKAE;MWwZq^}j;& z;)E#1Ulz(tWrVWHGwE%#F7?_6t0aqsFYi=EVAmtL)qX1%KFe%vfbs|OV~u`ySxeIrzVp<4*5w(D0f1+zG;Tv(Lq>u z+YXIFrvb3F_%%ZLG}T_pq!A-(P{lnmIyn_}CR;bD5Q~}hpohLxHqYP=)|T^|#SI=@ zkJ}5%g=O;Eop2%p8JKC8L0IlU2fRJY3Y4uu6I>;*1lQi1Q*Bc#R2H(vWH+9JDQI#< z?#1K{wWxER-2Pa?auK^i8Q=L(0s)3I*`;z&y6ab14k%d z3%xfiJ1d4N2Cb3dvkJ)>A>g=;Dyu&zue`!iFT7T7_COhp;$RQ9MH7+|%FJc$rmEkS zbZv{Tiyz<7ODp4wQvU0>N-wc*txA0^!ZsIOx~|w}WJwZx3b~xh)@toTS0ui3cx*2* zd|gsmrBXf>D64Y5BUSxNCwSch%HB|8Sl-fyE|{GYOF~LhDxVO_dOj;w;u4fCldTJ% zuoFcEt7Jpv*y{piS%ESddfjA*i$mEO)45nzYgWG zp!CDA+Qc1bjG?Yswvx&DUv~Cf~{ZFQN5`>o$mCIld50XPDm$qxTm-beylo857 zJCw0_OS=SJUgnkbL>%j2D<#5%v@mVTPXNlF&OUv;|DcufClbn^e);<8Q)j8{cc}9! z?^lGlum6pxLOJsknf%1-EK8epUPrEi0@O3$d` zUt_J~)%GEOFy5+)=M7U()aFHtm8tCYVnIyCaa7FYKmPc*=tHe0m3=pUJsBv4AJ&~! zTq;+!>u4&s8M*LOCO8OANpjKD=o$QqSqY3#&3sDK7bjR zT!C`pDeV16Dx=SZsF_(GW^%FJUh*dTGV|g@V+a;rGDUhCJyEL0WHa>j=n7tevKk)4 zZa}$WmL&a#8>*gBB2MvIL>9`H$;Lt@bn?j7wL)53X1u&st8VSeIL6kuB`*x+2yM3i zv+(*lZrOXaUsz5ELE9NRxwopbY*O?p~ z@s}ws^?cpSjfyjs=pSSTJv@mzucXwucvvbQUBFfB90~kVUOW!UA;WH2>C&iB*=^}O z4V5cQF5qS~%FxQ>5Iv>MLy<*EW%}quWgK+q8!CI=LS-2u8Mb|K|7e2^*1F*(OXaab zSu{GxwVjM?_dxYe7QdFjVj?pBXOAl>#*89QX#Vo0j$z;d%kmQxkHGD(Ag^vE~^bE|ihV z+N%tyjDc&uWebV^G6dzjn+BAD$RA-7tnV_(Z)vsbEm93EKVlwtZ)rkdY$qriDBs_I z?bE6Zhsc1-88*Qlj}(*fGHT%(lrvAoiH35G$-z;}x1zYzUFLC|Wyr1AQ#}V1KYpQ{ zc1;r`h05Wns0{bEWilg~T+PCAM29FJ2RzU!mDk6p zEKU10QyD(N36q$i9FLo#p2`N5Wu?zx+>*O=kjx&aEzT~dtG~vlVrZ;?zk+8R;+WpS zSXK%vuPKa)WkftABG4ghOJ#i_P)%Q!!1Aw>a}DLiaVSf_>8?!MCEbe8*EjY@Rrod3 z`pOR*Mm(Xt806GYuC-2tt|1>m*{`S5MX$w)-1t*HSWCL|`oh38$Q5R43EZ)%*@ps< z@9IomkR`z4{CtNJB%|r^@H3U?sO1Rn!oqz8PcdlayD<6elWj{jMw~rj?gn_Vh)OFqLC3Mr_5&K=3?bCePuC&H01KY^2<`dIZ(# zJGPB#Lc5j9CrK+8YPHgvZYSpFoV;E*RX9*aEFaU#IPJvLcw)=7kGr8vGdYe&%~8kr zE?napSxySt745CS3LSaIc$ZpbOw_X%chB6S0EVbYnNQ7?bXo0_VBEOXn$^HWWJHV z?h#6{Otv7F?hxIQ%0XK2k=jdC0F&>U(d&zk3uLkah2`N&E|&qu_&{t$+M)oR&R0e4 zoqDWPKI`+XO(=gjyMOb(50ZJ3iOx253Nlvukvf*n=E2m`6-ffL4Rv4^OSi<9} z!S%(DI(ki!XZV%iFSF;6-|iZeZnK7-dNAuo<&yxQ+;meZk!;K=YlMUCKAmhlyht5^ zGGLfTSA#H<`D=LJT7>d!cJYyPa-31C zQ>Nt7%uPpd5Rx(3`NKfD2bM`Ge>gM$h@t%HtIaZZ70R5y=}zTrjZI7V;X*l56(~~? zcGp=Y1t$vQ6)uOv%7x9t+!NCi&%bwBKdI~EpC8&sN9?fb{Ybh!VVc6W^zT*7cpEWYZA-e z;rMlI#{lA><|Sd-_hDB=6$>L@%tcA%N;%Zkc%fYGiDaqyo3qwVF)l>#;CePI!3RKn zQF<~27lIG_2qHRKXaq-&)GMNsg zXuK4+Qjw1z-jOvXKN+Qroyni>^)zJ-=@0L}0+c^=Zd9Jdv2C~MTv?Sl|E3YX1}5L# z^ zmCAHrMmemM@bD7lSDany9;m?y#)SwD^V2|Jy&b~mRi+uSaBgq_8yDw%W)iwO763d> z%c5md12D^|BGOa;*`dqJAM~*}dKHBSh4Ox>JfH&GZ;vPYPNjFHCDcCUA+O$kp{&yz zjheDvVREHs*R5+*7BwihW4VRN1m&9>&1CIuKG*Y@JyYamnH+{Pee6)~9=-nb70bHZ z8Bw1;+<$$4|0`Dr^E;TV?W6K( zTg4ahKsvd0mm-w4g$PBkk3yM0OY7e03z;NhR775o2_#w$2f7+cn&kVi0ZyW2!L63Y z>jY&5%2QLB+@?u#Eew>Y44XxmBpv9FF%iL95e?-sJ(5;>iF}?~Gt06atR;(G%+_ld zzdpXT3l9qAQcO48uliSD?}4&*9dK`>T0PhxD2Mx?Y)jZg9m+id8Y*J@gEhymjkAPY zR;es?U0(G7q1^-%%>NO!ibqC_6$Kw?G!k)Lxw24SO;@4EvssK~NT5So>Y5EEjH*(cz9?g0fc1 zho~H@j6HfwCQGJr2upz+Q&KLLrmoL=%76ah!`C0aeqbnLAe)$c_7#Nkn|E*SKXm&c8m~z|D0^)a z60(d+znmpqap{^{dsWj4#x3N-9fHs!M!I3}Sqe@O2o1d=33jPIDQC zRVG&|l&P4E-Bv+ZXW8A|9U%F*QbrXV9u~?~sa&CD-|M>xW!^~H)7jgoQGeC{vXlEt zuf?ne<Da+?3W@PM@xmP@c)QV6mtxFHPmJM&+FWnwdJTU@DBpK#RW?l4j>>VzUY!hAyEwt2A{byw zsOb~K*WPnV_=ke>o(9cM+2_fSOnZB6!@+Gare8G(T6fJwQK7Qh!(^1o*jb>cF~i$# zw@W4uaI+XpWq~Us>m!N^GL%dnOyX;y_nk*Y2XQ z5l`>k_1{ufUS)D=i(-uh@D=R!W}(BL(tBQg2cnHk9m+^$vL-wNWoj9`xiL_tO!8W{ zLd0uwy1(8><-Ql0zxcIM<(F?eL0Kid>p|bg zgvKRyt@Fag4pVmU5oPc}P7GNVKgIsyrwnB=PE${UWL?_3l&Ps@wq)Kr9;`y;Ja1f| zI)OFkAvM@mfTPwQax^HVA>DeWZiL@@&<2h{uMDawfsn>8^~?WjJAS&iin=2&S7TB5 zdI6kRAe0w3t+pX9mhTpeVs10ZYcm53i@f0HA(f>NR*qM6P z$&Z@Jen+9)3T1f$DhnqrNA?uyqI&F2FQHi0RL(aoP^Oe}YzOork^#z>`NMXeaR9p* zB$f58&kVb!=rvBWO-=Nb(!3*}%!c1Vy*|lG<*?zmHjPxS7n;$4UY{?RE0bWRCpe19 z6qG~9YwHvu+Z&mrHr|kfF7LxpX(K%ADy{#`R2$nUTVmyIRM|A2_uWUypyIS=-8E(P zJHi%<4tbaG-YVKw0Q_{h+wE@d?vfjQ91LLqv}F+)CVOi=B`;nT1qOpK26G)c_Nu*^ zjI9Df;N7P)Ai`qXI(BxN%913T)%~fSm|OMJ7s|5x_xkDNP!`ox88t_QRW2X6uQZi&oCjE^ zG9p>2*Z`T4Oi<3UIZNdbsN5gQhFy}3A+N8(HYkVVpd4!F>lT^>El>`okjf2p+&SKxP zvR2OyUshYang=FX22puNE_WDbUw#27zdWv#%ZY%fdy^!~ zo|W!XX7Ws?Y5mUL|J`ZoSHE>V^`z4lDldf-$|5^~19z1k&U@K_a?BN;w9iByyHL(3 zd`$st1Lf{iuEuzSt7}?CQuK*t>8zj905vI_erB@U#%j#uA^XI_7AU8tGsdq#d4yCp z(Q7xzYD=y$7hldJl>KE>;MYsN_Lfx3(mce;!}gJ{#wEV`GyK-*MxCjc0quM)^l@v3 zt%PiP%QUM%=tN_d3`1hvWa?zY#UB?y;tT9i`}h&3Gaik>0F?_fd4|TvyM2#DSP_%);j)rA9}VT7>EkGsEtEgM`~2?Z+jno?{PO1W=g+`phH}s8 zjnBuQOf35{Jpg66nA6HP_n9Hq{ifeLj!v*0^1)R(H&D*2rCvC=+H^;{PzEM%9yolx zTwX1?((8KB8Ok+uNt|kkk8#0Yj2ZB2TnY*&lmZEL)&_6_|W)1=N_#=sX>dQrWV{dTXu>i%9}3aA1iK}A-M+~MsT{QQ75ct zCN{!1}u5yu7-`8ycVt%R$#= zpk^0wwYZYfLb)pVM=Iq5P!8ItJQm7f8L)pl-^^Q2b&!&Pcg? z6<#ZqM=rdgttshhA;@T~L1llOR0hSA2Ejg$&EZU5w#2Rv)=XF`m)imao=>UCgQwOh zmeB1_+M5h&QOV)q)R7y!u5^r*1%Az^bMPxu001BWNklLkQ z23$(F7O(!sU-xA4lE-~z3R{P0HY;YX=aEVURVN5C4#K$@*qBwLa$iQDeI?j-$|+L; z_Gdux>sPN{zkK`l?d!KM0m^R>%AbGv^y%x@XDI)uNY>GzMJL~cKIt)_VHpP$Y3aW!4?94Ba*XhKGzM#8p^UWlts`G$~;8_ ze?;AKF+3%dTc|8Xz6I?=0cAUshbNVtp$7+#{!AuG8P;mN@&JM93r(^X)5EF zXepA>s*O;_7#EFO=mcdE*7L4puR(=gi>qLKh_`dUnyd}c8svdg{fT0)ud)o9R33aX zJ;JXelY3`qFT8M8kW#%Z^G0Eq!Tz=SGIGVaIjsqNtu}AO643c(=h<_ZTP( z-Z$beN>nkFy+|RH72T?#@L+X_6t1A>7mJVMsC>pFpJr!WsC@SI{jaZI>Ekth_4?(@ zcLeEoXzlfQq5QmEI3|>T`|Y=j>A|ebz|GE7)())R>8LE1n7aAmhr0SLb)T88*I|U4TZdFM6ZW{t9ui<44PtDj2Ye}!@UED z5I_@z0jf}@cbP3VTUTfPUwvP_Cb7{DQcQTNb}IXi z0?IRa7|Xqiyrd51gv%iDj8Mj5a6n~PqeLjekfYb|Ct&jV;^S{b<@3Q*{wv}5uicdL z*Y|HMlr@?$wMN_$we3dlIyE)e<&{-oxHl{nxfa=6v|BH8qWrfaV~{NBYJHH z5H9ORn1chN`r32D*T(<)*bI`6ubz{1?I1>F&_dH-R@%;WFQQ0b$kH2%(e+GK@DE^x?3iWKno)?9G zq`m16=jL%E};s`5@w zW!FNO%r;A*Ok;K19~Uz@iV(_C1^vO z_5HgN$ME?Drj|Lm{Py$x`}Ze!RnOkPfB)f=hVs{+-#@oqO?YrJjhXB%7EyGwvtXV; zC&$j1PA}^UWree|t-_vu>WH+qPK@M|$tef?_T0PJoybs*)OPPH+CpXQi%bd19hn@o zkIv&-DA5Y#p~D+HE~m{9_Tc4Lwg_c+C~)Jci$S$sAZYZ|c6JcKHCat|F}3?l9J#7=~ASC-R}zyrb$_%tz;rS68} zara?aJ8KKS4kVV<(LF*7l?loi9Pio><%i+^8S{If+;@Se~%>I;{M(rc@4t zLuV+zKpMXwCi6jb ze*5cGs66}h>&rK9f1=~<+jrz3_7^;U`paMb@$Y~B^Pm6t-&e2id&aQ`J+!kY3uRq} z3Ol*GB`_J?)DvQIq83vuTne_0PL&sa?h0jHtWER8PN0;538BzLt}wY`EjYZfL)aD+ z3uW?<><;D103$~z%Q9d%8p;FWloKTnrL5X#gteblk; zLi>i;QN^+VB;OvVa{Wx5I*u!kkG7#*=3vW;k7tiF`6*A7!MW8>D|&5*a>2G^P0oGV z_*x(N!$Y1Ul;K#dRsiLj3!w7Hg@*DB2TE!(ccsp!U-egiJ^sz0tABl2vbb`*dj0D} zO#bxiyO%%x^tXTftr1$cNNMFD2G)`CfQ6X1C)D?%$3r8#`2p&S!1bQdEFwF16~rB;lRcyMOdDn z#v9HLd_U;iTt$YnJXz6~$SxsSDc|1qdgcADH)mOMDB)zG?2x_AveYeM=%jj68km)) z1ycFxrIbYl%4@bH@C=b7FW+n)5X<=jxUAwVTbyfmM3%}!&iP^XPV?tw7bw5KfB9n1 z@%ra!2=?jS>!1GezyIdrA8`Eb-~aymzy3um{y*mUpa1#$KmYc>ukPP>wA((L-46|3 zKRGO)m&e^5=ahvR%Zmr7<_VOt%5Zo#e(2HJk7RbXta%)^GItjfUT|!Ca9$RxjGVU*A zkUqI#ycWtd;DY`9=H(IPI1ldOVUzFj9MtmVf(Ki{zZ{$b{CRf&hQIpU1h>Z?Q3>#dVeR3x z#IF&`y&o}9c8x$TWH)1EspTHol?|TZRVmjcCNG-$Wt=e;_IkDPpQ4p+Qao`e z|9|$*wJC9Cd;0{^2??EqfOke`R7PYt2v+ezXFwgb@V4r|_pW-r|HpZHt<{|q0TKx4 zIJS725fXCfUtjBJ$l85j#%Ak;+O)P>g3PMpdaZ`V?_Ke5w{e|JD;@cLkR#G7=+9R} zdAj=%2m&FK(R2+8`L=_OWiVmiKRn!}#4?S?ho?avwoX3H*Xk-0^Sy;kwiJ^MBZ@3y zj2tGrWBEOf6qC)>Ox^(j-^k(smFhz(e>)RohG;kF>R3TP`ATPbXy3ImnVcn+0m_A? zBq%jOWw4^=)sjNpwXwa(_I)*3s;GsrB=K3)MJeGHHQv{?bb*HfBB(D|fx=)cWNo_{ z<>WhS*bf`<0L_BRMdGMfw01z;uBEb!ucYoVK1Qn-V=`^x!%;Z}WiVkkVxx6JRBoL_ zR90-Ribu7|i()zGPb<=wJREE;#}x$g?n)?kOW@a@pbR>BcNPCpn5;VDNw@M3BksXu zk!9usQaRDJQPR$eH>9Akqto=8D!>9l1;<(K?AuvQwRUWAxL19#^f_IRt*8lswn|He zW?ln)mBp~Err~x0#J1a50@cyCSIViVr3`NgOT71x%I~AsL0l*Ug_=T!ZWV(epzcIa z<|{XI0ZJFpEZDq7w1?5Be%4J-eO_5>VF0?7i(m4Z-~*OLF?pzNu8Icm~uG@~H_ z+_EDox6s)PDJPdgDZ`HinKP`+=cJT}o#AE#O-6(6YA6>C^a@n?RiI?};A`iq)495R zy%OIB1FWl!l)i-+uM8%G8T)CtNuy5$l(#Bu5_~u+Czy4q+ED zIbD)(D=1@Fx8|LlCHu0AU%vs98^GkYZ8!X??c28B%6^fJ1)SJ2l%Zy{QAjLvz1hTi zSB?NnZnvvTb;+HrtGZ}QWi8kyaLY6z>pe;3NLd0iw^Q2j;&tvyrXu{?7x}WMvR=W( zf&oZ=cP*3YZ<@tDO+Kd>QOzv zJh9-i9P%dqcE*^FjUC&z-T)#)S-vc(%$A_6rMZ>#D$|>Q?G_176HKPA9|FoecQsSh zR&(nnUQAmm0LeDWY5Aw`2+9rtj0_FiLfMH`lU+q+4mEfLDcjp_M&%efYXo_0M}XXZ z`CIs7=M3hppmJ!m0Qd2wT}2D_5&R4}%y!j1X`obIv*5}c)7fy|y@v7}m1(y#*j)T$ zx>6^99Sn0rnMgOSEX2pWG8&C40>S-hFco7mnaqM26xN(gCyOy!vmqtwag|U8t^B&7 zW#lu2c@>ZJQcV6pR8~+HOkP5Aonc=x2POd(TlkT%99GwqIodG;DXWy=Q`W-f5Yhy0 z7#hUd0GUCFTNWcI>y1X!2c^6M%1caM7L)M;BC(zW1-QlIaLvtE9!MFl-s|NY;MCC@qJ#i}qm2wcw=A)5>@~G1pR%V-?u^P&wVcz7VKy2n2 z74p0?u8b-I%X8(=4o%=t$LnP=ChPUp?Gt&F|H&Rtz4a>i`We7_{i&2ACNEj8$$AY& zNtqchxvU@R9;-zLqrJTKXv9LB6_c~1SwR92lRecCk|kTz0Ft5G1wa{_GE+o)D+iRd ztia>Q?V9wv=9S7^!MG@t!Dg#RkK(gjzVeh=?B2e!@?MxM*Ckui@`5|~5*)j=R5SHy z#7e#;l99MhRDpi^l!2HF4e5@)F+;2P7XIAfsarX;rcrhyLYf@R=vs1*gj7DlkZU}o z*tEiJT%Md14)Y2o^T7b299(xhoy`X5V7!XSz3w8XdH7k7cwFh?2imTOAe3Ly9%<+Z zbuFNb2~tlF-@mU`%KtpRPBv_E223tW*C71(U{FRT|5#!&V3~(LWp$fY4`s#{FpfH5 zlndr0i8C^QnYlBRJsb+E8rWqu&x?Ti?~!a zk*q*(K@gW@e<+sya<}kj3uO%OVk#2UB#~@L3%2S$rQ1iBN8)jLEi`tS^^$^aE zQ{6w7RWoNShEu9oj#uznRlTwVD2JPas*svRRkqBC%ASY!_KDQWD3x2Al`Ye{ZrJ1V;v zk0vy^+UuoT*>!zts0CccaIJz+-nfMi0A;jQV;y@>+OEA&E5m=fM@Q-*&lB7pZly4l zgP`B-jE2|4VGs=Gz0SP95z5!A;=Bf%pNtj3kjdao7AUUV2n8#UH?2&k(-&M31QW^) z#x4|Oy}r7=eR{b2zK+V@AJ*n$1|VV%J#tlPy{gCK zu&evVa_#u%zchaSlxW^FkrNrfWkMPI)>7`U*n+2qyn8WP6Q~SQxs^@zB$bWKf?Lec zvO|=$9M_er!w2V~UM{8)!3F9#^zgTs=JFirEc^9)Fkf@-D)vYgZGV4@+X_0i=zgZ@ znylOK5Q>X$E0riEaIh3Ehr3=c2<04G_`{(bYsL-tu*5P_Szekh z6e9XeZgcPg+^Rs< z>8c`U+V%$CTu^qa^r5?WZrws^FIl8*i#lx?K4onudLMY9Tonru4nUTNZ)>|U983rJ zw*tw6Z~~L~AZOBc+wt+{b*p%~sqb3mS=FndH>05V&$WdQ0OeQ#5s77>vh*Se6q_k1 zOCA@B^9q7#AI!rL`5g4;!|`Z7yxuI8N0|*N28%UJ?kg%oS*>e?+%vSN5?XnYRn|j@ z|H`xcL_Xbbl%0;D`B{1<)j`PGMP7Q0-x^FCp@w@>62?4%>V_h zA33-1$3r;^s|>L$sSHrA5|mwlvMej$Hj1CJAn1=IlxGO#VSlm_%E34j%H8Y98lgN< zR1RWkMl;mP!%D_VAP6R;ldn)GZ)Wm8Pn(o7GPxL)-&iSwzpiX3TNzMRIvLv+HX7}A zRIUc}GPsx=TniTu;5a=!{e9FrI;v*XnP6!sfBEvI_T~H%+MJc)RnCLtP^9ez%JGyX zG<=z%@4gHu1K+eQpzJS?Lr!zKpw6NDs%*D@yj9S7XDNyn`qog_ckXiL!WfKt4S$~Pk=Ji*4y$@1t^b3-QgIaJQhlM zI@|oDY_IZseT-NTgjAl9A6ZiQ24wWobA#CggfiH!b3*xboxeB$9E)98Y*lgWjhM`B zox=pMXDG+QcQxou&^C;ASlAUim2u2h)+ued5RqF)zp=;-Je4m2IYp)~UtISKv;@Bt zSpET#*gFAv4U%JNL|XZ_QZ1yh8NZ3qer-k}b!9*~%M_fam3{G1YTRA^1I^wal*v`- z(pMUL+76J89{zqe6umRw|8V^zb{t*^<>kI?CX=PT@Q!xHcNd}T(k;FnmxDm4o}Lu*45>WW5asozP!1r#`=$b+-i7e`mbF7%2pkYtEcs4^4vm(P=}eZj zCV?I8w&F6T)K+70Uj?Xqibw_`bDj>;#fC$P+WN=GHCM0IK$-vNQg?QtfDol?fox^W z@#QLIxveEA8}UH*B2ZqbC5=6ny`uEATFJ5Sl_Kr9SnBfJz759bkmvOC7;GVxO>?O) z8=Ama1Z7n;KrtD{7FZ4{-JVd&P|b2N7T*V*Ngn?6M}>v5vR+Gf@-q^dYI=#UnfcAL zF*T-mdUyzXQLN$e>$-YfldfQLFssZLe~R_m6*}2%l%I$Xw2Gi?EzSK*)u?IHfbUHi zkFD#DT@1=cM?z&|xLVo@&!9V8q5&;I+172x<+aOQBfZ%siJUGdy$>kYm!TZLfAj0Z zB3jZc4a!mI9sIOMDCe~rcqVIpEGpBQ=WyGjY(v=MCz}gN<*-hB2A0hvm6Kx)ma|L8 z&t}~Ln6LX#V|p-t9(8g-D_AT^<-yHnjg5Iu$YiRnNhwjFlrx_jOvEDL^&Yw@Kjet@ zdR<$&WRA7U7L{Rv^4D?q_o1om+L+I;>y480@Bzx2wTj7R)+N-YxG%sm#AD~*pHqG$ zk<6ETvTJ9$CMQ!+%H!*a5Xyr=x8J?Z)qOF;fPI~}?DYieYeJ$jl@A$<-}>2&FoH#Q zfb})+VoY8ol<(H=`OTQ3ue*hna=4y2(9kMi%Y!sf3b`yB${-;%YXy@vZ55OW%XYD% zo4g@KGFY#ZTG`>mctK@=r`WD8gm_aYDDPeqC`IHLkX5Bk#&#j$+EZvPLD`C+oJT7c zi*HK*wPls#R8ACg`H6FRY13Sr<~i1EZ|p_LJg{%KJ=1Gq^Nf#^ZBv6~PejQ>Y!9#u zo5a)k$=iHVnK6$gx|%Iv+1vulVye?Kg0lnY_Hfl*%oLOdubl~+l{e99(p_rWn3r>X zq%vt`pz<8cdSxisU;wOuFayl*7efftaXsInj$ zjgpg9gjCit1Cce%iORZslz*AHoL|JY8boA*bArh#|CwR=N$O7peFR;_NnmMe|Oo(L< zo}llP81z1MGEq_x^5^j$u>3`h_zA^D0BrXY%Z0@98Z28Zu_n$Krhz&jb{o5p5uOd@ zj)3y@^m?&?fUjZq>Z)6rR&rRP7x84}UiUgTv;rCBbuBbAq(cFhp-a?!K7W4cLk(_d z6xA2%T`U#4&>rgc9%H@M2YWrOm-sge+V*f!DX^!9R?3=z48fuyww!^Qjgse}G?Z1g zuC{vmkAkrqXvOBOoaXCxLjW1dJU5c=6UAg3q%r^*zi7=iLD|vW%N^b!l|P_aKiNh} zy+tjj&3IcV<6RpIr^7%^s$H+v1#78XH0GEkBK69OP=@rh8brfGDEyDwahX%NOuK96 za}j$$@wWcKsGM5#ln%)+iILS8_>;EVQF)2WR%XT9G@s*4=AgP7?sC8JR4lvZQidYwK-jmd^PuwJcOw{U*x@ z_A)aIR+bE9lFFG-j>s&%%h_Ad3hoC}t13@C$_j<5eR18It@BHnqE_N09%jO~a|dp< zoBD^LGEs8RkPHQ~+F|4L z@kKmv<3B#3ybG06T-MfO*<+d}iQG_EvCzqlC8<2?j;`)I{otlM#+sJh&h0~Y(x2t) ziX31Ur|avjkxUX6l82#D)O;?O46)#YK}URup9cfLG*B7KUq7yf^21<#P&Krol0OyL z*SJ33GnFNhp@V@Kp-^r#_Yl^ipd5uFYqQMg2_J9SG}W`3UPlI1~a| zAi2Fgm5n%*ecjd3o$#O9B`$K9ZTtjH|i{LU4S&i5G+t*HKKusxxR9>AE^|*n_ zL1jFYKhBFW`B1*(SU9w%xqD?YK{=Kkq-l9U)NZwivI5GdC;6z117pOT1d{>FoHGSw zE2OfRrkT`_+ZCz{q0EU;5tG@57-p|LDkqtYP_D=ZGmOQo*Q+D2!(yj-0c$d^8Lq*% zzZ4@Vw;hUwce!Jink^saYi|2>0?L0Zl|d~LEj4YgkW4UH5Ls+cY{|DBn-*El#|dIT ztXQ_PY9U$)6Lvg;2f{Abh&}I-bqm>P=6FLNIrG zy+L=}pY*%LX2A6A?fw13<6|b1zkh%1P1eH|+c!%nZ)LsSuToB=4KwEIYoH8^t=*v< zU+NXHluF?%q_2?7xu_iXMRP8ryKD+853Se0FR@RO%HsbRX7w;@ODOXQ%IzkLWb%eP z&Vw*t6r6--Zx^YY0cFgcW}*E$H#=n@L~ZoalKcYdxT^J<$C1@t^w-RhV#SLah0Xp`X`jP6w6sjQCW`V=nnV5g0+NX za!xMU1SjL}>up~^dED*xZeN8keY(3HPu~p6&`ENNq2T?=ESS!&`wQ`Nw>uhKUEM$3 z-4T|PNWOcx?esT5`2~`p>F4~#LxMyQdayq#Yw^69y2kaGM|qjaHs5)EWZ_t5vZm!Q zM}zduN#zjA;-ciT9i%R+YBy9ZOl&=@)g_g6NoBTWW)J6)`5LBt1b>bQW{*Ar%wAK# z*=u_{Kv}D2K{;)|Ueh7iMZYUXLgl9N4oXtY)dI+d0bM5z4Kmd1w$t_{lQ}sQC`_#^ zCcBc#MU=9uV>^hlOTr&wh)dt$R$Uxi6YH{jdYfPF4U)uUsDoaw(vYg82 z*apkgPQ}VWuvbGFOJkKFT4Dj8f2 zj|}lkOj9W;Z`sg3WU`c*`IsE-uyo8q5VN;6lvB00EwWxq(>0|mt~X7%k(A60GM=q+nXKo1cRuc-FCVsV|5;Rq07o8Xt^<>KI~$T_ zXLvCk@(0m10TM(zzI3Sn_%k@ucb%nC!SQNaAWo)9PM18>H?rUR^d&H~c0-nPV9MSZ0MQaLufIj_s(t1ZOMjK9@>a zOnEUR!|!gUFr9RIQvqej2NqDiy}y09?-r;8vM<4mV(gB* zmcKuJUGGk&7wdOpQ0~42LC#&6#%Lc*CPB$2Y|ThC=?r`CHo}O2^jQPbwfM)KXCpMg zFwcvid{+BbJIe*U&=!5tD(Y2kMnIPBry5jN)>2TW0-%vpwsvH4MKZYn+g+Kh({Ac* zvHaO`hD$uAAzX0}VWPs7vnqRrLYL z!2Z4YpZjJVpm!a*if!ap$jG*Wq>qr)F!Mr80$zz5jF@bCe&a%{0_c2-c?44);7`TA zc$Lpl(1>lWC>8=#j+w+L8_M@(ct|)i;mB^o9n1ujXTj`QK>6w6>EZtN_Tj118NRVp z4rE-FVDfBwy%>*WK=|zDravBZsBILC`(A%DD5t^mD1!2EH0)1u?L+_^j(+X;XQe_} zGsuU$+)xOxm8q1)t;B`C*cr;iWTr|$;iXgic9svyB$YX@@1fmFoZ^8a%J0 z4OY1)H>e3NT)-*-s0CK50fzSpc>qv`3fMrp zCjsUAPG=mvm$wdbwNFq+A`0y+^P`DhS9xig+may5-kL-~19 zCX~U0n#JV0<%ee8)Omv@6=2!kwVa3+M>6_01(rP_mN%zKf>0I{KOnivTX~a}+i|6= zklb!JSlFo)uWi!`^|E-AZ4H%jVJt5(xl-gccsdwkJ1Q@Ab6zEs*D~4F3q?XzkjQTM zaC2*A@+gB(SxnNWzm8hJkB&}loBNnD4wX>BwNSUXU6n~~+fvzI9)H0M&h3!OGJ-@C zZ~OwFESPMAy@0DLhKbeC&X9D{Os)&H26By46#(C_hZTg3GFAbfSWZ$I|6hyR{Ad+7 zGJmc^GWwK910hDidj0TlC#2{7)BSCyJ9)>)B6#Wdp9ePuqOPt-gI;95z8Z`s{mn23 z^ZBG7hw`FdB9vD$xo(=i1}m%OITd>?>7_t9M6$~K(X?6~D$}~awcV;)&0T9#mK|wE zOcq3jcFNH%NU2;8rE)_;xwrwFr#X2*Z9JWS3V2_74YK>76as0C2=aR&_Y_lt)tjapqwTR#2u>(}q!pELC;D63lU4(EVn z%ky=yvF59^aM9Jj;45HrQxffd3%Oc)&ez>}ts^+y5RcGb6h_MfeA3 zg{0nlL}jT-)=lA)@nA6NFM1uY3E$mGC=Wgsl%KnUtFB6F>b`bH*DsqJZUB@QaVWnG zON25Q3Rf{XyQeYSX)3|D1f?viu~HZ?CFLTOwGHvtkktfOu8J?M0^4j;_3Sncb{F0cBmc3(r}3pv+b^j);dsxkaqdp-DJ;Ph}nh())+;>~8qa%3OTrwGM zak1vv70Sw>;rkR1V8HUqafL*#;vzso*`gZsRr@nPYAY&Z6`*A-$7d}Fp`{7kji9{t zmY#G6gT;8<>s*1OmY{rp)fvCK0K!H@oaIYG!>%4XIi;Gltix-VbwWp_Gh*(J+f-=n(Oqb^C;`5*GaQNU` zXT1n=>T<$!vv%*Y;)RkC-g|0+CRa?M%ZkFC&x1WDRA_K`FP;e65&F z^SZLGIu3W!P!>-TpJKW{I{lohGnTS&QOfE$Hiyt_N2hfR){zgPT(5IH89P#$ODfyA z2*6McpW2~{a}1lSa z&#O-V&nI#0iO&Mc^I%F)?!Vr4Hb$3I^!IcTkG>9u&o3oG8KNt!jZ7BE5~tgWn5;`C zH+SBAipfM}A(in{{IpgrBa%z7cQLG65~H#_B+{$AU7#129#udxG=DC0?Pe-P@YL?EGvBX z7iC3y8HnGw$vVztjZ~y2OSCO9dFQrKTF7KoR7y!@59G4x2^_A&vRjS^ikS&2hftPM z8LCGkluu#gR=U+HKE(Q;L;mO6ILp>suQ5|%W%SvBBcafI32LcDNEPGs1Qjn&3S~@S z#(Mf#mn}gJF3ylp%J^tiK1UXm!7L5^!yz}>cUy81qtHxH4w<|glvUgwD&;Ej*K0{b zxmpD9B$Ibs1^m5Id1aSnF|is;H+fd5PzIC-z0sg^dv!0A^3&7Z9rP`}?Q}oXfeYp_ zC||$cUOjKJUdu5_LYeH>yK`9!gPM{|wj`4yAmh;DOy1pi9fNYL3x-GbYmmwwZB;wO z^{mDEVPG@EDAdbBD2v&?0S33cRCdAUEFNHEeY4QswbpBTyX>9Z8(c=|Iu1_L@6q_1W|1J6rl_@?9Zt>eNhTX3Q)?DKx9}>P&u++%kyFD ze1}UHp$xhlg}LpE1yw7)27v9+=8SL=@EPk>3YFtv-try~Cfz}A(COR@oqT`y^zbO4 z{CIbJ^}(P#yo#Vaxw_8@Wy-<|!hufZ61rk(Vfv3^vK1j2tKueyrh$uSMUAhmq0Hiy zODt-{E2$iA_b^Zn#j=93rTSA?0?LgRKl+`Y$^ygT$!nTth$uAuzcpQ0=(Q*JWb_8y;2pjq+ND_E_eg5~$eyT|Vz z4$8CfZD%-{ks*Bi`fxwkL~*PiHkr;OlxMRkR2Q2oD(}wZx)~3*j*x7y<*r|TEF!oJ zCQB&OR%LxSOG#y@^2MyfV0nqkX54-aab6}&`Zi7?f0CJ{$z3{l^q^p8Pn`|BwED~3uJ(@ zOBQbYi(R1Xs8gg)FHf1vTgqH6z1_C{3FU1^R&_5Qqgc0ly_bIP_4fAZ>GAt_*%uMM zKHLsI)KQy_uR8sig!1*()9o-1lo7-fg*|(Dc@f`-Wk5ND$)-ZGnStaKl$#|S4@96B zx<06Ihmy($$Ytv=SY{!PwPasXl*-~C8BX+e3$*ed3}utCruQD1jA6Rcf*JMyYPA@) zJxLg^F<6Z?RAqgf@!{ME$;Xv&ZXlUIr|D(;jes)QBrqt1LsdK_ky|Y6NaORc6^-LM zI~>SF37jQi4%=i9erZxU#9&&6u$05>#AV4Vw);uKh9)@WG$1)mZ>!(D3`IG zO+XpBj8fUdTG)p8V#K><25$*FjZd>iotfFyc|NAqgZaVUH&<>XH(gU>MK%pJBYRtK(^{p zk53~!9S-+*X{`wLc%4N3o3;|>K;-a@#{S0fozGKOidd#5bITKTt}N1<#m#hpC9fkM z7dY|j4hkoS<$|geDcA-p33*4Q5DwIuxvKa4<$pBat_5yr!1aX0iz98OY^>;x{`%xsewP*J1*blUXQH-B4Ms`d44U7 zB(V%=P66#@P@e1hCzN-_vWHBLpd7LpgtEJN`tH154F|7xkIPWL>IWa@NI^H|QFq+$ zcDmgmxQYAY+d-~$WBB9gOMmzrgK{v-59R6-m5oG*mtrzwrny=s1C-scZ&Ya^lFZ7e zx(!e^RN*))oh!W`CdY!jv>234@nG$ipfWV8M5+9TLRp+*p_JX+{TB~S<#t=O?UK6< zP-ZZpCyduvqexJhQFD<9$%JJXAArfn$H%oen9HQH8XhxDhJkcEk$7O5+>3%bcZ>9b zH9+&CsgUe3=0YVMjTXFE5dgk;Z9jBlbBBLId1ov`JNBlYpt6qs2xz&R!>4?8`!oQh z3{3t9sQiya^FwDk`!L6;KVA%b-SM#3>2$}7$!sUgf1NFe^hU%Sx`&$!*3$!uJW~B$a6muS#CwR8LZQA3Jcq zA1cRJJeFW`ojK&WeV@08Y7!Db*#amVWU+_~Wiq`3$D2_TP9pk;m@I0?KY#u_KK@w~ zKOC2iWxU?;Fq#^~Jv%H_?AG)ezC&?duIuQ#QTYOy3?kXnG>dVuJyhjdIIoyU>ak(Rl9dIe9nd~(hKF4YwF8X?RyIx3_Lu#REY24Piwp8-I(Uz+K2PN|- zl}n*Agg_>(*Cdp4Jh^js*Bd_&k>lh0<6ts&aSBjY)@y>Y_?{ce94iU~O~CpJC&dVhYnox5Ym-SsaY`-6Z`D1` zz@}+gE2VOb$Z#9)&8tjXh)j6WubhPP{>J&9sO%+$GNu^m&U=TlL@-~n7%uoa`3Vk4|<)etE<6CaB`y1x#4Lup?9Z40cEIM z*69qoWs^RNU?JZC8TLsUo$Kl5;tB~Vrn^T zj=gVKR%*4{-Z%55_T@+IiyXDukJ2|8gEDxPwTO|Lq_St4J^MU+~+tawV)EiE0 z@c%RqO2oU|m!9kmvlj=vc^g(Geu-G{Js|qh!K+|9%He( zn+JmOUa0IPnJl5KJMTK_1eQdUkOn+9thy>|K@GgLx5}_4gYq6+y!5UkCZ8W4|L|)+ zetfz7fn5Gk*^^QRG8$goqpXEt9E>C@iL4T#Yw6r$-U+3g1?9mTLm7zJ6`~e)BbZEH`s2}PFc@9kK0Q3# zJv==;J>9?dy4}G*V0JKEv$Ld#A@X|gdV4GWdej|{yWO66y@m)K0aqM*#g%tlIt8We`Ni=~QmWDt1KjxxKx8g+K3&yMx|h zv4O2%xPA$ONq@K)J_C#U(}|GHi`-CdwV<5vB|zDBPfi5gqRta>CZ~`b1wQYY$P|ra zK|XQ}%NFxIFC;Nzdo-eJnyT%Ik=8LZd#1(?F#DhHk;*a)JZj>m?ohwP($E-;Br9E% z!YY6;rl*5KX6V>YGWiXlTtghAQU)xS`{F=9D7c0Z6HN02j(vd~LB#*mE}cDeXh=|! zY2oVEU`BM8aowR5v(~OqUY5!!CR4*-Usv1Pundqz&fx$-t4AKfoPR3jq*P9fLJ8-C z-q+{*3@AUmZ9%VKHWA<)bi0$FGV6;Up^??q>+3D_dwzt@8UK8LgqkNf9_~BO8(we$ zFYt7aRPOZP^}5~JW+=}x|JE*r)L|GEDKM1k>eV{{O#-@`|oj?N*OzGs9N-fW_o(H z(fk2vrH%`|QuhMoMC_Fo!7+A|ab)tzNeQX>iA8|PA|`8cvr0jz!8a*oJLIw|RmH=Q zrcWv_Q8`{{GpAJU_j(yn{{Hm*wr?p|0EeL}<^%(@u5NGd@9&?U!bVnicS12gK1yBx z@O8ufj$dB|l%EjFSI|ECwcDR9azGg}qMnD(3-BvH4=4TS{>w`tC{v$QabBpQE-~3k zGdV&sW3uMv0giGMeoYa=QYx!kne8>)OamlK_pwJy0J%Yca_!qepuATqD;#?sd{%rk zXZd9nO$w2$z+4WM!O2n&WpS)m%9|OlIXHJOFTZ>_2QL4&JOef&*;O|HsAX}AnvQQ{ z^=b67s%zCN^QKEs*^I(HO_`Z5X7rZt`#{J&P&u&(FysbXN4_9xOZnUKXk{{DOBRRm zOrJDPQhBSIY?DDJ1IiC?S7noeyB0zx4?2Uu6;X%M>&M?KB$adWx?aN z_!0lX2hW|oA0{7{X4qAIpVQehZ^YyZ*K5$X*-=z3O)1NMm8#mTQP+GZ1MW0^$PdB> z4ZgfoOU+62l2m39l*8LzF|w2*X!0sl0t% ziSGT=vQWNzeG8Xz5KL9P^+H;#udcvsefuP#9Mu7R1QT}L3I5by^UA}kdja;l2Y@m# z`StGMwzIfizcaJv;mh=8((e!FXuzJ2yU)Y%^GlE)%G3*({4ExXYvR~yHO}M%A8}+a z-ajcQSJE9q%T9_COg4zg5bWid@whUuU)O4f%2M7JmO1Lwf^u23 z@}knlFZno9%w^H)+Zkl0ef#$9Okfy>SX&5S)Xu)W z#r#y`zOCC1cWuXY_46NPN#&5qmde9sEMv!A^-p&07*naRAMA5*WK;c;>88<5zLH|9Sskc0B2_`g0gL&9v%H^{r;6> zgD|Us+~7$hGcTQ9`AOyN#^7-|Px)ZDh*|suWPmQ@Jp>MpE6S8 z41?{y!6O=H>`koKHD9--gV(vdy!=ttyW|qeRb5GCkL$kQcA8D}=C-O;31yQ*b*-|f z%mm@Z!9+5{_cJ=$XI|Vr5Hj-U*RD`z)FS;XHIUO`4^ai>BcYTxZ4mBBF4mgx3>qPl zmmA!?s~)9)&geZnWx|bf5vB-bNP$|6yYp^$JQlk)?~ca9yh@o`idP_Pqt#+6lq1Gu zBmOUk3GLd9O+*GbB z^9rfs!C-K8MJ&GR$nlDb`3a)0ArC48$zmmO-&;}JE9hPcxC;&s+q z=!0N7MJR*WTC5Zx;tZiY7>}npBE2M&k4`S}l0P|F>IMT|ofwo4Et6Lw+03+F)83aH zeyzzuDkcj9y=us0vR-2b^M2mGfU=l>#B3X7R!YH4Se8Qh=hpoQ#01}N5R>3ST`0|g zOtzsuy%5UKGLa&lC6pzV>m2`5FGncLNJc4LYh+oLp?IKp23@^MScZ%H1O{B;g2@q-semPe(Bl}C*@0#9N+hp_ za>-PdQXPsnY8F=fB_zuq0Lft9-pl(JYTyJD2*r%7?t3P|EU1hX7SC(D7_gxxQ`>R& znI_`fHOJQ7+9lT=Ct|YeoScHyb6YH{a%!+H0z0clbGHe0oi{LGbG_|5;KOvWX+lK? zC+@t4<>CdQ?1j+At^@cLP?iup3aO0tYtz?(-6c_3lja~#*@ezxIZ+XmB_l6)g)$2_ zV_*d_`GczS8A)Zi3b@P#<+@itZJqv3Fj*WR>>HdS^EOl_Z#A#bm%kCp&v(m+yC3%Y z2T{n^g2;&I*=e}C#tGPg77-abH_ z*Z1#tLMsb0KMAfstu2oNmAv|6LFD;(JR0>zz22zX6RU+mZ!{iGH@Asu9Z^0*2;~~1 zI7=3m3-CZI@3-N^Mwx6aAvxTYJwsUw(?hA@x?pfE#^f3PP>9OX`4GJma#>WudG|G1e8s#OEY&FP^M+L zIIMCOh<>7$5ycsqQ<&2tzzBbm+Y2|Ce-%LK_d+Pk!$ojzNe_JpW^q$*dy;Ui3@Izv z$l-6K^5A}%aIc-tWdB44Cf|q;P|D-V@TDSPH@&{T79<>w$BRjS+*P9a3YBs!&?{3a zKfY$~b${?ANUX|^0N2Hrhu&JH{PH{=3Uxdl40>{iAMlsK_&NuaAxXIksec4zExH*Z z$jM$zruJ4$rozUSl@(ykGI~{&HzkKm2ElA8l`K8U;yWG}YGGMEmQRmbdIKAH*=;KL zPvVP-?_j-_L0&1VaIx`!F)Eiotr+z>BPi=w@6ZiHx_#fSx)RI9sjOM*v;!?LBGjxo?d{#Cd`KwwA}D_kp?tNjyHxNZb^&UagiP)!JP*3ho1uJZ z)3VV9pYml(tJkuqjM*lh`1*!Sj(o`}$(}`JR_;DnrgSSa)x8l$O+r~wxpcJ*Ddd95 zc7xk(7wy+!XRJDlr5M%R9qKH`v~rn~3MQ2cCL7I$uQp-Zu5&533h6uo%kByIPg;df z3yV4Tfe{#VEuoAFwFiSTtN{!IT=UJQz%o=Cv&5|;0m(BA*x0)~FP6EZb6Zc2gjB}( z>(F`)3b2Ip=&_X1`Yie}0py0LF;|X%)FvNtzP$J5~-WQbXs`ivnj83DWHsQLiPm^oig<#^U5Baz5$w@J{ zGGwi%q0B<5OewAhyH<@lY*5U{P|pJvOX5oL9NP{|bOU}R0fE`S3lT!Kasdux#I4?wRjP!ww&;i1vH)IUsT`Qg+UN$=>|b+ zXc$V6?q)zhhK?CJWa#cja)yxj(jh%`OFIWJkWLW>L_}Ie1fTi6c>aX5Kj-YT_qx}* z7B=^%`BX?^g&lRSI-j-!(o&Qb7>Vk!dKpyp(W_IAQ_kiK0TQY}>f^Z{^T_Cz5fnmH z_u7NVU8+Ru;vVadKJg+umVCaujxTBY?}Bdy4P1xcS>HEKs{s?f`+#ep%jYeBAre|2 zqv3?60({mJgI^Yq0x)=-mHg}ell7M30UIej>}z(eBH35-FGP}R^hQ~2Xqd}qgNJ`W zf%XAHYzh#UUGUUm6&XzBrI9D{f*8oJFyUva`W>kWVKBX}UVP#$%|ZyD{XIor&tyKW z^-@1lX<~Jq2(T2Nt#KF}$p!poNvtS-HRm2W=QB^RsmRa6Bz_q4k;S2sKD<(lUZUxxK;~SRxVOeq$#tF0!fi^>0!S4 ziGfL^tp_P@v{#l@o>AcWu{lOfs|USK)%rWQyYH(~L{`DdcVo)7InJ}31Y8c+r6ZN; zc9QtK;>U^k_baOka!8qr+Vzh|*PX;bmT~KD@!}29Vvl;Du%)p25FW702I=NSstS7M zYh+Q&kY~P$u#Cpt$Y!KWxol?gMz^Zb43f5D+^B!m!AZ)nPXoF|kl$_;}(7^}mlXE1;2&FRZSI0ILv3 zJXt2R8u!ek?5yV`(=~y4uPUE^{ekaub-tN*L$4)GJQ~JtU$Y8g^CHZCvOBeFAa3sM zRO;rw-AEt?GDkk8Rv&GSm8W(*K}uKGWDE#Oj;ezDqVi7#_?@h~lM$t#1a-;_>;xH( z?&GJVVSZ0fZXus@b##@311viJz1x3wJKFsE=<0S@w&=SgAf)4gz5fjx@TIjJT-e6N zoz^c?D{tDAfN(iK!^zLYfSxD;(iK;FsS0`+W`93>Bo8n9B z7^p!HUM86Vas`hW+albhigVv`ma4{B`|%a;1qQLTYn)D|UIzDngD(@&Gz!+|=!NQN zgxQ6XP^Mx0Kr@A6`Z6z;yKx`nvA>Z)cXfYC+)#-J4>JAPs-$Hu@MjyU!Si)y%q}a~ z{ujq?;0sVNgkwfCndd@z`#+!QQ6dmQ+Q>X-JGt^K<8tvs6LNqO+A30sc#^)#SlU?vA!>^JHBpYuD9!uv~T|If)p1J z(yS6t%6VHxdp8r7V7(am`$f5=85Gj;O$5L7)3&ynkUEx3f-dh! zYnD_jhP**ARNt5A<5%bF@QW{$xa?gi}jN#K`g?O$^ULXqa*VWMW?Y(Owo%DA@6g^!fmNr_HU9rWL1#b5ygL0#_KK`VNQ3!lnr(weADh`h=Q zZo7Q$z+CU;3h7()QQtAB=q0OhOyb>%|Ar(HVX|4Pj$ z`HJ=B3qS<~4Fv}%A2|7>y5Ox;{!I#YdA*LG7x{=|S@rtnS&)CD(f%Xljg})FiJ>1Y zG3Tdz+UleOq+s$f_JCwP3mksAO$79zr-5uD?7GN?I+_yVBdhNfKnK7?cBaXH@fu+X z$+Ks8XRVOUwXzezn+N2b?wjZ%M{4)4W!EK&izT4*NWG=*52 zsq&{+q=IDC|CL+%{MVVL%FLNaWTE)O#KPbwOBz7wvERIs?e*_Vg9n;uXLU{cSxq4% zv%G``SQjBM13uFrnXOtUb*Uw{!N`kY*|5MFPnk=;S!f!NNEu-m6_x2UW>X7l1eV#) z0=Kdb1Io{4iP&#Ir*`?ygGQu7h@2GYdFhx-JeECF}?RS zDWwEkYUZA{O?fhwy!b%0DCw`xTqCX4w<=0D!>rT7fAef|5^?WAzJ*>JBPkpL^tWUz z(~0W|LT9pponKA|v&j!174{3|u`>pgj7tRl1UZxA3|3|;tFJvN*gYRvGhq{X;yqP2q!=0f1huc~t*Ic} z3{{1Yq+SvdIDu1=F37qarn+@%3mO(Vs`KVX?ZzOpFU`I{)q0nH5yB-vabiP5-ud{X zz=ViGqY}$)o+>eHXDZ8C+X&e^ry7=@ z(+8x`{1<;MUfxun=5S7EumX9XZY6uK_|Y=`rPW7X!A9z(U&+f|t1F{(AtZo32_Rh(*j?g6zA{s?*kWb{9IcYy{rTA=nQNinX`r||pkiqAWD zaX)a|K&zLS$Fa4b`ogPix+ASvrBX6-R*IC|JT<7%e6Mk*mdz3ncJy_RhvAt$A#m?m zZ|6?;C20DlqwtmXs2z|tq*>3XuMQ=TJ6|nwJ+AxrB8*EVhsP=2;@cxKUlX`_Z32P~ zSd>B@^;NJ9Fb&Dt=NAHGI@*_#Tk10BPw(nxyIm zeKnV;y|*kwW#v=eLC(y*mS!z65R2yxwGzV0-rpS^ zkwJMX7J(h3w!LsXfWh;~#x)1RC)h!R*N55tXg2{X?&)>{!jQ|Rd3B*?I)Cl2*ZFKx?B@)W_x%8sFDbm!OkwMVjnx_c_kTDyt%@8yB&K`n z8f}<~3DALnl9*L~ZaMj{sv1Az%~z?8;`S1&TYLf@BFJZZfAh+1j8#|d2;k3VdOqW6 zHczTiLT52>=2u-3iRsx*^1uSkFwe-j+_~R%EtuN=0Oep+^nM^-)m8kB$FfrZQDJ=s zT;{(r6_B!G3y>N%cyiUTu5=$|cOXFk#CL@=kPpNgfU=VMJQ`noRW)mt;nc0UUV>y6 zl0#~vFV2avbSRvGsTOWPzuHJp`+C(=f&=OImI}y>{{b^!W*R0To~Vrx294yH?r*3X zKJ51V06<>!hWh!bs;z>@2@bn+fEDT2Im=PaB2W=25o)p#LhSkRvK|((^;#Uz_mNuH ztuO#Ep4=$b5}Xn^sahlY5dLX_rMqFfoUDYYN*sN&65R{JY-Kxvo zW=$4Y3jZ**=xHs8Lvy0J$M@4zp!%GvFpDtPW(rFN(A_Wly|e2AF?%NirRFk=#{bN= z?tT1p2Z;%l!UK&AZvn9+CUg<(KdUXZ&K=BUo>N`QKVl~_p zs?6TSosX6P5`5an)H0|8Am%*NatWO6)htt`UZvtbNV#r`RGpM53Mp;tQ>7*2?3r6( zYp|Ii0ZB&Y@rD@dtu{DWL(MyG&P}P9!_=Am$ewcOzTKNd7r!J1US8$cSs}KT)Of~6 zU6_4tBcGtu*E=4!FM3IxP1jsm#{t!MKGJq$umLXil;3;Lg4Lhd`ib`uZOW_tRewUb zkaNU9u~>1+TLy-3!ynB}ooPQiP*X>*G|sQ(ej1Ur{(Z)#UH6|;Uy9CD*5M_b)T57V za*$}VooSQWjLO6^sy93=ECh)G+Eu=7y+HSK1d0!agDA0w;;exEfU41dU`U_p%ka=O z;~MrBWwR0tCSUVN$ai2z$02m!i~P*vP=Y*qq)Bgs=}--uIKC)rM5k2nSK^kSr__+z zLbfR zm;sz9=5skA9edLvZd6~|SgosXVk-}-O8(yOtNp~ zb5fH{kc~w*(&l}1CpAb4%;jv(Z}M@ft&gZE->`XreUi7U`L^n^6Ml51RKXUOn`q`D zaTKWFUr3E&?cegbC@r#SC}E~~qm==iS}!QF9Hrpm3OyHA*1Di7em(*qANm+cYpyFC zAW%RACw`kIxhnny_4@umIr&nX+%qFDPxXt%XY#|^busU_Ip$=IHq212$M+1DLMb-? zWj3P$0o3W&>cH~`RC+8FEgHi7u7Vzyr1@_)?#_u^vrXXlpP%2ZzJ2?4#V|^~`{T!r za@NDv&7-bzwhdRa;Vn*NeDR$iXnU_QTuZl#DQfexXvlTt{PKfDu%-NByf3}>F~1fD z9J=V}K!b5ycWrJWSlXwsT&$X-{Sx&_X9`Hy`R~Qm8v~vVYsl&%SNpq);gM#GBN~GN ziXKNk!P5Hi&{!!S=OM=5{jug&`|hcloi+N&-9|6IMSjrFxY+z=6TFsNM1=2F-g=+_e5- zMR1<19CxCi735QIk4`RZ^6#PrA(w4r>a<5PiGeqJ+#G>VmU)Z2kV4MV$oKC(hwc1N zi~1|i1%~=#(7pwf@Y=-C$KOvClPINY%TWWH_fxhV5EPr0Z+aA%0;j7&|G98ZEiW(M zEVtVK$MMML=`AK8Qswe<5Du#9%Xt*o^Au-(I*Nb<(c_4d@&;KyiWBVph3!F)kOmL#(f9PcOPb;iUjBnmMwGeYt5y4R#jxp^~=5%fy!4Z5UPTwsQ{`t8wlkzzo zU||IsZ+R_B#)yL}ZT3kt*HoYFF++2K`g9-(Az6(W7!?N6Od&>(nOpB!`o0-`;bgGI z0AyGRjHSA!zzr`5b9Ww%>-9D>RM(VtTh&>E;49cL7Qm~ombju{10=MbEZ9^`0{0#$ zFe;^)x+2uY30I^PYx1mb1llcCdp+-Qz6{k+LLg2p6jy2yTw{Uq`KUVyxV0}SlL;U&@d zUE9+^=(+)pV<%NAJDY>$NG!tQ$jId~p&% zVgc<^dXZypoWA3r0*YKqt=}MOHZao?`$Ch8#rfi?;+vBVwz`#`N>X^0Gd=n}P{+*0 zV_krUrET)J^stNU9Xfz-GWbj)>I!M48OXd>U1F>SG#%HH+eVKym?a{I*{o(p^Xjf0O}XqOAY)!t7*o&N{w8p zp2RRJjLzN*{{pqpuKFE+Ifx5N7*wE#C0F!BQb!K`o#)V3XHHC^PDHnkgc}=Y(IF+Q zZ6A7ez2)izyIz0U87@(`K6vrG+T;|ecAzTo>0~5xVwZ-)+5}47mzns|$%hAqJ_vnO z0yr7;$7jAl1P|)$ihn>g#&|=2pv5k09OdW_Nj`jtG@zQ2Q6%zXOmg@eW1nu zX{`^_fm4K9=%i4!N0_%DI#oUb{9d?Y_5J!bjh=R_Uvq=dquK;?zTD(rdV|d0_|q}i zn#8_fP+fKj23C!Z3=!<9>7Xwp&$o5Yl-i>_d9(N1QHGNnn2iHF+CzWVbPYsIL!a&& zIm~adNIJp>m384Ni13?dVs`%wnA;|M{x!^nnRrzsoaYp72FHWfm|=RxF6Gam`hg-d zXT{7XLntz-39vJSC0mmFdtzMbJu0=L=OA_XLvsbb1hjB;`s7CY9}Z)fL~9b7NM240 zF3QIu$Sh`O#Z1z7Z2wJODPmDyMy!CFCw_PBSI#Wtb4o5(p_r5s!=I+x`pD~hHg_qs zH(nC>J?Af0?16C7^VdsJV7zd3MX?%`B)XF5!rdp4+fW=m8{2DyMeEr$L?=St@tp6Q z>k{StB8BIpv^n(0Qq%mT*bhFK4RhKbO-|kq`&yl8Ejm9N6a#+Dtd8hx8sP#JOMsSN zDwbtt1Hx*ErN=E4WmsF5^jwGqdnSAtsIM-_1z^JryI+I-K%OR?Ql`%hJ~yG`fEsg# zV+m#m?Z|ee>6yAOj^gouObSx}n zLFu){maW&rlat57(I*BMZ){SqX82wy=YSAW=wL2sup2pIa4~E1GDDd-`x!e+b1yGq zJQAS9i=)CIn9^$mkl> z+wu!Fzd?`;4c|vqy-nr=%f+21$u7!&`QuLJpKiFJ2`YOkX*vA8{QT4%iGcpCwHN9rX%8I8^^eSi#;IQ@k5b`E4pZM*+ORfR}pRnr<@`zY}EfFHH|B~a$@wOebl zoeymQmCbwgt_{{%GVwmsr_;GyFU8d^Pn-}7doR_3oK?2|-mP*KH8rC!ojXB<*q$nM zel^0$xJRGaIrQ}iI-@JCOSxf|)8A5O$+yeb)q{`EBEQ(<9z~VBF6(52vi7PQ_jT+2)YxDEYOlTYqyRi9}*vCr)l6h`h&9xc$j zXqd|Jy8SXyLtK;?z)5k+ zF}u-O$_;}UhRt}H>|d>UPR3+0GZ)u$fe;n`@fz-T8T)+>MmsG>vFobL_g3u@Z=qw+ zaOgEb?#gJPK~A+JAx2N7L1lZYc;PCojhw)>cJGHz!(%8V$hDGHxHTL)4aKn=3o~q7 zn0EC2{rU_T*3Zf{9w!Aml4STgv07E?ni0dNW8EsgKwK8$`6KIq7zl&j=JM^U1avvrrUw@$ z$1F!he;6Q1Q_j-L(Ki?7jQ%a1j97&&bWsPo-Od!2eC2;5*ylSRU&x@so=DI0oa|4~ zLh#{nebYws_OR~BtGX}tdJ?ovap)XF?0gOQnbOmA2KL^c4s=hv!r*p<;D=LGvUS>! zpBdtx$%-~K8;7&rgBtDim%imq76bHtF9tnB!*PTm1uK%(P@M&2UalO2F zEEmb;#H~{;$goNX(hfae14K<&0+E-jxd7#5XU7>m72sf(wB?Li$~npV4$m)&Lqzf- zr5AfOF9N|<+*cJybPTxrs{;hGs_8_=v@9-3dS0p2Fo@rpT%_>tHq?&RlP`$;R$1Ep zg~1}vpU>*E!S0U_YK7Ky(&qWZCRjJmz2;h`^g;%8y9~QpNrCMzKLia-i85z9JW6JzT z1tRG@1}U22*P&EO^j2 z7wBR_jU2ZvIER)G#sU9(y!;Z=##riNXb9reelRT6EYr14@S=N~7*={yud4EBa1eiwQ z#ui-H8t2wjKYst-el%b0&(@5;Et%(T{`}QRrvKLE{3KZ#dTgB)3IEN!l{pW`$Osc| z;SROBzJ)9oRI|8I)ktWz)quCaRRqLt$3k>D>NwQI&xNP`jTBkK_tfo~ekz*l3$Ao? z4`i41coN$KqoJ1uYOmn7BACmsAwPrH9=6Z$?fm`A*p@NY`y|bChw-(}y-D*XI;3~9 zHa+Fi)%j?CZa(kL8^1%VZV~{2nful>Zwit5q9}^nP+UxSp3SbC;8T1UA&939U$%nK4|C@&u_*NZ#lB_Yk%zTi>NiA*kZdY<(7wbvh@V ze2#v`Y_n(KHmt>$o?MMimXNElA+bVR^QsmVvC#iSf2&cGJ9^Vl#JQ_{RI}FFkx$TM z){tSA$#A)@@W?*ig+f6Vg0G^CNAwf8Z@OoUey z#7^0Ub8j@aEozraAa?i#rrVqWLtx(gQ3SpwnW`8qO3{tA>p3W#DZ+bEKM}#lI*z?Q zH|hFG2G75Gv?R*+u-`n0*cT6Ro6zsjQg!o{kq`8g3&~|C^av@@N!O53L{r#P?O!^> z1257^DOjXIrecJSJo4xtR2|q-0dCAawr#eu_i+;4YR!qd1Zu5Do-GaVh!{H)={k@I zwVcp=9)9vvUxG!)S+I6kGH>!*r(xevT;rsx>BBOC@(nuWPN8u3M20Ff19N-Tm@4!= zzOX*%KaSsY5MjfS$W|t#?+g^Z;XHr6yFwLMN&)X? z06ti&dG4Mw&$y+F*^t7Ii<#c;@q(1hMmkuBeO(OsQl~XU z@Qwcd0_M}>sII}yhLVa$(!Ah+Fb5g-bs0DjE;7{qCEAmWdFkm^!aH5F*2ijC3FB7Wliy zzYUv!NwjU7AMc^*>3{uYJDKMBd*{8}mf>$(eU9aI3hjB(%9Pi0{F&QcO@+DXb9g0K zK z>>HR4&2H%w1E~w)1nO1sW$_oSebHW;-0kDMZ2KjAlM}nWkWQA0*}m%b4>P$KVOeBV zIFogXW6o|6Yvtg#?2Z>&xc2sRb?73#{h^0CNZq2Z7bi^1V{H#9O_(d13UPM3A&_$4 z-{GmVAGM!v4bFBL`-)ras$^gV2MJjA0JQoXrp9dR{!!R~VIM{K*=O*~<(Rv@e$N8b z?_g%&_=6cyZhg=_LU_G0*70~to{ww?5t+{P{T@VSb_gRsu9t5PZm)el_bh&Pl|kr0 zhfkijh~o`YRW3#MfMOpaOPQ2v7|xxjhRmTS)dVGOE{m zF|x1t6sHX&g=f;so4kf!^?5sr<<~zMRI1KArUp{|-&6uzCYffn;YEceg1c+=2PG#Exfo_h zCQzSZ{6=gh4*gBRrx#g4?#~vx>T?^%HJ~BH1o==fgkl$1)Pv2H;g2 z3izL8FTrqkQ1WqEMfvliW$KKj9F+@dHx~@7&6fVHD;`&rlE_8T$vcjj&nBgCh|(bnm-1n>gaTl z1DRdK_pL8r!z|@9jSFjLc>B| zjg55mcf>-<>cAw4ODAv$Qk&OzaqieI@+ew0ka?#sFKD1dh^6;u!y z_3hTIxxKS`3eVGd!N`_h4hRvagxxgNat%1=;q{X2_a~x}ag~9JpAn)rYVTj>7x;S= zH4?#N{BYInZ>Da+Gf7~RRd*TV=V`D&Ht0@-9zo5gM!lL@46x1-7+6br$sji=)kldvUGOLQ=LS>u6R^MELN}@; zGNpB~f2J*f<|VJC6XmRdc%R@?FnzS#Kxk>egS=IK+4Lmz6fA>MpqU(RgNvHH^L(L> z7<&s&6>`~dED7nA=s9|K&ykZb$`KV`7we9cu|TE(ie=rJ=-05briy& zV+wKNN97rSeAB5sp8D@dTaQ>M1x!TyU99jGAv)WOzOm)*hR>UA;R6Qo=w=&w)C|4; zyX49q%`%{i7C}qB;vO(R>aE77)x~;WwP?4I4PgqfPoU$oDn6Z_RwrYhybHI>`Cv~% zkvfv-81JI72)AUaCH=b>SKew368nUo!v|_IZ%H`J8GVhLR zcue_tM`Cbm(5NmilEU)tNxFHTwGjWe2kaY%JFCxa>(CHYNrJJ6|OGJG}hkifG90gh?rEv$B1|!|=c9s*m+I=XHL}3vt$&WNZSh z!kuW$v8^Z>r6Gf6%Rmdc{L@Ew4zq@_S&3-2NZAMQ2fHShCXKjeoBu+gY*TF zq!;5DyCo2T%g)McM6&qzGX8<&A74rt^q6#m-p<6ZXE(!cWcaH-vXCr$p~-a<8u zzrm|`fCsf>HM?gdWNMNl#LT$Z`v(LsJMsdI=)RX^(T9KgFRd>?2$U=UDp24TT>Z_& ze>BE<%or+4P6x_ZgYF|+-a){=8A-uutT zYy7vcMyOCYhw5t5e^*K}NZ&t%&NjHIWr6W>!O)i5LioVQ&E4S#KRY40 zvLO5+Sy_>*8_Z1GQ9+FlLF6L?kL!KgmwGcd+_s}`*Yq~Iw^(&{R^c&`)X_T4caF^2!Gvr5V zUb3)ybd(Q<{#}!B;`1ehqv?Y7mTl_?Q!wXxI{#Syk^l8M>H+;Q2%*YYSTzjmpQyEq}%xN7j$49!G@_MDF9; ze8ImozPbBLtZg_t`8|$3RA)DWI*8Y4S}r&vHoKN+;)r1$rs(gtg=DPD_PNg*jMD%LDfY;Q;Vsxf@baNDzRITA=-n7_7f|RSc#~hwL-8E0M>k zzv8nf%Cheeu9$89etNYJ399~#vR^W^dvbY^$;e3U6|E?Xt0B$>7JK2q#vgW%HGvL( zKzK?W2PyY-0=g05b(3mxLJ=azL1`JHfjCd-M*^KS{3lb><>!f7aHW&=A?Exl%S$y- z{BH_Y31ssmfD{p_@2@pq;^i@vYZ+E$-i;2^1XNKLG4f>CV-djpO3rQ);YUJjot&|k@mQq zd4x-X*k1d6ze~EKThEe zp1eh>0P|##4<&vI`PEzMy>A-0+OX)O26@v;G(3C11LqR&Q8Q>+oZ!jsJp3J@1r4!% zqwbV1y^R>4Mk+dZ@&p~C2Sq8_v=zDEXVVknP}T&Pd?UTk`x#~5yK~;iRd}uYOVS-w z*vttT&bNjV_ ztKwtjvgBCUc-y{fL->lk4iB?`70l$#`!^`F=ldkz-kmb&H?@l4&s3SPW|NPMlD78T z+|&&WBpMJ2DpPc;REws%cC32-gNKAa<;e0)?y^bAW{6axAv=^@CZs!BRC?y7wDv4^}NA9=lKHfKgz=_zIf6<#7;3izH=HR&hd~a{%-No zW2NSv*c-=(a*2E3Eu(3W^u)Qf^r`>*;`49V3v39!(9eHx8HK&(b_wkH(HC1t zcs>HieVfzM3Q<&?)I0Ow2R*3vldk#8an*AX52Beau8T{ggRNu&?x6L@hSb~i9ZkZ^ zdnJF>6$}Q)A3)@6xR7L~P3#*CPb}f=s;hnyA1hP7-~L>hjWY8!Jan)ZUw!d;fsWF4 zM~&|j@uN>xD%jV=*)vo@Y12z_XGNDZ3m%$N{4q(VSA7eKS^2*uBjPMdbDWMx@L09E zGpwEISaI-Fz3UwxiCjm;OTJ>o7#zP2hNi>lIK@faxqyp*CYw||*Av>dyZs4C+GH7I zRGnh31T!7w(mXTXn19q>I80MUAEAqImqs3WXbgDbA*CgUAtfh%{ty4Mf}!16eg3IX z9~aG5C}B=0$QL)N+$TCQ7xv|w_xDdOuDeyBnzdFfvOWZhMbykK5IIC)N#K9+e$Oq2 z%6**xc~aKPw57~+GMcXrm>jBneoLIm8WKIxMriL?#Bh)9=ZCIWI@20;Zr#32fhzFH zR{H#|33Ok~l%9a+8Eus~s7LSF=QIDq8Y#ied_L&t9*NthSg(ZsS`RTZU}kLDet4sc zpH+cS6P{+BexpJ4(4H_=qE11>H}~McFX)nG+3kry41oGNqa6cQd$5AeYWd>OotFVsFa3X7&ldE~O`${V z$BsX3$V@dgopznz8d)2f!|qyf6}41(Z(Aq!8|Mw>D}@6a#mPbk1_z_ULMj7$6e4c1 zH@CfAqulPJ>M;*3Wd∋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 B#M}S? literal 221902 zcmZsicTiJ7*M}(zN=KU1fKmlSlqv+IOYb1P2}qM(LkLAcDI!fksv^A$NKYuzyL1SI z-U*>5Apt($cjo)=ow;}JIlJd~&hG5&%$?b1Kk4bHQIfHc5fBhis=rn?ARr({6A+Mw z-y{Cl(*DdeO}%f*{URND8*Vn$m zfV0q6Rbs zQ3RY(zPR?<*}y&6Pgx|K(uul}WMSts-tE zU>kRPi^@|;;aR#*_<)Z-*JWW*pnI~gepjf%IE`Qbhw`TfJR1MYKtI(e!_fRt#+sb| zm_6{nBd?L>8GZe}N?|?fQjkQc{z zZVm`fl6oij>x_R3iNKV~B%qX338G6n?o_WYgzf{!&C{W;UA+$-zOA-31xLaT+xQ1J zHfq!Wp?^50CKA#vBIjlHC9_+LJ*io9R_5INiE$gv(;bUH4p&WK_$E^~V^s#+(?ilM z3%YOaAyuBIK|%VTtfn8`FSze@ixXXtZyDzQG+)A5L}*jy7*2d>wsUOiW0>vGpZf|G z{Y&Wh?scmWE;pUk8-jk4A8=~*Ztm^fp+xR3#303`OUckLiyMsqKTa-mbIip>%k4F$ z8KRMr26@|JRwkzMHyr=m5gZQ?>H(@S1ZcPnGd2mPw%hPhY>9&>Nw8|l> zuMvv@%!dFv%2jeMN!Gzi!ULD3M|j5;=#?TWqTM`~I{sm^E|&h$sRDhD#*6{H$LF$s zh=aQ-BxU$131p>dF!nKN9qfw3SOXFhqRZh4CIYh5rZ9WJ_BALwd*lRbz-d0au1SE} zx@$M7B#!&I2i9|LOFpQ?t{Zi0o3&AMa>9uh=zBn08)E_T0-JI{H4I^JpWLckV`n{7 zcPd00Ik;00=zug#*l$d$30!C-K<^)AbRaG=daTKk8B|2wLPFsqnklzo#P+w}@i)g# zvp0hGN*hZ|K{wnZ8mOA(Zi9hF=uIJS@!Ka|_71A0n-HeoHXP|za{#(-MTAE>? zo}TY>1=kbZ16K*$P>iwPi@ZFUM@)=26wI!z*tiyB#S6>ViA!Vl8y z!;j6s-rNC6eNJHRK1Rttp{8!n%*b#feMt+F3b@o+_Vf`5c4m!M^&MO1QIJcF4q;qx5JcVd~a=EzIxbsBMEtM&hwa>F% z_Y0_xBT$JDUjL+iv#ARAs;K>Fji$L_fsizB_ESnFs>lGPX%0~bFV=!?z9HbLx@~>i zhdgrLQ{YWEYJH0CDiuY|idr+}iMaOpic{XMUzNFJzwS;&m&adEi5|Mp?!5d<7p%0L zzsXT6a$?;mCRyov8X1C+&VL|B4D_uzN`4P-y;7R@d|tqj?rw1URW7ZOs^%n(1hlnA zIB-1cH&j~TofK$fHp_8OM5~Q|sz(Ep9Lnnv*z6iZW()Y1_%627;BWQs{^XadK2p_a zFMs4<{p=qg^YHEkA%;06NoFYvhso=#aes>F?cCueifelZzgy$VgotW#atdKHL2%A5BedAwytlwt-{D}d2=XpL;G^{$3KU;=?iE)iixSELvIych@H=1OY$dif8iqB!sSMK52*<6{1A9i||O)Og}OG zii>MT3^kgi;D_OomQyZh9GqWt3p^4%OaDe=6uzacUy10w)nMkMhoemRq|^}Oc- zYZ~$anLLL^g3kC9wMEM5anE+(6n{xbS_=6bD}H;Y}Iuk?btt>PuR;+p@Aj)|Z&ncaS@@SFg?Gd5-; z+;?5^OmDLk6X$A~9t`C=jv4ELm4 z4`Y0CT%k5l!b%Wr%Af^2!iZj-YgMLN)~uN|LtH-caPUEFZxW{lg+HDZj;%t~9Q2|g zD&M*~7BYNCajhIH-JbP@>9eE}vE(Hrb{mlf z8SF1-sZoV~R>A2B4(rxp8Vm3w0~fukTod}1PCXLd-L;wqm``Hwt}1_FRPq4RyI6iH z>`N{cCx--Ta&O&okDk??tS+rqNmMx(Mg_{=eqD|@!i=pc!ufP#Ulz5?E}Ls27QT~& zhTR_=(fw7p$|Q$*!NS{buzc z8PIHg?k9>JLm+!#?x#l^nnjTTvP_SxftS>jdVPgXK%xP2DOy)0GX3`3z4II_&N8RiTUqpsQ7guR>K>K9H|BNoGgm?8g~%mp=H|Vn@9S3rztD>Ak+(i}2vEa&zpWo;y*L;ed(y>XN~vbi&5E@b-E5KA-&0 z=fH*G*g4apmj;_3fNxkcCx1!o8{K1-pe#u1TxmM(awa*vn={iQz4Ms`^MW*zyML7Ae34rJo^y6}=+LZEfb-yXW8-g-T$A1s zy0w2+Wo|H;&U~&b1WqX?tTw|VaPz$CYoWD0!B25jeRa3*^>u|aZ;&$v`zt;$(U;aE zUb_1n#9`;mJ_uO5?88&}exS+wL-fx>qbkE`w7|Ek=+G#f_Qp-+LjZwiiadX)PNMkL zN+v*{ncXq4b0fS~vQ72jZY+enl3<$y;&z<<_{zxuP_5(O9b#Xnp1lKcL>PQ*DyF%yinzdpc*H`L{exWbBHgo$w{JI+azBdqw-I z{|oL*E%BBCtz&!z=r&Yn%Fh2Q&Q%(jZ=GN1^gylC*eLafJdi7^Ya$Ye1;xLa3pxy0x8i!QRflX-C{FJ83zHB=;|1?W; zfAQkHU0_wenb+DvFwyl7mnP38tP@|x3iyQtVd)btAKa+Z@sX^c?V;S(!)&otQ@{qt zhS7&);fjY|BH%;y!3)fz%XbS_b!N02$}jzS)m%6%hp4oR{IVZhprY?~fb<^pIQ&|j zQXeDHANu5?X-5qwZ<2Y3yC=F0fJ>RYn zm88g{vW)8Oc7Sp1;ud!4R5oLRr0_`gf_zct3&Leo@2VTD0!d9jz?Cj^? zf3oS)iNUkKdSApZ(nll`dd|$$W^{tL)_)i4S0>6VVmKI#M9PuG9!W=q1C7RTc)9h+ z2;`g3_yTvtP;3%UCYCbhG7EH7^@JM`b#=Yd1In{qr5FTMKLAJH{yL}-Rs|$mkyYiY z$_?{6hnse|8C6cA@9*I@FZT4@o>Fwg^nS3kUtML{ewC#NgHyw@5HV61NA*Os6tu3F zsSSr2b$q``f!Da3P`Ka}wlsTy;WZTKKAm)fJZ|~yu*v1$4z6AvjY6~cu8ZGBvYcsQ z&Fhwn*~aOn(j-5yC*)Hs+e#laTF>>(77U7eXt%E$_bd<_9EiP zXRPdS)RWgw9r_Mp*)C1?=HBiUX5F%$U(+G@A6yp1YJT2fnCkq#{=rce9|onEXG%T3 zCBbOFU{fkLSSnlr@B7whaf^t;cQ`J3H&Me6!QpvPoC{kMA|E)n_U%Dq1p(Di!&-9- zjFCSO>G;0+*za|l;0rg4I-v{q9a9OJzpI||;(=wu7IXM`Vmk(>zCVf`A$umcEL)!N zop11kcNyifs9t;a)bG<2uHgoj5m#KubF^`wICAZ-L$`Q}yq<1`>|J0YtM~YaY|a51 z?`I@~j|A`6Xs$I^BD znbOaM4L{l}nGwJ97&BP0W?fi4|6X9JvJ)=P70+p%Plu*fzUfiQ2LSz)$10?Jp3XRe!tV|*XbJ3qfR&})qY$$^ocD`Ts_8W&3Gb#sXsL0LB{J^3 zx6Z2g2t9Y;%qL;8)?}4oM(GJ4eJCTj%JJLZ&B8ph|M{lIX-kXM760OEX{KXw+^p&a z1)3@}cirQ@&-m>zcHv5AHnsh41ui^_B(6&F}R2P*QD~pX$(# zEKha6uIOv;%1SX*@rw@iZT!E(;_~Jl>D_d(rvM5cYx2m3N<%a;##$Ce$MT@ z1859*zUN4nFxUk6m{q8kyXX0%Tdn9N=I>bM?_zN|-B=*jt9)h-KEdh;Z9=}JRSk-B zk6INO2eNRbqb*1HkWocU4G(^$^~$y54aa<16e?4?gILRb zb|&4@@KZ*u>nQmiXcNk;lkT!;b6u@E5*3Okw62?`LN-oL_TcJhMx&IWCxKM8W<(j zj-S%tZ6&SfLu)pdn?DG9Q{UPR%9{1B1UNZBl$QqVT*gX63Kw{4GPRVaH46`CTFq*V zl_Unj!7DO{f#4wB3D7uK}3xl6q`j7YCOVnb_zyFh#@9(qz~R;WOMETH|v`-RM$4FkvB=yEZf#E z(6yqQQg#ANb6a^@ai8;aonCyi%ngVUG-s)c`Mj4f-ajd5sHbp9NiSE5_Yf?qpZZ;` z9_rZQxhaGu##q*baG}!4Sa1dox+ZAzAHJg7c?0<~?)IFA9!QtG#~_Cka<3w`R!IWt zzx^v|$%aT2Hyg`Jf*9ZQb?5a-A6QB|_CedP2 zoo*RiKhJIZ9R*xoz$tE8yUpldgP(3Ts0=kSKs)9JDqF{6$AlJ&F84qms9e9>@{xlc zF)77vunL571NMIX#10q_07?FwNism2QN+uwVSpfc%l!xGz^cNm`|2N=vrU3NMz2;h zHN1(Kr+y5o9kt1ty|fW)<#0$;UyqPK5tI6gU^7KqT<~5BTIuVXnPs?CXiEaxyhoat zc(c38!CCB*$0cymf&8;@S#7767nCkUMj!6o{^UhY$}HA)i+g?yukgud78&S~13XFg z>;|ifn9W5{zO6%_3D*A`B}x93i-BK&%y!tltZ1DI6!P<#W)y5)ouPqN+`gvnfz3KQ z-jV=B1no%c)TyZ;482h8acwoGN$6l-=s5!oy`;_omD8X4I>)>ooJb=@hBk{G#%v9^28FIeRBbHc4{A(7w`xrmOyp9{yY*yHY$;o$!sPZB@%X!$`gy~gw3 zQR3KG&!=(OcP1s)9G>7$-?dxQSImqKH06P1C`RXp^zoM4{q%Cbvzn@`qJOGI zlQ*XbwlVi#8m`HgJaWI2?Hv7XV&G@LeYK5rhifwD&rijT0WWza;?>#~$Njb_W!L0( z)Z!-pk|$LzJ;zqsizfz8IQ>|-f8LuJLXuxA?>y0*mVUq%g{_MLZCzmteMQE1@=RrZ zll*q}f;GWS>Fwt+)4HA1QF&R}0=%D>_qrThmG%+YT71L~!(xvWS@U(Qrx;(6bU>fR za!?smT+h)Fi>5CzL^~%@0l&QeZjsyFG|!~4-}F;+Jd(A3ySMb@<;t78*=Cl6U}7jM zEm!}Im~?XLqp8R|7loMV-a&-Dn|wlEHioXz8CZ0oBG*LHdsaM7X0E>RFjEov?fqoB z+xW+h?WP#qIQ|_;E8Tur(jN9NLHO^t(1=A*`nlF;5+*oo2#1^Qr1e zfO=j^q`o?$=%{Ykbf55CNaCSjEZEG%k-1O&g^0^X`flN7>N$f1GPzp42jseOwFh;c zbQGJ;>nxK5Kirq7qU>07&7#fajWBlwLqjG-fW==ea2HB^mNibHBw+7DT*c`jR%=Ov z@&tlRf7YE>jX&e|l)H%PC_;V$y(h6UDbE&^EC$RC-vSvca};0)4TK2#QLwu%={!^P z=y8f{v2H>$49*bNG3)r!YkYo#(l3A;86{#iW!cJsWnUc^SMI*kLL#W`IKk%u=hxS> zv1WPipW6$_z20?(4eLWF!WsoSO)Vqv#=7viIGM(SjTPUpp{XFXg=gX8#B185kSOpF zyTxJ^NH|;f+VUKzQ;O@*Sk_x5qqFVVmFC;e!Pa`XSQ9|YDzHIwx#<}YPga^Q%io@% z-+>vr+*8*L$jD<+1zbP9IvqVn6lA+(QL#zSme;UYX3ie}m3w%5gXvt!@#acZ#!X6k zwe0U?5DBdyuQKzQIgvF03LR7rXGMwV$X(iNPh~JwZcL{>9T{V3fj8aladsQ}={EFP z5}w`Fyj|q}Z97hvrLM;EK*ilcR0q3`Zx4iqD&+(eX`3#O8-)*hD~b3{Ml3~L@eIkj zW6do0RSdQWTaFuE+E!SX-}w8(6cDsRPrIsW} zY@2-`w+@WC*kz%P|7|?n_R{zM(7cBrNCcg?_4}9bWqA@)e~KsV2eMC3=Li3Q<$A7r zkzk{iCH4U}CD50$lIO3~warGbXYSm=0r`VP#?W=LX4;ET7GRsd#BYW(ywHd4L`64M zq+m1DzX`58C05Aa8h>D^xh3D;ex6ne`;*kvd#FNZq&F?Ansv1o{iGNzLO&)+$uiIB zSzk~%Q9>A<0+#p++|PK$!-anr#h9^S8QuM98(@6R;iBp zDXz2v8tD}&?k<~#@wl}*^T(K0x#S(S+UidqbnoFi0kurktdcze59j~fioN5R&%3x= zG7aOiO}0>i5ZsEZo5_pA~W+wEoeG$@V?>ap# z6f!aPggO3-*4}EkekX9qj&>7Cf9`Qj8rG&6PwKVxbD*tuW`#U#Y8IP-buU#Aenv1kIvZI7IU?YLr zCZI`_hvLGb?Eb_EY|!z1pwZLow%cO1(iSSW@m9PC?9|dEP;aeu<-?MnS<*Cn^)Q4c zvnvKp_l>&50c*{LR1x)4li<5F2P601#*+5j&Aqf_74KDNBRi#$=% z0Th1~Hsg)83|{1V8}5MLIh7~4?dd7y##~aa|Nj2@L+03S)a~}b`lHNes?)6g$GRK* z&f4H}H5qqHRpTWCuk0Y-^lpUohHajEGhR5A;KtY2o`_!UEL(@Vk0goYiE&daHH!AC z%I5NY@${~7T2qUffMyQHsaXEuVefS*NSose;{RCyEg~UVrj|7!`faE}HY{t6L$XG8 zaul7)mwb`1+}TOgx$}ohz5(L??P`P|?L>>jy2*3bA>8w+t$9F25AxOHpMf$rS>&RA z;i_>jKphj$F5h^a;7yW)&q_|)DK=dFB!jR!m9z@!#Y&{otW=-o^Vb%7-Un%*f4|@2GyTM zz^FW5r8)090K|Z&PU6t&XG)EumQ%yAT&k1IVKzk7?8ix|DYe5{ve z`Fu@gAcc1_&Jb)=cMXE|Q*Z2^l!YqF)Zd%cjZ_OlxXI37nMEuOoaYc7F|N8wKCxlUev}nDS4NEZlo9W z`d-}mcM+K({&m*A2~Gjk&0(&UxuDlsx;Y(x)D*Yy@#P)Y@BObh9*2}3TJ^lC&QFwu zDQ(;?!g%is;w^RThfb-ikL=y`eN#TGs}$yr^tm~7riuOiL6(hvj?PE0b(4pIv_HkI z=58H$n1#5oAmrh!9t{pxqG?PjS3BER?YHZ@CE8+UAzSsjpgS0ZCUf6v9< zR%^R`69Z&HYI2ht+PrK5I;Rh#Ak@6o|1OpiY1813n% z-%V^D*SZ5g)}(J9J{3Al3gD?2l9ovp|)gZX}s@nZ|kPD#^Z-rUi?PP6A}Um32- z{~$e12qyC*DXN7M6SQ__qLj;;d;0#0m>T@Z`6g>Q#N~9{lJEKUid3-#jdpMNa_?7% z0tvIa92MEVo1B3KT4YBA>}J8g?`_@vOJei_Yk3%BXgTB3%COEm6Aa?36==&6BooKQ zLEu~wdS_+Gs@f~9A-Sb3!~k=DYd8j!HGI7^3z&-F^v{ruAxStgRvhTyJ2WS!4HeF2 zC^;^h@eA*GfxXC@{30!LYfW`Vjr`ywm5_G&9_8wLTxYEobqoA0w~Lo4%Hy31%B}1i z$hiC^R~Xlhtx8bsIO5Z@(preUxqkg-C!0H~Y#csq8`_uLXfma+5$D(PP2uSfb)qOu=`_0UE0X81E^y}JuK&dQn`(B^Esp-b zW&VF|j)@@V&%SoFq+alJTuGz&Hl0aum-THm$uCCZfxVD(#CTlo<1qakbR{%LPg}9d zy$ysnnmb{+6-njIo=xcJ$dX?eKc+zO?K)@^sIJSwZojoi6t~JHcDUSswx7q74fE3c za3;Ll^ZFX$zSoxYKFf%^U%x}PJ-jU;OH>UiH)CgrQSa(yRm%OL+yX(CtRnnm3^{P; zWK@MA=~=jzP)OX`=Sky@`^le#A^}?!zWFj^@7uGJ@#@{${XLy>VkhVnc-!-^5vCz! z_$z(r6SUcvr@oWwj)1_f{xX@rn+wmd@lhgt(;IC>Zl#pjkL9&ybm#M`OM9Cy}UcKWUOC_oyt5*Ziz z;&RRqOWqXq#ri=qYVmOJDYAecavyV=_w{QPW@R+uxErMT3iL=X$7p{*I&6W=d`EZDqOhs9o-;t>|k{QVc1D|dSH?5r8L3FG!1SzD-5-Z z7CG^7b_!mudO$o|rwa*;&*>1r(Bk-Q*h2RUX8s`sPhM8>b@J8lJ3NM!KSJw6pP_$h zSuhDDSs&20-Mdk`Ix9{lQad&}QBc9I|M1LUI`bcSbRPR5&C0l+lwr&BOLZbV-;v3m zC0l#8c;QXxKiIClwWitMXY*z=s{Eo8eEtuqy9+l>#=XchDrdv|H&2_HH*Zed5>_~= z^iRyG|1?_vh6>5>gBtc2?I|muhat1j>D!^-8g>(%AAJSwj<_@ydLdJVN)A1I$vOj0 zgLQh`Jrx9}>X_J!{Y~n3NP{^_x{00o`yG!58yy&^9R7p&mRdFjy}gxSRVTxkv>$lm za;<(!@R&oKuE7693I8``=)nRjWH}a0X(SOnR^dx<~a$>w>K9naeAA zxi9}_OpUp0`pmPa|09$Rm2RT(_`-#`YLu7(fM+Q1%eMkPhDA>*)WG`*05DwlxT1<*~P+f4~6N zyf0ISygA;w8H9d1T~=XKK{h8bp&`;}-DF&#=Beq85wkZU+}WmAwqpRCmMptMgZo~0 z-OKR&4OZIA#_#3!o(i%s!RWd$d5NZ`xkB9OZ+W~!(te)uZ}X2Bb2Vh)!+k;=w|dwz z0WRf>>Ga*G+Wa+Z!N&j}q}ehZ+MvC+!(@^UvksS6L5>%3Y|YiEg}_Ry`H-4bru%CO zf%S{l6)&x7=6Ko#5R_ZtKv-}*PVga{{v$Mc`1;tU^aMSelB8jsvE0+6H0Rltia`9osmf?HFYgv>@Bx{SJjZ?e>f;Yf7}rKs{LiSN6cxHT7Ik^ zx)0z8QIw0YxyQ{xdC(Xla@q1-eg|Gwhu-&8Lg&sGeCXIRCK( zMYz0wmy{MIg=7G)2;TjZdX~Jd=4hTr4NdBZ=1|f4Xxivfq1)qUpT9hCEqQ_@1g+Lo zyHWN9H1T7;#W_%3QdgoBj*2nSR=V+^&2Wdvo~q(i0Qu{I?wu7yfc^2u9WpD_(PUQ= zTnz~$#o&~qL=#tgwr$dI4B6=G&jrVJlyM~%=l_T}s;t|KgSle_>;|Ou&L5?A5aRQG z6yNr!b4370h>O6c+?aWZ-@B0l$oSl9cak0&Zr?C^3vY+1jmc_M4WQKa>3(u_h4C2X z-)9%V2P4@pv6a8k1%WB9dgwYQJ|9>n+@$Bwrt8b>w~LM|G@|EJ^A!@r9b)wy`wn{? zeuY?#)I+W9iANN=Sml+VR07yQTptV!cfDWz{;cG8^8gvF1P|=^WFWchjsvDdRfE;% zOC(!5k;$M}AyyBtt4{TvHi=xKJ51pF!Pnt1IaU=EMGS4sKEu--M~L&;XY8j#3v4a(iyMG5|6e>21pm2goaaVUQ=4ASUxdAmpeSh|BIhl3~w8h zMJka(I6%}PUmgX*1y$t?ZkfD~pA69zUV5ruKVEr#T^zrA8`c6Y*UaS@xxRQm=i*Pi zubFzAH%kEBZ4J=$AwLxmCS_DqkrLPi>7m6Di-sgHC#5?V{+&SRyltaaU4BGf*Rfd8 znQ?`=$@ygWZFaM+>eHLV(ImC(00|*ghmfJ$u*makZ9GT`Xp^7rqqONjAp8$x*d|%^ zHG*h=4SSSwCzD=hfHT5>AzB*g_;rx^u=mbYJ12_uQ|~JeqjN}p)NNWjG8H&r2ZJ$O zzFCbqO_S|l*;F{=%j=e($4_Ti*m@#|M`Z{A{&KFSytfjoC5)k*2-GngDA7S|3KDr6&KUK-(@Hr){n`0`GL83Ulje( zjO&AHP3uxZ{9JXOd8xoWV`M%P;Z@cv6<1M?gQv!G`B7Y+(NFT)z%_Sw* zbvWDwR7ki<$}H}ex&Dn09cto8i#{0|>BSu)^6E;J31 zg7@o~_1A7Gx#f-RHJp&$H~kST1TYQ>XV<>?*?0-3qMJRyU8y30)?AOy5B#l&Z6gO` zo5X!=KGdwmw_fEc#R><=q9z&n7(6EVP9@)FxvvJtDOR&xB7Z;!oasCKkC!LC6!x`! zX@(xF9tlK8yz6;QZP(WwE>b1IS5Xig7AB|oSA4>hexfYq$IpnX#76NCAiZ|`H$`uO z^1y=A&^KOCS!^T|i9D10#_z|6jZZwofrd%)kXbRFSBRN{`>PZh`^aZ+kDF^(szyQ! zhVj-VWY)kIWLUA>#Hj&(JYp-QFz5rT4&(yV{Ei7l9fPy{2$0Ihb|p=7RD20 zNv_&_0sZ8_x)^GPxt8^>?(&XbPb&~1<{ulp-0gCdCNa>r{1)09W@W7Z{)6jMTxk<8 zL)BCj>sPIDa>?i%aSflPsa=vy&EN9ewJ_QP@!e;eP>Joi?$xCLV=syB`XS|zQtEev z29No+M8}+NZf^p~53_Iv%&6f8A`}l_1M_LT{RY`QJ)ZZlCeJ{N3=n3VR+F^4L^-hQ zTzRy`>#T(6=Wqxqy9drYD;-;uo@Np zLKj{9;ERWBPm@IDDRh}hGjTevE&3yD z!!V8e71o#YwejPg8&2!tFPf<}wZ6>4Ek#~(&6gj5q&lOK%L>DSRA1o(LVC#AulK2= zqB}E`xamcH5QYv()))uAnO_bPpC=ZhJnrKirYcic*lVS#ls{E<9m^y<_3Q!mooUsZ z2Vo;Xdu19vXXJJ*YReTBWP#X5?Q3vx!j$^mpgUm$BGMxdOa!w)pFd=S%||d7O3F!D ze1;9!f)L#vUAyl|NpD&aE*fO-?jGm_2CtU(gFeWL7J&Y~rhS&b&>E>%V;vWo&b{TJ zhz`Uo_EbE%k4rQwv-0YakKhXPGvT`KN!j_@b`KLdRBrZ+ppI~(^@vLRtB+uPFjM#K zOeu&L`Xb|}imEeB>C=!zJ9U2#mfqr~b?EQ;8fj?LD3~rwWa8(VwVRh=IL-)WDLrEg z%UC9m^R{t%y3^;bk=oi1KTGyJHxiXVN>a6RCLVW8rxq$@aE4vO6t@9uO))RdZ9+er zU(HibXMeO;yy7t18L|c8j<|<^eb0IKR^R3=soQ(2;yD4K%&WvZ^Prdc8F{k0y5)az ziB<&sbGM*nNQOYOehS@)_pT&PrX>pf`w54xTueLG5>~xc1;gf!%w|~j{c6RsMJcm) z6Dxl@)V`&gW|D07X!ci=3QdOUy}rqQQ}Y`XA(?IU~{zcAro4bf*a-DG5f1r?S@Seytf^I?%rPiYfC| z`Tg%Z&R!aO)J4*DvimP|k04*T+Y{7o1CZm^)+t_HE`rfAC9=7mU#Tj38TkGxU+(Tn z=h$4xj*z5|K5aN5^1 z`YLvEQ5_dmk}4lNz5wb_%=qQ+2SzRoa$k*Q?YDMPUl#NxB>f^ntk`IGSo2!ifF zls1=?nMFiJebrvwh^Evg#}}_Ij|g7;O=7ZaqQWJXoE@3DG((Er?wNgDF>b!H=hT880qL_wd{lnks6wpghC9mKO5wT=^I};!83}t z(yZ(?=E$i@LZk=-u6yFsWExeF6=5aSE6yy_9ce}q#IR)i*Z0|C$A7x#wrbB<{E+n{ z*0Ky-=Z6)H`LQdJu%#1*OrIvvwtmFzbx;V9`*$%QjnCnDi4{pksO=8 z%q~(E5FR3_E|qvEOkmL?b#8yF>uHe3g8*|#*O>m3$R$#-g9SNS2hm}%VJo)K++s#h z!zCrg#mexPbd-(IkJBnB6Hx*_;_9MRV*boSx~1m8q8vBlnr+_PJU7}(U3UwxO?N2l25TG#3p@xp5drR?eu3~VCVlOXBOERUcHtWXv zu_7P9{%wn2gqMLQTXYdIF$eGGVBv=Ww@QaL9M&3%Hp+=M9!;hIp)RmW9cMkGlGS2H`ul!UAMe+5}^<~#>IKBx1zl(C6KRp zx5aq@XTM@%^g+Xh;5$;N&@abziq3!c#l96^G?O9<{pwfv)9WSX5jx8?10kM*yZ~K- z?VE`+kQ4#OmB9;s;~l)*b7n~pQSg_4g=+i$IkZ7(W2 zupCBhMm$NkgsSR0R~fb;OSC+B&I7<}?!SG1vj1I}c%Hq^T06bo0b-vfjCfzu=&d#o zymX{T``Ia}>wE3eNn~ny^^-q&a|bG$Q4CWH-z-o`cJj6Ia-|K$UuNIdW$;5JGW3h? z#y^;79W6M?0%1-V_W)Zy7k)CC*dpf>ItQx|&>w|&#-77>Y!^M_GjUb*phu44J1`Hfeir%EY+X(|e-@_nj&1|j!Wde-t6 z!Ja{0;Nl@a)xfUW7M}$;^>>Q|=!WOEblAPN^<3e-AP zL4fnx_`5J+xhra?CN?1`g&?jiS=G|k2Gyn;{5pQHuRX6{u9^{ub=u}2Y^Ut|XjCl5 zf{nZJ>c1d&S zr#3Q;^Gz-jUCg!?%WqcOcgD;uU}VH{M@<%08i|2dDHpdth7~7uV(x(D!G3yZJN8f7 zTy69hZyMuFpr0V;)ou#qjol_s?h|`Hs9SqH68N{v&>L(^>mxdPD z)8fR{Tp)jKiQN2tG-`j9Jgt^-T%>rCIM&bo#Fc5}pvd+o|Ja)+i1Wg#yNqAHedhO$ zzt&2SvTDl)vDkceq*ZEVj)IUQi)eBawN7Y9zq`zJru!Yb`jf84HZ36^Yp;oQ-|%XB za9d6KTZPwe$gklXZp=;G@ot{@AMNmXZDGv0f*Z%-hKk3m#^fKJs*!U!q}`;y&pp+k z`^_Uj`?L-^T-O@uF_gupDwA85Jg1+cSiQz&_Te`ySUPjjExRu)mqie&uZh;U8(J|to| za|IP^thQQ?8nC>w;*U)dg}t`rz#r+9syd}Ao5bIC0=MHld~R8o<(mJxB{GMEB|STIlFD_`?F1-byeouFD(!Nn*>s4mPi5=3-@9<#SIw5Mjy*Eu@F7LjFVy(~@ zT&NkcYsC&~(Zt$pD1NVfxX5yu6yu}1&^GS*={ghd&gS!6K!y<{vTzhKe)+{5rJ2F? za=vyp!tM5T3p0*``Q`Z|Pj^avFUJ7r+W2n$YJA}W$BFwjgFgi_P((!JGV?jzfI%vU z+?|}3djLiuiPXD0ePfs47C}tBF~O6QxmFwR{3F=FF8E=Ng|3 zdLtwolNf&_Jl-+CiSG_F-Neuy6TC@lXF?@bdE&Zl?IQS^F4aO$!KhDMhAH*;{lQ;2$T?DN#&1*CuOiIKl?1yG({3T*O|49r?w%R^D|3QS-S`adfNJN zB-A7$B0*Ak+3XdL@yptg)#sOGKz^tg7JDNleC#}__OHrWj`(-vhwaen} zFABsOKNW7@Hm>THM@bdr7e*-Bc*B|MCwx~OZ*o|E?Z+tmti7VXLW}ctR8N^N1Tps( ziLQ;#g*hx3dnOCL5zjr?G zHv?I8eGU0p@iu$UzANA2nWh6pn!9V{2UCV^5w^Vm?hnC6D;^wJ48ZM^VTsa9HfuEW z3rbip>>Mvt%53r3_*m07X?4RY?eJ}ezKmk(?Z}*t<`#9{XooJ)XME5Ry`CUOyqY(e zvqgwqcrg7KV-n3$v9Q8@Hdp$ylv3jW{P~yVn1Z~WoJ=zN4(l=F4xPAR?n(&l*3hD$ z@lavEOYd6ba@^!Aml%1w{gSNvN^7V?vzf-!gZ8TpB+wk&BOGBM5@hG%QywOFE)TFy zaW=usPrk*n3&mTWiW@o2fRP&PW9=gt(?WH;qV>b-RtdL^3h@7EI_s#Y+VAZvsUV@Clz<9IgLDrf zAkr;LcQ=y5Fe1_d(j_5CN_P(3C0zqUH^Y!KFu}|7eb?{rS?fOcK5NZ6_u2b%T~`xw zQ|h!XkK`nu6jyZqOZ_kU?_7#(y%D%;J%GyaghACCkT!42`pLsjrGT>pP0`>`u78jk zFL-t91?@3P)4w(QKNg_88T#Rw;#C`p$QAmM$#Wvv@N+zj0{M5BdEvxiu>KvQ;Qp=a zpqTGX%4zR6w?SXPuBStX*t#R8Xx^@9f|Jzd$mM5EYKX$E?G2rnp1(^&5;FT z2<}>pZ8(v`-{p*EI z#ohs@vxa1uCPM>76}L~zvTgRxRC?x_Hk|Zv=+uIKt)(Al&U>`lwD4%))LnZ@2#@(G zz$E2VZdPG9^^2W` zr!w6hF111d4%V_^CD*NmT4CJi5Xqw^8>rWVA-!>me0OtgiI1p0is##%4{dW+XtV*8 zgOuz|1NTC9&G+hf+@zNp9kw{RZTe*TO*TxCC8jk-25&X?E3u@$VT=0wvSz044fLM; zkC3wNCmEw_u8$G==_K=zbf+W?fqmESGpWI4{JJ40(oQ9KiJSsUMK%f5w!#Z5p7%y+ zhKe?&hj8Ea`Ng$<&90*-L$jMN_En2i$0EZf7OFnfq<1Jz7l+*Hc!LlE(ONg{tD`32 zyi<5fRjw!GbpS8^ckrPuH?`5W2&SN<)~8D8{V%y+XP(oMfke;IF0&tbEnx))^QfpN zzpb_8=;`J1UMf{I^TXHESmP*~-00;N1wLylAS!E>$D@0cB;wFeQKz5%|J>GAN)O*G zKmP&>C%GM7%WtR*M1=6@K93xf*X46Ryx7l@zdIUC(sp_4ypc^!-voREhpH!V9oRD6 z;X%lXQtBpR7k;f{vH!*)#G}3+`OqsNbXW9;OdMzbnjXZE1q_DS{nSd=z3X_zpgKP= zyCN`)S<^pTD7+MTkxwemq8{MtoA^ayc~uT0aCV)kRtULCSt~sXhA?UAAFVjEi%hEz z`kx7&PV^QpebiE#537BZv1`$twqMMJeIYBV8$fJIPg?z@^zh6}*OATQq%nxHZzp_v zHO4-6&1`ji;GJY2-Qi;_#faAi3`DZIcFs}IFUsDgV+3wfom}u;vZU~V463~kn$sel zwdh`}6*Hw|s3K^8II+Xz=H^}C5twyDjU)o5KC^8qBK>C}3?#VSShKor6BT;v9mvGI z!^EGRVX;LkiCTC-{Wl`I#P|uO;s_zub`0z{wZ?^tUtf?1(EplxG_7cpHWO$&L3^*G z`_BWv+mi9CZsr69sw&d9&H<=E4*CJEubDk$Y^Gl+^cEN6^nQ$8_xcnQ^4x)lYlM#i z0Lx+WA;z>zUC4s(x=Ya|ZwsSngm4_Hv|lFOOB)nBXk&POSNvgbHh8*+ER6yo|?naWN+ zlAL@O$fw)BmA^mgVKVk}(SDG5-h`-LeGqI_Du&|tr3T%_q;ouPX9PF*OG8R}k1q?-F2@0R8ap>MKr`lB+t zoJu@mOl@N3$6)HjgCHtvA>I6qUGuA+l8RwMG;%n}HgHF0>PIBA$Hc>VD!A1!yl+UX zT&mbciL$jT#b0>!V?jKoWH3xHn(_wo?b!N1W@jZC+w~)v`Zvjn z-xiIckiz+j3zH_Z^kk~A^XJzDrYm0ZeFs8b-pwo3x!UFF;9`X% zs~}RAT@w?tsPCYC!`GnkR*GtV!EjLju1(!V zCY`<%+|s>^@Z#f7u)~PUxg`n2fpnJOWyG`~0Pj1s{7D{3({0mlvmezIO%t!7yN@x4 z92n0>5Ya42-KSQ-q9&T@bbjZmDCd+LZl4%xh_~5~&LZxbDjHo;{F{d^aXq~MhJB%6 zm6fbcRda7Sv6nd*n@4oNt!9*&{oaVkntE1>(piuUB$4Kj02-*_5nbbgv5t1H#RWSa! zhYeD@SH)%$xNy<~D0=DW`T5AeQo2b(>lhz7fJIjk`lsRKp+Mec*#hs^@?*ikN*k_( z9GcHf-v(toO6vL*%5mp65JfRS!H(D8c;Ey+UtZR2il)r&>Vyt>Y>YvJc3pZ!+u%~! z`h*&n*hidC53t#pFhB9)_1a&&_TO5azjAVPS4tJn@guC;50mv-_>~TO?+u2;GB)Mt zUd_X8Icut?3hRQ+le(K8uU})%wNi$|E-%=sCu;9G4S6N>U-x^o#sf8n7R77UH@8S% z?o>D023-!_8~5D~dM6X(*U@mg{(FR0*9Ea3&o>5r_{NK1?FHVkZDF9Kft!#9cajx1 z$ruf60yPIEW|Hx(?>jmQj|=9v@8qReATd+YmxSlH+}=Z4?WEFOao7^)WoNFee(>i? zCyt|ZqwccfKGiTk>6}O*iGj*oIWY$g=gs~>Faz?=2q{{emmgjg^4!)Et@v)QqV67t zH%+}2SvfE8)_lP@i3wLK_A<~>-m1h|YqYuM`~x9PrSVVduoR&CuIdZfdmU5qc{>B9 z_ktroxh&kME5c>-;i1NYv9d(6nfJ{!C$6kiz{M-R@}&D-R(1?$vTfXf+&OL(cKo|G zLHSC4MN2^@MD%9oy%{xjvbQEcYrp$z1TQrIVLu-?X|fQnUZ9@n%;LG?31GOj6`6Sns&QBp@Oaz)pa~-$BjE? zSIUPP4wBC4dQl z1{XgTr3K7(&!I3Lq+D3!^%--j1#p>W_RI7rtpC5O-%cSxGRyaiPAH%()A5z7(ICEX z!$%%gM>#n;9fHVxA61!(#zsQ}s;#YC2S#Kg8T=)(@AJZh%#zy?49Q7&Zad~?QWT51 zyzx`QSSGW8~(L+8V4mf55X_ttx4dqE<?Qg<;LnbXgGA! zIkWDU|K*cup=c@F^7+g3g;oN4x;fKT1gF=gfhTcvWoNs1KbF^s=8;583meD`X1cz+ zYbA@1L+)gwjl$DjaBdwMolT#mb<+$~QOw9RM7FVAjmo?azB4$g--JK}P?(D^Mzi(z zZ&RQnZG$GjN@>qqa=3D!6WL4uz(5QItWvTKD1R1@zIlFhqP4Qz9E0cvlfefX{dEp+ z$f+UExjY|W3}2!ff9z2(-kZ=u>LNN$WtiA^E>~Sug0MI&dLDcm->rlYU`c!zSPL9K zv@}GGV^@lS5BWf^2;-c1IpPt~9&vU1KrPg2;^CK~#~Aw9Kk$BNPBfMPb7J&!Akv?r z;^^5U3=B#E%Bd=W1#^cx0E^EK<$}jc(9&zBt4d-*BR|upc(${gFzNjnN4iCg2B^R5 zLz9R^jYD{0yo|&JLdGpl@ou=>`V-iTdl=LXM?Pw-5N~AaG~3LU7n7jtMBaTQW?r)# zRhGc(HzX>csW~bg-={A*oOkUOMDV1_MaQ(L`=|AKu?zQv7_aPIG}iy3_snvgOg4H0 zo(F%?g-4Gq9t7dx#CBHoR_KqI!H=(Ah_cVPo6Yt2D9QS-nW7eG&JB>M;O?cZXP4Of z5t=R^Uy8q)y3+X5HS&6vmF0vf^R0UyYe)i<&P46Ix547v11OrCE-VoVFa#H^^om_BFj1! zuONSnB1gwuC{3NjvnMkscZ;#ju&F;|e+zEs_#+2*M=^4n+}^UF!J%;jvC9)!5nO2v zYzEhll#p<$O@1hNSbqUNA%44{>_;C-pV!zT*Qy z(|ZRl+6y0lx^LXOtTJ{rkUzkQUkSfehSDLYguFg&!lua&Tt9nEwi&HV-%cwa^qa}M zz$%haD^yn{q9l6MgeyDoA-BJ1LzxLKQEYF<)+$0|7LlEx66NjM?n+dWii1D|=Jg1P z)J|xBZC-AEj@zTFqLx-zMqsss_s9=PaC)DRIjnI{ zufKveq~#XV#x*OnS4IV1z$4IA(QKw$12?b3tHQBT(nBuGc-O+VsAbQbga$LO^)Z~l zqHo5g5)VB?i9^lL`+<(2yL#Y?0ApBsr{h;FVGO76>v{*|GB?EHL$zU(m^#{>zLoXB z<8ewrH$-4znkjzW+JIzdnQDzm4}#bo8g=i8N*)Cu3ln#w@IUCSEUcaE1c60;VPBHn zh31!16u>2K7iDWG_Vx0Li~X3~I;|CHP#qxvnu}MNp-CkF%-ScH(#dA5hz)Kfk`OW+C zyMMLdN!;mZC8bM+lT><@@EUvZO8ZyF$8u|`T1ayZA*7CBXW4H>)CaLoecqO6j6Bag ziWE&?p5vC?HhnI`upVa6&Q0dQ;fwm#X^*BXtfu5&(T%F?s zan3Y7-G`nE=Zw;-Pm6Ec*b3+Z$y9mL14!Wh)qt18M_Ap6DkV4r?pvVOJ77Fe1$I%E z8jo(BMRME=ItK*lx36SW{VV7)D6|OuYejfb@EocX%};;2!LxI0+Qx&*7%mkrrij)z z6yK4-2C3$GL&_byTJk!iA|}dg|BSv(C3`Zsr9~9P-x7o(nPOp)Tm+Ma;qR#SaB3 z4BOR)Dm3?B$EhAs8{*uvzd`$tnv`H)6?(H=Kl2_Eg!7VR9Xb8Mk84LGUf zJ6-h3vgzx~?K%$m-r(JYZ<|s4Kig7zF(h{WiEbo;-lqr6l$LFetEe&yZQIl>@ zHr<}%+;C}uQLfs>FgJJT9zDeRG8|^y!lLIzxyKpH-wc(rDlu23&OGAT3{2>@siE=5 zzX=8Hj=di*MYSQC*t5V6G%(XmDpdKH4G$iIaLhUP`dh#C)eOk>+cnKVwlQi-?d%?c z!Y>{1;7w}5jlpy^*LroBVlbc0K=0Mrc~X0==Xco~e{J}HiM{d6E{T_}tH|$QVBxF0s_pL~zKIW+ zF-D%u_rcNV8!SCT(?Dly^*MiE`$h!QRcwC*;QA{4H{i$jNhb9KJJ$z2Q-kro`xz0} z16?**fy1NqYehDa-!B7O6XUpt7HC927a_(lq^7WR7V15|c;G#l@Wp_}y#sSIpEu|0 z=%@Zore_5aKxH}X(V*~EH$QhCm^J5T2P?=D>cdis7MsNqHxVPAYDQ{fU~Gf)`&QR! zQ+Z|57AnY8RtWV?7OoBdY1nu ze0A(}4F{>uyQ#~lN)=@Qvr7}jg#OTFvPk^9egx4--8AiW$F(+}06Jxm z&Kx3G-{7s?fq{$D)9R_iIvfp>^NM9y96@c{{6l9D|BURWPBVIuBw>UIIa&~c-{EYu ztjyy4Gwc3U`riPL0|3Pg)+S%uICdIYaWQTz_3GNY$R20Q*Y>+OKl%;HQOsrAK-=M1 znt%F-@v(3)rEV&XqwnKpu#(>Juu=fdUa`Nt^uI0GTHKtTihYH3jbmuAfur-)3+MtT zwMVF&+@l-@2G952OO#mkCf!=)+&j>X^WPCuyJXj2`9NCJeb5 zpGS;hAg@q6j`%%5n@EXkUc;MESpCnh8fB0Py2Nf1)j@8zIeFDJuY5|svi>)}aWA4Y z?@4n+dl=)%1VW;IZhW$*xRn*G5M@CKsHZ#rJeA^qi?fc5M_UO9xA)h?T(-vy2d z_Ow>9;NVDq1%4SE?qp#4@a5;sKa7MKAAX!fN&kGy@Y@BZB?=959VY28RQNeJQG;n& zQ;qSWQE$YMIC-@EhWKnIka4`X)y!WPo#LAL5%cY^ZH@rf^874HcU{r1Yt1PA>|kwx>10=DWJhBE#-{(uylh;!?89yq7=zs$m=4Y~ zFo!-gX?WEe^dQ)d+MA09CB(T!j{A(@SAr-Y(m`4%eVa~XQM~mYw-j86Jd_Y>H^1`t zSzu3Vq*ABS)0mU~g!SAU|_1e|t&0r+DsH!t^d)yZ1lQPqlPJkn@XlSug~&4Ti**?jMv_wwdT zQIJHareU`23w>UTy3nTe)x zCRwi`&dmhsCPWI!eD=}NTivN6QV0qc&A!*lqwd=p^6`>7aAmV9eI9F-KzWsZuSaJ` z?#H4oF3ISft6&KKZZ-1)#XEG~u{*<@DUE|uY@ph@f$J#ew+X1xa&Ix3HF2Da?^l=| zyfRjX%&~eS#7zx^I#?J_U7ZMDWA>7BcGMLAwDOrBSvl@|cj{34B zizB`PD3`XVw8Tc8xX70-GT80}$&Y1ciXAFoceL_c7H_OG8~o1QhgOb+lwfLt6(3LrU?p#&{QzCzR!HVY9yxLcMNC zwGmqAxSY;p9&#ccXZG=nR^p|8baNBcA2dxcqjYrgejWcrN)K5@8Zb^GEx?`CruX3x`ZQ0s+h4GS3*>g8`Z2P9S`+lU)6_1ufTFB# zMeBwpDYT|5Fa$tBZeXw(6bhoh2Xw^I`nR$mRC`y2-S2?*@TSC?hJCj-Ms1vyTdDS| zAL~rh-h(}<%_kJpeI94w<~d|vJQ(nX&4m`Dm24LvT{zZwP&a7jFK`$-R^!~Ia%!*^ zRFAX_l-I(;zqvCC6!L1XH17E`6<=8)k^7{z>uX_$3bK(SCyM7dfD7{;emmdVnK8y_ zmdXbewNAT-wLfe%c9#bXoSzdtbo{VR@xy7E({8Q|);H<|| zr{cj3GZbCBHS!f0pqk_1d1^_|JR{?!`8bjiJ@TW0ks5rbP@t4upP(jxHaWk6W3n|> zl6ayM2Ab=*Q{Kz(j(Q^M=S@xNOa<3hX9857Y#%OCHg5*$z04psussj!C~i9+IHG@E z`Ue0xZ&wpFFj3uphhgt863f7~z_EviPHQV28Df9+`J{?2jaE$D$&4Q_>L(3u?AQ)4oXdFeG(kNM}thL+-}tu+w})=9naeoxITv)xKeTiSHlc;W!|0Bu1?i!DD{iFPUCP53Ge`@&;9}sj-8efK1y`-|cgnF6a`%(~qfD2W+wL!6 z`Bv{5Ao;;9cr#c+p2>b)_?N{r;i;c)Pur77!_MR=(FH7$ra+p}3@w|0`slVnERB_! z+p@>kbQ`o%81E{*5zRaGO9q0DQwBMIW|hFLG-t#itr*)*!1)UJFfZS_WaJl`ECxmo5M>QWIF;Ono=@O z&#U^$ZoqFlbfxR?UM@)a`oNSZy5(m>+(vwy|Kl0K$0Z#*GNz6|z77U}`#TG`-4yH2|c{t(u^ z8h4f&PFW>aSEzE}R&nC+Off-P29UQzQ@n2`RK`ERI_-JKOcn6)uA(XDC_6{}c zR4`J_2K$D1s2?((m8Fg&wdvupvx?3iXxWBoQk8aa`wz+QJy!^U&WnrMj9nH!0C>3x z%~ua91{N7XIJ7JHHFuCY2LJ&mcZO_z%6A!`IzC;(ldqV^sKNI6+E;mZTCv?~@CHoP zBZpRqnYQR-Lheac{6x=4u}M8KWT5?6pZP!Go7V#WIF`RRD2Fx4FPj|7{Sl3duTymT zR4BU6G#Li~Cvn_$TKAvb;h#hC_2={T4ubM4FNs|pyMz-Pa=U7YeoSkB0-@IWOQdjRw+F?V z5Hj?6An=7*_CM6OqJJ+?4c?yr#RYstEA|BJty#sw54$`%ULx*~1*0hghmgprxC0Bp zO6iB~+pBe&Kh~5YJyqe4LHEvb59sYiUv<)Hh6?xqIBy>#?*WC5rGO*>TM%s@xZV~( zC5gdHvt#nIfBc^w_^%&^d*ED&gn0~On}U9fdU-(rh^x|njN#CB9l+Kc%Q0Ndkod=UR`GqRJW@5fe* z&cdIm@rpQp-y{y-ZY;@&t4;jhq)s!V*R<;8(byD;SkQRLfCTrOm@PBo3zb8S zfmJXw&1HGB*}9fPIu%NVY|TxgY@QZ=AH#Xw{8R6bSdVlZNZ-QX-~n#Cir?GtKrm(v zoD`scVC31+xWF!kFKdU;FBi9>sB70Tq8W25RwznOe`WRn#lRpzArs8pkRJy%iv_Ba z{dt9C?t>URfm)5HimY#wSpCX144lOXat4bcAbFD~M#D=EL2D7pA5qsy7-Q;pOd(9o zFxN)F^<&JP)8{bLU8}d_<--+YcB}T%Vb>LhA66?-XeCGAa5vZD)AT@rXo z^yZ(0J6tf`C{*@k2c;ssGw140p|J@wb`Tp{mpu0rXP|EqNLy5GXK|I-rF!rdW~I>r zQI6O;ovdqCK&&Tb{+?JwMp5~k3Nkk}TFB%h7{shztub|__QlI374nPZR$A)a)+}Ye z_UlV$Dk@=b)B4mdNuzv1-r7Uj_8C?<%{SMFyTPK7m1c1rO$t{&T+C$H1gguCI@iCB zq-KAE5Ip`ob*F_Rs4&3QTD<45G%i}5@8;0yGD>DZPX)k_u_yA zYAzu@E8^7Uufc1KzqJErdX8Z;Q_K*KbBo86xq2(N!>3wW6Mw0uPW{V|t@vq>rFF%vxv6*XLaQHRd{uU4WkSG}QxjgAMJEHX<~^YGCZ!E_#f3%Qvf%l4pe0#B zg79abT*%~itVQyv498_Gudbf6D$}ZlsJOGFlX~of}$NY0~Xx5bdRZ%1mvtiOqT|Bv+1pEp~OWhs<+rZQPO6&1C z1uaz%HPQ|#v#(<(+`H@{e@dp)UX)dH@~Wp#NWNf}rc7QLX}YGt2Y68|bX*9@4jBU= zY08ssjiz#@1h-TRZlYPPSuN}c*<3{MgBWjn$LFpVI!T;*>*FL_cfN_KI>LJk4DfTj zquGZST_yakceb~%i19DcJWjb$O!`U>w^g(^Ke?Vk`Sw;@Pis+M``%msIjb)BE}fL% zf(HYATOVda=J;P=)qE5D&tPlW0nYE)Z;w_4TNs}P(NGbXQH*9+9?ciS zeN84RJWU{~4)%_^WIIhd)Wl0dFwsAkREdhb4(0M=tBezueu za!(y=Q^X3NBW0=nw_TJ7J8h%LU(=5kMg_0i`PQ1{J#Z_U!8Wv-QdP(4O0@Qcx)wU8{aos z52s%j-%JpiF_R;Jjmwkog*8lEDvT7SwVD>S&9pu~D+L~Pzk9{I@d&t+Y`2r158jV? z1g%Z4)Q!6lDWxOXs~y*L3c)5EFtw3qNm8+z%QmFyYJ_Bv5@2%5%0ry$)kwX;*EiCZ6S|@snXd&y_ct89h61-w~9dF_4j($VG z+eAD~3rec%Qu|Fmi?~UXVYFy9NxJMpVWhp16N%m7 zxN6?FbZjQJajUt!{0vQ{M~{`wGxnV_12=1W<|X~&BZ1wk4f?0u0qS2tr$ormHSTts zE<2E0pCxR`>ub!fbm=;7N1#mzYS>bf{7J`LHy0+aDSXg$qHl4;e!+M{N#N>?K zY8}+>xDlm4FdZaqNE;cdv{rw(e2CH|9H==j=P0lnbnFWEKwEv+M%1o+LJ-4GI(yiU z(4@X}AH}Aw626U_UNtqrYjs167UyU~^J|`RX1;IvZeX0`{1IwQrk>y5z2l%Gs{^;X zyCPteE((ernpg7!^xMO9_+2`T@2R~OOFl0s?1!6Y2o7;lDYiaoJ8+x z+49#kxs@WsM|In{oPoQRMfa!VK z2PTlu#290LoM)fnKUw|whRA~TkvSf$|NH0iF?RvItaZLlqnG;@uz%YdTY@N>r72v} zv*(7pB!}AOj150P7l)_E)v?7Nb#@EfZ;Gg{gG0OKKwsM@W}GUOuXiN;c@RbLElS{ghUa@CwF80?PIUVteMuc~ZI=9rguUK>IRlU@&Z zzSAb`m`?Ci&^=f?KGm33$nL~^+By^|cynV^M0SGD>cp5vG>ifm42kt^V&a1 zBR;RsE&{txlb`HFA)}Qj^u(1wUp;mbEq(%@OHJuiWY%S|%-}1VLv|piRZ!Ae>nmx~^LHUu+glV7jtPBHitWm)*n< z88ntwOpE%n6GP@bN`9He7iw9QFj&PYef0^Y@L31^)Rt}-@j3ol8#yijFHERD*LPd{s)enSk1dNA`qz6H_r1!6czm-d@lLkT zZ&EW_Ko$?kS$~cLmU>sk9;(cWro*{u5>0Ub&-i7SY3iEpU}=@E9)g5sUZ2N^!reW1DT>^omF^HZ1$i>%C|a~iyF zC&G^>!sk;t0^}6U{*YcVdQ7B0tLKv#`<%ecdKtv8B-2*j@2>g4Dj8R2z^u`+KR8C3 zmH0yHzIXODF~|Lr8KkQ!V}^(W`%@JyE_)Zcqn*XshAyS_4~rxrp)mU|Q4SNsGH~Id3_Q=CFwrsQY zH=rPha?3$fcO=obD)}A-fK42V}r-dsKo+<2N}=lC69Q{n}k9f zAMsk}F~W5rlvuQtKs3)Fv4^3JuSzYY%*bAJJ#?wgW$h0QWB} zOeT2W>gdbCIm0lbF?u4u}O+RUYR8x5pJR_6L|--P}`f79s0Ym+IC zySCDJ7g0*^*1$7zO#RGnQ#Y!Nwmy2$?VoQ^{q9!BgFwCW62&Tp=8JnBghw9#Bx$E^ z=N1M^@V0ax2XsUPw6f7HYSz9ld)*~=@%XA2WHEx6;N!d_g|3}>P;K73uV>_)+4~t# zpglHv^Fk{kR02T2?mZ?dQ)a2LE&d_}ZQT&|B8uOZ<{w#;ox^QLLYopIC!Y}5$izIm zxoK54?{UrF*CU7Ty%0`Uezg^h3Je~wqvdwc`c*UIR;9@?DvXEXCfmrKv6c0RoQhgo zk>`CoZ@o-m9w&gPo6NMae`KVc-i*Kzuc%ddCp|@dooS9qdx#Nn$gMtBusAe`2x!tK z>JxVwbO{BSJKQ2l zr;FEd1=q}GW*ri!+j}UH=Y!zIR`&IVE4Q`6$%xOiGIz&V{=G}fGdhr7>55#vEO5skq)2}K$&y@lFs7d%<^7fi20<4FmBW{#dysP zelyI+3T~D8n%+T{+1y84w#{uS?pLnh8?!Ge<8e}gv~>KG0 zUVt$mKpH=G4Xn3f4K0+1>qZq%h|<2_W(q7iu?rSpn`(X(s7B_4#|&7xo4~eOnzi8q zL4A0fTTD5rG{`w!W3UtA_WERdA4|D-0oD1&>h|=j@D+>2#ghVZjJl(tE9Y4nA)@Gb zw0$e;mCTnNsXdp6?=>nscxizh#CkIHgrOO;%9&sPu^2aCt+Ql%y|;Tn^GmO5Jf$a0 z?={%jsjjg*L&R$Ig7juN5??sMOsrbw&V%C?Jrs-i*v5`WHcdu<6#3cF0O+4wqB2qS zbIpaih*x-UU(^pr6#qvvMvNd|oZ~e=za}v~&5zI5xuPRS_Tbb9ce>RBI?U)JkV*s&h4sPsdV}6eWLha96d%O_ zuVoQahzQE~VDW{wq^pHD4aw^`a;DHDfrz6zp(VExOXso-1WWCq>kK60yIflqYC94% zOPFcAju1x0w2eGA**|xF3(wJ$Lp3U4xDJ2CmeA5rN5Q!pu zx!;5apl>@=%~VW=L3a-9YfMg=!RXZay9_9LLMcCh2nnW=1Q1;K5lUYEJOO!oAE|B9 zxm@gYmICyLb>{?8#TQABXsyYro_kn55Z=pTRk0qjcm@N-*O6Wf=SY7Tz8+ZADa;(s z7}@($sZ%ml77g&^N6fIvRI?^_R%ENN+rVK?6oJzj-%1zjxT&8nb+Xs54mMA#tc9E0Q5XdYp6@z+O;t|5i%`wrG4ysA8>-;;t7}5^ruUE&1N=OO$?Ql zmhOB_^0@Hdzysk1&6|hnAqWRke{8YIilZ(oT==^ zk+k9b=Wwox>i2Yk%kOyY_daB;kcb~=`FN+fbdr@27gHn!N@TG)HiOM(Tey~@^E8x~ z%Q~R>8iqmZIou6h^ahIq0Ux$0^^7SM7oi^jeV*Ti0ku85e(pX>ts`$eEsco(P0Phc zd;70CBkv>3{#CQ*ebAmr)DT%TP+Qq<<}Hxqn7UY&&-}1E$IpL~B<|?#?%1k5|EpqE zF{eq1IlU{bUHUf#wHPSWm)=RYWyW{>_0jrt=cjeanXomhKaXte8Mmm=tZ5Gh*sh8j znNA%_*f+2P8AdvKCI^*%ApWy1j(_*BQZVAo6qsKDM2=kHg<>@dhk%!7>k_)ilh?lw zCGx(LJ4oNO*KEY8)~&1jPO@{hkI*F@$1{r{M_Z?n@WggLw-i!w9Rl&|ps#>$=|8O( z?*zLX3Hperm8&Vaem8U&`WV!jw&IzS@tpuyAbiy^gN0$%^NKA{nw*OUYXJBR{}d^>n!bfF6f>>7W7$n>_Gx^&U8Wd zPNFaq1E&M&W6eRfBcq1}`}3Qo_fPKLp;5J~K}5j_=`_zR?JwroE|U7X71-UT?+ddc zr1aSqtDQQKO~2i~NI1(bumjex-l*co|O?0dxU;5bl0!N(xN6y;Ai& z`$QFT+mE8U!7CD;{- zbFXGYQS_1Fqh5qBGG5ppSd2J$yM!!l&alD@^YmG&QxnJ=>YWe^*^7<)(}e& zSTn38FujF3O2~Bf;sTXn|brk1So(E1Oeu_kwb5l5wi8`7PicWo} z#PUCH7zwJ7_D|Ilwxf^SYEI@A;o9J0->Dtu zXfS;RWN3_-2uTU>&=r4|we>}o4WA=GfCJ6|&un;eTxE8kYZ*SM8BOH>*Yf9{EKaAulDoV1~&KOs2mWT@!(E5T~h?38~wH(ed40Xc-gfFk`( z5yd!O+oIiSrtL>A=Z5pwSDkAoNK3zs2ZTdvRJ}mgzyK&W>O;@J*iO46ui>{*(TP#H zkAd*)C`GwQC74~#A7izRp2pw~@TG`>`gNv}v(%h;FFtc7Axv_lNv%#}X=-|>-a?9Y zL}sA7Wf7zXn%Z)=0j-b&g}vVeY%A?x(MG^U;MXVkf#SyVHM%qO9Os@vGO$&xu>z4e zpWSb-*>p6Ca2&U90xsPB4ue`5yI1q$T+%!U1!RO~QnsmN%!tTFH5m-vO=S=CFETBC z52BKM^PcsW$}`6x){71<I zy5OZk#h;+it@2%?`u(epiN#{4QRZbV>U4J^hgmjgLGnF@agxz}wZlOD)n3R?>=otv z7Sep1L2PA6(39}Rg99&zjkq%^nHa&;SOSKPzm!1FZT^K@5!J#m@z7wv*D@5@Lk!@c zCx$G#I~tuQSved3ygOSB$FfjFdX;ZV#>h~*-yNT3*tlC-V)+~AX85XUyta7y&45v>(9j}P~+8>TC%{wOQ0iv2w$h}5jSzesfJ z3{PZ%M*o=?HhEBO-ce?g#ec$3E8}3JIAj&9JN+BHM$*|#xHQ2n;pHAoEwB5q%H=Z+ zFzT*Key7i=dsD_oTjC??)h zx5Nn>jfa7bNN&acXp3F5vbgi>&}p48c=62KEoN6E@}l%HMpm}e@yD9l@ld7GI%EX% z>L|6oY@}23X6>A3Qai6EC9s`76gbTgSJf6hVmQb4h3wHu61enWYjrOt5!{uV_c9!^ zr=eh!Yc^NIhX+fxzak7WKFD-+{BjjwkD;%>~QczRM2x_pc=w<{c4`{|5yOzE1B+g!__()UMK4df%;XX zPBSCwE;8@=iO&pa;A7-nArWB!wnHo`1e)6T4Ao8&xG$#9hX=mf3q|0YE4El6F5~68 z<%gKKJIh-5T?Lb!sbSLxfAe^Fts6H@FKQxHCa|v%|NWrll|zYQ^U>gT+nJ;R!Rz^G z{vQC%Kr+99zpQ0V#XUA`*9d+IsND#Bkqvav(~H1g*0LsBI)?vncIoXrd+8AOD;+Na ze_6|#4E$2(II(_=!F-otzZvYD=>@)8z+cv~#$TZ7``#wF!y_5KA0e@M`nojE9M%-tc^w?kwo*z~&p1ox)>x(V1*?cq@17-et zy@0>0WqmR3vkwR2U?6`P&a|v$eKqbsnTVtHg8j0V_0_pw=HD%ASqt~eTGq0@9{1fY zTgwEzWi4yrep$;})|Xqd+gxwK{+bm<{E>fM*0L7vzX$gbe|&yk9>%inntQQ~#u<}) z2LIWCFP4Y0th)q%;eLGZSB`tJaKEg(tIo*VN*U{6_y`hVFWSVzGtQcoi2LFG zc`WYL(yHaJ<9@;3ai25zDsLZRt!U{}xF_r__`rM!JTAHc?u2~D{RrU0O_?v?-@BTh zF5C}uk3EodUc0^s+wHbis*LkBuMhg36FtC@WbDNd^GH2>4ZoZwUrXQ<_j$!{=<#Yq>w<5!~>aT0>PIe9bg_;W|jVX zkohBWpXd2(J(`{u@E7h!75DX8!w=*>2gr&0hpiR%IfL)Wm*lA<*9e+Th>t|>(VH)% zx9HQsHG`cGwh2yY(DQIlme5>%m>2FB?#E@NUgveLmCn~1)p{2AQH~4beFfm>v1H#o z*ztfp(o5bF1Nfvskxa9VY#UOdvpo1yk*~dJ0{i}`W7=rkqqvWCya@dJ2H%*4`$1rI zo!9&Qq0Vy+53J_-1!a?RY&W#KQ}Uo7&?!hH|=6;h8*J-{Eh zkK<_n_=sE-MP1jbs;Z(8aA{@;eG)*AD`MBUloI|5#_l%97n1LSdKA-#zkk&Y0Gnp& z_n@ETL_K~e82sZh-*eweE08^(WSSgDUzIssGB^xoM#sb$PKj?9d^BdYfZydlN8I;1 zCP@imf4@cQ;paisWn5Rdgr&X%J#mi=ftsHo)SHi27Kr@BGIkmGHHIHn=#g0I?ZZAo z1trRzN218>I%dx@kUW&RWNRc>{Qc*f>zxNUPi_TMo0s7T}+`Uz{np19wGu+O&` zzQYd@3j4Q%j_@h~iCPZ3!8c&zomdG4_%>YXmn zu{!kYq3Ogbe4Bayh17pQ2t|whi@*;Zk-$A*|Ept|6iGlmZKm0_Ans*G+z;j(G{0mW z_E~pml>E3T#(F0(Ldx3>=}(+3gibv<2KO|d^4oDA?{=#EyJz1b^LjlV`G?qIk4pYw zg=+p&#O6Nv`6OeX1<-qSALDoup^^di?hl`F)Eeh)hSua03-C1Aw$ zsCQ`vWSiig0sGMK@Hs|V+S*}fi4gm$y5fz*T!Vrquq$DV-L9`2v(8VEWz^l|`B~sC zdsSHpU{AS5^|#~xFPeExfcNnR=J6+f)FZtPI>gB%j)8B5+=IZk;rmhms(2c+O&4s= z+aanX)7|`u|J!^4wElNXzIE_j<%rY(e)La+JsBnlk*D5T7_B`&Khs?$(@)kQ_Em0m z{2Z~@*Br&7;K!WD!co6*4=;3{GWQ%g*+?TL2ScdzDRn`|Q|<$0gO3aM_sl&5KKNxS zq#5|bi*_wSVXP!WUx>;_3-b74>{W>_NCcl3V{e~VHnd~Qy`*gqD_h51NyCk}@1WjEHS+dI z3;qy$;QmtVDZhXwFe^=Q(gypGdY9K_xCUGQKlo_ zv{6MPJK^KHt{)z1;C}z0$K!srZMa{9Oi>pY6@T< z#Z=@BPg{rBhfxzBGa&^9AGP2bh>yX~tm+?prGtH5EZpBW`1`~DK*3gwzpx6B*XY!$ z@gvYbo?Aa&)3I>i<1qvDrAS4T z7$)e-OB(9iSCwJxGZy!sWg2bz_~zE^*Vfe+Ac_c?%H*UIKvXvO63LFnTe@!166 z!>817Lo4ziWg^=Q)z~G8J&dMDz5na{C+-*bS5i;DF3PjBNW3F5rwSZQGYSlo2752& zoBfdR^bv?pu_u||Mjw*{>eL(jMge_Vg!$rsDGtogSF${W1lrornxv}qvp$W zz$x*8A2KY6P~RB)fP3{982BU{=%7&KNHy0sMyufD@AqTAfdGC?X|DLwspTGzmS z-&RH$&v889-Z}dES3{e7cdFfIU@({Y`RQZU5t%zjBc@?pm~B@^W}TIWg*hT@5gYh5{y8s0g*5H9cZ3gCI`| z=9!8i59EhI2oYjmjVdtyGVcG12tJ$=vb^Eorjgl@eK_095MZR~D1WaZ0^Fx$whuwgUcFwzLGTx{ z>|^>bs|kn2TBC z!u8k!q-^N3(z>?LW&zhGEW#b4UK$K7x42J3hZ}NFfp>Kt`_>WJ@<$LH%zZWluJz_S z>we&m!~ZQiO22KmLD(1Y$*|sxqCSs7GdYmZ$D0a;E^zRB9y`8zc3K0%yoQMeX2C13mvOim)G8S;B64Y-2XKUFJSXY|)ea5c?*~(v$p6)&a=7 zqQD#STj}`?`Rn!izPSf8@SlHv{feT))~-g!ec&%VjLrRui(0JE#|9SkOT}KSq8_r| zDL+&?^u@6e8I303HT?{geCIqw^v@)}H>FH^^{rwZx?~r?5`|bEI{HD=o#m;<1 z;A1+ebzgT~b;P{~Teg1RCtq~H&+013ep8zB*Uo4L6FMU89hJxIkO20ZG~Iv;Gr)b; z@%>rslQ8lhfF(Tj^l0?a?6(7H_}s4W0VO~AmNbF?sCha8`c0L+Qil>G65GWr+nAPZ zk{#Rr@N&UNOw^pA(=!_n1Y(kqdVVV2XQdd?Av`^$6JQxhE$=!mS_ zNd>+k;Iqu+AT?Q2NSJjp48yyl#3fF@h@mt6b>m2x#!H+QgMdxiRLGR?~(To30v(_XIa;gn3xFD^<6^MJA{fe=c zlM4^n5m`9!3mb;4*b%8IQ?-d_(J)jF;2%qSOVW0pVIMDD#lG84PI~*t%B2g)gx&wh zG_k+qR0;M9G=%dI#Bh17*v{#08NMOrYvgSgkFCJ+v+$(H%Sn~je9a*CIJxA3n_t(_W5bop>yBII=~Nd<{} zQiC0`uEb5TcmMS5zG=RjTpJ6I5`*vB=QKAKfRC|-eyULt<{oqtivxz@KtnAGJwN^%`1S@Uy)*bLsh!lXYfF8{m3JxlP7PLc=siY&z1C-#pS0C?wo2OW2m+~U zWexcBB8-S9m}D5T&wpx+;oJjrtfN3x6e0Gf)VOFnWstwc#-$hP`gBj#N!x?s1b!+K z)7nR`65<2ZU%*WjV*j~{vaFk6|MawySZb}c(3o7v+{d{R3D>ZRn2h0gbVdK|jX1)O zfs@{%(96XcC%mF83v?(IRT}Fvuy_AT)p*EQ@`IAnEeuF~!hzSD8T>@_zd0jY$*v9e zF8Fwwv~L{y){|G1-VJH(6Y}oyH8oV+AUR>rd{Bnhg!hILlsO?IKX=p1nsov7a4dyz zRae{*jkpH@9r}1;%5k}Wv((d?@f+3-eK742`ZK(h#Qi&8Rd3!Qf#kEFtmOl5DJw?0 ztfS+XnQ3JluxpV09tBJ8)0^pP?e3%CYO1u~s@18IfpR7fzWfCGwB63MrJ=-)iZWsg z;AM?S{kxC?>}Ss61o)Brn7A(u*I-ilDq<3Uk@*Lfd_@T*=LjP*NrLOD*4`0GPQ73W z(Ua$-&VTX>J@#?C{zddT-=n45D<+KwV884X`=HuETI+*8`MeM4pw3TTnmC|-!T$cR zM*#-1o^?TNZmV+U9s@Ai=Ury0pjzUu@)lCa9(9;=4`o|Bk)cB(l$cl9CxMwGsQa%z zAA9~Dd1HY|g2?Z1X>{s2r)jWTI*D`Vp_kCpAQ>fy&(Z_ANiR>S@f`l9I+ z@+}1g&K$s>G#W53!*w6rbG{64Z#y-h36Gyt#C;r>;ZRD_`El0Ua^9EKpx-kBKC6`) z>Fn~lQ|x)cgRq@gee%>juy3{em5{b%l3D{{To;`(4*MXSjO2^w2K*?BmV>{n8?3jt z0ROw?9!z6PzAAkU=PrE($nI_r0Q%aW|&K3ce6)-9>`IbTn= zgZ?oh^jYs98>bD7$ehgglQi<%js^GP9yI;BDvF8>{K{GRI?XoO0Qd{{%eo8d{pUmA z&vY;!qsK>_p7ivNH7@Vy0P8kT0Pr&zyVgzx)pFhv{6^fbgrK}LjVWE6;i2mq)3CCp zm#rU&f|FDh?3Z;P_Pr(Ffsfr``ImXb{o^m-{^^Oxmk2)11LhTi@2WYlp%jpRQ|?!R zya(_#fp1edsby5=+c1U2SU5mQF5EBcrrdXa|Ni#0BFP(3FF{&!VE_0JV*eC9J|Xlh z@mEqM;QwTnzZw3A)lZgAyXG`A<{0{fn^a2;>btVD#zVV_J_t=Ih z6O8>#vD#%V>vQk{_+S5ECwNf4qhDxw&%!;4djh{L@R@wU0w3>yM&93=`}PvTgcT-4 ze6JZKO-~aWK~q)a2TiP(wXAt9ey`wzuty0z1NN-u)9Vg$Pr2>H{U%GO?TQEgehOQ0 zuAGt5D*0^S_r}Om6DHX7p-rt`N2aEpX5+Avb6i4Pi z;vNf?$iD~NzeG{cw9uUHAVYg0GgE#$MzWrtIPPs@xL_r&Cxh?HvH16vb<2h0Qgw-a z;Pv4U#j2b|&j;?|g5i$LA92s%3znQgW{)AnK4*uZhh=E))@0w1^u1KFrVmroO2+;g zOgrbCoSaW9(=Qnn|&Y(wwaU(jFHY}{M$0kp(ad3m4-AzH;VjpahK z7wn3Xy3dF5K55W*+-DnLAKl_+fcq>HZJFPKJzOTAwy-B?qZDFqyTY1*!Ojc%%bJ;a zPe+nv61cCq#|3pt4z7ji!N=9s^E2}0`9Z?SJvJT$^Ii^e4@Q7f_m47<*h^o|J0bX< zdt+O!+8zt0J2J5=^%wG&H97aVxY;w-k0n)Hs@h_&e*BSO6VD^_v58?>_w4(Oz;{E_ z1jWW|6g=d<0iU@UU_NNkEL;bVax(Ib^xPYQK9ug#kA4}xmljL^`t|gwsJVwcX}^zo zHvo}Fj zchVji&pOi*Qf|85k@W5+SVaES>+R_i+9JzbbYtrMMrIZFC6~03t;~_FROYQGTxD9&_|*RG$Y158_Ka>5aUb=8U2KZ0Mftgc9_Vz_B~?X z2FZWInp4LA^|t`$%sdgIA1vd+FS#lA1l-$DeG*cirM@h`t@3Bxi2j%6-pgCt*JbSU z{^rPk^NSL>C6}FG(YKDGGn{IpW_MyzcC(E)_>bA2aT^-Ud&_-ZOLpvS$di}Tu!HQcW$sJ~X;4=yCD`B^(nw}lSw*Qw4&rjS|iT{nI;5%!Mzz^|9N;m29n zTtAh;xReC`lK8sVuO9#V=se9t|1;AjGPEfpm5CcpHNeJ<$v!s7lh;QrS%o!s6W z`F6b_^D<%2(K?C%IDFsXD80R}J_Amp_InL+Po4GlhGWs2ZK%V6x3QXZ8_mB2+?RIJ zc4_EvZanyTu5;vmgWS*C-hz-1xevg{Ts=_pvrSvg=R&;}Q6d~V+~Xcz2GA!HKQCi7 z75Jv}+ENV8J@@r`u73AxYx)1NC+qRoKh*1CBCnoZ91>3G;Uf5Ptg1@qG1Z_Puw&Dw zVpd->g&sL4+=amH2#QV%G+}4mM)*&aHeLtV>zbTrn*e;^z9jC&+!HE5(^%tAR`ltk z!?Qu!^Td9petyD62G&J zXu@rD#A?oC-Dv)dvUaBhKaDjoA<&^O%DLNFsn`ynX~Brps^n*2A zq)$SBnn<4HDtm0jL069p*L4H-ZYT*lVfj1y)l@U zV$rYart-|b^YpucX{+0ZEdZx3bfr^s=r{MaThq^&xwp~ho}GH0dw(!704|D3*XYm} zaXtU>P-<5w&fHm}0giV71!H8OF9Z3;-By^RciB*3HA5GU#Q00K%e=)tnHu}Y&aXFF ziKM|up!~j*DE!omeKq!o8$xf2sQ`^mkswcMDPCOo98}g zB9dh-l_ZgY|8KHy!Iq&s-je$St1Iff20{Pl&!6Z|{73OKnt*$c8)1)QR>*Dy#ZeJ) zaJ&x)7)GqU2&9A&Dp>*0U;%K2T3;#{ypHd*j@xXb>nVU61~d#^Blx*?9Kl(r5&R&gN?`_3>gIneG+jXpgI5%E3xBe{~(9WG(Y5RZ+fCDjmpRZQu9p!|$Izw?7|9!>+-;7oxn~LD?0t7x<2Q0zVM>O$w}_ z+CjJOg?n98pvTE0%oFyFGh!-H-z3P<=eKzh0w*7dvW`jMpo*KvwQ#rg1mfOn`BiRd zvhq}yZn^R5d9x_O6H=57=i7_vS|1=y9)|MX@fmI(_tq^H_^y zc<(2EXORI6443sE_FiGhXYFPm3#CVXt%kQ_@Bngr>q`yG)%Fp;?T^`6IPoo*lYTa+u?NwMep zk5b1Rz^dy%wHtbFbgrl7o}?%ZF{De!mZtFRB@k&Wdg*s%X@SGPbUARrHUjQv-$sXf zceyl%gySCMJ$zAT31-AAFYGCaFMl}941R^V^da}eNK53~ls$KdTIk=H``FIMu4U3& z(##Pmp+xxi!{G_X5WXFT9O!zTA1wJ3QIAEE*xiLCK5-AnUj4D}nW<6yjrVeCi+euj z?A|M#`z+^@%v?3A@UzS-3*34n?n&O?Y8xHybGEVg)rt7uTec=Z-q$)O@C8-lfgoVp z1Kp1^OZ2)F?o8#<0IC3$L0S;hqyBnffajHIW76{ z_Kz>>aX1*7jY`+p=XgURzy1R&R<#9Rkd-@T=wRa_c>q2kSN#YAWdN5Kx$T8U2>G#a z(X$!B+`!oQ&9>26KOFIV2O;r$evy5C0K9cdy>8$KT?)UqF>|l=_Ao0sI~MrJ{kC^1 zTi~<6@8`wclKj#>U`z{V(brIq-A%B&(bU`%_PHVldJqGKck(A`_UPc%ipifq(FZy2 z$}M80#RlE_iQuG_8umr1z92z2I`=GTi{i%*ke+c9B40cI`2cZfe_JuAu1o3?X^ZmE84`>JCxCxD@-?a| z1&e&<9<%UK{xxfA>}|y-dvQ^_5UY#~y%^u}pP<=m^yZMvuj47W*UdSP6?^x9eE8N$ zyHyy7VgF4%0r=RC0f@tMUa+LA+$wgi2}ACDUCg8dj<&3>;67`TGbw@SCfn!;{9Q#N zhtS`_Mep5BDC{*uj~#AoG=T)Zo?qUxu3wbfEt@*so3ANzqkfvh;1l^~e(qI|`<3(I zPr9)7^NnVprRk&6DCw!6Am(5KW*KAu^XG2|ey$7nGZ4TN==n{+7>+Ny^@;ohNN4WB zm?TeMUXRT^Cr2XqKYkQ+-u6N+BHo7=fUfzcjTvDx? zQdVIECc+8Z4jvWLx#d0Xbi1{l&7nCr0r&}Z(;WhTlQolY)ucK3$GAr)-h7V?3qW~j zP=ZPtuevTZD8AVyNm69|9V89z6>X> z(DZS1tW{OO8wor_Zug^#+snnz;wvSs^jba-OETQ@W$tYZ?=6Td1@-Hax{|gtu ze+!M79{@c9^elFgJempON>{h2wPy+Xs15RBjXl2u5&F(@ZH`vBe@H=^Aa4|*P;v$vEeU`Q0zXAI8 z2`D%mNKf~8cxB%T`~mRMeI5tNka0W%_&|J|+aLHL&*uXli8ltLXBp@k$UVyQSPPW+ zXxfL|ADmNnbnek~NB4B@vQ**X^&&qJ06y#p{;ROL`Dm@|WZHt>Qnw42bsoVd+;*)A zv+Z{FxNXrhan+8b#hwupq&MGS8-vT()({}drFm}kMUWYA5BvUKXU$GNyBtwpens0< z_nv|!KXKjldL1s9`!N4`2JUO^oc8b^{wQWp^|_@a$@vnSDS^%=Dy^y18%%hR_}TX7 zZ;IMd+!iCl_7a#Pj)%U@e4TscRiUost$YF3fPgz7!BVv{Uyl@~mKOS~+tyHUs;BHZ zkJ}*fCAcksxNEu3e7`3VDAepVpKBW*YWfWQ%L_KKdw!-4maaAZ|9We7@VBfTy}rVe z&_h|BuI|mX)$EdQs;cpp&cywy?ygxhe60HxMwj-A!{8Z+e2&P(N*~y?f8YQPkv1Lo ztD2jZQ#uM)p`fu!Z;oK_DV;}DG{|I}cLkFMgz$=fr~jHvPntanz-?dk`Z|M9(maPi z*oWMol$kxsHjZpgdgc*(fd2UX?;l>>Y~8W8#dmnPH^lV~Q5up?DV^tOsR^U=8PFZ^@DXwj z4cAyl!1nzVP1OVrV5*#JkF5Rmy5#I?Ox3F~fS-|~&mE4{NZeX9E9J?yua&kZ})-V;;7BJ8}Pl%8)??0B!>#Ti|E(yZL83Ao!r=leo`6bc`eV zqC068x#zf%n$4|uvjxg!8CHGfO-Hr04Goiu&!f`dX~vw`Gfl5Sfuq-&7(U7Ul3Jxw z6{R5VQ%MOewBc*X7ss(bX5b$&F5xNdw7#w|XAt`{xW9TEN5MC)JuSAh0Pdgdut`Tg zEyL7jm>Guwy&L%SU!A!BR4NTLx#9e1<@Nlp%zf&`Jz{SwKAKi8c}xkK1uFn?USN0S zd@}A=vPS0~#jT6j)t~1?J{|uJ(a0VMO*_7_+lzCf5A-`ZhkJ4-7jSHLm)}2`Ym`2) z5pnX#ziJ!9k4Om8dmQ?p^1nPwdN_$mjI;Wqh@t1&HxT;sbHCcIc2?Y<6b|czd4n&-9zgnJ=N>L{Np z)M&5HQsM4qN3lP(*TEJO8H?Sey!j5W1K6L%{dLDQPgg#Bl`7YcW)@sOk&V^sD*Fw$-I)_@Mm10kOp$dzAJW+lDfUoG$ zvwi_DSykLZy5uG*c-n07nW8G5E5YX|v>bvhJ)^^kCX@1VIV=4nq(ScGOxqabUiul$ zsiApUGJ3(QK!$UieTOKjbO$y6Z<*cb(dR5(5B}HI^MxSydFlH!Dy_yp*Rd9v zY|=%2aC4%(B9qjb$ftX#P?gW5C`;<`cHoXrKYwo@)|Ak{y{h| zGOX=Bk}I$uV;g<$v#_H(ke{W`FUY?Puy^Ah7<&}=f6>fVi+%|H*Z1ow*RQd)unG*R z$7=xvzBReyV)ED~iaZVIGx$x%*q~{w%^y6}SVv?7jhDq0DL@t3lvCNk{>*<%UlBNm zZP*JaGN#p7S;#Z{s_BvA_pLq^OujJ@fS>vF-Nfhf+1air?*Fd2E>arH{mPEO{?c(g zO4TdNcEu-`U?KHbw20|4SfGloP78iKow#4Qo$}Vx~RN!5o2~zawkI2~`Pm4X;_;{EqYf=OqCR*I@QQi~xTkbfU>-v1^QyP;R z68DVxXrB(dAN5V(em_RE_VMyO_dY%s_igZl0zLjL3o$JI!LkK?hjqFvM68Bt!vPF4c;n%iUmaDM~P<q#N*N6MayBvJADV3m<8izMfBU$1eu|H>Ds9Mv&>C{!`u(U<) ziMn(qZC}ugcFVnM{w&Q47rNTMjJw%lv@VmI}GYWbAr_oqJbNcpY)p2xY5iY@L!ChzTw_t|95l0+Hrl@>RW&h zKfIqN3%Jk3M$8XB4Kv4OHI14CF)aR_cCkd8rxDj@34DRr6JsVQy(RCyLFUNp7Y5rB zOgvCY7<%Pw6NVFn-f@`8wXu*BiGYM=@9n9PT(;C`Y2`% zGDp0*uyi^l{5aVK@iMKE3BbG{?gjeIxny+yk#3zS6KN6-aFam;NSV5t93RjBySb0Q z0r!lU5J_L$V}}A9PrI3YhA<}PnHKq+*h2dwow(`bhP^&X1vpjD2LZYXYH&UIR?K?d z5?7;*f^H(}q!X&)1!ORV2h9z?3sV2HbYAx1eRp#tS;tR&x2<;9SJ9%L?#sVi-hX}U zSHXCJj<}~RY~ua~CO!y2Bkd^@NPj}ylLySfXwkQw+t2aqiB2+#u<<-HFD&()wsKRT zFGE#2_2^r@L)aKOLLXj0^SSkW-#-U_GC)23#jG{X_3w+{U%l$T@T!pQgv$m9*^~Ej zru_)(&tlPz%wzEvsQ^u{6puc70nQ5JWo-vFHil&lA8#08TJs4}(7Kl!7rM5;yt#p_ zd(k-PoA1|dLd?W{>Yos{1=*0lRrEW&%gz+%^gD82uKzypO_zJuSsJZds(SYVY98*T zmmo|&axW=^T{gWE+EV{g-YodkBbLOyPetRFSB<2#Uz`YgyAvQ^TJGuPTBSPKH22T3 z{iO}}=_X4ysDceC@L`3HRg}cH;~uomzgFTWcECX6Tc(n0Z>~wY0HUcA$)pTPK-5Xc zr$qWb1X*@2`JzV~*OM~*(ks`^i#WkQCUYV7Az`!$vTTI+y7-%j*F5A4H$s{PewyGI zuVa6+jr}*|9_0OB3x1~@EaN8nXl--;NSb&*+q4d)HkLw=j&EL~7n7y~^6xzI`|368 z)`rDB)73i3NlVop=TNsQ-FjCLg%f+gw@jSL$(L65<6WUY|5*C1=wffaqr6vtW3rEt zZJ@ksFQbE)b`seq6faTM_dG)%rY6S$T?jl*{lCCT}fv~Z)2+w@@!;_U5{B}rHFpxWS+of#ZtZL1p$ zeKrI5tmtRyr{K#_GrC!N;T>@A!8f2L{}qp6pxKmHI-i>YQOQJ1`W+1kWNAJ6k?dLb zXM#UeV`lh9X{`JHKsakupLxf8@VvX!Z~X9%DDdm`8*S1SlCidNilW~rfycNvY4F5W z-*TZ}uWW(8$uikm_o?Uik>}zt?3fz)TAfV%=8d$wCef5^3WG6wxxlZ<_O zjD0e=c(_IrQM+D|@H|ZDRCh69vgKq~PHmh?XOw2wo(YNq{dsg)OUELZD_yR2--kJb=Gsv27NcxbT zy!u;2VX*1>FTG_Yhq$+vMmm>g&)7zppK`ye{@^HK`5hJfmY$E`?YkW9S|&)~f6BdzUEhZK`*P3Y<;oJluS{FA*yO8?L;v2$ zmmP}|39tseI3{E#=&h23;y$A~?;iL4OX!rK@c{N&fPHZHIQ+e=Pd)V`a4*^^1X(z! zOFHgXz83*fpLVF90eh?HhdH=I-@CH?7;)r`{sX<IGImVth3NPg+SJod zqGmg?>9i@r?7=y>XODgsV&DJfbsm@8ZgqxcO!v(_iTkqL^|0^X0(T|u9q$hLEUd-H zIrL)KnLcvBR%G=iPBQyS0Duek#CaANwo5*@1hf6{-99 z{%K)9Pj-xKaX+|2nwsvLvB&y*b5HWVGQIFv?|r`;@VUQL+L&~i(}U?6u=^Fm-t>{V z&jRk@cR~9W8F=-wR{f{^5Vved-8w;Um!TnXCHBXtcN>wP+&?Ysvvj5!sqh)sddQP) zN1O3d-<5keZK|qv{h;`O$hjBrQGzh`4fRez$r>$1B%NUX_?_rvP^Cg=yy4y?=}aWY%ohCeyPEiQS^DuaU3s4!^X}b=njfa<`)Z8L`y{ev zY^x3MHIjE+d5@Y#7(a4M97`ttsIODskJhpdKH0hKR3=|6?#0K{pSFzv``Nf(HBSl~ ztsj$i0r=`$f{)F)6xjB#dggto;$?RRzHG2>kP8j{EQs*+6zx%qbp&(2>HhOqV&5hH zloApK?yAvwA7I~5f5J8b$KssWulQUTiR5DEA`ZhOp00rrvU& z2H4NYJtp8%2ZpMMk8@wUX~}u4T7JsiCMbcL&|S>PvCDp<{pREPXG2g+u7Tj zqA%+KGhqX1VXp-__7%h(Xgbb%EoKzd);mgx z!0CtCCE?>6toykNZpAY5nkBcHS<6Z8+>_f4wUug@B-_YOIesG!cubv& z5Fs%Ow9<9AJpQxTdl>6)M<7lDM|QBkg!@h(k;YEPx`)&LIT>0SHrPL-@``n4}3_6rQ#1L*y$zubqo6t`ZF5S$R74HavxK{33Fe6c1KXs?s}~j z?pHq9lin^jhoHrMmYTlA#~Dhys;KZ$t^xeXjeO&i;f`WI3-uVuOWT>@%so|n1q!?T z%vu;0vKIj7k-G}}7WC(|qmqGNF-vFWzRbqV={Ff~EdAZJ&TF=0}1{1nAPL&RAX}AyS zI_Ul~ZChOpuhu^1aT|R3L3bTWoif?ap1-S#_!cEwH2+p3F zpL+x!2M~VWBHOXh_YIYtyUAqMsW0t2YX6GkK1N}W+)v!2N8{^NmFPE>HSqO%#i_Y7 z^ik6l+&}J!W6BtXk;uffv+(3m?rm8Vrc0W%2i%$1(?4P0KYFXo8Mxs#46RVRzd+cp z?8HFWMRgv&PW6z=%bp06~ z5NMQ?DniVspw>%D8{tqATmkwM-mtA{RS_oF04I&XEDVGHQfACq+|xEHg;|@eEnGyb zLF_BDBkuVsGINfauC>l{RV-%v7~nTuD~&CG6EEI@!{qNMU4ppJk^70UUulYx!?MF6 z(*S#r_XPe7at4)36fhdE8suK00#GaZGIcd zoLoBi5%>T-Z38}8nfWKuoI7%OS)XtpG4|9cQN9EY9263s`@D?v8Ms%(J(6#F*i+g} zJ4 z^&sve*$USP$33R&skM|7W4|i7DJp`mr5lwgYsWoOHv{)7;64=iybba}6!oXdLK(Aw zcG6Z}z8mFwC=qk#=`3YjjpB{Fa2w0IL-2(i%@(nAH#q*SWsq9#wML(w+`x}Xxz|*C z!6IL?SxG0g4%STKzNF5it#YJVvxcufF*TcOgB5d=n(MGf&SJmRxwltoo%-fV>@VBK zvhEpt>9}vteMIngz&(n4iPPw(75A#k{ptoYjWw1Xm#Qq0@3PdFA;S6O$|}j`I_%r) zL|N;%QC5mAbaN&47j0u%cL=^n8}QM*cjI3DOdZQTyvx+lKAoO>i#_`AXp^%)7RtI& z8Y4$}tgqs}bdESPCU7UJ*}*o{wY#`t8_T-46>*fwSn>nzo3786d!g8yPonIf0V`;tE>?-sj~H`PN7`*0rI(y=?8wu^BY8LYgBGx1fKQ%v$vqiKKCQY*$#1^mYUwlHkNg7%g>!9 zzd25tZ(+~uZ}=Jz zS$Bqg(wQFU`DL%hUMEI)0aXwN`!{ZHA&BtH{B?XYQ*?spUjW&fbc# zoBcsQ(u(kB^tiD9^@M!~djy}kSL-#lVzevXQJ)FDeMLS0;gwv%a3bE96EPk22wn8w ze>b4+@z<|^{`vI_!2k6KKbH6S%VY1jN9;A$-GO;8Rm|M$Jl;MK_g3IPJw?l*m&AFEX2SUr&@xID{AxQF!* zqfg||`Iw`~V!zn<-;4V+MQOj?KfI#A&t!~)@s!Tjudmzv&xhAC&vUTvk^5hd%d?!u zxF@0e>sN$!_PpRdy+?1L%e~=ZTW$gWD`7vxJ&!{WB<;5kze(U{lG{jvkVk?4^R-0q zNzH%!XAuTdVE+ye_le*KjX(M|{X^`$GO*QwcbB$!IXzP zAVY~y+=C7P7XEfy68LZ~AOCs$lH9W|eV*4EsBA>swSI!dM)u?Ms&={w%zGV2@cx$S za5%*3u;B9bv1jg4+5_|e{x-GXOYR~cKm6Q+o=@PDxc`FOM~z==j_<8i>A=~M5uq2s z6Gn;qHixR6Y&LER35a`@mpQ)4|3-%;lmFXrkL6n^?SDUPUsDTyCiObU-g*y~`x4!H zUsBv-6bn6Sk28o_TjJyw(wD?*K+lWZSVdDpPnz5+p-Jd;DDrhx);VFX72v<%^2M+p zDC>3VHjr!(d*t4C)L6LxF4*tDh-Yd4u(eHh zM9SdnLdR>&+fi^H$(#QLxwi&2I@5nmtk9kLCE8 z!~THSmv!v0Un=*$nv$OmaW73OiF=?Pu;1+*_(Z9 z(VK=*EZWGgUlYoENz@a2vD#z;xlbkhrb6zgm$;?F9>7m5_NqeetGZV3;z}PRO&xCg z`maw%rzzkH5m6GL!~~*m6Gs^|whDks?D6 zx^ty-^m@{rz&lZ{y~qXXMYhT0I*zL{ z{Q_6}7h{W>FMXEv*%*_TGt+ z*rRH1LhLOulMv&{|Hbn*ukL)V`@Y6`eb3`4vy?NA5h^dZ`{Lj+4pwv#UDexR$rREP zMX1{G&bR-va(UMrmEyhc)4dUF85QWl0Uz`G9{F>9>+}=C_bbkI7_c=*E|~HeVuE45 z;JRM{Ia)=67mCjA?JjFGkTkMar|cjf0URv9YwEwdFm8k}4nDNGoV_8t6nAW;7XgU} z#kXdNwu+H~Z;kiDYnB=lZm34a-~;L+wAZs!CT4zIDJG2s{L71L?H>uTGgUsH7)iU5 zUuLve$u4B3-E%7VMJ$mtUy)ZhnnB4Bf^6PDiUkq=-hhR6-@UbGWi#Ceu#@tUS*s&ZA%mDlZn%4?X)!6Ba5x1N7( ze^OY$_c@IW0GfO{^(~**6<2I{68sks){^v$+w%8sCURTX6~1;U30z91GBv-4qJ+_R z0`=maY0lLq1^vZ8duW88X)4-pseau??-k(T>;XY%Mi`&h@btU;SFkX~c(x!LCiQf# zGu{&8v)yOFqDafqzR5G@l^Y1MzcU=WjeNiaWyP^+b}B(9tSA#)*Ru1bm7+%qC~dnP zdBO~mTVB13n_x_HluF4fh3sjR3}y+F9M-_WDOKrgYo1+y#tE;KS0}?eF~&3j_;AH+7k?t;dTC}b! zcF_A*Qt?vG|j<(0zOEn3%4bfo{`=mo}-%^o(YN-OFQm^nRDN~5~BsfwnovW^9()b*@qu{g1!u0-stE51?sTb zeEj(g5HuPNN~hH2^a5u8#%lF7!a1$CB=GOdI-0F56eu1d$9_?gwXTQom~W}Ncz7gz z&o0R$#Uw9}<29|vY5Af6ELi<`Dr8*1pLgTT{jqt|HC>nof0I4n+Tk8FBQJv20=GBv z@A4Dn5S{<(@l9>q%7(&Z;y_bBUu{ipx?J1YRRx{=T(LUQf;UM3AgW<8;# z^+fFsF$PLBZNMJiy}Sr(U4MiuL=Z6@HGRDV^HpJM8NIxb%Hw)!RXnRFbd$(||J+)G zO7a{2sqUplFue_qCUN8F>qo&1s5G%(3G9X}Yr3JJ`LMs?iS=?+6_8+2zG{Pfz|hEe zns-vaSKLq>fOr%5;e0B;fQIQzEUVxUmLy^5`GK8?J4YcA5mZHglL5MYkcx*^H2>Q0 z>#%DE?b~aRtjUNK5F=4#c`+`iw`GAF&^zW*c;M)*=kVI48OZ_p$X#hT&2NiRI0_+> zDUjLQnxqo_inTXv{*W4cpSc;HeM+Owg^qi&?@sq30b?z<;-H3xbSv83j}GYA^%3{e zEPTzfx-Q-Q*l}f(iWJ=KBA9??3kChCe{bpx6kKGVM#s= z*XMR0#b{QwJ}!2~)-;!k7H&pzP2|~M7sCR!#4_aikdY!UL#@APLE@IFbhPBJOJ1Xn zLHOcS3KnJB2t&G2_C1Jxrzk!=EoioP)VRl?d>FqxU zq!AE0pI(Z!plI1X7)p8t8~~+1Ntg$`%LiGTAs2(cukmI^`qaRn!H;qGww)C@CH{i~ zT=sNKF%d~RUb|k`Ra6+MLC1opN?u8~;~%6(SIDWp`DT$&6y7YYjk$gK_#Uu`yIRIr zf|MNe#kVS(azAx$=O1l;WBK1rXSPGLfP~`oHrg#7zri2|odsr-sU2X|rqg=`&C;#1 zuS9!fXe-Ywg%avm4sj|Rs#d3cQPum7PpgN1B}7mCLJ=9PMHMk=eC!bmxCyej2?@^^ zsM9bA=2d8SQ$6%j3HwqGv6b@Q8efv?N6}P9PB?zc<23R!fqYAftENd-BPWc}gQFM2 zD}M$*J=~n~W|9ZS5pT!K`+GeUTK3ywBR{WvbML=GKG4o+zj0b)-N9Mc*Y$p{f-#*~ zI<~bNdw9#&8Q~yloUOVE^1!kDsTSwfRywc`L>(GGDUjshLDfAn{j-s#*Yk_z;z`$~ zM0G&NVvf$Uzw+S9m$wNy`#fKLjzr~q@{M<9bm>u?KQ;Z7aJLY2!p=&%mLdo9UmxvA z-&}IlvQ26S^uFBs8;)hpN3awA22ImmOiy3p8XI~c_l_j+CML<|{kZQACQN+s;( zn9-B2V}66S%kr+)?rhSpwsP>2YU+b>H{Ebb`@5C3em@xi=Gu zfndyNHcc`UR;`Z+`y#Xg+<0dG8`ZqSu(<57?H&4TF9CAQ46?jyKe=EP14*$?zp78<${|_5xi3Ge`(|Fu}<)HGAk%RpT+8+I6`e z43u26G5FR%=^=%BI1ed{1zEE-Skb|eJvD8CClyUo8Ck@OWmG=cMV@MexHjrxm`KXjM(^s+iXPzt&dG z%f>m6(Rbhx{O8^h+hNYfMeYgw?S*>3cVJR@Wy!|m2{}*xO6%~M_3a`Hu`a~GWqB2; z^hbkAk=Cw{DH+>I__*_-xL--Hw!1-`!3kz!3;FR04{h>bXf5+)fLZ! zkms%G{Lax&If?(=^pzd16pho@PDA3)e<6OpD*N6Z0l$=;afNuIQrP<|$~3l*yfJcc zl>oOO(tw-tfl~2a?+Skm#iz|57`@v&LgzTb|M#VYp*=ln-#YX{+UXV}>%|%_I*1E2 zBKs^D<0f5uN~kzDcDSgBwIhT+6ag8Td+(FjcNr)7_#$NN%Xg53j1)#DJ%f@sa|Ldr z1ilN^l^nU#);ObvKq6a{Yor`?CsYpBMLeS3@ADNSFOv6XmZBSN^^$)xSw5|*^e0Z5a9Q6fw3IqEaJeNu*Koh)#wby9lC-WgH1wS@j?;R?=6N>Xb zdk^Lwi?`Dw`*uxK=%g8TRajwsG61;v=BXYwy!Qrfg9Ms|d$ddW=lxRRC!BDBL|*t4WcmA)Hd<9P?s0W{_IS{`!cvC>7=c5xP}mXahq zmMG5dBz}Re)dxmMe|J*a(2&hS1TS|-Jp8%tp|uHW{Xae4{qHqG)5;T%6Qk>}wmwbX zJrEu}uaiWpJ5xG?L!G>>Cc%Rc{p1VNi(6N|3Om#_U;YJSdITam2H9eAJ+j(D^HpeY zasWJXB<&h^LLg8hTVnN+KukcX>jmEswYZnhgB5zr3W~eC&GaHWi(9+G-FBak{7ojV(Y_j)pfC-vyCw!I&(yxUdlqt-x64)CR zGy+0+rUC>BYYfyo^sS*1J!!t`#*}PlxC|#dkIE0?3I!}m{(E^)kAK#EU0Q*Z;BS3( zoe&1{>mRx&WMKU$QpGjXoO}kU1_b8*!^V+>a*GvpBh8QuT9}lNoDK!~cRUUA!Mk{Y zBc;|$uUySwCBlr3PV&)KmF+^XPA}x8pVGa<&?*O|&myKj6fP|VFI3k;Ai4RpmIpKR z%WX8PzhnQvpWb!FX&%NE>{HTJ+R ztEwuEKUw*?pimDnSh?B;bTGc!+27ZJnM>)cCcA}8B?kv9?B6vMD1|Luz|9gWFtd$~ z6+SISKS4DIK5M{k4^yjdNIwew%=P(pJ=mh>XBMlUU5#V+&<4K=%0}`Fr>*3{XhHo5 zea~Qot+GldH;3fc2C+Ixf7U*@JYmqKi>scqovHHS_GqixB*y{yS2s-TMa<={hp2w8 zli^?|V53w`>*xGgPr1SNh$5j{{g27qh>LFC!-%|lEiZJmI*}D&pf_@>-ephzg>wqh zWUnIxG;KYML?aP5!K4$7c90Y{Pf(N|95O%|`f6>c+Fio(oRU4oul5W;NKT{8E@_lxM+$K8@r}!I)AVNWP}%v_{X7a=}23* zTg>~ILWUZdO87t_vyS$Jd7FQxZHp_X)t)%sGRt<+%HX#ZE5rK(p`5olZM`!vAF-UY z8*=)w=?=(jjB65f@&K^ZLG+JwA&i5skZl(?|WTo=(E|ENApWH9kBQOa*oe z;+>hv3j&6NoGHDMraa#pRqi|KBdkQu)X7YO)c@X}T-Q5dI93rC^WPK1`Dvky^J)ja z#IV3kf0!@a#+&b`1UK^`CHrQ4)P1oO{vK}eVl`ZjbIwoVrWsWWTIzUtW@e=aZpS$O z7Xw)d(Ldc&T6sUf0e1Ohf3fsUc{rfk)hlpeNMLWlI4EA4WAYnbkYG*^UIV(dHEQuB zLl2$$^Y?a@V2!;jB5aE_r?rY?NM&W z_w{>3aksw0ZM#I!Hk_$lTOHfCX)6`ZzYYN5z7qHCUP``LGX6+EL3%P_Ot&Kn&5iS{ zDtiWC!#Q~&YsjxPVy`b&CU>R3PEoSN2T^9^&{99(qNY>n92^92zCpmILld(v-`iB- zgT0%@rSh}07oQ<*?nX#4f22WdBB+3fR&xrV3eC`STN>2(9_$g^peXW%mB`HAXE@sG z$&adrACma4*5*jijOBsBdI)lwv-o_gOF`=GcyRB}~ioIRfyM>ZwD-fYhG(STwdGMZ&wW*Hb#P)-=D=-CgpGX`#>Q~fNa&>A; zhU^gAZ#VdydL;*CjI>CfOG(W@zPjz)VKAGadnQF8MKMPT(f4vW-9W}pt7(4;{`4)o zGLO>=2Ouo^OqnnPoF)HLx%@CT4S0f2t zEO<@ze%albLAT6X;B5`j3|IK{IpWV{NpY59$7OL$mIW$HNinjjF)J!x!qjswPkWzw z#^K|vP1M1w*NfaWCi|xEXKsGz=Ku)-?gwG9?+ISDd+zr_COa0LHr^++HEy)3iee$3 zVDwiyYsMcXq>fyywN%UelnY%uA*n_)PxPdG_HtX03K&zKy2L-PD%$v13zIJvW@nmP z81EG9X-b`-%Vr#I-wHZ04tPB)!JAwF9TGlzl;cAA&ST~;&FmfTq?8B`61GF=dSY`i z5=(_R`$7Z~%y)c|#xUF7pdVuHve9G=wh^`{d}U#ndxg{PF2Kk)kN zhJSx{*i}IR3O`3j&{}7Z1gmu?~eaBxPdY zJQ{QemLvp30~)L4erp1w%bQJ?P25v4-`iYy9=;kV~xH@I|t9Jz3kz(8{=N(qD>8@6(=^bwmBl;_= z87BZ{w9<(Rp}ynQzpYT!9|o$a8##Y^a3?tD6RC4C0$J;mqM%MAJM%SY7PP zL(Nyz0OgKU+3t1cA_D*^Xpu@%ef^VK`U>H+!R(9Y}x{D=4 zS(Gs0-l6gJQRAzbW7K^662k?D-SRhI1~-S`XotRU+-nb24}QP6-j&{vlDC+OkoWmATRfw)HbiA z4$9P7$Q@{IDeAb&>7~fmQ*BM&t&2|Mtj8f_(m|MCYuqAK`MEkvX}n&QnLZz%M!(qZ zWM${SxfJSQZ`9Z|w@D<(R!w6}9I}c3Wjw*+1}}YzeC+)VE;~YW>7d5ydwz-p++0+GviN zmU{KwJbbX@vTXRQb-x(4Y6ijM2AmdP!e$3$wsfI3mjD@kSWv&Wkyde&jz0T$$k9ICyXO>;>WlYJ=#= zcF9Y(BD(ec^J!13Xy`8@Yi+gZDkVH1l3r|AuP>xEo^)Z$0GAq>8a|$cn@ZrT>LDI- zXk)Cng%&?Qx44g?clR6h(Fy-{3H|K88smfQ4>#bAG-t_`i%mjj_Dg2z2EV;HN+Zz< zfthJPC_^}jQUV77l=&D>4>6`yr&)Ugmk^K4&*0hR#fafYRgXs{yoJ|UIRUfOIc_d^)X@iH%nx-y+&N~~&R}y)ak$7N z^tZeYCGh2D!;!Kl_$`X5R|Rx3@JYG5`N*XUB5=Sh>aFYc(LU1Xro=^{UJS6X>};1A zZ83NXGp zcy7rup58aU-}px@k zhQ2V8?dDut{B?%XiXwMYMk!2)TV`!u{YkTN-Rle$z3o}?fp#h82(f`o&>0p{i+K2| z#iq+fmx_1$WukZi%>lzCWVCRxQm*6Q*%%ig`&-8AtvMlk{1g0omaPn1mROxLq()fDIb3HzGoa&01xs1$x#R-S|SQ(a8vix6rF z)Z3QnDlu%peW>>=d-)v&rXB9rlKh%bZFPg3t)@*Ra0kIQ83FOE{=UhGYJ*fuF zus50yt%(y8<9oYe!w5h9W7`zD6yJ?sW+wh?1*8sPkgc!#r_Ek0wr`4qRUxjyjE8Ga zP7%Kz)H~g}s`QuQIX|v0fM}vj<@n|8G>P?120AeSN43T~S{xT14>3O!M?YHohO|M3 zt2yZ|_xWcCpOE?Lv;{do1RY@l=-lXPfFj=K zFrbHJz2?8N7Qv74vHQk3X8iScrop&zVB?l_;{m0Rau5^RG(>Ih$F~~fNEFk2ZX9Rl zM5DUuKp^h9E%qH|HhHd)uUYc7x|Wyjp5?)M9IBD3xOrwg`zxd8wPRbOk=n+T7De$f z?@>4Nsl=J%m|l~XAv6G%R)35)SyZXxBjk5yr>EN0K1quSbaX%&^jwLb{=1CcCz1s- zA{n3IQ*#X-3U<-@Ju#DhVpzN0jxlHS7pXy^l^HX0z%>m8AKiVuVcp z)@ffF9n|Z6quBWm_HOMFZo6YCo~f#FDF#(o>WRi>Z+}!Sl&5CTy)q(&9Y1&ot-p>r zyjo&y8E6zO{y5O39Qgj`RXWNTEUASJJgD4_C;l3Nex42shSS2Z5uDHW3h2G0qW3{c zH=|yeu7sGO1{PgZ+C$Va`5xLXCJ=Vf z40-n~Mf{!xW7wni9`#4b-vFOx6=5sAqIx^+P_nnt<>ex+x`XA)X1LmTrFiun3OVFJ zYiBl&zgii$?L1|c*6at{j3ibZKI}|+17iKiJAf^4aUc4Ybe~gnWJ}uhJJrn?MvhYqwdCrJc~x>u}~}>Q!1+w+~8`O zXdl}%7QS-|jCp&Z!RJ*AY9QzM#)F(c|MkV9IOkVLik-CL>oEISbDsv0zaJx;qOOF^ zRoYrf1^keSqLv&_g4WQk7c|?yL)n2n)Byw9ia|A>WUIR&2e*3Nf1I2!>(m=j^^JK~ z&JEp3B_6tjSc4PW)SUE^#J@|7x5c+S#PM!DDsc#uOa-Bx?Ucf$dhD<;y#LTIe#4g-XKhuv;2$)#4PAEbS__ zj6L93>fyfo4_KdiJcADnYWhD>O#K&ko79xJ4n&(D8g* zCN5-UZv1^i{G^4v!FKwFC%fC;=Y-|p)ja>#!!fy1%8I5r*KEY3f7?t`E$P*3S;Q7O zlgI0%+D(G2LDFc;N{nNJH-^pac}bQ+*O6r>TIpflZyB#P6GV`Z63%(c^^`U zH)MPDXtWP1gw^9Ik#w9pb{2IlTZ#{T4io|I3ThUqxXOv|6d#|!`tdosPM-Yk8sP!w zo$x+)V)y#d^`x`@&lbhVx2Qq|xr5evA0;t=Umpg=z4dd0 zHNVcy&{H~~1pPJ#|GSizY)ETM+j)aT?r9J|!_8gwKC#l)gO$8lgskiSG$=}3dd~KK z{UeBv7Yv{~@vPkSqHc$VU17v=+@^H~)pmQgu#T{R=x8PD>#6EAM^-q^j$9+Vn6KQ; z5Vh>}jsb^y!!;nX4-((163k(L9`{3J#uh$9>GliK8L~Fe&x&!1l+yon8TIQ^0t$Gw z4JW_OoDxhyhJ*BX0mPXml%;yhP5hkyI=%4T%lUJur4UlakPYrC@y28_lzQTVl_?V@ zfcZs~@U{hqLFg|{%F7+wx-+}qX2aM;TGRIw4t~0=#3QOW9jxMuy}d&Ln3Q7|ZRmws z3UOf0kgH@sztvGSbIyOYYX=f5fs48C&r-Q1gWs0LG*;UosXT2%?(IuO8eBgA3L=cm z+mEOVnJfY5U96|T($FfTk07GY#?YZV)fz%{Rb>-ja_tr;+ z-a@!G$mEh(CXd6bQ`zsHh9zARe^6wX_VRck-l)q09>wr89!%$Dqsx^IMrG~_#rz-% zlGywC!%H&{w&F8Ms%tvTu22IG^4Mb0xOLYDwW`Ed#N3^FlCts%^t60zom{NG>p{Lr zWUb_=ppx}KZv@>8rb@#_<>J+`?DzX}FMH4^d%G2C*|ydX1A+Za*vMxUb;z_;#4V#Y zf7e!aS3;ah2PyEO{DhC_7=#@Q;TRt95@>;!H0nLeapr%WNPL7f+3jFUBuWzg_K-6~ zK(i^(-orwn^Ec3ZJnyi-E50`k37We91d&y!8}zbUK1wrfbYp*Mbms-mAXwt3w)tDx zA7=xtw)1{nAsY{@TYZ( zb>yv#m(3;D16vf_D;OB`UC6cDD5XjTB@w;5LZ-~3@+am0I;KAP_<=auJ z&3qi-Ed_V5?g}=NpKrr@*-q;(&Fgh*-L&q63`%p;@DjuEGXdTGzMPZZVp76!u4vY-E)%dUzR zv1HRU&ib@p^iPF>8ixJq(d<|BXI2dW0I2eW5ePhlD)BO7WM*uun-4~rUB9__syv)O zn2)#UvFw4il}TQSw2f@B?vdGd@y_0sRvc;=EpJ7?`#T;=@wDNg1O21u{~mr_A|oj)xhv0#xY)RNOB# zO_Qm{ChBzEQTX)>MN}Q!X$s2RntJLHJKv``Bg^};D)+6p_))#wjX}b+8~l2=E$KWm z$zk&^=xEE~Glmu~kIz2)K22cG`iAmrG%Vu7#qQEx%9};sN8B0oyMw&Li8J>v zhPQ-e+b-|9g&Ja<_MZZhXU*>amwBM2Tj*SQ&xRQs>KOH_=hEbS8b5vV%%J|h?Z1*r zrD&vFLt|4^iRI z$}^Dzr54Upph9^^cX){vr`XaWHT%_hAv7CQlAPtc1KL^n zM7;mjk?CUJUm5T7K2qx&|G0>^z5yScJBriby4;LTVLy|<4+3V#hq4k-1Hb<>=ed0< z{oWhO?Yno@%oSE?WQ!ONKHijde>6}d(If~d^&{tBY`2sYI6nK?Z~Oy`x+#wedP#*%ZxlMW5Fxc7YM$To#s zqQJwoOuQ8Qv`AnC#K3@PRYYG8jywgT4M3rT|14ckMY1(VrB1z*L2p&PLj!h^cpFqC3(rhv7UPiVORyWi zSAOw?7Fh_loK%|IIES)WR-zz*x$>SPbQ0X|6>0UO;s}+J%`bYMOARi6&@!R;YrwP( zF&Sf}`YqdEDdUd3)`7j{1=aXxS0kaPS<)$(((9JuYsS4~kg2m+vY4mG!|{5JBbqkb zCJB;9HduGL7CADaJ&dSgmko^cU?frmooF^$Tw~RIK8Tea<`vD7>dqD~$`8}zEv98@ z%Io23+40ZJB%l||;cd1#ds^`TjsuY+&{8eTVCs>72Mhn%1`EPb)YjJ4h6KLZe_9)l zkGW)}ztA8fY(w;{*4a_u0-*2j)Jc5IadMCcd{}vD;N!3908*a-b)QETDO6YA)mrKl zGf4q&NPCqxoi=T{!FSCkXS^2Di@FAG-EFh&n+?0m`be)ka| zeMcqr2YVMY8pWV276?hEW82pbYp&3iPWVlB;|$htqWg~Yaq!j<`$|-1N=)&<6OB~Uw15k1v(VPFNXs(Uk{X?@tP;i z*xMWGsnSg3#&mjBcIeC4!v&Pr5Ukbv<-5K?d;7OZ zcLS~&K*XQe6Nxt(81~4di#)r~=X>$wpA$k_ZV0aumg=4W8E+ir|7+BwI;XgEOL-`M z_!e6ljwEtAgxUriVe{4z!Ux?EO5TO1Z2yhOn^$PG?wkZ`I-AOLUK@GjBSr-n4Z*CB;9h&R#Owk3oqI4u$Jsb@rwc? zU{Y}}n>Cmf2AOlWebl8;Uus_cedWGo2vo~(vWKq3y8mshLSk1-y`bmHjsLWYcX_@mS3qfY-VQ%`8~a$0?0fM1_J=GMfJ5G}^EAnkez%p);&0LVK9wMNae z*XD2g4JUl7_4$c&DCEm49+HVFWdiw_V3s=*4H;1Ju>As>w6A)IhhO>b-2nF+M#SD^ zIv_6b)0a&}p!lJ}x2i9{5@!ZLskkrzX-hZXBuVFHpGAwqjmHg7xJ;uP4de7Zky$@%m1jLxN4~zI=t)Et=1c5Bg3FYK)d--*znK zbG3!xQ-4Kf(@Z7EL??1320HVkS1S{|vOTC!yy_VS)X}_Lycq`Z@7MwkRHho%ZOS_? zMIN4!^oq2-N3V6IgBZc(NoGF}ZNn&jEHj}S8{7d)I={POu*>XU&pX>wLv!vY?NF{$ zRz_cjTpzFk`EW>n+@b!r2!o_=(Th8%nUrn^p4Qd{a=;?%@`4J8dB-p*sqsDZGe3s% zc$$Pk0N+d>eE%hUPHHtEkMuvo9pe*HP{%4VOQ?AZ%;-$wwvEbmGliyh%b9>{zeQsrVD6Oo#LoVqN22%Zw3@XJY|Cb&T=qG7!(B-!_FHnt;V^or(w5&Ix_MW(@rW)- zJ^m>Gn(3;BC*do|Kn*lg$|$mx1gQ!p7euEG`Dt@jG+xsqa-UK&{P{qIZ^Cqp6Yb3q zebe;b$C#o!&!qN9#Vr^d8FJY~qOdL`T9i{1-fO8V)Z3DxvVE|vuz{FnKW>2)UY+X9 zFiqP-qpWKW`IFKii~N!}iQ68-2dhouOhe^YKA|(%c39))IR}W4TOScvlq#oDX(#rr z<0ZH_fDzOSv94r(T9h0l{qf&2S(B#w{Ks@Nv;4^CJvc- zJ8bpWlBj^{%_BhyQnwF$`suLgxl4LeqF=!;2x8}hOd^Q4R-aqg?{mv4$wfekh`%-R zR;+K@-8*u|kDM5R7K3Fd609D#M zZgIZbPR=9?Q8pQ2>#WNuNzSWM@Z=BZ0xo{f?C?{?Rh=ybMNl93yaJE?%(=ihEI%Z7 z(sOe#D);^kg*Q&rE+w6zivviL^lJ4+C32{1)4M6_JqLQKQh}|>r{Ps2IFwVb+5yuq z4821Nx<2fQ=sE1V93N-BiM$L!&bJrdZReE0_i0oIH=9)4efXq%#b&c3eMVzKjyc&_ zMv>9hDiQRKFY*&!g^WACXzW8ZdUmmq;o{?$DB7!p#I0Skw{w;|@W+x6bFNyyA;to} zhW2O%$*f2Sb;fITbqgdSIvczHo%=H}gq1s5Hg>({3sV_6^QcEX!n4-93^-rtz~ z7NNm~M%+9-33R7GRIU44VBkgxgzTB-51F5yTy>qz{KGF`7Ji)PZ*jA*r?h$4OU=F8 zW9qu(`*?Y|n2O1}&*{!owKBagu$cz?SnU)$Jf9?^l=?+*j$4CIw;=D%sQvKRV(^_6 z7tZPG0sX|ZR9DTRrAVWIcO_e0#ynE0?tK zH;KVkc!rm)uy}y7u1lUY?!Zu~Q6MHG%v=o$x!gMI1oY`)y{kI_7Ce0Zq$YRLeN<5rmQ zfxd8dcrSkX2Ff!5#s%;*R;`%#$clLnk5-TAg2JQ*+Wz+O;YUzq8)yO5o*GUs`=a@`qhhe4cZW+mRl=sVJQH z%zRJA(U`iP;mG!-$=mU{K-@A_9AGUG*4^pE?*ab?2oj5HodA)Fxo$@@<2 zujS!SOh!fMue{@LRng2N+6l2eS5b@D0072M7s6bYGPgxJl+hEBhP_Xv4>4p$JyP5|fqSCkxsH}C_O84iXL;FS2pfZ0vpq#WG^jmQE1 zu~uT4m+fn(tuUkV3Kq@fm>!aY$13$W|!-wCfY>O11m;NH; ztF`%{;^pqnidSwD&A7gF&V0|P$=pa1#vF2aG)FD?J-|zrD;(;C*cE(zRlUUblYqn{ zL;2rHRQ!i_O?VQyA;d-tcJ+YOx|Qlzv;mBI=zn3NceOR@@~Vd46h9Y&q-uye3OoYP{Nt-ZSbZP ze6b~9l4;x#<8`mrx+arsJ~3hkw;riN4+UvyIjTW-O>8engT$@69(`Gkmw zGH#aYzH+?&4idv48!U%+&$@|3qKVY#9vLVnL^pq%@wh!rkf0;5=bVFQ&K6P~G=Yf( z(ThFDw>A1}@e`xqz4AA32eWH%P7?cAN66aCmvRH4RNONvM;|=$xE1|oK}C%AqL7Ae zF_zx>$Hl*Kn@?lFq|?EwQ2MGQw-O^bsAwq0L(Qbzi)@9n2+_7BMegYKx} zKSA2#KL+hJzISlZQY%OWY*}^H(6j+6L<)y?|@;M3Dp(tvAW+cF_>w?!~TG! z5aW4!FB$)>jpfhe{8@$Z@1$&mM=WeT1rF}N71O-m#&>HvC~rL?+msDb0S+W`4i;am99z;Z8h3AO?(aha%zJ&32N}z|>N66W4?sw>nGj+`S zq|N&?-uAR!(3fGCQLsX^e;c}-k49^$9#Yenln*i2Nej_F!E&VGxJ6eOeD}9uJPFSF zeqnb=l5)M?sc0>FXrX7h!v+dKw%6EqHO~6?YHF4)dU7g)Uj+|;U=SHl&@17iz>5E{ zO4AMeVRB1HY2wXq-Zr(|t2d2}G@e;T#(g2fY@Kh4xCYht;ik_}p@(b4yLqTn7J8iB zFBzk;Vq4p?woR$mJIJp{54VHZVB5a5s={;c#`f%?{@KI^i~7cN2k)caEsJ+Mq_m*r z#d8V@+*e3aE8xG`T^Cn_C-W*sUHfbS&Ff5xKo#nde zCzKo5EjR-4p?H)0rkUHUQOXJYnsJ3M3F}k)oROUiHSkI6rjaWz{`OH~WF|P@j32x+ z{ET80G_q)%34Mo*`0p8>eE059I^(LHG~R}@>EVF!zFG87Mx66pjx+0cvkH^L zX!unsDSLbGBEr<~#{+&jnr@J=vj_3Ym}?*F6dEc}{!0~-uUq0|%C`wq=hmFuO+V`{Q zoG}EZIsbTp4XNB~e0-JbFkR3b#ZM!)S8eV4(KEBVkUM~NdErO+Q^Te!mhOUzH#2Fw zpOEZ?s=Wlv9YT>nb3L=U&$yYKeP$W4^C6_oGYHFS5}H}_0>QrtCXE<2Xk7Cmi!y|l zvp~Gf*(lv*Uvb6!4Svs-HZ@dX!%L}mm!PO(<%7iq9(|jGB!+nN-hf{fI4w(xh5hnD zfPmj>F)MV9?S4D23l#N&{hEoub&ONeH?tuf=ip ziZhRaNRAzFKsh~t-FIS&Bc{Z>iv)2u&|U};_N2}mz~|i%H|WTlf%1j#bvBLDih7aC zcZm+I<1z}~I73&Gpt4yV(ok{5ni-6HRGkX&2jao z7s{#&H1%NuuGBvPCyCv4v4-g_AQdyILn-TnxeT4=^b{YJ47d{%ikL_q#q$b*x$4+Y zMxKlNp9&Hrtjveq!cvwNA?U58E5_ZkXUZQgSq6sLXpiMChY-opNmzHl- zB;>zNdw-1ygiX)up`)Y$3=o%)AV8`NCAtSmW?zT_7 zAi52Ft%Oi@`W!@!EUq4|>cVPbKQAU1I(D2jVVUUC^fTQgJ$O@4~W|JL#|cXjEt+OdxUxh6DZ*h%7N8@47N4e^rO}n!|2-}VR6AA-TaYk; zfnIG~gt-SMgZxQ_>n?erwfy1>b={6_3Ld=5p{Z?j0+hY5))wN;FPt;XS?NEbw?D8M zy;r5(p`Jd+)1;3#Ds#)6Q^645euH=H|2xPcMlbkBH$xY7r5^J29<}xkg4-Epz==rL zz@3j9Fh7(9B}K#=bUR&WG$fRUC_sAZS3H=URuAmTUcbk^K(FIxb%nn{me<@p#P+783}4$-M;!QbN3GAcE*?pHob!K|6du_YM{d(ekQ4j zL`Q?9xpqE;iEq(&37hIzJ?cusgt;uvhp2Sdev}FQ!SFrb<~Gr?*;u}pS}e^j)nMPs z&l@w*5do4y$#Yho`P6lk0(;HdT(zj2*iK(9SCxio#xcwSI3+{27y3|5sC|VcPf^BQ zrdxXX4d>&ROcK5X`a4^U1pG&5H8a$=0)UYxq(bM7avsqeEQ2MDB-Q>rHe zVLXBBSg{^0K$z4;%s9{L0#q}awC%-nTIHxiH6G4cOZc=b6&kGOLMNG9Hktah15F-i z`S_;P$_ek6Te<9%A;zHx!NV(X$@r403cKg&iXpkRHwk|kdE9Es+(SWFJ=Na}1#|Jl z&LO9d;akd#nz!0~^_~>NdxiaVovPmJoCp{v{7=AN>iBH-f^2i=enI_W z4D5SXV=_oqn7i+tG=UDd*w1nj6X5g(R$Magza07LvgCJQ1Rr7O#cHdGqX{);9u?Bi zrUi0a6#KWYepl)%;G|5f?$LTL?ISg4ky0rqAn6cj{NvkNZpmg#Pj&%X{lS~QAkCHE zx#!=ApTla+b`9no{Js2GZ;746fkx6%iwz%6LjdMEZYH8YT@%!I&_vef*ji2k*J+TR zOg}B$(8y~3Z`2bV)>?2;C)M#GQVjO?hQ|Z3>|Wxnnp$1(rS^PNGUZ`nlMe#@5Nn9Q zNt}^&GH9?gKUY*bIXJPwww&b$?8Z4`Nc~1KZ-+VRdx0N{)3{DCU_N_E8V$ zRQ!Xl-{hZe$u4(D*1TqOZvM!sJq0#&UXJox)oy1jx`|9?DiryW8^KFS6N1q z&q7ximhs|f{4yO?dDrGURp)O$frA%&(Z}hQGehG)wH@U2XxhxM zauP!m7`v}Cj@w{4L=vpgL_ZNsjnbabdxBtZzY;F33Ge1 zBTGI>l()@~Up4cb_P)!+1^Tl8GEQb+)Wx{`O}}HqTbz*k&ui90I%%NQT1>KY2KZzC zrq}tN9Z<+OV^{d^@AoM2UK&=`yNACNJcqz7B;D?rqV-c9#^ayrySObN=`T4jhu<_O?ZwFvTrKIXh-g8-IIa4M*fwrP;O$ok?uOZ!2wHPJ>9Bz(sf?4HGTXwIo(pvY7xj&BWP!O#AJOREl(i5 zUvaF}Yufd>t_D1^6}dm5sM^M#R1)kl{DWWeOt#@qtnId3kQ)MQo;lm#Si2jcBMg-` zUR?Q_jafZY;wE*z=tZphy}0#3)M)iO+T6%>;m}J0+{|}!|Ln3!=Z-0&moqh-MS zg8ax|PO7X{9fH04*n~qlwGCc^`MY!9Q5T<6=r|ZGGalT;Kk956qBYnaoY$!l8FoC6CTfM8sYt(Ih_9;uqPPE!=TlOyq&hBCWJfEBs8{K57QIGL=ZDP%Pj)ss}zL9oV;JlUUw4$b|4Q|MpHn)mz^m&4jpY zS~7+b*%*B-$G*0bu;q3!lX)T7(g0tC^)x+!a=G$jk8imNtS)1#9^E?s=D}Lfe?Ht_ z8y*_2yuIHSN^7_p9(FJ5?9lOZPYDTD(=*Fxj6@qF(3#C4;yY)LI!o{_2k#I-?OTOX z5JI!%pDy3;&y?7}{e-EH_ zR@Ir$F8%b&ej~|$1ih6A=O&0q??tgRX0-aA(ff&YmCBZSJq{xxXZ6D zEAWyHpxn?PT=vs>&9+mY_WX#;W9T!Jr{U=`;r2;_Uefq`{!net*~S^~g7KE%bik4x zD3DFz#Q;|fyV=eL@9Oj_8S%I|G_(xFyP)1GUNrzn9WZe)o>Nqa4DKt?+Q){3Mx=+D zlD0E1!p#HO){~s&Ocas&zutlMI(0?aNw@a=bV%pl4mJD8n87_d(0+TB=1}KPt~P0@!eMvRJDcPb4oH za2Gx`@<+(MJNxfSi;yyKsf8_Hp%D39HpOA4{!W&k=$+NhPrQ#RHR2O>Gy;ktwr?$l zD-ixUG=_*VhM$sfZws1)!d7lqKS$1Re@TpiAI|yVN3?$gEc0!4vqx$@!NTyzuD=XH zsg8gmu5}!W1Y%$m(8 z)FQWbmTUB`bBZQ5XvJO}m$w$FCEE|f27r7&A<>Id@kF@^^-Zp6_Op=KrKi{dt+AJq z_|>ASS!9VxLoDpKi+=7!l<ZGK-ohtEw}5;Aps*=V{RRjH$M~awFO21)&?#IsM4;W zRvR8J=#oMk?5NZokoNq-C)NN8yyxdjWfbEG&?l=UFxg^LKoi+VS}AaAf6V_5HDHGK z8BrEe&HDzG?#`G}e>A*Pvb5$TkUCG)j^gXlIrXrbG%W1XT^vo!)L98%hS1KN4tM`+f~c&o|-p! z2wZ1Us(=t>5~qzoIGE@?`6N)&Xb!0xNloL@xTu>AVUN-El1#3Vfqo1J9}*O|+H(y$iseSu#E9c2L% z=nWc3jx+gtUYNpP?^bi`z3UAujbb5L#!h=5><#6phE)Bvw2h0Boo~aX-ZOek znO?#Tv!RP!k6*M7RsmK!*R6?~t*V62Io>^UX`NcL_OS!iGK8aUG5ZIbg&(AK6cxtL z?#y!s6wj276)^F(jBDnr>7s;tqzV0eQwWFB8d>kz-P6=Z!0)tb zaV1roflz{33+%^WHtoH*_&YxW@SA;0EFHJ)uK7@V7mmKJyW%c#MNjRWdM?wKy>UX~ z?!ReOn>!g}5bMy`ah!HzJ!`2#T)6K~%Z-vBT?8^h{hsX6R%%zoyhTrr=5Xq4#q-(F z^l8_&IlZV?O#dP}y!=BkTX~GHBbe<1%ei@6ulEEs;KM#@5Tj|Me-ZB(4-g_rTVak} zlmud_>s3=%jE>=Ein&%6=#AOen6Uf{axdo2?z@X` zy7^^^jC;M9iivwf1Qk6MYVXS|p@O%NiykF^wLHId@K`ybZ`CsU-#6fLYHr6$ zx6jQ+x1WU`@TtAexejBT!-!%i`B6D(5jrARa4Y$nS$-|ov1m}h3 z9`n%}YhT!#*g4oV**l5gl+W2P25-KZ8<=4o8=wc?DroW8n(t&P z#`=zHSG?ccd8~L19Q5m|ZrLY~@M-aP)(`9|_k4qam(+-L29j&&GI>#4Z{o`twHoJ{ z2{W-z3^2f$3IwvP`VgiG|>mbKzvE?^wX5qC%mr78%SE#xD z1mNqeNMw!g@hr_oL;d7mj=Z&q$!WV`DgIW%j^4YRDE}2JstRaHv$@o>RfO_>0tL}; z!>K`i>1bhrcj`KLGf0qsFS{#nAKQW^RDq(KSdI)kec7K1sziLGg!p4mu6A}-oV&)l zxCjVHxbpsWfF`{1&LEN62cg{s`V+B@$m(z5*TH|#j=Y|!yCz>7OOBwu9xd0bo;(&)U&XBYC|d>kB97ZK@1R446M zUFxSgD%nER9$QYyMAM_v2Pszv3S`%mSaM=@33_04A53$4b5C=^!(<)ga(y3(xQhM?TAUUdJo_(MDXzIwNcJbWqUE^_vCCu7bvAH}`!sRESb+J>?)ky9BqETcOE)`Rse-4z_gH>C2i+UD^cSA#frpLI$28=lj%Y z=!51YS-`Ea7{%+n2)YYs+g#(6^~(%_+X=?h$5PV9BusVRXZlZ1Xnk};Fr+~HpWJ{f zJSc@|&2XXff%v-t1$P>@;ILGN%cZ9=GdUh@A5$I+-M!8;MZojaWNtq+*1kNJj|KUf z>&VvZ0$5_vul;>u4{cxNfr8!wyZHVwx5nt0Em59*)*h&|_gruMdA)gjsS`=Gk1)iT zjal1%Gi*!M{Auj#{8xxv9K^TPeUZfUO{UoNFjTuNka^P-p*6VnK8o|rMW6Hae)b1M zxv}8z?9Ro^QKN$2qA#g118F$Zw95Be@);Vycu^*v^RYm^*#h|u^zz3(#A3df8 z72ltCC0f@VhI{~X3?K}Evk5ow9pYqRCAl;uT$C5Y($dmTl8?tIug?sqh)<98UGTJ_ zC)}&KWd_^7u%&teM-5ZH?09~5gPV@nE_iF}L!ETuA`9>xh*6vAl2pgmh>Ez05qX&x z9NV89naqm#ve$6u_Qjnp{Us@?E)gAsVF4vJ>jR{CN=k8pggT<{6&2RZdc5V+4?QOqkjW*B!SkD}FOGbh zW(J!1&Lqy}Gu;;kq(%d1@nqh*huaoKhj6LTQj@=#O@MTDm9vM;2gZND6j zTU-R{`BE{N79=<$m=l)kyz@7jTW&T-l zv&AO6kfSUr=<+g9`q?A?MJUKX`?kcko^-Q%sG{xBjc6d8`6-Dr?KAzpqhGsL5dZI) zFbyJzzkQ8Z4|UcII=PE+jqwq>{MBkgk{KM~2w2D{1E{*~^f&W-Tg{(OYy9A_Q>n4_ zo0d%dkoM|wn+~gJ3?!;KqM7RS9-heetZjQ&sx5{e$Poi|z+Hb12rv^Xeb0;msBSs( zd4FwWFKg}XrS-ht%P{)-lcOFNLMSeO*T$(Zf8qV~B5Rq|8COLj-hEhLB)-Lr?_ai9 z`$ScLH)-GpdMz)J;bSQqJ|Tr5^e@P5=|O$r0CtvuYA!xZsA_5wXrqU=^1h^=7)Tf5 zgaKR|t@+E~W70OJBKjMbfBdp%`2L*^A|`M?SBsPPHvWnp}#H3fq#kyKm9F zix1dk!n(ERSRW<7FSv8M?@QJhxlsIV3;5j<=J%=TTJH0oZ2;M||HuB`&ne{)|E0}t z&1vcwfc2fu!qRbI7zhFi^kkc8G5V6$FdvE?UWg(su(6;W=swxSr^E~W*vXv!qha*j z^Dt5-371EE zoAh@jqK}AecvBS4+@2hnsas8k|z!p)nRNmDGptv855(?)puL+@S* zPMvUHoS~JWWk0vGQW;70Shz!qDR*<&1f2fVj(7SkIg#&e!Sf+Som%Hvb?j}r8x3FBzqqk(E#&}?OkQ4iEj@uGE@Y89cr0T3*6Xg# z%O@KK$-*eE?^8HQ91>>mGA@n61diNgsPsR8;&ZDmvF#W86aDZHBEfmo^Z)AwXcJC= zLLX_R-#Yu{RDO1Idy!~G+{Nt_h8yB=ZH7zJWjU#XLIWpfvW<-hz?=}e zKY8%K$~6Tj`o_h8>bEro8d+DA9VDoAi){NxwZ!>xL2E|U9V22eQ);bu5x zdM|ffyS!T2y(g}A5Y`m4;KX6bHUb~XT`&0br!{D(^z`C#3L;I=8wEQ8SpFYi+=TXj z0OR0%59x{>p(EpMc0%TNIsmD}I2ckN{}XWeIoFW5$+QJm-q7~Y$hzj%GpJ5b);j0G zr?sl}j_xH?>}^~Karn!+ zpU`99Oh^G+P2I%rbIgCnmJM8y{#rpQojP|3Ytt7l+1?s8lozb81?34{d3e&@dd{eU zu51|%!1dH(e7E}3Cg*r{=XaEhNOh<@4-O&fhY>Gl%v}W~_X7JHME9bu@7$KmCX-Zc zICEvjKA@hfpS{-qsNPhI$Z1!fbk)K~hPyQODQ1b(s{lV7X%3n?-;Uj} z_ln;lJ6)geeG`=Oj=|)Q_CIpXC5pNlvN3W6li2#h&hec`^0M1yof}uG9V3+ICteJH zha2vrxJUaD|Dh_mK&`hrUe1P0PLqiLj2Af@5QS&gXYiw=H6cvs%~z`1Ye!J{O!#?S z`7J=$N5iCvRndkXNow(w`UqdQ?U@G>P%{+V9qzR%j+L;wvlW-XFl4ZwOzK6r`Xpe< z#(YQWA9Ia#ljA_CJ|>;=KM$Z7v%`zw&@c@mId#95E!H5?2@cHC5kq(5Xti1*1Th4n zhJiA`<32@RM1#$4fog{@^%N`VOkR0^IVQRfHTv;B6-L#}5-$2P@a+xa0mCHl7mmwX zHV-+iO!sF4P2UQ4V_?FG-(S@X;h&w8lEx3%_~)H=v&0ugr)S=h7m~j}9X?7Wp#>Am zbL^;my4iDWIZ%8jatWG%BGAIS`O8x9YEcMIEjrJU6)>3;x$A2JsJpr*l*W*cXg1Bb zRGD<8t6$6^__oIbOA0k3ch4A|p@5PhZwD!+<@*9}tnw9NoIYR9Zm}0?Ier19;Hky^ zCiLAt*Yw=i?u*+>1fN_Tcyj_-g-fXn$w*Nh!RfO5;SaHG&5pTiC)rQ^8SF%XV;!ZF z!H3c(jtD@UHoO~n3Atsh)#VwQRL;a}Fb>FNndi@6VbVI`p&p4xIF!(V$vRgLU1xip z{;M@WCP;JU^Y$(HCB@j1pHuMz9H*M&nV+miTwhw(9vC+zaMy)i5^DttnD#zR+p)vP z+%T&1uk;#&;T0a{)|tF#GVDdIgI0;9ncd(g>q4h_q_HDR-#pCP3L3WJy`0#6CH8Kl zN7UB!$WMl_E*Oc%aG|`xrZV`f$9$)^nhVyH+i;P%wiXJfinO-8Z(iXnphOel6VBKk z4M)bcGUXvdrpQRu5vgw09{6IQhy>+kU)MG6nw-!rQDU~@u77fZB)q5-3byP|Vo7<| zM#c8Z+v?W`z75R)InOwp%YR4ChF~5-gY;hqfWoPn@J4yOiEDgnIMfGr=@SGAUdwO6 zDqC{hm$I~tgi$bg^9<3xB|ixxMP7P$bUgF7W0FXnMu(bj4#P4(YF`+Wu@pM!QGUtd z84a70XfZ8n>XuyYRD1-fXHhqFn6?+C<|w4fQKUB{wt7h>;sW3$u1(=%^e+;%i=Pf9 zcGprr`H35X^#t>~GQ|jn_@CQSbV*Ot$lVS%>fE)(vwM6@YM_C9L9`qSC}Aw-;uJrC zXGx_RxpsTK*#y<)rG#)eEWlIaIsSZAdVVhog6!j@dV_-(+)+-fBG=X3CJ*%h zi(#37qQG5jxX7s_Ii_*Tqg6M_X5_6odpR)%&kn7hoxR%PuSZnl#D(;_mTnTBQLZ!2 z(|@z~mw4%9Mco!Hfb6I7o=r-$wg`WA$GG+5Bf4PaWY5nzC zBzbuEm17_~D~yK#-cRQ~eT^r9?{v!AkAn7xw?&l!xuG{>9lfm&Xk(n-oC-;jA>DR& z)XZ03>?%;xw3#T09kCzR?fh2Bq;hX_da|CtaX;gA+{!}y)1H*Uk2#U8@UBIe<}Un{ z=B-|C_2^d>nm`o@)-3hzfSTNTno>z^FF56UQw38^srZw((%bL*gF4q!VqdZ3yVk{b z%Q-qa-nh)j*#1a${nl%g?8uNY>p< z*KF7@s?X({q5dKNY~2_8p*7PDOaL04HD@a;5VY)Atn-Jed8){}jfZDr#1D(%N zV{dm*f+X*SKdEkwMSB^D)sjJ!o=htd+?Ke3N2yA`Ai$nqZ@t-0sYr-0;4}84h-+E| z)#Fi{zj@uTq>Mnaf*_$T{@9|?!;kupy8MJy+hCK_EcuxxYI|eZb39fDD?JS1j6l)< z?p6Bh&~Tepl~Y)>sj9#6lI(k|?KRrdcPy1jc7Drz^pM4-I6)uUYk+K-j>!yK z&E`c(%OMA>>=kDB=-zFU*L-iA4Ry z^R>}Va|Qwg2u0>lDuCXi%Xc94u0LB@;>8(QQYh`LR%9|0^#SBH5a+H<21UjC_if7| zNw4YXOGH+ncL16i&2t*x8WA>Gv_o>tYL~Z30j4r;p-JmccuGz>$A8~wUoo~ZabjdX zKBxUmoDV-mK2WHe_O64H5G2JP?o0%sj8HC{OZAEU+MTVOgm?<}m#UA8OSrs+T!ViE zn`9tTmNq<{f6gLezwb#a5>{UXTt}2|0DmIC9-wfhKD+8-UrPIHN7oq}I>p)gtj zLeoxRF2ZA}`!eMt%K_5}DhYJ@h)1R3QmC!8sboW?bkeh_crhk3EFM{3A0YqwZ)NZV zVMF@>|9E1Qk>-%JWp^EDCA8A+SC0MbHXu;?qk**A#p?+^uT+aKg};HG9|+8~S7H-9 zPN_4p5EIu)3O-}Rh-HH-C7L0zBgeZZI1t~c%2oUaP>QCnbN(iLjZxqe^2J<9J(47j znQs4{)i;%8j{|}Bm|R)e+}EAIqR(!ep*e1T=~>XRMZJh(MU}2u;1q}yDYiInzw0{Bcm_!2n2#ZN=Lf~+6iDG z+R&QK9s9A@u}DbX7l*@AtQzH0>(Dr6klGzWruy@_?Ju9Jb>vq3q{35zZhER?my~~1 zFGr8C2ACjtEmU%IS?*#z!71Kyl*N8WhYkId=)QrfJg%+QQrC(Pt8RbO`%xK=Ys|6Y zx5K}rhkn!S^{Uq~gz0HMi%-3mqdd{F9@0&l(^~W+$YP5%EyoC{Iu>s-G_U!i`)=>r z#a`>&gE`abqjdDsk3kRK9A3f-lzcQXEdO%cuM)Kdb17 zC(;5DL(G5GQ#gI^>8#n*@hU9mUg+(Ro&}A6Pc?F(S>JM!d{k<7XHP1iR{lM!)b}oZ z#>g&%xM<1Qk!7(sZbIvz2xGYEHI=!}4_a0fBO9Sz3q430r%fpeXD19ZphaXaGM-Ps zzmj*TbA?ORTb@V%3C>k*@58=F)=FSh%U)2ACz+4j^|N-2g=wd(Jq@T@m{_u)xz1T4 z(+f`N0d@07u3cV&=QUxfHtl5frMvkK*yp_m#)96kFu}Y(Fm}Qz(b-pik*iHk+|X`6 z+nF}ar|jrGHiiwZ$q0nRO=u}gTap2CmTzlutwK~zLA|*u{R{pkPQ8;QR687t9uM*# z$ASz|sjX<)nvKHmwQjy2cvI!0C%b%vmsHuZ1c|IbmM>{RxIGV&kD6^xfs=JDzB|f5XTpZznVTc3@2-vu@C%5G zATOR0UAW0UB3svE6?8lioRY{)=KU_`o{S|HFEJ1hEf7_^)@q$O{Q*UaN?wV*PCo0~ zqsaoPwGHW#AS|u$%^pR6^nWrvwtUG z7W1yRc*if3W~O4alnO$Lm&T$)Z~}zw#2YHm2PbQ}qT7bgGJlkt=Xbu?J2^Rd9-zvu zheE*lg?e&*>VH4Uzth$dYxVvU4MR2OiD%}gS%|frzscpjlT{RGv#*-w1gsF*Ar|4e z2Q*wR@9d;nUc<74(1ZC^Ki|^dRaaG)0q1DDUvK>C7%{`}g{6fXb9G<>aKjlp_WoU= zz8^(4VLgL0n~E0BrpYu&DZ>?twp{n6##Xcdz8m)JTY>gRB2$46at$(~td7>7q6_iW z4J7BL^Jn#y_6RgV;&dMKIaKlAo@FThLz=V1g>gpKgrxw$=az994a(o(ozUi0iw{ca zEmcgmTw#Z+!)er)M#twAD3L@*^LR@X8AvZW7ga{;_(t=sUr9ckeD8^?uXUST0|p{p zB}Y4a+B@gfi`zeav^)*cmq63geamdR{8MV%e3vxBA9jdJeoT*%5La84nX*OszNxmF z|76l5=j?2{qq=LNkqR0F!bfN`su0v|A!3&6tuEY+WD=7EsnS6 z+gITS8t|XXEn6pY_PZwf;yYQI(uIySa{GFp7T;0VHcl=SOTUtLcwmnJFS(#27x|C` zmhfQ{t(+|SS3R{uLffrk^XwW1rk1p^+A0AaeUzmmH;;AL@Y5DmF|C%>LS2`mQh?8g zUbS?sP)81bXsrf2=xKn~W|}o07JTRX%Bqspa&FL2O4mPEw4T}Yrz!l=fW}rXJa-19 z^TS&_5o>R^Y-DuBXm$ROo)smAf0X)LER7V0>jpYwCR(g%U@_vEH>bbu?6o|=9wc*y zSu2Md6Ou?K&U~6SUk8vhn49F=+hC5*4~7i*6YVVfxiSlO3XTQomFWQYsi6Sl((G2zGC|o@BC!+{l^m7InQWY2mQiZ2JY$Z7jrr}h}<8y z<-~qW`3edt(l8qHz>r@Q7JR2N?qtXBF9*G)BM!8gd<}E1M|`Ry+#i{2E_C?Qknww)}9(fiP>}H_knedJC#{&pLDob|0~3}%E=I>hG?U96+IaN-u)=4cw(?5L8cY= zjwYYZ4t_bqFLdwt;l3U>vF$uzNO#}XuG0?doe%lc+VYW^P>Rx-QMfhp>#xqn$xo#3 z;|5Y*l??y)27X#GNge~3)+YEx(KkaFd<1<9WYJO~CdMHBxR6wja;pCr9S{=VfHYGa_W+lgQ-c(#V|B;g|USv}-kP~N**b%!< zdj9=)DC*VlT;@2cvUu$4a$_yk8tGKXeYDGk6zLV+8u&b<^jM0dp#0^KK>2ahO5K= zf^Kefx-YLN=CsAau=J}53MWrnlWl%?ibY(ONB!Bbdd9kIyL{6>S8HQ%Y$U)@nVid3#=TOk>`7D$=Qe5fa15 zobDSpi9AONSXd|>?jho~Umcu)vj4KZ`pZ-l2nR~}NLAyxdBjJKxKdV{V zM9P764+=Z{kRfff82b0qpE>yJ@>s22*%%b~CYFRq_&bP@9(*M1iHYu!LpT5Voy1x9 zLCMzqm54;xVxjzw;EN=pX{8y*FCq3#e$V%z2Pi3jN=&r}LTpVf7P8KAuQVCghU2FE zkTKY2OMDF*f^u!~BO;wn&5NWC1WAx)!n_{VuiM988826^8I$~Ax{pnk`(DQrT;{sN zsa_{idQlV_LI-Bf(`USJ868u*LCj%kzV+Yo@G{$-+j)*3I)l|5-JRg-bA7`8zEgjm zTaO~DQsuP2OgS7|#wuZcWAYGm2OA#9i)W2(XF@S{q=Y(sj?j(M>Lw@KWkx53jF!c3 zVNlq<>&2TSQl3Y9Mf}NabCc%F-en^Ox)O6A39ib!ZsM{=4c&6{x}8Ov zZCk;!;C!m$K&%?k@w5MwIzQgv&C?SI6U-n*sD7K(8jJ24SX-cBHrs=%hx&*p&z*criD@HnXI_{t+`wK>TK!WwLanw)L)NMx2n` zCHhw#cLhLlTPXMuD^a2f8Wj(jpz5^3Sb6%m+&%GXQIXndi!7{?1zDTJjWSW?HS7O1Q@}u)YN)K&%d_Nd` zYwXe|b|5|^5?q`Wwh^p3%y?k`bC-_93;)&g{nPUSLmd^0#RTGiX5DbOW$MR2U%EST zgpP}uw9hDck$NT#n3ukMPEwyitc&u5O50P**NUc+mp7xi@p!dTZO2<@_wl(zFFImF zF@MZSy@Od(Q7e4wyRB?7NGGww@9!7tXmknyM~L+l5&!Ub;fs{fi+z!F0T?99bX|B( z_i=d`Yv&JE56)Zj1?#Elr^5RN*2=XZujhqMpBHNiq$YC`I_bvZgna)~n1wHW>y^Gg zzO|l+X7)o%c<70K(op5{+h+E420X^8jOm_I(zQjmUJGO2o^XYPXD4Lz zaho-&R6~aE)CLVn>MrFGpDldq#_+1A^s9=z)FWGLP6d=AqDiM~NQU75Ji+h4Pzp<1 zX6;pV+=6md4&qZf5hER!2%of#8Up`&7X?z9ZIq+!dk~|^3Crew+r*BT?-gij6FPKiPw!u*0E6n!F+wyxVN*`oO6o5r6&u*oC~q1l8HvPK2z zk!g8w?_b{6u+#VQ1DW=GpjtJ3v4RSUCw3Oml8OknQx3MbZ60VNI-p)~uSO5Qs7>+O z8Y#`av?TvJ*5Pd7y|viNq}0Eh-C3AlEt&cpfE}-BLdv1A_sVS)J$yl)}%Zad95kDS4qZlP7Jwk4WZ^Vd>__Fx7 z4OQ%>(fTD$;FPExT&Rnww|N}(OhYab(BEV_Rwm!FpI-ZA_Lu@yy0{%|9Xp_tKraZW z7sDQGI|>o1^G{HzyD3bHIzwUHiScbA|5@1jt;vd79zWcjDV|_6kr`N{&!Vf=`1@s+ z_m}O+OdXEq-~O0imGd3TYY1I>Rg5-8Rf7^TWJo7e9}ozg#=XORks=~C8Y~jPgU?Ui zykwwX`OBDKi zMl)*P>oIqsf6Aj-9Xp^n{CT{+{pSnHWc3L8FeXjJi`h=IH($dZMRY;QL!P{dlEb@R z)Q`aT&SJiDU4&9N+4$pFVA6!2V=38GSJ_*@xwMp)DO+@{*l)du`h~uWhnyRud1a@G z0^FvY_EW1DgOe{#=ugI8kNPHVc6yr5;J9abssYYTxl9Z?vKfN>8pi)q+|Z?V+CY0L zk6%20__hffYm`I3k;+^Lwp- zU|%P>2mcl1nV-D4r44n=hb_nWQNNv3K&>5g`)qa4oVD^u*r{&fq!Rzv3(%bC9i!iQ z*b9k%{z&s3uV~xLoc5`}$@{+s|KFHzC+s-Pe5HYo!#){d%4oneetfVjf`d61rjj<0D|{Aq(W0yZ&y4 zEJ1P^`0GS!FvesR(q3$*DSjN1PX87!?9Y`v_UD#hZhx?#+cKWfs#Y!pF$k`;2K|-E z`5_EuUA=MY&dmV&aS2Do6u6g%oUq;|8o~h=jVcNhPLBsi0|03}DN!!q-GBL+-$g1z zSxjrkvlXor8dptgEB%_qaGtr<%RRa%4#72%oN#9Mvu zO_5uVFV!$Pj(`A@h|z=E1V6O4NAexbojyr;G<0?8?orW>t6yh%dzNzRiRe;=j0C*% zp8;AzR?ZFCGM}SjYRED>5(f(0t$D1+n~jXcVb~z!QJ=0evxQT7&z^(D61kF) za0izP#HLK4)R%eF63jV!__fpvxJ4mL4J-iZBUxPlcRrlc4-dB}?3KE`RZOxJD(~tX2sF+VtT}XX2n{Sly?X?V$3eSr|!@ zAfzkU0RsT4&z_3X+MJHOgTWZg+j{;{w!t%F-QgzQ3Oh^CMP#`{?gg6N!^`LKlf995R-x{C7T8+j2vf{+qVz{{hNCHNTJ4 zKON2q`+j6K-!s7p2mR7;)F5C1?p4~^WMp97CsV+0x!>lJ?wB3@2 zbn-wdTWdi06CP?5etNRzl&q4&s0L5pMDXfK%l!^Dh;gob3w}lD&o189RB;o>+7@b< zFY;xY^sw)_&|C16&gsc)fqz-ppF_?kfx8W2dJ7-n`-?j=!t~?L3C0!ROO>9xs^FY0 zICSp4MI1jJp5Wsw^{3beft;t@Q>5<9Q`R%w2OTCyALGBh31L`j<#@zqn+NMI(WvXo zj>JEQ{h5FparuHqtlhFT9}?FjE8k71vB%sOEb^PV*yH=shfUXxXLH{b_a~Jz&w)Re zdofrlG5xSHh72N=Q{SvGavBf0p`< zJjtK*1sym7wSQw%A?H7-w8#Ca-u)r>5q$hW?g9Lq%8GgLE4DVz_2|CEy5)XWJLyLkD*1N$A8>!X1U-dPoh>qlrfO$ran1xWoBMFu?g&M8hO@oSJdQ^$TV6!@R*2Hr zBeorLU$@-5m-DB#o$vi$m8HCN;GXuV&vg#yd-|p;KoxO6p}m0#IGqiC%YCeUDSwRb z0E1~U?oXbaOcv*UKq$8Lo5Wb`uWIyatLy|t)lRVQE}}`$h%>HsyPFOO{E1Gtp14pc0DkN>f5$tibR47>S6Rk;SpmVZrgwrz6G^m~A>xSLQu z-*`uyc0zgv`1RRw{W;#pivHr@i$UmZjp1q7Pxk7`0mlNqNO{&xET&+2LCIf2;CHg9 zGEZEq2TSq)**g>VMscQHTbKd^VspsmEZzOi^jzO{{{Ig=swzoHfNfT%Gh-&5UM2|` zbE_6rJ>}&NHTVm6@?tMEN(lSTow^pGJwE=0+>_S}ihEI(w9AI?x#fPcLdYQbHFxEt z?Lk3>laQOyt$_A>%G8Wvzn9!*fgd~|VT~EuYaK&K!)_e-v%*HvX}3)rA(Cse>0mMT zeKPIzk+a}WI7ct~?%k+=tkRRr_IWMDy^0X6IxYwva6e-ZY7{?P||IHNi)AQ-nkx5tzxrza{r zBf9r>*!%Hy>6B^B=bl~bcnJHhBR)|W+2x*ll6v2*4Zhbczf4XbO0IK%wfg*#41Vy4 z2gE(_al-b}Cz&b=c3$(n*)_Ohf8F4ptB~!JKl7b}PG)K(_3gFJ#y;^X<%XnB+Hqvb zh*FfZ+{b6J*TI0d9WKT%nNDRT-GG581iVmS!rdKZ?yD^Tx* z)>+$wOEthnamW5T_vbfId*s71?A;Q;@p5CX;Mn}VZGvF_)~U7p`$2y=Hh_k4Bz0-^`v{|-gEPLogDk4k@($eRmD_fC|!V=@(d88%_ncq2rnu2E%N zHl>Dt(l?9V;H4oq942p2o%!CwIqV(vvJp9zv!}RNBIi}>PCm&c?j4C+8xp}CqVLFk zDG`0Z`AYZ>mT-}K4A85plCs1NlV&3JAq$S_=|Pi2I|Y4JR!v2}mlG@7yUoOBqVIlg z4#ux6KK5rWQ0wl@$Zw3Tw(vF!7v^KS-1mDK?%aRJque!sBtzMZD_lm2KkPKfWigF= z{-&nU8l&a(=cQz2V)fmPI`yO!KqSIUr7+Gz& z7WWsm0YrE9Q9OUE@C^3?;+|Z}JV!t3n0v*2%PO~`L>)L%ZuZEvL26p(YU zM_KVXSE_#m35!mQF(x_4t8jl&Byjf7vyt3)>kt+Y>T@rW1I}+~l)F~y9P6F?_3?jx ze%|~nQj3BV<56n49}PaAg~S7@nL2}J~Ti9<<;m^@=BNAx9+J;%B4>{mXD+1y8G zeF|8Id*~_;gO0Q?#fy2~@($|i$LIFoTblA>8uv!|XTo=|X2@K5QQ2#=lCyC+8|;et z?Z#sCcZ&767o&ZO*$tG=SRu?90Oe;I&JEpe|pZn3^ zkGFjgug4@TruX`{o_!sn4}P?e`-F0QkaIEI9oLnqf2QL$;7fMcbFJ4khx@DW$(DLb z2F|_KVn9z}q;A;+Bt^Vd&h0{{Lo}O6n7y_v=blshfRnuL;ID}Nr#&3|zppPY zE>=&tK&N7jOD}SJj8PMYDdDuqhzY$7Uv9wtg3dzcI~%z8eG#mZ&rf{pHTP;QzgNJo z!TrF$Y4VwSZej}BKQ6cSl108*=U0wLvX+o*yw>pq~&Hawr7x~lU8szNp zzkRU}YZCcYHo2HYo&CJK1fIlGn2#^g6NX7uG9ai~siKCZNh21hScV%@)puX{V$Y|T z^lG>zW<h}?FK&f2Qcz=b$SPXJMt~~fo)z6evY;1yYr!UE%85`C{UBg z??i#{(OyL;(by}0oIbupPxw8GCl;1s$3g>DHC4!~snjCQ%nP{iu=c9uE=i?~qIr_fpD({vK-?;1=>~@ZC z@FjY}iVtYzBF30-EJa1Uim4~6#xtp%ilT(7oN}VZImgwLKm>|??7NDZne|fOSo;J= zRPJh$v8uy6_iG(dG;H#bc+w{d9u@fN(+KR*ci%4?%=Pa$8fI9;kr;{n?!9_vN!Cf* z4~4Q6f+xtpHJ16R8B_7xwED7hxwp#TrY5(paU121{aSG-B!^@G{ZHcl z=T9P^z#n1orB1c~S@U_mg!^}T^wH{J_xKod|Nd@=t`rlnH?2p_C|iu&7Y50(;5QoL zirbmTaX!M9O%Qjb9J7kcYD7Q^}1y`YSGv6<>wpOdnEr6!G9cK@Q)A22eSF{ zKMsEL-u3~$kMx`b7&$^F9*$%AK)ROgxWmHXdQ`C!VHvjxpSa z;Ue&5*i;-W)Sc|mo!aHtd)m!Z6&X2Fr2*IN2anq5|NLh+3jFUI-aoHZu2i_BjOLzW z`(kVE!--6K=NRWxOg~8n`?SdhxW6B38helY0|~Jq_zk7<5d|hcc=SqlnuaEB_PBre zuHij*CQ+xtdfXSI6I<`r%`e6$_dL8Xtv3ouv$l*wvS_bq^f|bzVK(?O51Xv1{=9*% z|1x9WA)ou5GvZ$EnFkf&2M+Vg`ISIDoTIOJf3kd1ok|JK|W z?lI~-2C$KWLiFY8Q$e4up2Wj`>^aPL5&iTr>HgJu7&ctceXq}39edVQ?oDQg2&h0x z9f*ApgwG#Deqc*v@&E1hk*0?J-SK#AGRo(lz9aV9&MybwHFU*jbNBb(NJ^@1X{|r% zE7jU9FcRFo^E%WyrtQDgP7BoC;BRB?d-Q_}@)H7| z>f!O;e<1i+63?j1y?3Ok{^zHsC*=NO;m){&s|0ttMEEAyyMJ3qzA>m|@3@a=6!>{a zRg8J9KdvRQj8`ztnfA|-UtV1NGt587#D1E;^BMX^_hY(~pS1Yno z_LMtN_t+MfdgSBZj>LUR;LC;7+v7&qcmH7t_%+@((;l!V^E&RS|GTbh1=+~fpSljw zj$(JRE?pmadEMjUm!{NEv7dO3{z)dL=NyZF=YGrB-l-&~X`$*5TI51K!t!^}8hJD2 zJ4`!9|M>Lq@Ic@%HxxXRyJbDahMsSu@m9(*Y&$r+2^SnzwaZlhc;y!r%`PW~6;m+aDN9+s;ZbrUI z==Z>%b_E?nM;3eoG8Wm>)m?+Nv2Vp$?%Z!~?g5F9fO2}3gLT>}PPpKsGmx6pUYZ^e zdo0;m7T*Vt?Gcc@4{iy)BQvUgaW`UctBbfFCRDP@hqgw6Jamef%$o@QM02?+D)Bc=frHe{1fwxkp*1JNGx?9*Fu>2l8F;>5qhc zrv6|1Zz(F_oak73bwThJJU=sd!P{-XXJhY1^kn%TKi^cy@t21G{@~mad}+DA@8oUC zJq?;>?yJn2`q23KRGi1g-tqeBuc2JEGWR)a{TXZ@He&h*)nl6Tj{dgX?@?kSZSSDz2m{NQ5;gSJ(7>u>!?SUGT!Zw!Jc+-k89#zQ{{m2`id;i z@7!-0-$yO?$b3WE38_is>;2Td%-Vl5hfU@m(<$7Wv>`-DeG&nPbYJCptuqMdV|?9R za`qDg2tL6CIH@e~2Hi_aEcOo%Cn6r7fFDmsllxgp{*FbHi{g&`rtv*z_B8lSW&(W! zys6fcxF}$=xNrE6ddW{yIg)#wCx~!10+N47;tyr+^SqK~y2e+^ENJf0=3`AmZgQNG zZp$5fm-`1(zM-&pAMSEfVb!z(E=N7JGYF?%*@_%FEZ+AHjd`?}t%=q{H+J;<_ZxzFxhqUtEpB0UzG`(MW}bq&Ho^6h-q=eIle ztAKyr*N@oYPm+eSd)nf+<0u>ZKkRH+lh%7WvAxenac|a)hz6m>b^cLfR!=cjSEQi` z2SK5KbSOnKZ=&*8r(W6hoj3^k&7nR?@NXcMwa;;v0ikbP@bBC!F!bu*0np2*3G8Iy*)4;rsX97UI(}Ui? z8r;942V?L0ZZywrg!}Gdn)r!S@dW zU-@%6c5JT1{r#@4dAyb!yKrwNns4xv?I#U>Mcm7kxPN}WoBOpN z1tQ<`^OI@GJO^bn6?07Cy402aDXBC|MBZ?(KthAh*8YHd=Q;cN>vNy$R%5WH-B|h9 zXmc7ki$9J$4!{eIX{xa^#{6CSIe^MbnZUo_mP>tY=miv@OD9DwuHyH+?6)$eHdLH)) zl{9g$l2gcFxj#04JoY@>6uJDlwnTB@3L@$sE_21b)n*It-2VaK<1<{AF8TU+c_FtS zV2M2#jiz)*yGc#ZNkOj+{z35U4xzEv-GKS3t*^ShjwOTWuJpJ^;FS}=+&4|u_{Bp6 zJ}p$u0%`)S-MO`k_Z)Cvaq!QYnqk4t$Nuq=-`q4bGZvO{|3=*3!~1nCKCy4m$AcaI zm*AEE0NY;%O@nJU!%l2DvEEZ*ucK?loVz^aYig~TU4k4FhS>$~$;)ShufX^243(*H z0I^P?Weul_;t z{sA^8zmd8MhO1!^eC6a*q;0TQ+$T~it73m%z2dku7kjz_z?+d+?>^Spt3S1^3mxud z+p^fqrRFCM3sAxLKO0JS$}mt-c9v{sx5b|8nm6Ek3FW>>Ow1eN?GT!Udz+ZZMIOaI|}?R_iX2d)3xMt zFWVh`+02KA4dy>TgP;FwW%IE{)J4xX_Y2N@s6XfsV^acc1$Kvf7({u8&i+eHwT=@N2Tx%_DCIIgO21h zAX@x&z|URm=@K#oJZZiAKK5kud)Q|(lf~S}fP!w^o~E1sbEBbPfvnRo&DCY*MG^AJ zR!$y-^5f%okmo^IJSMnO%c8B)50`A<)9?~2f%5o;lhfLFK25(V_-NZo#@z455eb+P znLxFxyr;hv_m!p|x6T#!v5!5H2eljE*K3K~=+fV+)fb=;KWV-D0qkSpV_&c&2{xe5 zdkmgGp9`{;IHQBdg>1rot*GbucDb_3pDUjvc>Wy}sCg}k`#>>~=goU%zz>&jj|M;J z?H7D4_ELUR?%U>jw=;)!unqUziR;w!YyiGFICCEXE<(0=CL!!&<>nWt(0x3e%y7nV zjcv0=VNWi)jWvLqk`3Ym>IBO9@S}TbK%LF~^Yf?TB~UJSPA>8%k-x=*ih_lhC{ZE4 ztk=&V;yu8hO=_r#x*6(CtFUHo+VJdi2LF+AAT%?PcO$=egh@fQ3G!QGpLDqgO?}i3 z#@3>|k{0jEC?ki&^k@{I# z2ZjBk;=Tw`iB77>`_n0STbX;A7ys|Klo&A8bOxYMZ!Hk8<}xRt^}J5h>v>nV^}R95 zEZO^#AO8953Y-Q%gRdT3BvY&}4~uV%ed%F;Fy>xS@91&Z*8F4>@&%oVK0{0%N77nd z#eKa$J)ph+^`Q7ag|eyE;eO|J(`Lsf@QCkmFNEjjYllywZJX!gKY#9mkLm*xZZs=E z8U1Y@X&E*=cB;U*yWZ*Tob_}}i22_w_u;#8qu$#kbsqQTVZ-I{8D|xmIR;D{hE0(dzyI(5{tth? zI3#I!sH*pOD^oBTd+@l&a=o`2si$b@Ystqqs`!>t$`1C*+}nQJ_AnE(P}(Yr{gpwH zzX|t-GwAWAd{eCAH3lDLoT}BzVmm5g5bKf#b3Lu!A>uRK&&ms-VN^FWj*xq;8NSVv zq~1>%%B-qMqFCaDl7zH_@@P=F42PS}1E0*jdS=w>eTd$bwYQzh)6G55%4q(k-1|BY za8%yMM~+#LuMF)aZBT|;n15UBV{ip`9OoL@zt6b<03ZNKL_t)@7-*C42KgjAwb2zt zu|u6XB8X9NPlfouj=z4Lo}P}Y#rNkf#c=P28)8N5^{_$Z-AioqX93X=9q`p>1*o@C zy@|@)V;-Zf0pq9=XA-d>_<*NR?G@9>2U&zTEmS1PeR62DlTYNo&)^S zpzn=nZwOJ379SQPPa9i`aV}s*@?)s;Q2ze?d;Lj((E;B^i7An)QcFBWb!BcPFH_mK z_%bc_d-Sd*-ZfdE*CGzlfu5Q+wpT`f4)?TRY4F1^P-`M(K?<3F$#60)w7ip=dMq%P z-<10<_WCi`!Jj^2o7>yc)z{L#8vMvH_H-zVe>$C>jt|>&zayKNB($y2&GRk6KGzKf zMq65wk0u{*R=@^cK4Y)UebE#JXz4&Q_NHvUcg|4pg$)vFm7Q|W5|GNBs7d=6xsTjR z%=hYj+8eNA`8Nh%eZsn*oVm}xB&S$>?kNH^}M( z!4(OjU6XIHhdNXS|JTFE)A0t_^L=T}y=c>Xuz>p1Oc5vLaom!8LMP_ej~~AtjvsP^ zS0cQpM6*E2e3~}Lazh9(b=>%e}kOFDdJ?15vvOOp3I3Igy2Z=KMPelB&J&KQyk1en#9kX7srx#wDWLqH)WR%|i$vi=I{sd`1oZ;yR4 z9(%OGT7T=X755@$^^f31eHbYaR~G12<1t(8@#(eHQ%-LY_U;j~xX@FGmi5Qek0-SR zG-926sS3=MD}nj&Bx!0yJ}2xkwin!L#j}s{0k0Vo|CzS;ld(?)JA_HXtEAb)t0so` z>I(J5RV<2j4&;RhoNx zj@_To5cu*mUK>0*lp1^d>4|M?!uJiqj~jdsr@BWP`@K;`e*J<|htcwt@%0o-=MP_N#+P!E3ns+3Z8{q6j6_Rga1S?U)EvjV-GrWfVHKE8-Xt(2YZ~^l%?mnN6qj*o_pYEeH`{W z4S3Ko0VV%7!9G%!9>~Bm_reqo-p=3)XRES}>Xw&-zvJO_0O4Ph)x}!Lx}g7Re5jjp ziNQZTAoS`ZRf~z@J~;@5Ha?Dto%LD9Jni`X-37m$J9tD%W85(rY3@Z5mxw&FKyE&U z_sh5^t(dyaoYn*n;Aovx&@o1UKSdSdY@_Jk}M2i?87Qy&-jvMlS(H21Z^){R^HmY05lm>3A#p!p9zcAE3N5G=8grj?4gMr=jmDTz zXR;}HFxcM?dU?s1PkzWT@dPsLtCKTx211$z$glP$0p%4n#|LUUho z(T?KYlSsDHj?1rmj&#L>9Q)gxn|4 zsK*gnbI;%djryvjo7`jUQ+XVRJ=%EAdkJE`U~_-q!W~=ZINjWv=|$MujOG5c>3KTo z7Z9nnadYsMf1kM6x6U8dAP(AlMLpI@T;#si_v{O(7j329VG{PSi~Y*n3*PwwH20L= z6U2SnA0$+WzrDd1;xKR|Z0yBK;H$O8Y?eaj$)Y{5vRsnVr;?_pMq(A7Oo;m|Y```5 z+Tv59y^=ZGuau>N)E|_)%45IIV~-_9SP6tenSf=vMaa=TW%Xj-b34q%zBW@#r1nFK z0!O9(IHJNLRaFQEe>?8=u!MnUp>9hMWe5APpdslOxUNx*?JJZz;Cy}VxkR1YAmg;A z!P?lG|#G$ebi!qiTjjNtha92hx625c+lL% zV)kzAIP7Dc)kE^j*WeYIkF>;J9EqFMXbE-p&fNjikh2!{nd3tZ7<^b%32Eg5$=;*E z2U-F|(!<_>FA03pJ`i3V{DTdVWbdov!-JM8fQ$zZX!a8i`>9F2ltg)@Hx(VZugTA+ zyJWb3+29E2^EB<~A>-&n29BHWuHT@w1;emuGfcK%#`T5+$-!Kez2dfo|FS8_FjYaxsUYQ;Jzg-_JaLF z-J6>9u)k>T3x$0?&)~l|)VW>Ed7fSB+uHmq6vKdk{EFN=*c)@t+^au3f**LDx2e$5 zwL%tsEAqLLn@`-A;2M0VJpy&TmI>T8nFl_)_sG3*^S$L;y&#%WhC5UFXzZ=MM|1yB z3Io1XNfKH+#cCx^;+{H&Tke0INTuLOdHKfND+7U>_=@`=c-Da7iaHXh zlWtp6>v96b2)TcH(qqP-o=)1_zbIFb`U+uv?zuwSF-GmoG}F%F9YRPMo~z*NabJX5 zaB2Etj&eho^HAhZGxkHsj|sl)F1lXQVMXp;><@Mm5AA(GZoYTXHv(TItustrxGnZ# zHSQho{he<0@6pmTSnko{Gx)TN*P~v)k4=MF{m^26Rj61oh}{H7#?k@blSVX-|0HwY zIJ1!(-kYE_<d&}nr zaG9!;=#wB>=b#aTbTR93qF}fRI~gd?t5u(7yIScz}$Dh zcaCz6D2hCHRw4uPzA+ZUOf<1%l&05TxYhxx2}ahgGpSp{OIO~#62bkd9rve zcH-)D(7+J%#Lcdh`e@*3rMtJ(_Lp7u5Z+i^=(fE;?|jOtF3uOQmuaAj>a=ol;87 z+f;pvKb~Fo>j6{0fK6OYC0F7e`cl4;twjdMt$yib&YUL%GYo&hOlRI-_|V7zm9hceh+%I{x54c9fCV}1iTr)gW%5; zC#UQ0=@SXX%e+@(W|qOwRATYE0{26DSOeI{MrH0C^>JKqTyiz7XTVoqSrv6X%>6+O zJzjW%G((+1Y*nHm@Yt~^;XL+=d#2vSe%iZXznZxZx8vT~SY(5r+?snx++FTI_RGPy z+$)C|&qndEc+m#)W$jXAv#PL4Si1%c``;?}_`oMtdLP)VT5j_mZh^v7bEr6m~xM zGEDP)3+@x!hhw{XHZ z>IntLD+&~sx?>u5VfjXt+WN2Xewb&X1s`9LinfVEcHzDcsY%F$jR>(Y>Su&@%h~6q0Ci$ zFHs;lEDCi?E^tpfhP3$x3m19Ceb|^b?KMok=!pAq>6+H@9&q$=TGFQ0-e?ELLic11 zVZW?mkqtfruem=E@akv2tji;H$l?wj)ADqn4K&E_$1)4bJ4pSGhls_NDGf0W7OZ zGv(wHdJ=1P^SDUPYg!kE`!Gi}>}Br)VsE&oDNE~euXTFk$Z{X|xQ{mlU+9uHJrgKt zCu6zWtV=7E-!1kE7JiQdE>t8WVO8qsmhw-hlNf2ma8td*r?**?&gQ!5+ES@^W3=7a4#N+@rk~DLe8j>$L z`Z@oSD_|e8aKJj`vuvg}uE(9)5yf5qiooAYTS<5`L=tBZW{bQv_zNCq0B~}*#@u6i zZ$0k4%!y(VWwXf-XDrLZI^d%gJNXkO>)Yc?dC^Z~tW%cjaj(H=?$xIS(-J>uJkic@ zkEP63D%vskT&y=teY9Z5^_sEg1PPx%P~3meh?Qf3qYUdhN?ILAaUs56m3!w%7m^P> z@d@`S;n=Ec@Z(JkzUYn(^0ALQwQkF*Yakgg_ryrNUVx9HybkxQzhS{wn6A)eVSEa# z+M%|eh%y!B!P?Ek3Sy{cYLXBw_%ApzRXu?*St68CF4`cN99uhtU6J~C-);9+$*PA*a#U)AYa(W$-_qo<5#FcsoK% z0=C_e;HymWH28RhlFESxYM6U<38lmRk7MM0t()_Axu>Z;GB=+W&FpjSz0-nJFHjBY zsC=qVUV*X)zI%t(1z(6{_?{c=&2@V5{p`0MB4-9etdscY8-q^lt;0PUNW9Qb;yBBc90mG*jpp;j&!U_VeBp!_qq;$%ig}P{REfFJ>-R!H`DzYRfA|UzQkQO%h8fKWQlCzvu}{-| z%DQ6cENJc%xBX6IZ|RJ{xEt%FL)}Ed5ct~M19MM@;@*KEI&1L@+N2EiUM1D^?*E|S zUEsA{3@G^fY9TK8VoU0K*zX3~nCEh@=<|ZPh&))H8e4K=?|;j|kJ>GX(&Y2>-XVjJ z20tn1gYS&_N%&_P?x9WXQ7AJ%pJz9C`0k^jRW}LY=iW$Q?orCJMteVv`;@sSgP%ZG zKN2T6bg*Ch@z)Qttq$rdb^|0>q@=uz;|GC%`mnixh_N4Bhl(7B4B;>Qz(1TyF7xhJ6zc07+Gu_x}Sh+VnFsQyhM zrH6e4oxkq3;hxXig5QRK7$}h;P#0I=1S6c8ZoW(#`{5ES-x*)#lW)&GYHo<3jlQ@S z;wNhu{4>;#!hSaQsG523w%B;<-XxFlumAhsLW>_I-751~=f(J7zkk8v(z$bS)N;?p ze`sHJ>VAY?l~}b0<@kjoatyp`l>~m3Wn}K_arR!>PBfns^cG=exc9BS_b*#uzcb4j zWez*wC)~P$yLgDb;a>UqF7`OwNZstux5vlbH#%TwPjnFcfhvc^;9sL&xZX$K+|PTU z)tfwoy|4{`n)_wo`!l?uE!uHTyT}&zd{USD$SK-8B#XE2sr-jh?dqnN&YUkwv^{By zPX_-u+TPQq7;WFH1pv4n*TX(?|0UXJAS=JgW#qZ~Nh`aUP*EaYNzL3V@LTLzwx zg5dF6fj@%#^WZPyzAefdW9$db{Y>tC><`-7Q%zu^{Cms&{}x!7DDh@|@k2$~!)|Hh zYAa?d>!WX?{gS1Y68-&H7=`iJ`Yf!60W`o9!AFBX3Hyg9+`h-}hpyHcs=hc6UbNMi zCi8PkfO1!wP3fP`mEmAfByOB8-YK>wAhUVe?IrDj(wPb z{gAnz#XUq(Z%js@_)cZXLW9r4_PBg4 zaoS}fGg1X`ekZDQjE-Sh1Xz#z#bv{CPZArLJB(cJ0d8mp=_N+Yy^hb&&Bv?txsR~j z|L;7nk^8@X{`^kdi!nH_4?aZQNmzaC{Wp6(?g#g21$TKP?Jf7SJ^iRlJwMjAT4iu&FK+{u=PXNMB8T5yuDK6|>w2V5X9r2eOR7mgd3jc(7xsBJ^-# zhx=MN`pEsSqnVjpleG^6bn}Cs-`>#|yRqOec%D$6zc(PT%^V6bxUb-2KaYDcJY*ZF z066)dd(1VIk*gRa^Z~r%y8`$S53ZPG?uWLc*5lqCRt4aQEl)Ja$0KRbr$^1b&_kNM zV$4W;6av12hX{rGO?ZZqK8kR1^iQ?MKCB7*H2qZE|MmFzt-v40{SF4nU-CR5_@zVq z)um@0b3X_TO_rl>AD{b~5x&LV=@~W#zYji4zjKE(-0S?In_E~Rz;COZVy~Vh^28S> zo#KNJ$PDttc(85 zvEP*)MRGkdvPjc9-Pe0rP;einb@n&a-~RsF#P`8`>~9P{OjurfUmKNT9`(A9urlDc z)@tOX&ez=#!*MZ<-qt4H2Y>2W&S9@#0vC3-TkFYW?uUMU#M5!?LhemNSXxpok{+L8cjuWf^B+Q$Ei&{s1b znM5OU53JIU2U~kt*I|Zx_lp0&75D#4*}r#{xt_lOeC2wUWw$E&{8yJ{C2rG@ve1qRH_a64Ue(MKbWy|NK&uuRN^_+?S?~* z(d1KKrut&c%q`(w;^bG2{kSK-q*=A*^YjM;L~K>(df1z`vo84ax$h?{-Q9JA?zEpT zd^I?I3df#z9ew8h086>|x*9z0eR=y)CrZP8sGtwkhsV9Q>G@UMn^)%Uq2o) z1F;eOx~`=Rg166U>3ldC@;{BKzq!e0aVGU?6vZXY6zR9{2rzoL+O0YpTijm~sN})e@2c{gJMtkKeJBd(^=Z z-2%tRA>UDG7;~m{pXbQEGWU7Hih5n{qp!lAxQ7zQiNAO|_#`$XL_yqBpAx1T0$Q@wRa;s1f8WJa!9Ir9$0Em)f)& zdSgzM?^B7;tKeAbwMxDW;z>+4$(T{`yU%hISauB-!a{{}^ ziMP}vpV7ZD`6O(JGeyUlZ$+LoBEfPA_B8r+B)#U#q?rUhJ;nf*Xpa-OPH)hUo*mzV zHs=gwUkc7Q_&TFCi~E-Pt}>dyyywc?#{=B6_L+6`r*JQ^WG6-NHTMUHdv4CzeC~2_ zW_m6}KJ^&WvZJ5q*-E+;VMX--03ZNKL_t)%G~#JXe4)YgTS}!I)~ylD{M*~x5ct6+ z*c*x7(crhUKqiClVn6pS!QZ5(vLnXUG8=6 zE8-j(k#R*o(0?)ZuAV;2k1;_NG3LyciW~R9?;REXeDur>A6XF0r$OW>Ez~{a(XJS zp0vwSgsG$eU;UDFL)PiKnrQCTV_5gxeCIk!v%OHZ?^~?VH@`3Np|t&p*fBgH`NrtG z-2V(T_^Xa+cO<@xX6i~Y8T?hS$Bg1+O>&6i9yM_Bt5)Ft9QcVRy*HbCO0@TNQXul9 z8O)k3Q|yLbuRjb+GK@TlOf$v(KEutt>I=B9346soB`C`NJD9lOD`&iP7i=n8FgAZl z@MOu?YlslLPc-+4e#`yi&qoyW;Vi;xM{ccWScLTq?x(=F4EyehX#tpkOs_!>2EVM` zD?{uj^?zS2GJx0xKbcsF0DbC*zS%SQ2|vY)Q0f&2$IGzC0AF)Y27ieAEd%_5ZN2(c zXg|KQVUn27rFl`MZ3{LV`Q}zE0>34n(Z}6^H%9;2`1lO|<3G4-u$r~c-LYHsSng$> z7lri`#=|E~Y%kZro=v};N93S~4ROyeSd;q}{KOS-ob}_iP|#okvwfnHb|lPfl%OXT zvJ89mPAcfri`;KGY`rGzk^8!+y+(jCa+0Qr7T)k)RDm@obzIkYA8M4(7mK)WD={!l zqRHP`^06R@z<)&WA4eH{1mZFiDCqA@@)^xNZo;I>J&^bzi}Az1`%#JYBaeFe-XZEzW@+ox zSi7>-bko#Vri(!1tp_(W)zvf%el6m%zs8c|MO8nS6YpfL=m({t4gQ3EnE>OZBStTD zD774cv*0bVm>tWNemL$;SF2&wIDsb;#*Be(@|Y~>)Y6Le$jI3FsfE?tSd)4vw+Uo; zOW)$96miSw@vf&pVCai6E^Q8H1tzJy5T=<44+U?86IE0gEEYm3FojtMjk_^<)=s;3 z;H0JesMSS?B0HyRiw}%e3q92$r<~@!hKB4jL z0e1Qw<$Y0IE!lT#+C)OCS>Ui8wy{Tr->2y%qyC8D-Fq;ScI^S>2N32r4M9wVP)ljqO71>X`MvVr3(Q z|B%KRrVpTYF~)~2Pzr7{fu!HcwpIr%hs3rzpV;}LV!Lc2Kt@iF(nYOc#+fOmTXU`d zRiOQYd+n0Ig>(gM#HWkBNV^*0Yw zE()934$U+1M^9ic4Lu@gMlio>OZ>yAQCen#wR8aQBTp5sNqLEH?%k3G1{Eb?Y=Kw&0mkU*-DNcSVj`baE{t?uJ}N!99r-?L`X|jf zXZn4&G;h7dPBm$FpU;tm2}C2a*YIk(B3M9t|6ayzL~Q@KJ54;KTV?m8W1F~!Mf()v zGvT*D$w%Uts^YL*h?al&aVp(53g@WVe@U4x{Hpy~1Sy$4CQ;&IJ{k)2{s?TNAxA~a6 zgw-Y1h_!j{s<~WfO>--C6Fv9~4O8A=5!_y#N*rLkE7U+hX5M+$rBNYu&e>-rQgMZ# z(*b|({xmp)dbDI_F7#9R%HBNnkBh&Y`FHG49sRySUo zuXY?bXv(13A0G)jsBE88jH@9e$;EBC!v3*HD~adNGr{s42(Eo;sy{hCn(hy>Y;Z>v z!YW>a{_j+hT~HjDz2OBmY#}Uc0^#_!AEE`y70N#4-V51rnhs+5KngYZz48TCh5!Ns z@3rqx4~4$L z>WaVQVL7ebm)=Zuy`m}Xu{51cOnRABal^67E)p)lh#BcJl@rYW_$@0~*Wn0?rkJ1h zSA#y>IxlV|4W6FYbJ;8OO*GJo2e3TrX$>X5FP=|L~6Y}V3d1z@N|AcWXG_L*8caQEn&~<*Ln_F}c*X-B}chRpl+My^WO#k;Iugk() zO&{PtIM`~conWCdm}pD@dt;kCwVEvE;e6BG9t}sl7!b>?+eW@bqk?Te9aF+)%+%n{xGS#OWtXP1PK0wpRZ-mH~V4su4Rwm*nsDN>{F@ zCHH;XANK7?Nz()U!v?#%FRFWzu!|AGtKVfa@!tVI!#2a-BL&zoZ>7f&8~!TgHm#je z1(X8!9|cZ*@py693%tPf1iR3*G;spu#`C}{K?RqO6S2F$-Nh^iw34-iq>`h(69+MUw8wN%{)0n9jdZr<5o(}MkbL$z77KHUVb&!bFM7!j z~?*91pl;MeIVRJpar^rmGJ= zSz`E}bvxn>%_V*4!-Ok`?2ex39u}5AhSIwm?y6l6dQ=AHZxqI^n70QHZBNrA43q2@ zBeg2`#U~1Y?mpkV;im81Ps2?}WF)_elFt28Oosa*mv^lT;6{Rnl1fbFf>%vziiJiW#FKct26EIe~u@vKhT5wl=I^Sl&gqu>5J3Z+=ny^v8~l_w~SYOBzDIS zZ^Q;AYsC^CR1e1gOucbjcJxdU;pmrflPFuv$Q~X}EfgM)kNv&eev2c0svWM0EZ(@(cPXX&4(&Ci>5JaUk2Ta( z+hr7l>XuxpP2qXDzdo4R0N$*9y(+eKL?#uZ2~%y?F9H|dB@(PkeRXzIH=ozNy!@1m z*m@9fo$5Tc4ctN-7G$T^JNq1fE`KUj^o;*kapx>S0dVJK)tzr27d>i)L|MbH_?Cln zri)(GR{C$F;%dH`(f4l4@hXt+?LR6b{Z+b&O-INE#J?q&GMQ4Cpb9Ffhqzc3 zI-M((yn+=kaf zi&n~9{#)DWo9BkDEJNwOBJI143>4peZ(g@vQP=C*8<4D0>bmw)FeRuXJx+vXO_!}b z$njxhSlGBp)Bi4DP4&=sH9q49`(nDnbsR&-x9&ZvUmhWaeCnQ>GXrvn)P^0l@EmRplMc)hkV# zEZsaHo>^^KbJ0!@VwJE5_D9j!cl!=X{{b%VUqsvrh{ylo(Hl*nuc7yfJkT$8aGqzI+Hf&jJCDHuH_?n~tp z2#s(-tYh0iTiGfVA-?#Bd)Ug0%)s-MjWGX6*nN!5gpjmE)f$w>=5jGPpQJNs3Y7CY zN={C0*~uLRj8k{JO+zkDOTKraC*O7;lyE`RF^^qKK8|}&^q|9nYhc}!$Qv;H_WvQ~ zZe3)a_z%XYhnoK)1_Zw1Ey(lc7k|b8j3s7gfSNE0%!6+0TkXfRRfjj;cW$iXQSKd|GDnqMNA8n!?IdXdB| z5Im0%v8P6z3w6QS_ex|Ugq~Ev&~b^SP%)V=%^SHg=Vw@PbmL`D{kJ8LypoK%4-Nu<|4z$TdpOj!{3Bdr z-s#qOpc4rhAQWtoJZSKO(kijIkcZW_G|5#G02V=7>6l| zKky4jv3o@;$(bXvc8;atd|#u`XEChA*_=^xSA;ORl5`B%pWn%4O3?rJ8Ow-WBJ+)~ zzoDU;rc*LGS>^>}P$vw~{*Hj+AR&36|5VbQn&c6;fY9*V5#N233FRs$x;M1BJ34Od zQw{%OGwsmuGzRSy{~?hz*wLBNX?YQ`8q`ECI4>oG`qKaWnvR0N6`1&DD z_s&y7fz&J|BA94uznYhq;zRqcc`{q1*FfNbh0l(>j%dwJ{(2;g71N>q!K^gBa3bP* zjKuk1q6wu`L+{P$8=kaybr$BTEGx%p;C+=s@(*Je6A-Mo_2gAJ~U&+r59q9Vg^mW+H#AhUC3aTY|a1oy1b96<;qny5*#U=r}Fxlv=rR% z(L)z~dZMH4s@ueQ9fnQRRnSE&Dv}^qaVL3F7i6s->Wz8}%f{oZ$}(wNo{nBqwZoQG zs524YMozE^Da|SxB`VmWS)jNOmk)~|IFk7=!^@ZH{YR8-$KQ?Fmv7UER~5t>$tcD8 ze*||K%smtNs0_-XHQI$rhOXIWeQ7pXt>`E8`*oop%SSz?3t^#!d9}%Pi1gcP?eZI| z36P=hSMc68%yR(e_7wPAb*sN@^TUxF)QAMvR~Ki2zB@dOhP6kZJrjLwZ{_YlkF7p7 z+hfhYMc&AgFu4-QcG+xN)VknrGj+U8r4mobp^c{3-&&_za@Hg7+n_?|xV&tf zo14f-4_Y@>cv&Fd@Dx^58}hUNk9UVCvz5XPn3@kk8| z``RhfSdRykQ61^9*&#>-3}LX^AOR=7tEAv&R(Y_3w;gac;0JK3_7^&$A-J&M_13Zs z)GiLLv3m@|&=(&>EFI=bQfMX=rNtWb(?eX!!dMH%x!m~jd6P!u5BGQJ?1$*+Y zsZ4(zJNP>2>)wncE}rM}3?)oqudTnO6m5$A(@WxzUR}JVsu}8|gk_ z*=K!;c3>44=f%e~A7#hc-PLaCausc#BPR{u$y(=}LFMu$&$r8#~1JNaprDJL;F& zOOXSq9L-R51|k__=h%SJ>h|c_3_R*B4*Jh*Gu!S6=%!QJs+ZF}ILyBzFg#@wjnn(- zF2NiRy7kEq5^Q3bLh{;|beKq+81v}o&9sz1_}YZ~B7PaZu)6D~YRaMKQ-}G0jY(xw z?F*5y^(@d~_?83E#hlb%yU}0Xs@dWqJFIw*co(y;^%Ye1#+>|(dINLMJ8yW&7EE}~ zj~SjI1%OQ8wQownaM7a}Jbu@96tXwoRboi2EO$iOUAs6gT{s$UW(QItGOX+9HNQ-E zyzxBvz+0J~1hCTB7)9xd>_miD)rLYOCHHBd&o{%tOOy-WQ^(hHGs`;mU$O4{wIlL| z$Pdiz&KDhXtQgo=(3T3~O+mJ&O?|dNOd9Btx6P&>9(L=Z$0LlQ;Usfqkb%TxpUYLQ zC!q(40bW>4nWoVO{FiUM4Zsf}B0bMG7Wj1IDm2a-A5A)KM$jGolgH*OK zInx`5(;dYuDg!o2kT0NU2mA9qRuG5pN+QS!lI`|+qAjj8XN_xI3j6uf#X7d6&+xm; zg^d&6qMSR>tK3g1Y4^2qpZ z@WS7f>~+Lf=g)@YTRR7+inreGZDqO--lM$@>&m)JJ^SUE(2@;dzpv4*iyj{eUs&Iv ztpkstfeV}gsWh`{)E-;EC28}li^Ywl$V>}Lr^G{5_Ui3JW_#fI2lx0pzO*n{S#Q?e zQAk3Fc_RdTnBOJdrm|~&cMM{pFm5{Q3qpD1Iia&}ic0Sam%l7s4bocb?ckn0^8j01TmL( zhN!lv*Wz7FoX@-tnT4MiJlc{MU+u1``^0=MaWQERlg9K^KWJEpl*4?wp3wYrX)VIt z1qxzZUgZpawxjQ!zWFWdlu`;Bmh@XB{0~qFHQoH+i`Qb&RLfZ4zQM7`>;F!krCG!3 zulsMJpiS>&~|mH3I=d zVS`M#fi|iEdBDu<3GM04iz4qztXUeCi%qJlx=xZ0IRqEo6*Oq?xQ;D6zZjG5tZz(g z{r@b0nOxEqQATAfnfW5&5kggE^}EFL0_`_xe{Ztbk+=3Q{Y|aC3=sRxk(q?&T%|4j z8(v3twMdB9S(t73#6lUaWoN9_zl+5;O=nJYy0mRR5YWvVDBLypm^$=VI>o!ZF9Tj% z)6)V>(3y>YS;TNT?pVNEv%3@KAvMDp4K#It3pxi9H|XR<>+z$10k&WkXzsmI2;ml{ zb^>c;)ZuNUek_v`2#Px?sa{?ShDzMiyw4g#0|>EY49(wKtH~>TzRQFW!p0uiX6D;a zqS)+i$Ofa1IcGk`)8@5`AoZhsBK6s5K{a+poD7bh+uBen)WDZy@z!}-l`kELQ|-+= zy-DBmRUYr>)sb&b|M1IOz4`D(VDZt+5k2OXIG}&}&H9Auk3sPb=cz9WTKv;GxB!!J zrGGP<9g$C7m7yrd6_wsG)Pc5S_OzStkIx~$v#-(_RdhWaEH6-(!qAYl3Tnp*;X?Tu zws}u5-xmZ+CJg%C{P`|gS2>;l{O?XY_I4*UASl>(jFxmQ3ZS06e>Ty*(JuJFHKdSM zr3gSTEYPNb`bs>9X#MPFe-LZ(p^rvoW+n9D^n!U7Ehc- zgiW5*>CC#sg{<32zN*p@5B*C9Wv{X$YJV;_xU`G{B==mt7X3hpgzHVVsAP@!I`K+U zJzkmmX9S_Ycd2I1uJ(en6U%pPqKGk6HG8rx1(EM-;gs_tSNjPTP6%9A$djZmn4H4DJ~`#Qpu9&zh5q1xi4-QpKaSi$Tzn-wp$6>t47ilRve*K#cW%YLqUMSYbivo`A=P5U z>DsIOYRHwdHT%Kd%ED6N#?SeAPJANoJN8ppB4l;mS;dPyR?l@R;keBNRctBFWbUNp zL1hd72$R7)?Cfc%sq;9nFfjl1Ne*f3;T_bzSQiP&aZqJB5Qd*}e9wWn4u9;SQCYPQ zyQ3DO6k4TY^@$KP29a*93hB3M`c?P(Svy|PaTy~`2{jk@aN-0)tt(=?<>3xWH#1~} z-*b!w^Ti)ctvfs0%nwt{+nHTEc=!*~=6Ld`Z|8(wNY|U>tOJ5Qt-jG0!aMmzGe=RU zI=t|i42Ii>(3TAf!o;Y{$tsy;fW2E+HNSRML6)ghgPHFiZgjj1l&{BT0UiPzZ1#12 zx2k;lvqKE%Y)_w8Klck)z0;YW`tdQ>E9WD&!%gSP;yRWv60`F;v$6_!(>jIx<^S<< zc<$G|@Cn0P>=^xP4`#ilwdrQ)IM_Id*8BJ-V(PU!Z-Q}B*LG=P4IPce)(l1 zwbf@O&_h--2xn7$T}Fat7a0(}P31Gl7o7;$YRSaO9zo`)m834|fqOeeO^TGU>$xl} zWkEWqw}wDzgI6&ix0{nh$g?-cZy^0+s0rW=XH@;72MzgpL*C=U;w?n?WyWz?5|5s+<779Um zJC;7BX8|#uWRI3WyQ7zXsFOC9@mt1!=0+{vUU+O>sU-mB2K;X$Mn@&aK)9VGMyM@I z3({6Emx%Tf3@jBfs2%)02ys z;3;OOIG5LvYBn3m?%u~atv2+~$PQ4ICR8e=O0eMYJDuO)Jlg$QD3wX@pJv(X8+$BQ zJc$6mWX^K!2~QTcZ^7Z9$||0P9v)L-TF1H6pMfZ%hLj_3b<|UM<+KMdX|vm=k+Jjm z%ZnLJz;nKseL+dD%j0HBOnytw_aTuf=@EjPspCJxQX~Pof&h?_Ki5O88*-3bfH#W!r3cRvhR!QKlN*N()>u%LkKF{dEhk|EpT~y7ss9 zemZDp;{1~*RMVWJ>s>22pKtQuD=aD3pQKpTHqU+0I*=v7Z=YG(3x64$1R^(;?KT&q zfyp>8Gj6KumVbVfsYHUBN*!D0b&bmX(LWAuiMUorb&SsmJkgE><6V~zaet36>S%Gy zw%h#2_FDNKnkY`MDAUFtSaT|(4k09IpbDB)_GUr(=Q|^=6q`JNNqk+^nd7>^%Lw zI}5B@HmnyylyQ}q zEQ$kb*6c8s@oM$kAoCdKYkl^2Uq2WR^-y5ydjWUybmIUhif12kk)c)Rq5GEG?(a~h zzNaG#KkiXn%X7}`)8T(vF&uQLSxs*w7+^(>Z>Q(DT;a9LQn_zVHMb5NIONAiLxIsz zVPY7=`W=3QQ9`fZf(Rdn>##>&Jx0chU!3@6alk#k{SSfizTfF`c~pHQ@O+C?q)fp5 zZ@x<$K*Pq{9c$86^iHm<+VzdQcln_rhDW(ZHaTbzo+_!~OZ_6w0uVDzcVhUn5ki)Agnx(?gKy-iosh+R)TRLseVfPD7~ z{NBtlH9>53+ph10+Bxt*tU@Xoh-iIomgo=>$RjL}FXEnqxbPM7BYo)=*z@GU@nz)j zClEfsm%8UUfgbsJLO`lF@#8qqKX`8q*-#u}pdI-VcnY2V8Ay%KOA6P@Ry zwrd4~ZAdv#%dd6-Zh&T%e)Tq`8Mv)d4P>!B*z-kpPbzZ|*Q-{33Eg7G1ic#*UW0)Aul??He4946*9)H3spIl2dltz@ zh#pQJgqZ6}dmF5+ZeT~1@B(*XO0a{h`(HCP@)mOD#J?pTuKixY{Vgt`f_nHT1sL?Ag?Nnd@Imn;edhKmJvUE9!P{)4PMJmlLUKoUWff7T&Fn_p46!uUo1X zZPWi#gKRXE7V3LhT}OI@P*HXn14sf3r(?z%d98w#~SU+Es3y~4o!otz)in16b8vVZWlyGmD0Un2Swi)Ho}K}?}p{32c~ z^%Efx96WmeJn5yPRzmK~{{cQOT3Zr~!-3B>HfXo`fAO^p08EVD1nyGZ9a?EDTAiU@ zzp(BCp_GrJjYeX{_QRMiR?z>n7C<0pXV~e`&2#DJT(|@HPMa4jwuy-@Lxc&S%k>#Y z@2C6a(9R%XSSuFvciwapoCcEV4ZU|C$yQ`;CWv7fP(}G$Eat1CT$9+nYHM7)Rq|Hf zPwCrqJ^4fbqd$GGWA;fC+|*a);&gzEDUy`@cvtK&ZzPQ7g8BW6K8JdnE`a4WROvRu z`VjnR7N`9Ai}VPGmfdw`HPR!{AHk;P;g z?7t7#RSRZ7&ZbJz+6Qqjnvxao6};+>Pfxj8N|pAmO)g3vJxogv>Q67;2{h8{3-EP3 zB}bB{-~y~yu^WfKH{RG5(7;mhny*5xx*S>n7%DZn5ze6ej}gom?{3LA=tQPa{n_*9 zSKEr%QNTzr3R7VI8kz|U`!H>7>9t~~gOo;nK;mDoDa6R{Il!WDPyLYXoC>XhYST2t zWCWMOeUtVDQL{1+_XcKt`${ivP%-gh8%kFEzJ10j@*eHJw!?Nohfvq{RoxBtYt6eJ zS|C8bZEd+wO`cRG-(d3O4rnjyrdr5oyNTafvd{bJiI#jF_JRu+4KJ!oq=VcGi$n9k z%kXlkZojKLJmnbFw=%Ebreipeez9B&hB!Wbr_>Yn)ckUMIym_LK8y;q4n5e*7A@Lb z8F0l1s{+7>k!h21*013j31lbM1P5lmUf`ErjnhI;9Awnb$=QdS=DIGvJ20Q4HMMA#sOy^q2r zC%y9@Yzi-ce(z`Do|Xf=aQ!-X{0V~Dja8^R=`bK3v9VK?GE03xbQ3tJmQPT^LJx1|3_a)WM*cxQcrTcXcj z__R;q%d)H^&+JXNMt@-Tc;x5ag*Z^~^zre1B&Lyxm`zEN+r$Za!p#?!ncC!Q-v3p(3Yb8U*~1u+W20QW zh~1Geh939F3+%9HcsnlT1m9W?@1P~k(bxk}o(|@btD+`P?APU6CF=f4R-4{_`KnP} z8MPA*o?J5j#J$pc@ZekvqdM|5viYT*>(3(1lUj&P0R^idr@m zb%Q1EG}gNxLgEMel|@#s2`OGP$R&cDQI8sW7w;Y-IZ~7EHQgi5+X`&|Z9mmXE2R&8 zW>hjLvl0aob^mrp5w7u?y{*}9ZL0~zIh)t)c-m$<@$2;0+S$#~&B325p+WSVd!IT} z>QxwsSz8MR|0NdTPcYJRyvj()(O*BK0A0Swy&0)=+=rc@8MBI~0FDUEJ|9auD0t`f zng>5d*X?L-3lRg-3QTf6+1h8sZnft3$0tZU0l#^8)TSM2w;>bl)_D+^2PTS zt}A7G)EM|ShfJ|cL)A8@wqEb0Nk!}l zLz_TXs1nM87-*&^Dw2a;&|u%Jti|5dAO+wb&hS;a-a4t9sp_nUgt;w;(2|a8VHtSi z)-tmGr1qSx;pCm))Y2UC$7wP64v$AJi}gh_+q2Af6CS@<_B;*0`?3eWj031e(MIn=;1$?0O}0WDyoCPILwUm6}n{>j?KZ(`Ru&tGEuv?hj%^z%-b&6;wzxU-()_;b%7%}v+K83MJ z%DZ;&aZ65XnQAk^LxQjrv?cX+pc1$$^f;+*2edll`(-9Ja{|)P){79a`2!iJ`7$`M zTPq&p*rnGr81={|N`WfPQu_qF!9u0-BrvRs?)6+dRq)A|;G%i$&Dy)!Vq@O{)^j3u zBYs@nqA8FV&WHzatdeK=FiCf9s}K@Dy> z)~u@g$@zz&BgBb31}5l%gS=t2Z@Eql6&U!zCbG#pO!4qIJ(e3$KI<>DTm5}rGDPY6 zf zE)^p7{9usnJ`XvEw}B{$g4$qWvV?t*CQH%rn4O*VXHMWsvmAku4d!VkUZ#`2qVk90 zzsMbWpWSO;m{=3B6+vwcr%l#VX~CBz*iINsbf?!NZ^YdRwa4UvgscNArE1IW5CZ7& zo8*JVuiC)Yr{rdeoj5VwYbsutjFC7az-&3o&_FL;G)5))3%`MO4N(kriCgAMq-J0a zmk>g&aoF8N(5^m2ZC#$+b8p@ry(I_{n9PXJpjmKCYIj&AWnTG?YP3T3oif3VOb!g$ z%OSivBYU^?X~FC-b@K3oHC8e%o|q3x}Mtc z#4)_q6%v!1d^hg=F2`j(>F$Y&(|=;~k{UyauFCGwMeVcH)h_#7$Z4Zzy=pZpY04x5 z>+r_ zTkNK7gEzA2*<3s997rOugf^x`bp^ymG=2QISo+bPx3`>UZ2Pt|+94Jo?D#P|(`P6T z80F_|DJirh)n5Xvj_^tlH%RkM`HdE3*|ETM}Etc^}J1BN#^um{p$ zHAxTj6fjf;1sk`w)TH3HAImw^3#{i>qP7P@2j{U`Lw+pb04cVYf?g+U3ZH~v!{9y$5z{LESh{r1yrDvM5F*X}u6{F} z!*G@P!h8x=_q$|*P(zENdp2`-k z7+=mW&!ueW&5N>Z+~#e}Cr0@IIuBqc@@ny`YFgtr3^8;fA$6&{LT8BuB$<_%X5>I4v>!jThq7Vp*V zpEI>-pu2-jG?+FIswTsWwzH-cf)qpHZ_ORr^dPD3aY2s>)$Uiyi%_rHoiV$Wh=`o^|ix*1na=(UN;b?bubkZM*C7<-TIbwte5-J zPfaRv9lXZ;J%5i{eWcP(lWhFOwz(s7h&g@LAR7nMkw@ezBW+GfFtMwDJ;BXBKBgyD zUHUJ11cy>bO(_k3_=pwk_>dFKYNBJW51+Ts%e9BGV`yjRC||uU4^BLQJlbE-x*mMe z(Y;*bVQcbsf8T72!(@h-h}sTynBaxrpESO)XtWMsNgw%@89cA88oR|mM#ww_>9>OM z2li`QTP6--<9GexCZg30nYMyoG5W?)Iw zvqMr_fqIX)apWn8d0;{{;O&nUyrRU~IHRmy{lj~KrsbzkJZ z@{Pb9Hdjn~jy0yImz9O(s(XMDMOmgJ03L4xiZNyld_&%9iI!*b43%(?FFE*-TU&c0c}{j8m&W$^yj_<~@!^94!lKv&=-KIzK-ikfKu98DLYF90#QG-- zq@qZ<<1jSK%jc{IX!_XJ<}arQkU9}jk7GT>Bd67M4N?m4}?NweHCvPLkG-u9NLU=~|zkT$jh(tQbLmx$^Jdp#vz? zOZbQVd5J_73SbPSi-OHW%1({|-b6o+kvIWEuz2Kg94~&B>>ou+hQ>8%5#Aylx2;ba zMdJB_C9hM{=Eas_M=fq_Iu7h}4{&_Fgb89Vr$U|t6sFg|LwoK(nfgSI7v!3H-5dSu z$2OHvA9*sa;omHJ`=KM3L(X0~ciCvbXaq!_9%5R{M<$Wf7@1KV$aD4SMfR!k$YpD~ z-&Db{C43Hq;^08FmMfa@3jLsJ8+f5GGe7}SNd~1i6rTjMyOdH^y%*gxN=w2urS?p` zK+PL&Z9~412H&>$S^(#8q(E#w8yzFV8>pg^1@-SURLS# zi~-5FDCavvz>l`>66k()@+HDI?$Vb;F22(Z8%fvzf%O8Ta#5ex6`#;?^OFQ>*{Hd{ zCi3-BSExOz1kq`g5VEiG`n5qSvlO;Wu}G*fdR4gF1fsmmmHtg6`oAx`9Z$-}wZj1U zVk_Pd@rLt0%8>hE=6W`h=C6yQ5qvg#!*({iVv@v$l@(qCDvU9qbM+A8M^WqClgog! zeYj*_!v29xaq6VP5XgtA(R92C`rhK#)85dsqHt1uMM!z^*I)d5LoA^yad1g^j2d$e zHPg!(!aa8&N$2!Wcys-I^XpBqPcj@N&Vt$h@r|q|LG#Z}%yPDo8zG!02-wJMlHwKb~ z`yq=pvQ^?R8OQ`gPX8p{OzDg2A{ zS75*?wh2vD$9NgDJ-M6+7;||N>bLART?XiymZs4N3_0@e=bS=Re`AGhEM~W+!GJC|)!@&9K5 zjN5lZ4Zg_C{xF{OPpK&L6a{4oIsQs-Nz>}(B(=H47rq^%Br;$|0k@7RogcuprMrOo zAS-s`{v zyJuo_oB1fUVqH+-Y9fy@6z-*>DlD15qHzwa*xlHm0iv;3vvAPQ@kBS=*fxJ?xa031 zTZ8&Y>ID{W$@Vi!Y@jg*hu#lP+Y^C1(V}|6czpt^ZyHC&zii@qct0uNaz_A_d--gR zx_G&~>(-7B$w8wq+}PyD&kO|<4mpL>_F8XV*bClR5b5XB`AiOuvdC97n92~4HV521 zMD>Y2tzA(|OI({?MQaf88afQWkczm0aq7~MS3T7RTyprtT~VB zs&GTx^(PG9cuNxGV3+yzcd2sv%^r*C-Kc5an+u}uY)G1zKCRA1t_)tlAP3I^( z{e$C`oVRD#eST(;LGW-odt0OW}ME2T8z%?HL9QCM{VZ@&BcGfp%*sSp`HQdLmNO&`}@hZP={R3o71?eL!<2aH5S^|A=o4uM` zJBv}4IJ)k@70n+TqR*+8X~(7;d}e-8&tI))zq69<6o+R8Y9Bu*61`(7eyix!6#Kw6 zj*eJokudO+m_XFGHxIE%+o5#Xb9~tP=8m}Scyp9aOb~TW^G21=dbe&sI1@pHOVpry zedA)~BPAYB3I(bqJg74*m|@a!x`%Q_D}ab_QuvQ2DT@+OafFc#_|sEfN|>q9vro|;APgAx5DaaD1AT7Zf-SD81WwjXB*^hDA&2Rctc3IpLtc4%jSP(0{= zXgce^Cf~megGfk9Hz=Tpv>-iD6af*C4<%hH(w$>;2nZ+$NKU1@V{|u6B!#ij%|>p6 zZSd^-!}A~9uf49__w~N6^EggTH47bZnvWg~1$L3bJRLfFLClyfz`n3hDv@yxdX6^> zL%d)ccXxIGa+S%aXKL!FRTMpcbMW(vGM5=Z@AH&lg=N!WLjHTyyf+y?_qQ58azu3* zq;4*a+cIB+95(AF9ig>N>_OWPaMK?SXMi~>-Z6C!%EDErfKBHZLs^G^|J-v` z@J)uWS1>M%rv-~56z_&?!o@^`8Y!urMoiW|7XNoqKTuds#Sj=D;Qr9te`3QDH7Y~- ztgiG&U$Dk7%%im2QLt{UbUCU+oV#N{*y=M>AEO0BQ} z=!u@sgP7SCPYlhN$X!j)1D3>!_~3iM?h?+42nga2$2X(;Rjq$~blQ3sOLzBv{866=b{~85*cUxx)cV)6&Op&s%bM?9rhN0$$_@r8LXTT4!{KpG4z$n+| zy%tl~j{6)HL@j!{R8mrt;BF5U>jRkMr~w38B6lh$ZAQ|?ey7gyjo-Lwi$V}v`)3wU z2DU2*90|twkxiJY+##6+=u)%z-i%jQwJeeG;U9__lvZKidF^y`W?qxpY~Y_3)%fI@ zPCFYQ<(ogw1R`gSs|SKhX6=YFAp)o%i^AVp9L-JULL*ko)mqa3TFadZmldhYiyV#$ z6T}!>vdS8<_CPCsExjumAQ{II=);cCPhpkW`CsGoiVEt6heE&ayWQDo4IKe=?AS+? z72;e6Dv<+VK| zpsWx6R{~I5;asO zlfgOs(qTzC!yV?ufM*ZIF|t>Rj6?HBzKsu8BDQo}`Ap`JS5Xe(WbDAQeksTwb7+0<3kMW-m#@T)suuhy->xsFn1g%nJNoI+OQD2Z_K zN4NC0w!LDAYc28Ybf%0lk78Ivu)pMxkq?)N6m`AJB$_UOF3Jme>2N1wmG2DwDke2G zz7eg;yUAB4tfm63$W(T$_sg({5A;%q%{2CwKax+HbzpI+YFeJ%``05m@2>#VL!NQ` zxQoANYyF06+EP{HOH7`nC|}7XKnir3)fP(KKMP2w7|BYbzxV2!<#mg%)WNt-(8{CY zQ<2x#!zubppoJr(WU@#lhd0W_>F9n9X52jJZ3g8~z+I@EuC%zOV7NW|>;~@30}985 zmD*_m@Elgj>N@z_`BT$_dzdmquZZzwZ*Z<>%3?n~Pe!GdS`UcN$1-MJ;+&7T zWM+=sgv)E1`r+<(icz2Y)<#q~SC$9{s|Z!Wgl%(ajB$&t{>ZrUDt}-IGT%$5jGsq% za8CECJkq8^A)H&$mwZ&x>OzFaQ1Eq2qf# zaWc;G;Qpb-pn5Y_#sP(g`B_Tqm0g-{{2gG{qv3IuVEdI1DQQCFtNHL}1EB!Bu+6dU zU2+J2d?$Ci)+#e5y2H)C2kOg?+l$U_4-H1{#i_kg9jQ{&!~qilkDdPuf?XWWhTd#s z{rM!75>UxkV}lL=E|txExJu%l&`!v4+Hc145#sxU#WC*snljA}{|Y)8t{;w9N22=A zCKKunl7aZ(-7V!0bC9IYVe7X)c`%|kCLhXL=C}Z#VA6fwLRM+*Z_|p58ePQPMSVu$ zCHY8FB;nAgFW<3t=pXJA(ctgcDkD*grOi;CWAdO=^{H8Ma%+f2hns1JsRjssMIaD3 z6}tXu*9})D@)5Lq3De4-lebp8Rz@iM?mtnmGYN{;1tV>!JbN-c)oLCH)5)@;L=11Q zXv<()?={wi)JQ9Y^+x*Ji6?UXz?D0XQCCR+n}Led$Bb9>dAZGW2slu;1-#cR`G&?+ z^=5wWmXF9m1w5l#pPsUvtjDC(!P59zR@Mrp42&U#pZB>s7Fy!~^1uLY>wrbs?VZQH04nM22V)9a+ z;iXoV$C83(tb`X8<^H|}Zs@l}<;$!V@nJO+% zx9WMaToo42=Fd(<_N%3l^evJZy_UsMWla%cNZDnPlythqf(wj z41(fckmd9gi#!aX88AC6a_tNeKGyxSVH#^eUb32R#4Br$lK1l*%_+2~TJT0?Z(Z;b zGlFi9nclpRCq*BX)?PxOVpub4n0A;YS_~L8eo}%9{GBntb^JJTKdj5kkk8UjBdoy8vjRN77 zB6^?NEhrJH%GYIB*L$j!G{!J}LI7MTn(x1LVUzf+C)^scoXQ;dv?JqBr%SJW1mMD63jyae*$H^&(w>->_7msdWX8n5>Z_mO8k zqW<6gH zTQj~aZnvw&78uPFG;OFqH~P)-&Sjt!n|i=XKa_tJ&Vt@$iK#k?-zbCFn2&kJ zn^%g?f(t8wOaIWGe{{N!frm3rq;)Wd_{UGjhhfOj1dxSqxXax%e#98y={KJ*sb6>! zhky;uESSIq$Sa!M2(kk}$TiI&K;cUE;_Dc5f-4{!7{X1)4~9r`%kRdssfc{1mBT)g z5;2HgyO`6i{7qN=We@%A+p7_0F>IW-1>bAU&TmYHmgcSF&IKdIWg%2=`?=)+=QsE> z=nTIMm2q*7&vqAZA)qOyrt23ii z|0TKhdL)7BqZh-Q$sW~rl&<=>Xjej;KawAU_V>T}#1Si}eib)r{Q88l2=S~9ate7) zFT(YRK^1SuB2mnk4Rk80_lW+g@T?>e5ID-P8_r7~4ag2AYhfmLjA?rGe4?%_#8NU@ z_{*W$_DzsdiT$H3a5UlWgmpwzo#V@o>-j!GENAzT0CY9kLbrGJ<3CpkUKt1u%rCz; zN`C=Z`{>`ppO8&D`d)9l9gYvoP0WfS->JIaLF(JeZ)Ma`PE@$L9)Xg%?D9Ah6_P~u zI6?yTN$?8`&2&D2Mu!DgBrJt;v$!m3I+~o?`J%zl~Ug=#L}i>W;kQnYADn$MNd` zxf+t%*dHw|3m>XUJ!|@5O%nU}0_ZX|P5x4x#h|yuF-Z3;98Y^{`H@n!Ida^61rV%S z<|=qap(1j}BbL?7Pp9Dfi{9g5+OHVFwG>j~TZdoZ?@GC=k+%R5{z9Lt!5CBZlgv(u z)E!=7ZqcHy1s=+MZGR{Xhqq_AuEQNr4O+eVT~!q>QN6SNK0aJG=`m3@)0v?3mnwUo zB?bw-TeYsp;Pwk+=chD(!ZV?7vIVr>@8N1C^Gv>K^TOT)VlWPi;X`zq&?b<4xo(HbuaIAw;7`m_ZVtX$56?r|yKP0jep z&c$}oS&GgQ=(=JQ!XD8hzD&W~x&JE1S^xb^q&|O3q$J|qv+t_rcD)N4uYJGa#10<$ zKEY6d^3#^si;vj%twrD$*C(=NT!>ZOu}`v%r_v>FlztXH-(7kb8G3@y5m78eVlzsL z)LyQm9+)7ilgy_%GB5!o%441!FIXJ5lsWJLw4uLB$taEIy8)NEHEO-8bj*P*wqUH= z_4(&r3QOzem?VY={>IwD6-LaSDVvB}sueUNkL>r48ma6CH!?|XY=M!y7ZehSQi~xu z?G-Q0I=&n292%@R9{!n(TjtUrmCjA!y*}0xw z#nd{^6+CYK@6EGy*)o;BYb^m6az|z9;CNW~*X{?M@EN5WLK%wx{sp^7AcP7nK1BB_ zx9G5jpq|?SFTT?wx$(wk!+Pl#!m@BT!Ca_$_Xi)8}4$|Z4qQC2Zv0oGXSEZ7m z?G7ie{rJ&x!6~8FT| zKmCx}{C4!Q2HCYo>H_oP+InDqj0z}BYwVqapnEvr>b;R>X~@d!P*X0Nx)y^Dit#g1 zS!}CKkBj3(Suq8c{SK7&IdbdltU7iQ>g;vgndeajpw=-lD>e)C$Sz4T`PN+joJ7?? z^0wVg!Jj5u=zp7*qKI(+GoLb!Ks>f!hA zqCWF&Nvr))yFT2u(RrB-X@x#L@r>fvP)}CXyj%My$N*{V>0Y+_c>CPC(vX#$e2IHk8o+GKhpW} znC7=CD;tg>*hNSLu!m4AM>uO0srw4~!qhhD?ozmDw7uj6+T3Ug?FfDyA}Xp#Tt4gMhe=lpCq8lBJj#-XlGcSz(O z3L=@%BwjoeJch>%cDa=`O(2?^0x*t&$`S&v9#~{S$A{ovs3sX`l;qnt)Whz-AT34L z90(t`!F3v1RV(HPmc7UE;DSx+s?O~jBIJuu{q{5y9 z9(3r#kdU>zLdT-|b^L+76P>7C)fWDZ|I{X!ze0BC`8y7d-JZWFpu&^8G!|~b1E{s0 zo~ydJeb{mV8Gch;#KALqgr-I_Pa9?WxkC~GSn4_VZW2r&C_QLHDM5al|5|qSN^9%E z+kGw-J}$nxoFBOKDL>KE`*QqW0N#ko7soqqPpsWN!fp|gRvgKmHwQt6_3k~C!Q8UClgfvPFo%ARPu+s#Zb$Dwp~^hU@~`x0o>+>66VuyV z6$kshH&yQe8gW-?;rW&;ah+z-K#OFL65pBkqzjw^(1~rgYHz;Lu^Kmk47e5LaYXQEB7w z*rG5N-hxRLd6;7zAG8TW4?i*SNqyrWYk034RWjZ#!C=i0CC>NJ8rk2cem-b%zC!KU3-McJcppSI zEbJ8=$)gqC z#pd5}J!3f%m@%(zC6g(*ehNq-Ufc6Q)K+MF6HMkZ2%i&Pv%vwZi7oApvxqNd#J`+T zKsr`@JW6M7_+i5i3fglQK0b(Wv(@}KFuy%!hs?Z<@Wi1;iCIMN?)DPb53BU)?0Jgp zGu5tw&pLC!K3%>3c5k{)vGLkN&92SLf-d zeuz7DGqC`;?U2Y|gQ%`iwx{txUdpLUj(vjo81Kr50^NU=6JqGlQs5)8r*}=cwm-E3 z*mLF_3*<*S`PIJo*$KlWKOTz&3Wr>eafS9jmr!tHUBW@LT6e6eNOg3~{TI=zdIR3LNw57@2vf9MsoCq9r%C~$cfD=bou#tZ~GT@xQrX4J9jesXsg3< zKVprhpq(x^z=CLM{@f0E_g~<2p!jC7@NB{<{Rn8B`kO~D)TeXhnu3^}gU>!vH+DYz zT!&#Oby!u+_W}E;hjRV6T5hF$Y2T^lfL#0i%56<@ZolIKVlyxuFd7U)P&;BQ4%dq1 zt$_OR9S|GVNd5&J!G6&Lu7txq^3~nhw66K!cnaRi&ra)8G7tjyrWlO>#Ot=Uj3oqL z1oGt9rZgQ;ES!ipi0`YoS>=X8*jLuoWSWT9}*5Dh_P;hIM&9~j=jD^iBo zoSu;RfJ;rwg{az~01V5dH3d*TETT-}=;?E$VY&W$A8@d7Qx=4M?;hq?P6~|X3%lco zy+*5SL^Lk94=9>2q9*mSQwFm54U^~P1B*}CTsK1>B#_yCiD#7@ltn2XglBWp-Ss#Y?PYYLO7=-i2qN( zY)KWd$;zz1=35=~$)>9Ema1FKR%EgAo2;@>OOFD!o_r;G0~>WemC(Jy{u^2(Ats}i zq_9&mf%D%V>9QlK<9wWmdG8&{2ABII?3WdCnEqKH5%--d_JA z@oweGc309)V#Jf5dNtzBA^Dzal2~yxNAFHHtLT=;`@hMQOkpe-J>HLung}0#L0hJw zuKrHh)UhmB%Fj(vwm6lAZUxMN{gLV^w#E5=hTYxj!F-5*Doy{TX9~kAB_M5`8ZA0{ z)x?XOG3!Oyqh_!k0!EGBL&Q=4p9KKVK?xfW%43?%P!~rpbSrzGeAFelmYSFnQoz*y zX1y->@pMBq5h6TD!W83G&|*i9_F0B{oZ`N{Vnk;Zzvv?a9iRM@lZjLd2kg}9y_D(_ z#qPAKWgR?m?6r=-A&%H^YM(4nb?m>FuO<;F?W?(VA9d3Z)yxpSL+wj>x}9~ur^2Yu zka5pdnG1jPj6Hjf4x!OXv-QmIU$OIXIVyAw}k9OPPwL^7; z{M%T|i9~Ez=kA0Kok=zu^&@*)G6oG%9?Fc0$227TVK*ASa+2MG6iVTQqt$WSr8q4L z;gC^l{%V^?vu_r033lx{1N4?a1fdM3Q$|6dFqQT9*~v81gU3>Ol0~%}EF8gE?;bSY z#do`glA=rgo?^V9FB;=4fSV+kU9SqxI(>Z>4T|PgL?(_TB%3z2uBixu7?P!7Pdsk^ zl?XNM|C1EA8aLh9JuI*&yi?b0L8suA_}S8`5qphul)|o1ZHQn9ZYcZ%pr^iMs7*kt zepL!Us@)Ghr8WB@krN-ge$|KEV?Ck(VAdruiT0=^>6u!|;qvYjq5}TrC+$N5g__h; zOt}Ygh54^YeA*G=koC%LF&NUW{1sgFs4V zNVaWQ*a>A^EJ<^AbDAwU*S1^Rs{cp|BNK(F(hpKU?M?tfxW1d@Dp!xL7IaE-i=Djg z94Owfw#`KWy>Cu+I;f}loR)k(Zyn*`z9}oT*WWRD`_!bj7e$FboHosr@94>{S9h+m zXl&t%zP}=t;!zVVcCtAN;HB?G!A#f+wcaIL#4&;{M_i|tA^apZZ-N>E^ed0pJa^;= z2oJO9fZ10(oiFibEFiIA!nO%A&G)GqcJ>pyd%uDgsFTuwDM@tx*)Sj+N&Ui)485S ziK3!g7Gvk(`!^Ci#b(yYC_f*?F(2vSXb3YFN z?#ni9?nmSFRA1=5A_P~Z+0M65>t>l|W$KQv1UwuM2ctzZww{f?|DCZ3$0kbt{R))y z!n=)x5v{9s$08O1q*smIOOk_x@EXYy$h1B;!}nbY*R|ADOL)9L=S#qAiGRWoR&iw{ zxQx8aHGUo7zG) zqC4E#v9+ur+%GGRDJ!s!&bG-12B2L%OGB|ICBk`6Zy~(94Z=ZY+aHR~9;YPkKhj#K z;)x`$?T*6f)^lKnfWV{Myvo9c55w57mLpCFEhQbu1zM2Jv(UCyxGt>ap^ct@LCK4} zz45K2nV#rCs}f-@yX9Ze#XFanhdY@;NcIT~bGK z`nT=B5GMizb;z@8LY_-&Fieg364(KAj!=pQkNyFFN#d9!5IzvRlZmaFIcLmquPz_~ zp~JToL-K--t2$yz%lE^HCtYSSp34?H z7GJyQuo+m4;dxclP24oNI;5Qvl|-(SjJ{ik(0{|`8=Jmp@d$rTbJBw_)`v5-6XyUgp1_IRk^$ojAv|72nA z#B>z0VV4sp$nrTv3eOoS`FJ*N*4SX7oj3ITl6^{p#)29C0gQp|WAR=+ETFh~u^4v! zENKpN|7N2o;P}?vrd>7NnbOgy=COKLD*}9uy#@a0bUWuw#z=^u#}%WwXsJDq@hz>iF8tU7JLL z2nJCexg)4>``zshs-7zyBN8MEB~NitL%->LcJW&A?y}Al_hwwHq*oRxa{SbU*lCoZ ztF4BSLXT=||1PqoKO~=ukmR#){x?dArRm|P?JE0$&D(-UfLpbm6=zb~(BH(F`>U4H zj*H0m!@`CcKX$Yak?8Y8m8B#oBv`{E@EGpa1=HcvK;(<4u=K0p){?v!ifGi&R;N$3 zwtQ+-U8`7QHOF7E%}<>5kketqC(s`alsBO*E)Wa_!hv`qLB?pRh`opzzBT>~BS}Z` zK47MOJ%{PfZWu1^bpp7Djw)bib~OK!2+$SB&n^F?+gC2Kd>J!FoH%3cO=QN3m8 znp*AS2PWrK*^XO3xDg?|r$Cv$BbJll9)5vK^$>IFr(_ta&}zVCpsM*oGVlwsw?P0y z?m@n*oUs~uEM)ietxZ?Ae%h22TBP-cyq6(yD?V6>3LnWW-=jNG)8Ssr*+XbrshzI^ zr{LU9&uY3;{vLb0M||(;cAC)j=<@GCj00kCucIB*k0skaJC1}M!fV2D7ug8(k$=Tg z{2DE2MX$WfcUz7u=o^&(Um9pMua6K1WZ0F%M-o8cpmD+rD{fZT9~U(`03WE}Khh90 z6SwXR(7$s@?9v@fI~Q@u2wd?2{m)EW>=3cbZ?x4ujZw^#1TkL>bZlMEe>61Dhw;3` z|Deaa$e-T5Oo8KBA>zxckEB1_6ePGQi&$PJrX4(<%Je&z4q|Et2%v@g+wU=Wj%*!) z_;H&ja+9xX5^Y@mnq&r-HA*knzZV5(R@;bDYLe$!+hAidevzqpb|Y-)c5xPo8k5Iv zddN>o{U4dmSwBrmojyjNk8`1bc)ujvD#xMCn(Fz>MGW;<4*?s1rJ89vTfkMjD?KG_ zh9+NcXY*PP{oBRL$a5w02UtuQmRa|}=GJL$V9Y_tyQS5*#RiB?R+m_Rr>OL*&%QdR zAmJo^abq67I>~5AJSf0s_edtJf6jH>rD}Vl|K{KQ1jeHi5@bs-r~=aR`{QQC)v|Vag)9*jEf5>nr0zNYaj$iP>(fGIK-T#e|xso#C>K_qpgh%IzO9tiJ&lzZs z0M(`Wfgi}6ssKMXbSeP~m!A&CVZEKnG$aW1C{k51MDy;9`ZMsAkkmWeHe0?q(liIC zQY=9AX3&(`buc?@kQ_W}bpoMgxK2x{^Qbi_KxR&POFs{Tk$#nAc+>gKAJf;b?$#gn zxLlm$0r&N|-Lz#aFn*9JNeCGB?DQhS+9P73{}+3{%E|$gK9ou+Wlhz6RCC?9<{qbT zjL_bbLmK3`FY#NF6|2dq9bmkC_|X+Wo?JN$YOi|)WIbJzt53?C zS@XFvI^YYF_kjL`kGE!ko^cTmG@O@6F8r&Oj6y$H3Dgb?k5w?SYyKXML!1{ys-)!R zrbs6G=M7%FBd0IV?Vc3GCNxwEyl#8u6@E;tkMJ%siZfodZxl{WQ!NbBv2bQRJl^M zJj&>s^g^7s+OWEEOia8&Ppx#Bq9iSlqd(HX8g_td z``+IB#~q7gKf|^lTYTMnPcY(WC2%b8i{cxs|HOTvcbsHXV(-j+gbT4Uo?%%dpUYL= z40JNrOnLzk!*JJ@^eO3b)6M4;j@KJ+&5s#&4=fIqw>5~0i5*CHKvd10tH{=xFWOVy z-6L9Wv;2D~k)RCrsH-lIWs~4N^eXCSzjt@nROe8aRGwkv;kD>LcSY}=4t8c3qdV=n z*qME8QBB!n{Kk}M)Oa+hp}yunyz)x&i`3qQwx^h}Y@kB;W#1fDY^<{h8`rC0EqP`> zWp|^1;eZC{yffqUiosQ^Zt(3!P<>f&Gi5RTTI_WPUR=iwdIDw=*8rV9)>uwA=RESlbdVYNN2dTl|~pT z_GRe*XrAMQ&Mg#Q86A90#iDMpM zZV6xoTP4R*<&A?A+RQk27e$zn$mOHrOmaQ<1;Uzj{qM4E^1^cC4!(2lpzP z;hhzcRX7gs6hFb%^a7qkrj3w+?OX`>GqCGB`6AG7dbIoYHK|TbZ623rrE4(ZzTh*i z`gc0DfVWnr7J53v&0Z$=Xq4LjY+E2}THFlPVWIdZnjTd6!tE|Ptqm@e}6=#z&o%8!#nL8t)WF@+6wgUslJp=$Yp>A?cZtu^Oa&o7V%237?AW`EvAhNuiFs`Kln5EPJmucq}>e#-Q_ zAKJC8j%NUE{xd?Ai#60O#neJUi>mZ;r?xwpFs6hqs^51zArBe6Y!>Hq4Rx~GI+_@I zi2JzV)^@1X^UhGJ5T3N}S9%){RTLDGz_Pl`QYkj|umuhOt6NfTmj}Jo>PS(~huZH~ z!=?@Nx3?_J-M-Rta}VFXI36*h3ENcQP8)gxOql55bNkfml@UZH-L+vrl^eIB&7eK3@Ge{goI;~?-Ba;0*6p7gu> zlOR+X@PITcb|;u-73>Li9IT=2`qZ0}-BFvM9wcYx`}@zkRrfH%$qkMM4Kpy$o@8kz z_QZtqlHz(Y=YC7_rF@SHXw+uiJSr#bef-gb)|z>V?nI=0br>m9{337JTGg_Z44LTo z+<#cGuy^xJ0#kqX@;_?d?lZRxN1=q|51Eg-t(Nam)&=}Qtk01Ak416;Iioggs6&d5 znMALR%AR_only^n@}Eh1W4QYb3tDR)y;r~QrZW_UDrD&+*}ScGO?U+sxaifjJ`h_* z`K#@(5HXn&>oDw31$d?%zbCkjfZQ^0V`!Xci4Dk7z>+v(}(vx_@^{q~81 z%jv@(Y3X=zLLS(d#6B26unreHzc92P5IAG;^x*9kLgCWBI6d zIHPtQ(M^JeF{Brts^f9e$bKa&4e>y|cKM^nk_uT^m!=mu=929CdKq&I75F(*)U(Jtb63|9wCdYh@#;fMPb3>S1l)6E=L+Q;cwy9 zu~CYMHj%cm?Dr_pzw5VbzKY{1z53=}TAtyx3j+Z9h~a!vJkw+$t3cTMw=8o4Y@Z(! zp8FqWwl+Dv;MaiB#`1-I9dUs;0&jxw1+ADxpH3yYl6(#)(Os38-TTz8W~b@tj7O2s z8Dm#)myu^3wp~udD`hQ2?2qK(le*w=obM<46W*OzBIM-m0_ae%C}dg0-N$D3@>PPy zlmtaAKZ!94A{p_PCGLlc=`Y@22DCR_4w1@uETGXc72G1q=~(4|`*BrjNN zZ-^$BiUZF2o4-G1bvJxwjE^rz-ilmuaVi^fLZC#idKlYZ_@r}3ZyaI5K|`C!G?|Du z?CdnSqRkHLgrARmXcazQ%UeQWnt#;_CE6J4naTN?O`|AO6Q4(=dk`z1U^V8zn;km@ z+jMT^`?ro<lTE=$_GV;!eQ$ zYudRUuI|%KJyQesO6F`Ip37Ii{gD+?LM|pJ@b56}a38wjo^rw%-IeeFa$TFhUb%ZA ze;dqotd6>_A~g0B>b%j{`Wx0wMLsXk%;GZI_>5xN86VVK%lAe`4y7+Fwn&?JAPcFE zZ`2F@d<^ipeJ<917)qUDs}baD`y#>**N+48MJrBprdUtWsJgBx+EKz#(wa>Ol=Egj zlUAL;0>4Ib?eR2qq94EA&BkyF6pF~f^^CN@&H!78Fx?ZpS^|){G~PpEz|U)5VA524 zk~Rt#a(;brH0fxz7MQd+$xfy7xcrK<8tS9LCNtQR&(RAwz);@?kGJscDJhL2+6jP2 zNy#6$e}gfn7ugj#o5e%tvP(En)e4?3?j9><%j8ljM@r0{&=KZGmW#k+D?oc~~0cE3rwifb8Oa2M3_D~7Kc_7y*5RMZ#i-quV`O0rdMLbGT%?jmu}8k zov$x_=>`caKAG!KgWULsgV#BKaBsL1b80OkYS+Oj7bBL=gP8~`9 z)FxF}iUE@*@xB4_!aQ?Z39TX3&+ESPG5KORsbqjkjs1k1^jQ~CVXkgJCkGnwyl^uODnn}PQqJ?n6&{>f_iYSpIha~j!mp&{v|A}5HX$3`d>{)M5EkIlj`W9FQk_?Du; zjoC&H#bOvT7a}YQeZ791{IjND>(w*v7y!*HLP z#mSv@S-$kA%ox4$A8JW_)~`N##*M&-i{#26(S)(GKaHF0G7%|FN@I&6@zk|ppmd>7 zYI>z`k37UqTlx9PyKsY!esSSLCw#{++yFcxx9{?$qL^r&UeM}_$LZGauiFH+9{_Tl z2xd2>!=C!HH7i2hj?TOxaCxn#=yjtiNSuan`U9fe3Y`AsF3|k;ljf_7jRBx2!V4?d zO%d{@h%oal#d{B^y|8rK(EQ_Cz9rtIfWaWUl}#ewx_lk9GYqvNMUqm z_LRDewa#nZUawzkb-(hgaVQ}_6jJ}QsH6L0U0sqNqQ9AOJ}8D&kY{^vyGiDzP@=SC ztxJD&Mw7gwyN7u0pXSgl?QUn6oSr=VN<>Y*8_wyn#^tqPY*bG+?R`#c=u7#uL zz)EkL;M>B25;;$1?9K0d$4)iAhFhU~j3ayZSo&AhlFU$dm0U5hiF^yjxqK6w&&eal(_f6qZN04}h%@E7>V8`=LOJzc5ihq3-SclO z!fV1da1oUr_+x$RXP`QI1kXbr=;ToY%Wa-Jp*8%dTNpdT0n(V5eL^?u6SV{!tIlnA zzZqAec-!VKrtup?9R}8t+5BbACospr`pZz1F4sh_4zX9F_UhJ&F>!}?c_IA`{{4`c zB=BL7dtdy`l}MD_k7{RPuiyPf3j>C+W8Nqu=Czyq5`)|yzlW+|d4kr}sgeMV`LR=M`T^oDP}wGTTARR%qCDjRP4>38NP|5Yt@eispt7^oq! zSbe+Cp4-n_w=rp-pK9p}!IPDu>GW7$Wh7;jq~!xSl-l> z;YRhfSUL0a;5W_i(2&)a(H-G=qp}$<(L3T4>yP(9%>R(b(wj7U-Jd=069@S7MRV`A zgf|m_EIcAf{gr>%NuYT0-|t`VpKPbk2gSHM-Nu!bfYl0swT}C` z`|E*3nk#6P{0=@^^NDJoM|)CwkM59SRL#<`BeKQMxJMG;>~H9Bf9N2FPc_l~kvVPK z;#pyIv}VjSgW{D-K9iKws8X;ca?sT%*KNGR`DwSev^=I|t{5KLlgQTS>#oJ~x<@^O zpWkeRg{{za7S|q}<-B-=3Hy7!mXYoK3Ux`4v zZAbVOp*mTVM+5B0Z;QNv1SO*CnwMw$YztzJ;yy%NV~f1Ge&2d=`K z*6LL$JyCelHfQxYwa-^q@4i|4WPrjuyT1V~%It|NaQSPE?XEGmvuD*Qd|Ur(1Ih6m zC##)lJ<#*MTvD3hJLZGyMC4|e1=4UcpZcP0JO6;vv+Pkk;h9XxRb`S_a6-bX7u%JW z>pItKXE^y@eVV5@4*2CPcZWZUsWFL=##7F zor+-J=@sTyuXV>!%v0VMO8NFjAatOm9#)X?>-L|&$(h}E+6{QGWDHX1NFc+Zf_6bs zyn=}YyU6Kgs`Ltrh4=E0i zEde#1uhr>CJt@EUP54cYQv(G*C71EPI;Eu(+CfGPhNyZ1Q)HZO!|f%N-9t6yEOqI+ z_M^b}aydx9N_0-gs(gn%$|JgEFC>at77a_RLrW}cMH~zAi|;HE2^)_dID7b=2z`m_ zt^7i(3Bi_G5sdQ>+{xCZduYE>UG9_8Ky?Ma1okH(r_1h~m`~0=Z3&xX6`zASLX;Cy zvNbOj?D#q6=HZ5+lK}>&eicu!#-FiYO=XMMK0)}SKwk$k>4W{edt6R;6P@&ycYZL# z=d?IY4zIKvmnce@^1ckf0klJZ%AT1v{@rpKh6UVGV774%aH#pWPGnGnO3VF>Q?D3Y zk>Z&6dF?0gb_2pI$NyZvSCArSD3?wW7U{GX;@69ZsAIk~QgB<<#tdP2^3#W8OP5U; ztMp75v$1^D0t%aZc83kL!^|XC{|C#GzQqSXo#cN@|4i#1+t95*Pm6CxX?*G zV>_I{KTz9lYwq!uQPI`gtu+QT(Q_<+X0z76J-N>nvarKPeqSG=&#!nf#;RT;TCkg* zBS2{+y2=;#g0=OlTdqxEAvG(ez1n{OlE7n=AbHf=zs?J6~nse~+! zeW^)c)b8T%%eu$KEJlo@OsfYMB$!sm2OyGtrrTO9ZbxemZ5#`t-pyKd z?h*4$<3WK>IiMiM;f&eb0lxI!c}lv*dNRS4*F%{epp!57$EnN4LcMjZ?yPmluNE5L z=Tm5iWiRRNy_7m$sHpQOm~hABtJU6VOuH4rAcEFmFgdxw;ft=78rWS1Q{J$cGm={# z9gGgL>YF05XpaKFiTPZpxh!O5AdPkI0Z1rR4PAbWZv6TbJEC;;_%kbB1BW2Nk+(8T zfIbFbM?izK7RN_!ZtwOb`9ThT6CeSxRS=TDpRaW~+BuevfvT%d@oRYL!!_2v{Haor z(w7g-Z0gI79;f~@zAabBrK>tW<~bQ-rQzDXDLW>A`=;F7b@BP?7(I80MUBg!)fQOX zYQ=8_69vz+t>O&w)PDvmKj3E10X1z~;{jsmnfn4CxToJl_j;47-^_W{wE1nvbLF^a zRLg`ye`++f`mTCDfR zEq4>=o++CDECkM6tG9#63c{^Sdz>Dqw*6n8k*oI-tD>D77EUm4rFW1m0m z__ycG-0@05zS!fRRJ`;z6AOKT>^E5KR}Qg@ z33%JbtjQIVSD74=9=XHKtLFYyepT-4{lhKtL#wv?UW@ww2hu<-zsiVgv9~)?Wi0yk zsnHkZS^_eKYIG<^nilhLXuwj~uc*3{6#U32YQn)40y~4xYr4@s#Pu-uxL&)>*9+G5DZl=ED;-3fE?(aL;i>YlRClE+J(7!a~KC+75TPlXGxV8$( zA6>2SirRq^mlPmfT1^w|M}J-Dx^rnxZ1K-4w)LKS6aXVnHmO`Hdu&KQD6V#GoFVtU z-iXmx)F~RFYo0Nw8bf+@{rtJZ*+f~zWo9&jEX(+`&vWlq5&U+`eXjeD#;eFx@8OpO ze`r+PfVC&^T*12Uif0WRS6`ko_7_!#`_!j5j>wQc{4f*tmUwG>y?{S)&+fR`Qpm z-n<4Wd?_Lu(8s$Jz^9zB1))$I6-8iE?jFkkYlwWa+(&PIW&lfxFXZSm@S6AcRbc6B zjl~62xU&)4vhpn>qx^g)YBa#TvU!cPb^9LT-U*Qct!U_J&cL206_AN8h}5R-eAD^4 zQ!2EbOq#*I4#$W);`@(A>Aq{;!&&C17VElaqbaU%&!Lv?jQFA~iZU+`l`f7AZm0@{ z{R>w%dgH0L+^1b|e!BCW?uA`N?BfkS8U=vDRiw~&Q%~Bw?!Fn8JX{F-p1Q^9 zRO{kU9M%mEz0ax`yR~t}!;*$8+>6s_p12u%+d1H{pK_*BNPUtFU>}jP80|(=C8!6X z#h#2o5q;bxr*3nS*y}*kVc~6{cS0)owG{VxY&~PTyG!Tj$1w>fa<^=1w$!A91?l;i z{i{s-+^ZIE>F2Bm$9V3yp89Oid(A1)5+IyaXHG>r#=a7{q-q$ zGAL}BvYb_R3l$Uc?uB%zNy&9P&)#;W7xpd=}A2YyWupXh#-(e7rA1 zzB;)ot{Q&$`;W&8e-+0<9~}1>(bN}PoI>oaBK95Bw_ykoCcY=YUiIpa48Bg^A7C8- zJGIBn{uDVz^$I7!k!SiI?s+P#oeqb^&r~0TRdEORGJ&=g?rt;QO^j(b{c z7K-e7qG<@jwme7_kJ4@^HN7>a^zm<9jR@>XH8_Y=p8e0w0|tNFJ#5W!y@vzVw12A{ zxK9r5v~#rgX9IhUTSeT1J==Xy@6pK*qX_K)M?3V{Zc_1az`&pmbmcF3==MGN18 z|3!8J(+!#fC_&ugUV4Mi^9YyX{*Y7E&emfuaL+GT0?To~^{WG%YcX^U1l^Ud8ov)j!_d6cST4P8UW5E{u^9{|6i-Udy z^+9=li@lr%`$0v`wx)>M@>~-Vyf3~sQ5@k0`hPjK9&>5(4Lyjo-IdBZSBOm)+ij z?VpAF%)ZWET#u+%7mFq9-RJHHhBlAX_dv@gDG=&adI5WWpJYHiR>a>#9B3c0$D$kc~NwV)IN(FNN|KQ{`N{!sYyN+)KaB8ht{H% z2kIEmCiL=oAgNV&W?{K$48A|ZQ}ENr^eYZz%)KPfSya-}`_sM4JwgD)?v3h86# zWcc}51ShjDc@SD;X*{@jchBIn;@LNsR}r8dwH7wU_MeHc%G5s^mN{#19&R0F6h$~Y zn!#Uli<)I$Y$Sj$=i)vutoNpRdHbs!Q54p|ajrG)?qEJjlyptn19rAYym^mcyY@ShDL-6zw8Ux; z;=pFFex43I8t!}%{9C#A3c8uL)Nhi+8I+HW%;(tcRXFU)Zrc*oq5gU!$$rS-TYmQ8NH zu?KDNr_~6)eNSxMl1guiRG|z33aqWLTrbbHoy|Le!4Eewa$4+xRE5bv5@3{~l`wKQ z9?I7tqxJp=8hl##uB{@8-z}i)5T+&DNBexPca`3j`f%$j)vP~FBg$M;x^moao%^4W+>0R5n|3S(t!O}M1*HCX#vD92`sGFLS9ZxKS;wU3IwT@| zG~j+$TzRxEgCxi;csQZga%r__oBJ%JH!?=6NJsRzdmF8Y|-oxV*6AL1~~{S*;R24A!bnP-*cV9N$P^ZkD3xi6c; zHV|Eh6}6asuoxa?h%P=;q6$l@;1pG~Mt_s)eY?&%c%jra1RJ%p9EYGhI!bWGWn){yA2w{(^ZG`?%Y(Pj;F&)+ zhnpU40DOVH)T=|s-s|$d@g}F#ce&3d7VGqW{wQgn164ENsK_hXO1Ae{9TKCJcDtof z*Oz39n=)>2YXZMV>K1pK?=D(=MRodKT<_es+VJd^Hfk}fFeI6K*`NKloWXy43(<2i z{RCfHTWuDZ^AU=+J@PZKp*0^)vXGfrEB9jtKz2eKdw{kg9{ zpX=va&IKGkfoc;NnDQ%_kVfDo_m76FNO8whBiW^1bp(eU_oE6XE^|-S7$X(Iu$-aH zxB0aq1>H{gEOn648+&;*xexYHM@<1WL%j%Re0=zz9gy(_Yy)$hsLbhxg?&(2470V8 z=E~S$ApK6GB@(gTG0&jj3qGy7SOdK&3B4nY0k^uPE&r;w(k zC;G1=q44(h`f8|B!bp)Hu>$3I3-v4cfA~YMZ>OpZKs{c);+{wAzDm_WUxkvxfusMx z+~pzg*ZPt1-BjvvE2$hw(9YnFUek4aa@=k52ST#_)*Lq$3`vkDK0@k-xfXGuHTuX=AxZV<8o`xE=bDFUjPi z`(GB*U=QzapqnDpf8Lt`_xzq4P;D6elT{?bel}P|#tEy^2q?_rNtyPy^#S)O+WRTN zM?XJ~=fAO9?wz}0CGwkS=Z$EMg;_| zNs{PGzJz$_KZKVL&8i#D7tTber9|B`2hE2gJhQj5$~cb(GMt!$*`yHXBPdZ21*?h-+ngrY@0;r!5eDL%0LNCNUCl0K^ zH;-elPsqP|CY5a@Ys?wu$+`!3gbYPQJJ}$(+NDUaq`j~+Q{xjaACC397&iAQ4fpJ9 zXr&s`GM)eG(9Bqmd;mY#dKcPv2ETsX-k0t;^%M*DUyp;|_By@^tC#rNhTw52xWnN4 zMhpi${SA-%fB*M?uw-I%X5@8>!C=_#bs2J>2Hc~C0O+R$UoW8Yuk#b`SC4bw2S4ax zJa@L(K2cz_)yPwU5nrL#b;P>&Qu}k#HLey}!BXt{#LGwQ1Mo#SRWEIor=)i%zJhx! zIH#(?u7?l5FuN&Lr;w($_Wn4QdyENP;y$NwlMjP$1MVVnxRaxww6T3Lf_uW=j>IGI z?e6=|M;pSPOnwl}BfZ#w`z_deJ*B6=gvNhs?vZ<~A6!KI!JoEkz;*7|BsT!=r0I8i zdn3uf8J%}FZV#N1NF=?xuk4Py zCBR;5$%9?*5PiTaL#Vg;b^Mp0*soAy4SsI92kfyC7uPE3)n>zCP0W3!e>3ja1xSSGVoaP7MB`MDP*v&RO9mm<|5Ab~j^J%PT$UK|V3~ltZ82(-)Yf z6VzUw@SHB1*%P+v1Y5)75iI_3w3|=8nS%zuAF&yaJ+Mvh?;B|wB;f`>Wyky;?geLa zsTEr)l3U_Hp`kp!dX#&_J|^%j_Z&zPHfux?iS3ra|E;j6wjKLXJiL}a!hL3+zZ~%M zZ#AvHU6rwi{puk`?t9A_$x(x?U)MX&edt_JJYV+R(^GrDS%7=)#^PRJo1=a+GgQuE ziN96v7_j&KL{0tx_8Z@TmE+7hpzaIF8N%q!>SFy24D8v{M$WhzsI-c9u+H2z_%i<>jD*rd!9m| zD%uC14So`EpUw?_uWFubq%r-T*@>D#3t0Sd<{W_ETrv0Sv1O!`Her7`;69?rerf}8 zSd(OK#@;4-7TlZyfOedz7~i>bIT zxNG}xN&$vRTymxuTRzSw#96VZ&E8Qkp3jy2n|mHEd<@6^e}uj7T_2U1F4)QE&|b#k z{O{R{qR?u#Dx=}mF`!N`6hv0AYtQOXz#s1bZkTUeU1;J_c^USXUl8RDJ? zRfr_<+^4gG?`sNz*Vdh8)pjaO1U}1l7X$yb_F*905st*3by9fV$y<;6O`?2GM&9-Q zoJ^D9YUCF5lv zTYUck7N5;Mb5Gz~wP~EmXd`>4nSjI&hZU#yiW~PUx_)*#JNBE74vq>M@i!BL&)ndXMca=tT7ZLA+4`5Fz*HN!nGxy-;pW)uM5QCL!{$l@#pFib2XQ!_+_<5Y; z_SIs)ZbSJ)+z*Qh%Tw+toijW3T~~jY`^|y^Ko5KQctZcNb1xnDNw+rQp7$qh>H=qJyei=yZu?z1AE+QW3?*3oy(Xzq!_eqGdqw)}E1Xs|^%ox$LXfjOXF z&Q{tPbteXYiTe&Oax}#`k)!_#%%D2XiJZ~3RGvD={eQ#Uk2d%@wbvu}jSPoB+J1kO z|0l&Gtg4iM68X{7(?4){_D8}`bvu)9EdAK!82fV&e9QgGQ{BeB8U|l2#JwcD<>HGc z+^gA{Z;ug?){_PZ?8ZSwM@8Uw>!7bRVI`X(?y*8g_)z`?y_2YMnemN-+>2JZ@0Crx z;1R8MQ1Z6}|HqI01@7_q=N~Zp(bH&~Pj$M}zwiM33@4rGGuYq8{Tc8d8xuKnTdU1b zpO9d8m0kqi%Tjd($mSl-{q*$HE$;WD-(SjXkt=d92DrZrYEKK%bN?Sb+H~9__*A8f z+y{MMmU`QrW7l6UHT+i8W7f-)F9wVNqW|;fQ*_Iq>9gF=@!FlM58%T_&E{i=91D31 z_h-PLocnZ;dpAVE4hc>dcJ%Qo|D@yEAc8ZV`9LU+O6kbp-vz4ZJeaGd05>20@4q4L z)3Nq`ZNW$G-8~{-?SLlN;)^go|Q z8~mC20uDgFt=qF(`#8={l|B2jpSekcQr(ND@ng988@0CtA zLtApf1WmL!;r`OOi0&Ga2Hpcc+Em<=l?b@ESO1mfw6vnSe%B$s5A`daPYAz&e)pz} zmA@)aPdbjGmzVeV_b7T~gFoMaCA%JcjO!127V@^Cufqm^V(ybO+{^a0rmQN_YtElD zrvLJBB3OHuo8J$`QMAo-e+ufQa}jEg`~T?C{u|_8jN=|dLKG2h{7oXs*l+w~+?M~K!JPbM|s$Ae-^6;;v3xR_n)`r!>?K>Dn-O~JwC5r4C#6jePX9>45sBvv{**EOm);RQeN@rM$IJ197lGql zm%1OS}0RJlbRZj-M*YP?&D^@CR z9r7-}fcuWQZ(V}qSeqp z?h$+VZ*ca1>9aW;E>7{dnfn3or{vy6?Jk&mdI=k6@YAVd`b@fw<*Yv7z)ykr3S3@Z z;_sGtA52mBIG8o~y-eQuaD`0M)1;tsk2c7Ca(8U6rf?8qUv{uxwb+xYM-p3jk_!*i&bB%E~KHTO1LkR~@j+8OL?i#<-5 z?VEd#y_4Ge3hoP7h-c9Hh}ZS*`MH5(%h<2&&K|Lsa*f!RO<7s&^Dk29n$Ej+hrtiI zx_OD1nETU_fYkddhk}1;5B#x}=mS^Z7$e*maoE+Zw`E?nYkYn;_mpE#2hF|Rlb>>b z4pq~Ak5X5(vkDyj+aK+WuUmtUkJxX!*gNhm_DNeql&W+|@PYbb1~trhP2A&w>}%`g zTkO}^ss!e~ED`)T*F|xpu!s0vv8O@6^t&|pkBg4JnVtKPkwhgYJbUnk>HsiF4j&~7 za^t6!zy&|x+zh|Q>$}%@llD)l!+po#dtH;W-A1OX!`3zTcH7W-wB*vGo#URc-}bRb z?g@LFef%o!iws3j^bFXqvzo9+kB1N8um{)QntKKxUV_E||8JYZGzNhqef=4_}tFl`H9Qvdnm5q+EQbl~G0SaZrX#Q zLpQ%?@KreBbm)mh_-N^=ik?x!k9PYWA2k^3nz8S-))V(&?L{AZ9JI6;_+ahhBCe*E zy|?2+P-(uU9_P(7_B1E}%smONYcc~xE1mXxwkH71u!tF0%dS#v*yJGnlKz-bY$b>u zTz22x9zUJ9XgGG)+j#8Nq0E~yXYg^z%ElLPh?|PkTJHTIl%)HEA*yX_4NWpXkG*YB z>O}QU48E7#qT%T`Tl?K^r|I@@{(tt~M7?cXS=$vT0u(856g|n3)BacQ-TOKBe}Sh4 z00aj~9Brpp*pA~)99kmzq6Sob)&J=+I{Bt2_q(`f*|UARI`+st%8c+sfF0}vyp6_rkTFO|BJs&_d>aBHyXNx;$qe6Z;68j^o zt+(Y_9QV9`7kPtm4fpXb|ZqFC;w$6_h|I%A`c7XVZCu9G8%I9<*g+mK6J@nTDp^3FF((l;as?|1NwH< z!r@?UI79%WT2TUDrHD~foqw0N_VB$$qW|Vq=NHL`6Z`&=n_fJQcXdL%|`}us<$76p7A=5`QG)p5BI6Xo{c^G z`OG&-*0r%m_g^|MApGqn2I;WDeiHYZ41)Q*{C$h~FyQ3N-5BtjT{04=qpaJEd5|gG zKHQ`yNiqgMhySfie^#~EKK8~nNFQ_GQ!4M7=wX9DR9N2!|DS>UOIP@qqaZnodkC|4 z<{{9#Tii!c9=D=onY;5gT2Y>8SK61 zU!U=K{`uIG**2fjbS(Gu51Wa?i@_JxaC<2|sqWVdH_dGA=G1utuc^!D(?r-3D~2jF zQjprQeeSi>GSL&cSEF2W_Rm%Dkb59~_Ws z7mefLk7eM?z6c#!^t=B=MXFm9v!p`@(|U=<{2lrGT1qoU)Np^QbYt#~oB#0P8wR@1 z>Y%3|M>Dz4Ri|Qr7o0H{0q^A_@MXh&++_9}?&pA?WtriA1o+JTx(44ukHFhC+wy%h zalB{lV|ftZ8-z*fr?zqC5*hp-4SojrI+IN%f9!?S9N^QxOtTa}7III;CB9tb<5rJu zmr%T{F)yP_kZ{FD3JZYS$8HRM*Ug7-P0LldA5QHB!|Q`TPUN4vKQ;C@Ja!|&e|)#_ z$W3Zd#D^~TGr-5ZUNw>XRZDlYG4j5zX8n1QrX)^l%{^|XN_iyiu`Abdqj`Ypi7ful zHTHJSD}C&d;_>j(ZuYKhj@?r3-LA8BhabA8G8zDXc4jZLGX&9bBm7(78%N(@AG(^Z z8Qc%q=%H^^J?@PmZ;cbV@90l%r5L|C!<`2rKJ>Yt1AekEk$W)u*Ad+Fy1QvQO*)7E zATW?mt+|hpd*Qfm()slfC#?Q-gI|)R_U!#qqrK!B56ku5ck~Ah{_H;dG7Y^0>A%Un zHlqg<>eN|<`+@INc`v@ty((s-WFF;Xf9%?O%z3w3cag#8yx#L^Oo$KMGx+J3agV!r z!g%?L+P(|Q0k*)ekH@U|`3B!J)~gup6%77_M^!4H``B#e$FuEyiOrSTLtkr`(>rmu zhBi7`hvwVT^6pxh|18r_lYQ^+ATfm!toIaq;WA&Sy78mO3?)M$E*Kg6q`NP`eBd?-`cdjhSUxsl)rh zQ7$8)9&Fza8+=jp%BD$YNRnb7n46-;ujFp<{i^8y!NF(Z-&f~e^ydP|MciZKJ91yq z=;qtkRTmcfz1|Rf8QXQ9z_;c;7ABYBac^Elb*k&)m|;*bYCrN8^-tyq)`7oFe=hiP zqPg$<6SnqPVOd}1U!S9Yz?sm}Yb@u9eeCnRG=6@nv5vQVVDMS8fQD8o@bROY?L26t zmCI@7MUfSMw+#^Cgt#O2uqtpt{Lp10>=}6Tg(`}V?Xc$^J-H~GP*qpvo`<$~x9L#X z25TL&2K&8Ex8|Pqh^a^?K1lN%@EXT8K0Hi}}Ba57MciCmg2h4WDTrd=7WD}O0|&sTna%MywsZen6&HiW1X2CV49Vw ze!xALcK{mI=8^0C9`_<*f!!RwLUXTM+}o~~x{wC@VdM?>OuWG!zbaNW_(Rx7%ecoy z^a@6wlBzg|TX!5h>}iI30=LL+qh`r=24C3r50l21*4*=slRUb_o@vm<4WMVt?LmM) z-^*{zJ&oa7f&7g|aIWa-E1!M&$lT*DGIoGMSdY_~g=BkwnGJq{xEtyv`E{C#uOq@f zHrn)2esl&OyQR_w-wx-51@UONQL`;m`ogIi!EXe<@UZu|uM@{T zY4dgU$>wp7Q`z{-rJnvaBez#H`2a7sd$GBHz`f+fB4)qfQrAcWR@l$pkG!}84K6~C z3c6a5485y=$>Fv#_^GD!-lHD}K_4lbl=Y*I{hV~pAdukqfeXtJ_C_Y<-owQ$J&}2U zOO011OtX!+AHaSx_ZcVXsRcOU$!}_7eTsPnc4Gy@YAve)rUVlw<$&=ZqP%u;r`y)M0>qQiIi}} z3bnx8i>Sl>RPcd&xS;T$Ur|=Wklz#!il%a*;I14^syoS+DSam2$d|$r0It3#kx*-+ zIouR{RY-od=x4sXWC3Q4uVw<@D)GH1_Ro5NtQqwq!~rk#EMrdoA}925OJ}U>!rND0 zo?xVb&zi7rKhgO`&&B&BEW`&Vfy z_hpv7a{`;@bA_a1?Ow0+WfuibFQV$5jca#g#N-RM199B;XlmlVwk2G&4>Ycm`1bMi zl!XE94FdV$`#SmjebziltrVIP-!2S#sg1~AeW_=?j7#%$FR*NF?xP{>AqLOcB-^UJ z@-FuFH39hb1nh^FFdzHzXS3s77J5QH_Z{q2+{1o)fd65*$Ayx*p_4?LhqZ-0R?%cT z%YC>h_vT#*>-72WQQ&rcT_=eX=9&}OEBA@H4>FoaYQ{6^6~^sa?)h5E_O7y70MPb- z3--Jvj$5-3sn5#HT?)V2F59gFzL5O~ns(sJkVR*!N+Nqbw z+e+Lc_J?R4?ms?0z_$hPaZpu;jbo&g-^Lz=O?Qs_EggN?ysbX?g6s3b2Krg~JgI!{ z!+lyp#KYs6l68V|HU$G!J}>qX$p#^6i;R!eWA0c$b2 zo=@MYi%7Zof!A9-npEtZ$aqsYZPqYbB$&}V)yHLLTZwzZJ|5tHGWcxovn&AKj~Q8g zY=};D2YWNj$X4m68*^`}kwhnVDNt70sPinqekTtKE~f>5e}vnWI1g==HO<-k5WEvP z$h~WX{o;w{27A`_oNMp3Heir&(0=Z2wUhEO;P_6p(M;v-QL32ZW#(EOjN@a zKS?tZMu5+msS(iWnrB;y`xt`6PBY$YgU{TDfliTn%AM@@Iy6#>?UVxLO}KAzOM@?( zXTU%&orm1xelqsRw~h}AE+>f=ijcSu4fmP7!*VhA3_duDH>4cz3)gRoz0vwA=5D}W zbZS)safc_H{d7C<`JSt$kjN`1BJSDIzgd#0slEsMo3o56`bV1DGNYj^VFDis{FstR z)mgaW*;e8nu(!SQmx|wo}q!Gp+8JYU{YrSlH1_@CB^w zMVZz`aRoO3++U$+T!9(XvcTRa#?J@t*_wraI$b62gvNDmpbr;4+`-#h z?t?ES*4E4X?d{Ed&sitQ`E>eqlY6kR`x0*KJ}fEioazZ{5voP+xIdcPsn$K)THMD< zHJTfXxknKnc(4i|`y_4TQ`VbK@+ix!8X}CY#JNr#n#!g}N$ zJz!$GG50?AX!~&Mr`RmBCqy&z5=+S#dw~A!6+Q=}W+ja>_flH!H3jr#iscsi3OC#i zYeaw?=?KAdiV6h{gZAmdHN@tY2h15fMukbd% z`3K*1SPa~=dp6q@%pTHxP|hxeA}5N$zh zXY=`N??3Nw|7{2BHf+g#zbhxVn&EkFCno39xR)7LyHi6XnR_yF+S3PZ%zXrlUxWSn z+~M0W-e-HVo7!++VbFN0K2PTar!$4r{oBHRKQ{!n+!u8{ zn9v{KzCWvp`qeNM8SY6`mO_UGzIkTm8lx^Rd;8zqKtO3cMaw#xc>0ZdXz_1^HDc9c zd;e|Fd&ib;zR!JbR?M76sz-TU5dU%#_S6GiaGIXy(Wi|k>TxflI93hz8^rfHVK1;6 zzmXCN0$K_9ceBLJck?MkfrZT&d#nWcMcPipy|U(BIqc_G@qmX&nMbPamgBhZf=}Fs zSfZLzx*?;Mgas=uI}BNKd^0z!4)6T@z)SKW_wHdf_Wrs+S!EOK|N4u2IG?bKbE8Yd z;??U&B3K z3Kzri65w->ZNlc>Q9l2=+{<6nGk0n&!4rSEji;Z3H5BkH<%hg+^XV_BDHXU6iTm9Y z?rm0&s&P{4vGpvHJ$2uAO+~?lAd)Mm< z)UWHAvrLOUo;J(wfxSc94&i*B$G&t}?MjJtJ%xK&a6P^=_YV8m4hr$jJsum1Yzad> zV^2HyO-v8}gV@_~inMziw%Uw>U>Td_xpc~qffDGW9}Qu&eQkNZ<<5;7_X}zdr?$P3JsI6x;!cEj?u+Pc8C+;2gGsxHb z)FmaEd!iochv5FG?DS3kggGygVbS3#;LDC6?G5l_$;upjv!m!@%8{`d?KyPmiGKj$C#aoun?548sg{d|b~skN8PeUcpQ z3@p=z*W=!q`*^cTa&Itz;))$E&CMgMn?>v2!hSOOI&C)RSegrGf}W3*%Wtp;TZ|Hq zcp<6ZdnN9vFw$;L+ScMe_%dqxbWq~`!h0<=-~d)CitocH%ntvStX__!H}fQkd!SzB z+l-r9)iZwzvNS+7n(H+Pb^5U}_J(`ko!2v){S|W`+7VcZR+jtN=UzlxbKj>vuu-1F zzRUeI^0k|;7#77dgAYKJa6!w`o3#x;6S23$*sBV_U&+U@B0Hucu{%wkb;DhHkM0D6 zPu%|k2PI4PNp{HOzk+*VNk_9EJMJ+vt?bm!mBC-bGspIA?BEtaeA$S#WE*0i^1z5B ztlOdj+V%NQ1K-&Dqv0O0SCQ9|W6Me9#@u_<3$qsIUW*p51T6hJn|$r6X3>Beiw{Rx zmdB%4q69w>xUayvx(+ZLS-*+3Zu*OVuLGba#Qa9 zt%qG#3fcE+_2VrXlzX1}l#Mrdb|OYXkycW&Kc-hB))FRLN~kjSs2txB6VV(6I`Z{I z?pdKS)vCvR%vLD&coQ2^Pe08Xd)t`puvbIqk9|3|$brT+6i0&kaHvsaNW_h~KhV#W z2-*4ciPY0fk#Gy}h1K10Nj=jj=r%Cn!e1`L{WH5C&(&~c-|vY%r}f@Qa|}Z|jP;rN zc+LJ~XB_5x=9~`>?Wjg|5as?@q-Eml?S?rQI}upxq^%a}8q$kt;G5!n!v1*7)G+rl z_PJluoO1b0^XY8RH&Om>Gw_2~ zMu62+Ah?ahYY>=40lb|{b+*`lexARa`;D4X>}}7Ryq?|CYpsM!c%c$Zvd{}Xb2l03zz%+?TtpB(iTqM$#%|v-r5#=nP+bIPm{El=NQ&=lnDj|QLGa(FCh0!x;nG3N)Ksfy z9aCOaZH0Q^_k-oWIBI+awz=8nm4SQsNHRu$&D`Dq_@piHn&k8@m@3`&U(BVcW1$y$=Gt-}8EenxK0~$Lvc&%U zP{RrZ)`$wvR=)*YyXC;w{lDcve>C_~l@#(~PCv}BEvDg~W8GLpKKI{=eH8W6dXs~E zuAq~SdvVmBxp(`>Ix9tM{g_(}Nv(P4Ea>Fwpmp067;YXq)Zr~85E{hTciOW58 zUh2kWJVXbzKKCB^df=~%27En+du6dt!xFg{UGC)^yvE=C!$fO;3;s#3%w)}J7$ZgZ zv1nmW6B>zpM8Cuhza_)>Mg;jHfA!18UzvN}Mp5#Zh2iB$&OQYANr?~gmvMj8-2J~t zU^ZLtW2dbbKN2OFWT9<5KJ1x~Tvkf6&Am^{T%l{IN}a+gQi6F1_axAPw}fB0(h!^; zqE&B#C4bQ1d*Ejyry1nP{V{~63}QI)@)dLM<+its?H^iu9N);@I9>L;_>1Y>Qx+p{ zl6nsNh-dBUGNIl5ZMiquJ?yx8ZQzG5?REy;&+Kx<+QQH06BwBI%fQD+%5slY!s$kL zK8{@Tb(i~DZ?tcr8_!%fp7{ZOT4%o9jnh%LYKjus5Q`}VHl9>7u?DOH(`j|E6b|&l z?_B#nF#6%3!8hP*lu;VZeaYMhl+%+q9J#5|!@cb2J7as}hV{|+SAiMa$HtUkR>_%r zgFSWqVmOc_H7(_cz1H=HbV(yLB6$-p`UkLowTZoq7xGK-eEK~7s**CxB()BHDfcL# zS*}&!SB z$@;tbM1DAE@Zs->dDK)HrKy17JUmxsql`+(+T6nv8C%1;zR0_{f&GAD7|E>qsXgk- zcUB)05mRF7*j2|#6X-ka-OsISQ`HC9A2-F`9ftd;;U2<$(#HTtzk2>vp|uao<58-w zG58+$IR4xV^OrpgA{ypi_PL*DZu%Cw@0lyN8Gqk1&vaSRxBzZ~&T_+jSUrE9&Zl!# zl{Pc1N~=$iZF4i2eBFP$@E;1QjD6x1_&+M60y)Qhr~B5T^%dqmzM~Xq$#0PNu%F1i z*JUi(&5!-rb>;_i#oi2+{z=R?@5XWe=GQ4l;+S!OkCr8a@B_nC8Br_wF8C_$>4^sL zcO)|`*W^Bq?r?vYlf&#-=*W8Jr6$k3%#ENjSm?)|xi)$&rqUZ-2;lyF#_H*67!p1J z03ZNKL_t(vr!yM-jD3eXGhHCtOh9)gzn{7T=BGS$G@gLF-GUsrk8g7S?bz?Ux_0M~ zJM2X~NmkG(Ur0{ti`et=+dp}hO8<;(oK1mGwaAZ}Z+XBBCgO3-kQD@tx)`{)V8r-w!Q>60y+;4$>JPUj7WEZZq-B1%x z;@-8x`?GhA#+&*Y>>c%S9CQ!N>q`@J2xT^)f%7cGaPy z4fmfXGWZz<_jGOe8`JITcC*Fclb3HiOzdwrdw7<6#cqDI$-q|ez{!{QV&bTSeKa}i z7|1U81bzPY_7!uf4fSlyyU^z{Xt>8Ujcf{II~ z>B5{(6)q##CaKDnKHGNOkK3%f&pjD@iYpuLIok zkh}%Fd^qqGJn^LB{uRc)EwE=)q+bE~98;|kaWC!Kri3&3c$7uSom4MIJtkO}dka2S zIZzKUKHoe^DRJWylxOkZr*bd5^Ma_?ewcePmwQ%#WzYOH=$V(L=b7J*$Q|~UX*Tp2 z;8z$lRDYK#o-V4*tl>0Fb-JA})nWm3(|w0?2x(%4*~9B_zYX@W1-?7(=W%>3tpuQl z{X`=zD2$eGR4Vf--B7L||AKw-VXYmE=Xo=TxR+j&uJTQOdDX;y`0}zg_mnp!@L>&l zrT#4H0Y=erHuZWH?&T2QaM%0b({eD`;_H1g`Gj}ePJ^C#dGtKeLOTaPL7y~Bm3A- zb@K&Dy9C6&S0bCsjh4A?lrki$8OcLTyOb($T9fAcq9)1*?#+m+>&o1lr3S$#**p5* z%C`QWL$@>53-B%XFKcjb{wB6wAa*cJHHc{wk<*m1F`oIIi2P#vIKhm=r$SdO+G2MD zd1;PlmnG90_Xao1?5)dv#F>2)+ebFMkG3e+G3H(lV?QFiZv9Kfe&VY{Kbz*WyyDDF z1Ad;HIbGY@`kPw1k#qtCjexlQMr-m_Naj9F|G(h6uA|>5V}oWSTh@=lg*P;p3o)OBlsqF{z}lZaI?zQmf*|ij&{D~{@@P| zu-_V4!*b;bcYr# z_j2kZDh&41xHpON*SEmPUMRuYb81YI+kr0``&-<*ROhSX-v3TRKG>)$aIMuF9j@27GvBGH`~1}2>pN9{7_aj(EPob2g)5xLgdY(|2SPBX#J zH~heOd_;b+LnMzyoqKygs`dC5m>kSt{m97Ap8$T~KC$0~$M)Q-D6$eZoYRXmop(6f zU)=tcma37CZ>gDDRV~t*H6krV71bI=l^C_Ec8y9%QL9F*+N8Bd?HR-@YS&(|_ex?0 zN%-Y?p6hpA`Tv}pd_E`Vyx;fzx;bSbb2f&WqAg8F5#lZ9N80buT106o_u4qv}%R-Hlyr;C6%sMh9A6)MT zXI$r@%;lCOEqc_4rU{8$+wXgG0}L_3EeaPftL#6%A;+d2UF)3aMB98M!|#MIc8Q)3 zvnqF8U{LFUxQsTBl%ums-w&k>f)%od)F9rMj(P(xJ7M0p6VL3{e;`Bux+9tvX^5(fqlWA2+mat8-8fzT zJ8He9jjxz&Mtll`&kWV(JX*{A#4`tQ1?8P@Cr_?B%A%N++y~dp9RFMDz3$R!J%{>?T?gZeZpq#^Som*55Laf3y4c%SN+u-)eyTVgRz%XJ zHjJdUIDq&|9T*`u(ZZnlB$%!U>SoM(A)Ox=>HZ8}Qm{!LVfkt$DeAT3)2)lM?SkYH z#!&>^^ef0990qD+hkm07CYzZQa+#EV?m4%JZ>Y-PLfhA^TX6+~vO=)!(z3`@A`fbNGV47p1}WsLK^t-GW@U zSvfMV_j=bLMjw>cnfZxr5KzTFUgo3uC2i8X<#~IRI zaeQ2O&uf11eDu~De&X&^AdvZ-0q!@S0PofSXF1v&RvP;{N&fGoy`ecs$~T0=$JrS2 z4ECXjVd>ByjQ-OLhfoYll!W|RwxnTRH$!Bbk`*l1Kfv$y?+9uwb6{?p@IIY~$nYil zaA?C1{+j+H?Qy)t8^@hl$4}}sOm*u;elD<`HyLuE`D7S`e*z$|pV11eAyN_F1exy) z)V__DZ~jP;AKzNDoiM<`QxJ*^w0)NZD+d!T-IRH26PLY}j`eSacbpUsg3}+(J4X6S z2`b(75*4$o!=J@eb-XnAMQw%(w8I{G#5ZMX^vpWR>S_GpaB9ayJAKf}zLg#?^=d)X zIRAOoA?0sB!-=p_-m@C*g}W0g8Aa)JHTP_H46JYpH_(1}Vu<|Y@i$QU<0kJGU&0}~ z6{17Mc3K%k}6>Q++U8*rKDlkRut-ksHsQA|MdOLiU(M>blL)quwV)3><&)-1B`i zUrVg}7zjZIDoQ-`)6wxK(;f@Gqi!5=W6NkcOU*4V%{N$E zt*_Lu^jboFBL~LjkN;)ukUb9sa!kL?8aM|cwT(2qpXMkyi>^HZL1rD+np$G`DC1t^ zn@Ft;1>um5{vr;+T_YaYOymRYwoWWUYt}K>@vLqv#Qxyheum_uuEDlxNuNxig1Kp6 z!P@hc+LpY-B#GlDWov*G5n0yd?^|ZRCCFz@_x8}xrn7jO7rwbfqKDrceLss`uK-Yf zS9AYl7*R!iw-h{S8dgt)(awvwm$IA}fB4bBrt4$>b}?smx0x(lh!h=9`RXk1!7WbK z)I+}e4~-v9HeN5U!UE~h$k)ZMYRh!uRyM=9qln1v$*hZ8ULV-8?n+nB-{bmaq&3A; z>!&-Fb&!7#-m|!rZs=Gin7zT$DW&UJn?kZP>KKS~F2LO6`1e;Mf4tcopR}?pm96|* z2c4(RQNUgr04u)aqOvjo;`cAS^qYH0cT?)_F}z64hxgHaD*bjGC+28;?Y@6M=zzgmpKNBH;&0 zTfeRHUzWf=PtB+A;wSn`9AVgbtvez;cN!V&69|1xJ1HM0h~F^C)CVnp|7vce3b(qH z)|}e&Y^^uSxtJ7yuKfb2vohRtMZz*F{>NG$Vzqi3pAa`sk|St^`9JhrG`^oJ;|H}d zmWzSur70iJ-FhkOPk)EpfbC+K?aYYJ4`gqrG@54TXEpuAeJx$%H*b-R_Zj4&oUVkX z*;F-OLC1XjnQNWqNstjAlBkP*O%4{L)vgt=0P-FMV|(dlc;^??-&a*Oq1UCRubpxp z++qK<==VqQ=?#w+(-U+;&mHnzGZ?>-v5n0hkQr~);5+B@!_B;)YBH-tOo_v~0wv>> zOolV>P0hJ)%~2yYB)vmOb$Xh=?YbTcJ)6JiE4-DkRHA|Rhor*1R}}X#K+UytRKX4O z^@uuqtjvS_I<`hNNlnv$pW+g{OjtotTcW~N^ufj>%ewJd1R?cYWFyL(M zDbE$d6|;)(VgaS^%+BTMo1agxAnT)5Mv*12 zB?c&T;1Id}Zp1w^E*KW+c>P_MiNCY8^Sda&KdD5ngblZQN-3D{4g+7dqHt4oAjokA zvzsK2s8}kx!$sB*?^w0$r|>T7yu4bo=q?`wD^WW@1Fx4zV;}bVQn}usH;W*R;aD^Z z9d>v(Ah9ByDcONfK10q{zeO7FvzEp0_MOFS=5I5G_HZM56<5_cX@8=ow2wBzfoZt88$o5~g2O5ZGL?R7fiTn7km zRHuA1sCGSY)tWum{aHR6GB|b;-r=WY2^gHzCa@3#co}^Pb9StN3EAsRD-4wss)O6q z=0jIM%0!tl20$ReKLwvnLKM9*!pupmFrOc3p7#2ffMjojZQjhWXMdu!O zdvZA6D+;-7b%j2eP_AZ>R$AmXID)@-l!E0q==|=825dK)mP>9Pw)i^IH!jsBEE#>x zLhTN&GdeY??F{8IwgxHeX~#6D6&`n3#9EX(}{)F9!$>#89amBB*8)Ix-)Sqe+F9@b%Wf)nWJe zB7$w`rNQ@vh$D>*^q1DQ?-^^aD5DWiQhPDq3^-c4s(5XVRiucFwnQq_qJ?Oq{9x1N zHJ3#x-?+BOl2}`H?trz8`A!Rb;h8%SHkz8@e7U)uvcE(BvFIIPXb3sGHv6Y296-4; zzs$RIwnaOMCz|7Q@`mVvscyP;$A2->Cu=3dGDEVcW?J{d?v>`4JHd}86Dz*y)Gelo zFE`z8D|!Yo<0nW*Bb72U_>3oreHZrJ;QhY5W-K=4iv>&bqM7J|8SlcXUCF^fO;Ywu0Hk3n_L z!TZr;rvVz(zG^x5tP)kZZxpC}>hbTA8MJCvu36n->eF$3*28s2ZKsW4`y|+6sMQj2 zUvGie<9;ale z*{bF-gYCIzMEj&(`*b$i<(Nl4gj^gKmb#F<+!8VwmX>Ap+tQiwr}i(!9(EUyi%!cj zuffwd5*CtyJ1vG>dU%WGdNi;S*R^-|__z3a_CGP=$Hi3|E#_lm%u2tR_^XGkAx8RL z0(ZzGPux-HbXF~iI|R%n4zYa>n2VoK075I-N94WirAc)w&N2u-Mcn;>t86M4>U1xF ziJI6eka~TQPR%uy^z&8>vi9G`V>j0KQ}Q(W&koUs{3tY181PPaTK}b9MPep~!2x)0 zW{N~lcI?Nnf_K_MJiKeVU4fGaNo?Gs!%Ird!&i+r~JDTWx?q#N%FC^y!pek6Ff3|KcRqb&k6i zQrNCoD^9t6{n5Xg3~tWiROiy~*l*W%PL**02C9h%9MCL6q=z5fo(wtTD)TxpUgFy+ zZgma>)cQOoPH{R{w^Q7&B;G*GXfK;>^Sqkj`6qc>+feH0s^y@dD65}f9g{Md>f)&UsLNsFk?F6{#9&y^A{$w&2k_X#vDzawUmW!>u)PyQ>joMic*@? zk?GV8mDt*QpDaNOm#*l(BJ^dwRhr}^r(N^-VaUS2<_2Vxl@=Pdkp=yFoZT!-lnAoOsp>NB?X3Ax5EtQnz-BKn?E_RHr%@wmM_*H8Tm zHP(LT*S1q3-*5kRF^Ig#bEyu2vB|I0hW{vhuLOZCd$!KZY|nH8f>Vu)@KsHELv!M( zfnZPN%i3rCQX?nU(|UavTY_oYd{mN+(oa_;=^JO>(OxJrNnwXT|V5UVzP*9H?IXH&;qnN@Yaeao3R-a6@dz{=KxtL0ado45`yO`HL;J-sK?o zVpis@my!*z@x0BksXDvkY8tMb`8=j-;(dwZ{ltvIEA)_rU{X?foSV@DmddpCD;fTIi zQ}H|$Wxx|z`e%eP&gB^{HyK%=1nmO zJ|#cckCn6RL8rW8^FK4~KPG$|nQi20L!U0rnd=CgZ{;WRo~#>vAZUCrpIjj7nL!qg z+N^6A+mkSq~-eQg4Tl2og^0QZuhFqW-GE@Wx4sV`l@g2HL zeCReGYw~Ce{r$4ckB!T+NHo6Yfma=JVlAUgc;!oI?e1N+CBR=37X%ah2-GA#{1RRd z*+dgnnODx5ib2zl-r;9#F`y@+&n1;u|K-~Vi8zGnW&LqO zQDqWBZ~3DDW1F9cJG-3Ah!VpH^SQ6EBWM@+t({k&i#JRA{^=>)XZAcV(b(QkoBN8y zT)*>|H5F{H235s`*>DGj*>ziepF|b*SVAWfd~{fj0R!9hr?RaV&h^9ANqom$`_#zF zd4+(fqpv)-sJ$1upl*PZ^8~g_e@uv*2sZA#avRui09rXeMQ1AdsrVMf90E?VvW(tW`!f5 zKfDHPTlG0?{}KYu+YjG|BYGRSXrbrSZYj&4ehJYR3!xlM+~Pg>i?2J)zT;G92*v^B z&I%##1*0NLUWt=qc_upL6#hV#e>d667bd)TQEN^BoVfE)Qi*4Plc|HFo}<%w+g;RG z_>j8cl7qX@s2a*L}dOhj* zv-7X1^DgsG&a?|k>ILEj`f96R<^Sd((2{Mgy#BiNnZR-^oXxAifD-DS_L9BfUMNqd zI~NQ`&FGxY)^xI-TsUI!O$=wjl!a9RZ^jcu;DXi1Z;+KWAbhaVkx*cvf?e~w+v3R& zUi<8e%L^PVfd4r+%1TT5K+&7>0S*84p@@tF`@vC5qIRDy|8QCHVo~eu27QMtIBWUB zu6X;L-Tyz$4h7$J4cibs>3*2iInoQ9B^eg2^3#(ZK6ZN$M zrG0K`<|HTH2K%09fx_Pu6v4E^d`0N?xl+_JLW75?GF( z{GRg%UARDS{}hA0E_ZnLGH_o`xI${Dcup=mhs<^@QiVD!p`bV^f2Ipat8{;^8Qi)Y z*KoQU(d3-(Y@Sm4@(i{%CwrnDUVAzfS936sonmDAFfB|!=o8M^zLICEp>^iMavy5; zwj(1Oeq?lz{?JHJ_u<7c!_aO%0}gOv(Rla)p;h{Xoh=$5tQq-L80e)s0tm^l#rZpX zBy`Z>1V%s;Yi1|sz78>=!Y;|Xs3M&cy#81y*p2E-VI)71ed)(byfCx9pjd0~_%Hsa zv{~*1W1UY9MzqWywrnCT@-Q zp*i>r3`D0-eh#fw!BL;&Q& zp6k2zKNub!pUZhx=!xI7M-1f1vfA;v0A!P&G56zQ<%MPM9O{MGLVxT-xN=EqNJlo2 zXD`}H+{P8bME2$+DrEDvLLjzbmv^{um_+#&%ypIa2)~2nEGECA?+=swDgWU_l2Iwk zI&TrH0*+X+qU}yAHc{2IMffs`A93l)HSWbHB}Vlue5oYw7D*rtqGbp#P@H*gR}3%n zg}pR$PAu=&sbJ=&xOZYrG$?C7Wa4;(xSS`i3VuhhpD3NSLN7=wQDKuh>%6FL=ApqC z^wh^?+s&D!$umbJb2PuQN!=Fp-^3JSi_Z0oNR7RtJI|pI;7NwkNl4Q~+J)qI64hro z#xS@+x2v?Z*`5~|3UmR*_Xo#L;hqby6$Txhi(i2=)tz5RE5)(`a@85v=azS@ zISD~ShWiX;X+T{gv!C5ENhKpl#8O9{FXBK45$G1T`57nj28HkZ3i(+*v93ft03-t3 zAeE`%b%}g!h}Vud)sp9_q;S&R7yn-iP&adap%8~q`Zf12`4oOZ_zTFG?z)Og_T=o= z5U9U*d23}Uk^IY};KKWC+YN9ptp%XTJxag-nf6?pzAqyHr!ADz2)fT-ny@5N)OJlP zt{E}eBzAHJ<{ByrT7DuYKX_lEcFQ{$(sdIw|1&L{z|@NT@nI_lMnk>sJEfi4fMZBc zIG3p0hf^$m|I)r~ugs*devPe16*Xu}RS_OK{~yUJ(_WeRwmm=2WnO3;vPttrmQ%}E z;$9O745RS0pPqBqqIHIuokCwdKL4IAeI#r}@P#4%$uK-gC(V?6nOHzBp0oA&?z0zF zPvT$)53a~W*D{~8;1D{$k|Zq$!xhBfBAKig!hn;G5T@Ng(Nn8>ge@*ETH=h68XK7N zVL`_+aK6J2l`vA*d^;8p0HGd~fut%Ki((VFbR-1M;_ zgIyul+ji$KTF+&b?$5@$`1*Zs@Ct^}H@9Qjm8dwDJ@0zOr)M%~&PtSZ zgmS@S*i|XfB!yrpc5meXpkINd98savT*o_{HI?kY33+@?Yt+Rq{ok7lCoJ7*L%K9k z3IGQQS&Ek%kHpXw*I&VJ5IH}=y%l-U#xJ=D{cD(iyu|mF zn&}2PyxqR!yL9uv-Z3iMxY%D84-v>5pKR}2ArtDG7j^oiaG0z{PohP+s^8^5W2$OBOG-q&j(@U!0Wcyb1TR1r6stM5Jw?p`Rsp;zY5w zV|Y5H@Bywh)Va@D`9h-9dU9AuR^9u;2kMPO>&P88-a-=#WYjnZ?$mmdj*seTRP=*hLmEO*FhqO#&lZ_2q6g%Uq}9+5J|Z88aOv3n7@&qn4aCudq1 zS;66?o4lul-r9zO2nXOWQ?46J)Hb1P!2~$Z6LhWuqU6!^x zbfHi;k@%LMzy|03aZF4JC^8ild$Wh4ev{cLAud>{;lv9)Pq9*_yJ^7G?n4ttV{vU` z!p<$!M^yEF|3Y}6YO|}8HEiF?Y(fh|hhQTLjaS)1#UHD#Wz?x}py_H#HW#DcrnhpZ zx8C1|ktW$0CvB&YvL|oj-H5}tP#3KW>=C~HRPxR}-6UjyIpkv*10j4kh`0byT;RPw zD0LYp_b?alxzy^F^$;+*oZMc;`$EM|_gte=8QJkfQ+tBw<~79$|2VMBf*E(mRif6V zr(sSINvsZivsSbZc^!I9DG4@RAveCVBz&)4c)y{WY~&aYP9jk<%DO-;GZ)>X2kVLK z0!kMaf7TKEPIDbR=+`Tq9kGpYvhI_x?G2;JMqY`0VExbfyKnU4wSlX4>k=R)fuVmw zV>6C@Q38*}t8aO|>t4vhtbx%~HyFw^0(qpL;NQEu%mJ|Ooj(S&- ziU;gp|;-HT3p@4uUezumINMR`vTYT<6p_^RpDJF zN^X$bWKqTuDqcskIUZ({UgiZOYWVzynGhXuG307(rN_u3YCP7N>jKxlRRi-2|D}Vs zu=8~*{Ge!#m?Sd}4CYW0m+N-2&f)##6rpsfbK)I40;&D`2XBEr0M?G7zMz|@S4WP% zGO+k@i;TpuKpm^8{c>yg@zZamu24=iBF#`$C4&%2QyOE9BYWH z5tU+WHqRAwus~jSyaKoWh7`Dx0e_UlfouLZQp|2iMKej&|Lo4c{Htk;c)+jxKAM z7tJT*jphq8wZd}j+9v^G%}e3lJHx(4TU#S_qFt2#2<;s7koLy8p%;9+xH1hG5YriNPJE|G))a=TtuLz<6Pwry*^9jf~~R|1W9u)P1}XjR`psqdbm=9}(v z_2d{t{P6uH?~);H_&JB5nCM0Iyy|q-pJoq6b6gq=)=zvTRUIHO7+lOCuX4C2(8tym znBk`wNlMRfBvjs<^L3R1OeFd{*Xb-m_NA38ZRC)H#Dkz2?4Rc@NdtnAN7dqM?#=nL z78h}K&K1C%4yD1U{~KNcoWCLa=ww*-M3>nDaNIPU;{5E#+}fNPZSZJ0;|cR!s+rHC z@9NZWR)%5BUhqr?OLW(uaba%1#y&hu>=pO%e=kgLUH_hxA@_fbkMq3j!jGbT7sTw%Nnq#+0iBnpQqBfo@!`E9|E{ zA*j6Tv015(g0eKlKr1G#3>eG@SG{L!a2w9HGTd% zDZN67_U^lh^n4Q_>vzRpUehRn)bg2l=7I~=DyO%<%VPDyojd}4U}e<|AG(6a|6AbN z)hDx*g*X_+W|^hzF)lk8l59pmnO|Cf6Qb@+lqB^Fm?`Y&&Cv^IP+zdY7`t>QlXRqJ?Q&>|g*jpRksjue6z zI_f~D5)5;)XVZ!^s%6H{gGa8gc|wP?^oHBx0*-*%?~|=s0H99B{d`*s%*M;r>jfI4a$*RA<^N(aNC4k zWEjE*KRsq^Ty5$=hMq3$?y`tA4N?lu8apThdW!0{h=Smc#?t`#882vdQ!B7CSr$1J zQSnjrBqtej_F^(Cr&NyYkm&M!m(jv*SI8Bx5^_*?@l^GkMk#t~*kHxI+?;_LORNLK2F74Im>KW3_O@7>By&6ic9{?HwqFbD#u`>u62$(wqy zN(fw&iv4X&7{fZ#`z3sB1%3ap@;mmZ1v0L!p3P02P{z-^ni4CcKA#vNw+mNH?EMRp z^qtS}2-JmMoh+qWQT?8%>v&~>*x6;m!#Ql=Mh2Sd1RzSHyV|%VaPZd$1QS-)ua;=< z%_)-3tDRz%tq1=Q2JMwQ3TMcciQ4iD?+?^n9%@u+SUdAGhl?U|#`G0Crrt%-Qg7Cx z{d%7%z@c!2Z)XO3@om)X1z6L_U%Rw0JAPt4?+TDvX&NSVy7oq6Gv}h^3_P%O>EzNa zB-7JZW)N$V=*jpTl-;elQ05tdJ)F}OUN`f$|23-%aMoD^&4WcWGGCzEltFwg%|T_! z=`1y1J&+-PGN@Yv_7ngW}-mt2&)G?$;e$%SELg zTUIqQ6YcOvt&U6f=}Bb^T^1nGW1C7|6$(~o&zP^bu$(yNlP$hF#|9@PnpFOyg)o#} zRkD%JvYsk?Xl@Y*^v5m_r0_rwIwos9ca{?hy!IlOc_m>BTRK%AZ|+#P1x=M)BRvI< zn+#9wB^e)O0^7iorx-_zuR<;H|5daK!=Ufnf!qH=U*|!bU)&itf9@Q0^aA5iSNr%= z&d?l4nrNyUDD*padBHLm^jadGg{UTs;5}9t{XSOv)?!UbeCSK=oeM5eKS};Rsa56y z$s(TPuFX{imzrDC+;>1d*$?7!Y5O6lvmt^)fg6#?BI8op@1>g;5L42yK~)Fi$_f@8_-?8sF& zG#ahb#HSdqW*54~^?jrBjtbjCQ9%NN^F*0vSWqDW8*+rWFif~_;zo^!Xso(PlK_`W zpF%Fo<(UCfbuA^|P8*_Zt2sa2IJIBn#fztSd&T*~Bu)qmk-s%b;<~7e5+Q=iR17xnFAwS5Y3K33R@Rb zTZ{z*J3i3}D;WaLFiL$aI1dS0p_R>ga`tjGn`~_H8)YXt=Af^xY8-n_S~_t9)ddbZ z)RwX}ytHOk((Q{HO~yWiduF^CX8zrB#Q9C0a>D5Ykf$cg{6edy0|&L#(R}11npMG6{hLPwwiOW+!SIrBl%!9-gKOnZGU_{=>&U8u ztF zFcX4bAtYF-JTTt4lARKRX}ii}{^pQZs6Tep>9X%H?UhR$K9^36D@x1C_gsb}x+_~iR=pEtmbk2naCXaLDM6$YXCm%d{_)$1$D0MCZndDZ7>o}0*)N%p)av|N zqv_U>b=3!hbmB8Hj@3aN3tlgTm}Z4M$efnAl!^cwZwaI4!vTW{KMcbjJW@ytewZ0J zeTTW9?pxy3V>2*rw!dF~(Kn6JmF%+O#;2cB!X5yxqq=O~ zX2@FU=Z}Qw7z~4}%E`(L`fOgm!@&L*37UpQ?7%g5{ENtlYRG*lqSjW^2i+lM^|e1< zVxPzFr?*c?|hhtW)9{ z-!-lyc{W)h2o5YgdoUUkeSfnAoy~y9IdPvvcA;F-jkwo!|Ab@l3|La^^lo$Nah6Xu zuUpkWqpq)K##)67nkOpI(h`-Q4)(ofQB5f#l7xzUJ?w?((*HAIkj3mCAA&voqyH)0;7+*?)8_@b7l;+3>jAOApPzDQG2 zt=o==drM1?)pmQONskG|<@qCQ^&I{3i)PZwi#Uu^iNf}z@8jb_$n7ExgH_ogS&mZ@ z7D0O^tabW`*yf6`b45_0VoCpcTLxF!&M`K`4AseGfy2F=$p3y6aQQyoxsWa{WnyWv zQ}iwPpq}(?Y`s+IHM7qBuNQVqzzIffF~(9-Ur1Jymu7-vv3e~U`5}Z9R#3rO@ab3U z3f{xx%%d=Nc+NgZZjd3{^6`HO&tkU|ejNiJuKCzXD%>xWTAiJmaDkARH?EH`xFAU> zMuC2RY#euYGw-@=IiM5WXy6TxbDZ4gzaonKm&x#tJD5k<^#{*Q z4Q1qv|F)Jp?l7tpVAqD9z4*Kf?TP*4SN9mM8-ZN7Smq)pyiR}ftLbfvuLs7`_B<Xo5q|lHVz1QK zNy)qWf#$JJOy7sjmtkk3y8H#m?gY8_<;lD6Om$FsaejX(e1`R38Ky0Dn&Sj73Kxid zzQQ7MC=#Ep>t=`II0z28JqNeK17i!d7jrG-#e`f?8H2@@L-##N>7+;GYq-QuC13L{ z-d~ZpD$(B|#|SR|bv{SP_>2DqI>E=qo|M&xgYLvgC0V7|_7?AqVOJrmihcEW5LVmQfTHT|^P`A_-&zbJ&{jwB= zR4vTkTXyN}80yNf#`q8h8JZJYAA_K*ZoqIxUR&g-B53f=yhYxA>DK4-2C2%9kNf-h zxSo0H-|`Cg!c+_C)Waz~vQ9_a(M!TFbd465XpRc%uD+?CG2E(jHb9vB@H@NDU>>U{ zm-rm`VIw)K=JVViVBMqJt_Woqo(x~Q(bZjnuC?l%T7cR#9-P@xE9+p~9)oKCiqrlh znry3NOO0nKW~G~?E~);mv<|yBaj&jwt+q<{M#@`P{`ydt2cCJ11+tps`ae8cYyRkY zH`!Md^+R`{mZ7i<^J%4eX)gXhIlj@In0Je*rycl>3H0L=yI;WA@0FZigoE`Ddv`jg z^fv_)+xOZ%nwUu0eb+|jpZ!_R6Ld_Nac0E#3uqh6Y~3TO428UU@ufN6*#(-;S15-n z6-t3Q;1})sFkP6-g)54-0jE z&*{-npRas?K4v26uGW)4R@viD>axpTi{R4a+U&UYfWv%{2b-;7U*2Wfn7_J)=vB1l z4a!hB1mkizG6c>h9j4nRM)k+R%U1$8;pf}U;o<4O3(9ULnp|R4BHpn7GVtZMMgLGP z8>FM6xovrlYfBT`K5t!Prx=8g-u09ac@;jskIM4A`d+Sf)_#YwZiKr%2}|Y6nWwyK z2REa07Sv_YhJWGMDM`iry#=C%&N#rA3Jap8asCgYdVv*0+mj)o=bNa9~URtgcsi97 zcfq#O)-%F*($ho^JLat`H7f1ZS8+i^akX&WG)!?1J=i)vTg0sTP0Tjd!h*BVzG)x;udW0xh5MQ1pu$&T)#b zxbS+@Yeeo$yb%)C-8=O!;}^HHuTQqyOFReuJSdSAA$E9Q7o;xi9zfTLoSSk>k!H0G zTo6;S5coVJk?!cQm&lv>L8K>3ns|6=?fidTRPgzSpA_LEKhtZkyGjgzkXDHe^mxCK6wBt+$p+I@KXnSm>MY+qoRA42AbRc=OKq<;=Kc zrB$2US-l_(fQ9J$$L)lDrE3@*xZQc6zvw`W=$1UL%Uk5OG{DW!&pV9Vx#0HH0KXNU zp7k)}MajxX@gGt76$E|zUk~RV=F;d-%{o10bZ0c;h~0FQgoV4WsrlC|DrKkGbWw;Y zurA6kv8rVam%siC!W=cn-WS(q$`UJ@pZ2CiaPEYWawhSf;v6OYn`hW%)_{PJ$oKv? zg&yBq3)oS$i_cpuGTi*p>>bsl27}PUdciN5Z8(%z?yc?V!bBWN8-YxQD-WYBz4IG1d;)GOk; zC6sellwI3jMP)v*FSNBlIyG@T_Q#ScZS>=Y<~O%*i=JQYH?)Vv(J-`SfI|9Gv1awo zeN_4@L!IIAcXyk?+2hG8=2>E|QKO1dlQ3*zVntQ{oY2vdCI_3Ucv>uG|JvX1ibg4} z8pxBDL^Ur?Fn{9MayGBSI+K9wv3p&jB8_Z)$UTR479|!|Qd_BIV(y|sXG;0xwv|a6 zH39(igobQ^8^U&BF9%_}giccQ+<}>^Yn4)_Mbid--Td`)~ewJ_Ojy43`%#tYljU(HN-lcv`0TL@MGyo3>79C+e6D;RcSIOeB}1HZ44d%r+yGaZ3ep6#IYhIPI~H2 zsX75n@#HfrBzr0v>BmZ}$b0aZWuSLRYIGve?kfC7aVKT!?94XmJ;q&6`38zKy6(4R zaPKz1s?51|iqUyw^WmJ162&fAnp`xKn--XQFw5mk z*n8>>SvN9R%^mF(xXpd=(7+9h8pu=6UXx0EsTw2OuYNkHxrN&O(;bBRgfDOD-|6QR zhB&!i#Fe9Zz}M{mEe?)KeC&yxy@l8RcBVa%Qa)jTp6wz@DcFYj!uSMpL1>(mUm#f3DD7k3`siH-7p25>?$1vF5Y20zDUa)(=IO2Uynchp*1n zotF0&CYcFntxFOk^MK(6^iWlBwdX~w?1DNEAx|-iZ7g@F6ztAO^&O5v2XDh^PKX*F z$Oy?3ufbfTs(b(`_daQLbsKHVq3X!>D~V*(4>C25fuYVaLPtNzyHC+UYdQ)NxL3=U zJZqo?=AS2OsjznpMn$r=J9$60PA3_Tt@XS?)3Na%U%{Q@)t6GS_y#QSo;#50i>k-! zVQ{p8^Gi+573!*{mX)2G91f1a*lEcVM|Yt0Zl$%6m>)+ZIJ}hFL9Q`~P$u_%tS*cC z{Q32stR=EOvOknt_Rvon_on{rNV--xz4W{wu_{>(hY~>{k9MttedxtQA5FGf`A>2c z-gAY7`o^1Vo_fdJO!yQ;EPoiecI~;z?ARhNJW!(=`vCXjaWy`NtDh4jaZ>0=P!M1% z4m#&n|Hw`rnEForbY1IvYw~!~m+z<%;mja@=~xU0$Zu=fe==N<+w{h%8l5D59B!7u zcYbu+ZbxDa>X|`(P5=92WJuKO*)abq{X$ zbqgWA&|)IMuzDt?7Z2n+M<1>vZ*R222roK7+nO`V5dJa$(o9^_%{0(<+O83`XBspX z@snTW!eB=;`L<2&N8S6@rPZ@d&v4D{SjjDwYbL3#z{ZkZ%>9R!=jgNF)bg<3aCDih zP?wrwXmylYz`Qwfwg!jhk|4Ujw95g`HJIhI5}#O$GkPc{lJeWZ)sPx!rx?N3`uL1K z#Ysbr?d+iM#;KLA!a{8sK7%DQII{_hILnA=1$-rfq)sH-n$iL+;SRXv&b>1>+*I9& zrzi64#c>^!rYZf8{{jiy+*Gnu9Q}3O)+51Mm%fb-;Du15MJ_kc2#KfX5X7$}OM-vynkEH)^(FJMJ(V_C$3*7AhO41?y4lNR z3HH{wE5hD9yTPaL*TS=?u}A*uG)gp7-e9X?o5TJ1SHIQVe7lWs&gSzUgeMlwT#yxB zt8W^w8R-ziIB?0{g<37XQgN`R=E95oSz5%f7(VZ?Uqa)dYr+!qk84WLv=YFbej)s7 znM_Twb)2D%axl&lyy)EpYmn1Y6mM>_|^8frZF~Wfzkn`y{h?v}VZ#THTLV|tX`^G5Db&=Z@i5l%v90sujEv|rVjgk(h;wU{1BO$X zORDD%|GpO%xG?7mgy||kzhkcN{j_T;BlOPtV8iJQoI9mHGdT=~!L}$gBh{DT4#Ju= zO?_Fh`x^1y!h}>D?KwvRY56`*LGN4RJ$|!Ws)m>cDP3S(@9E^j9HN>_N_K!o=$mB) z*WKw}bmDT0VH}S2t#nv!&p_qB9*~o_)`MmzHEf@)pKs*_@mPNI8MEChWg0alZRzkL zxt0E%6>W4#xWAIk+Xord%8BEt@dpN2_nz}d_mk(hqPTp_R}`OoxhqcNytdnE#&06( zz1;a~&9jXG;;7XmbqSOALN1Kt|KqXezrUAc5##hti*pAZIqezWq&Y~hH4}fN-nq%@ z265@PPK0yX$g3_**8X!g|Fx$<65cS`a1{X41xR-42wg)w{+i+>)hu#$G z)IYm&jV#CYlX)IF+Yz2hgBV(dxLQ499qbBI(CK)Il?}wTURs~0t#l2djau0TEh`D< znM@OIc6Y7gt3fXkgA+({lMTT_^)esPsgNB#4O#ox+a5f}`m3rY5I6p(Sxzf7C*{9E zdZOPMwr1c=v+t9S6Yx|)zC)C2;J2@q0RlIps~J{C`ef)^>iNWujabtiLsO5I_>=W6 zz0itkTK2P=g0Bzd*C)u@SXKkCaTL=iUHOlyja|5BiKab0)g~3t9BhXf zJBoql*ybDo4$FtLukD4xZtys{I>Ud76Dw(}&!q=i`vF|fX5*{=A5G`|&es3_ao#nm zXsT)zQB~C5wADlvRkf;WZ>p$0N{PfOYE!F5&7#!aGxpwlMG||*P7vXn?+>5<;GF9^ z=Q^)*-_PgcQC%bTz*BMd115ARPX;&WCSolH^i5}a=8#Qpu+_hT93*r9v31OG@5K)l zL~E;+l>~LMwcg8?Dl8eSHl@{BS6fsyfbVKW_a)x9-x1;#>7iZZn&rY7>Wdd%R6uC% zgXm0IcI*$scUj$>qxjB#^^tQ%M}iRUA{v~#{;lNBaO-mSm;XW$0HxPaG>>L-3)kmx zB5uM>2rGeP-F*XJxA_IPTuH-Ar6Wn2+vHL^6{~88X8okpC5Ohg*#*s?<1K2NDXUdi z??2*Cj(>fH22o3_nBD+p9G266NqR`c+wn^c|3UdfMkG_Hk4+Gvf?M`&9D&HeDwV1E zh+_oV==qsbYER4I;3%qZxHmP~STb*evgSLUooTJydjM+o@>}j^Y=SsqTkC>0W-?br zx^B2dyI>~;A~p%Ep4EvwfFNcaF$GIOL=CjFqJPLYMTTyb1^_I*Ke^QZA}Kfn^Jh(W ztqp2XpB!J0V!(>kanZ9L>p}VTfC(l~GCOr?@06TTRYSD^! z_xjFuVa}jsq{&~9L(3EXu4$Ki!}OF|#JTlje^ql_k*dkm8xpI??z(>w%OJB)*~8p) z9`}9TH%~6le@{OjA~P7E$V>onwt2LJ^3=7$>{_WV>O;hFTLb-l6gaJ`ZiKzbY;Y?J zyHwuAJ`W33Bh+Vug70rp#q-9{SaKFQC=Q@KI3}eRdmi4DUbIG2i zxjGm!dBAdzrpC?ISCP7aUiZq5uBP1;jhymZJD9v?uXQQ&UeZ9&m zyfITFPM_YrA2@05_hUH&`*Fk2)&+1k1e?D9n8o+x(enJ%M@;5_?4MsuO8&S+yF0&m z%8QpYdA5DM;qw<=Wd5eZ<)GRV{u43`g9CiEdl!zfUH>IwpkU>xER!>i7I+2GY8ISA z+Wt*wvG3jzP&{7r&$f;}e}Ftsp_IzQN-a>Xac59m;<2u{+1?9;(M8eM1-_tUf$$)b z^9)ON3zUmU0WuioeZB8qef{5A>DKjX^CG2>bY&+fZzVT{(U7^*++4F@rpSdRJrk`LNjYmjGrrkv>y=ZJ z_?{|~`bwNr9_Wn7CLBZ(@N3;Np1qQzWc4;_Wu3|$`opFqhlN82Wndh=pyUkKgp~5; zc^g;HA|j$63scUG=hIBFfc{bI|2?5mkuLD$YzGO~GU_n|O&Xb#NwtPUtd3%AJB-k% zZGTEk`?%ua?)FR1S2U)D>_j~lVLC?!^D?Qv7gShnK|lPDR4$1TPl>>V_Ei(xW4&>_ z1{J>k-iNJS&{*ffj!%8x`3-mmM#HSZY{am3q?+vDXLtse2b)*t3{rqF(6}?Pjm1#1*Z}a*v7-6*6 z|NSqIc{8if%;(ET#uZ`I<~GUH5od0OmZ`sn-3O8%`o2bqyiSme&v0k#YY~4u{6 z!aMNr>sAi8By+Wc>lB)+`=6du?+yft4h0rurRYCq-9r^vXdZz~EZgYWeVp8nd@0~igh(`hXR36(eUWeSJCJnn=Z|_DuW(-N z6T0Kaujp>r0AAlZRpz6{{|>jfp4P1+kuN$-3qv3meNy6H%^A{49~43Eqn1)1KAdUT zJY00*J5T?2Xr36AJBmfdiuAfUOH(z!e$%R`cKI_7n?^SljL??1OR^~VW*!mg9zpnM zbJrnH!!j z6JLi~ByN?5v|_P6$t~`!lTEI;yeAltPgJ)b><6JlH;GieaVFqvSVS8jTfZuy1~gv}_HX5Fe_T)3pI5Sq0b zNh|BK&LD^X@G$rk7Fhup2ryf`I~?1T^&aP`jeRda1REF%Mxi;_FGkH6iNU)VnAvj{adjN=&*SO?2!MvN-5f z;7-w6aTUXV5A*zfrCJ-p>c!2gvJ?WJj4a`AR39C`dFlG*!OOFIy)Dis((y}&6*7R5 zC8pHxgm1^)+4dN#_;pShKSzvL?dP(px!d*}Y^S!oz>oXpFCXC*2S;+H^{>L|PX7zi z{PO-LVwgBn|G0GKboUP|pxt$jX?|;`sRwPdA=Xz3{RyfZqZ^Fr2#;udH^BQ9q0UG| zWlEhqzd^#eCF%i0M$3ALkLcw$+a4GPa8?3`)#8*fQ}Nr)NF0*hgwqMie0>muQH+3q zkntDhzGhQ2{Ll=x@nknQ+3+TCIN{f$++ujKv#cK z-*puI`lMq}j89#Z#q}2AYU@ei<@azKpvf}7B!NGGB2BwA#6BtmeKoT9zwH7c}#)vC||osZ9+b8 z;)-aQ^_+R-@-=|~e^ES4c+=!yJ-(JQMo2j#!mM~JrQ2X?hgA)^K+Ph8@|-4>^++c9 z!mXQ!WshSydf)I_$Ks`OU-naBsHTer&NI8fUB(!jwOTIR?Q5rG^1Ijm5at4>Gk7Bz zBm1F*jEKiceEq?Oet7`>@3YIP@YBgA%fOQ7AuZ@;3E9rS^A^ft#1Z9IEhb)Q*589MjSHV`6FV4k#$AJDKjR;CeOJZI|Phqcp-Mnhrj_~-Y zqy{WDrPU%++HpexLyv|nKR2J}+bdWG{zN&83+B5Vc-fS(T&bGu5sSAhmx0ia@HUFY zS7Re&QK9q*g{qi-T;zYFz;-W%a0E#=N z;H8ICv8eJA{PJ+ zHdfZPFNZd6r|DE!+jzVJnZ1FUBnh2MBtcX`x^=t@2sUhcMT!w!TMy5_#(k-nFTL$d z^V>Q0J8|M81U?0h*8!G3`Y6X$DRiCJquTSf#`Ml>lHXq$SXO+LFq7sG<_J>1pXllTE5(F!fc1Q0YgnFkrK*aKtwWreV!z3&EvT%D(pmNBjtEe{#9UDK{! z>6H(H=A2fm^m-%aHx5>+9NtSeZ57w9e`yvR{;a$BrVGi?U@CSFaG_a8zK+?td3Zpwu&-S4{(X)^d8g z)DlJ|*=s^Ber|I<9lFaI!DFj#J`~uGWx69GX5ytvVF_Nl%pH2PqO1omG`Ld-=%Y6z4L_QLc3v-INyi3 zRrIJFm*9i2ZiSt2r|cbL3?cStG=IQX21j}`d|;Xz`s12E+;sC2*O=RA$9U(IXG?Uw ziB3xHMe|T9ZT;xaW&WR^2;W4FFP>XuS0cPmw|`{yHe~{fbV`L2{pOu~Otbx3pO!ZH zL*}||>|HgdY*b|qUzM=#m3&FF9t>gS)iK6(TwOlAeY3RmFKiFRX14TL6o4;{pN_{P zTfNA9ZhxtRno6(10WfprA-f^|6E=t~=5N6jk9Re~{cT3>MOxSw-bW?0aN?L8+Jqf9 zxwjA{JV4MVT>4@fVgwqx%E^;eYOIU?&UYL4zu{_i1U(!S$j``2Q{Sl05c6azd^~WX z&mN;C7@^mYjxXMgi4mm9R_KviM$&RxT}~=1ys>cwXonQK){@Kphv6)k8eZD}#riK4 z`8;Q|6o5BtJxJ||w%;b4_Ap3Dc>PHbeOsCb(-JgOv6a)UR<{fHP82B0!XCTYOBjot z>qmz}ddJ!a?mHj8!!c(t#<1nA0IxCeme$Tdg*SkPQyN%U z&!ovu!)x<>;7cRLAIas~uWbh5gvjOH>7G*=rO7%_)tqx}Q>Cc)@>RmTXE>1A!C{Qr zifx)sTQ5dZB=y`jY~%Pv$}ZsMwUG z=&2hD#9QS7s|E-?k9v!^ek-!CKF|CEye7yA&!RG82)mv3e==OfS10abB#h>;6Znk> zJb^xK6y3Q ztCg@h+8aV}Z^%S+FiPauq+2u8J@<^Rmbk-fqMcgUDc^X*kZMpL(!KGH9?OO`LQU}m z_vt*^ydBokXaMDuHna{{aafUw&#s8&=_gu}X8k2niB&V_1 z&$do|Rz(N>Mlt4TN~ZC;-Ix(mYhm{{Z-`qV?4PQl7qJjN1x)7sVNJK2Aa>u7sn*Yc zGDKs+a|)kpP|slP@rGNgE8ou_(C4>&8J^4&j7{}kJaLUdb0HV9lmQ5%!)06hiLWfZ_IdfJ5wV@jY&$uk>otk(ZMy@7?nMSTbb^uzq)^ zLQmZA7p#N+S?Dt-uZLX^d6#VYZT=CJQQ@tK(Q@lMHk(YOIBc_HRAEs`*w+PYj`@p` z2&o2}PO)4rw=81Qfix&PTkh6XQ4!jBt+Io1l64Te#;$>#Z1A%UQGcHu(hVeP;g@LJ z)_q+wvw0Sz6D=T119LG3nS)RZKPVS&T;14-%biRvW=R*=>(ax>I-q03VrkZe-3&jg zM@5n^hyKx62bwe3JUgF;=V&hn?~ezdsP`=DNFw)KuY=|e5^Uo9H2cFN2N*{F0&N@0 z3T^-*OH~cY*jb#b-{nD)(u(j*cB@L8Yroc;a6r%5h;18CseYW-5& zd6mhbfgRDYyV=nsK^Fj6qg01xM=-f^BJXYQ7NCdT zpyhE5)&tSUGJlWKhFhcrEP^^!u5&3liWC>iGx{b%@EV;nX+6Lqu6y_);xct{A=bSa zdvX6b&EE(_43)i=VelP_6pFqoUGznQ1VD<`At_;tO|x!#N2!ejZh zzbdhkl5OAx{mVO{5RX2D%76~JDMFw+VXsV54I2z79F|HS-mbED#$4SZK?g9 zSox#C*uR$+vI-+7zGCN`?Wzr#WN>~pAnQ4ID{l^}x}dSsxwVwZ*GfI-KhOOKdsBlw za2#>cjUpMbk_*N^zax~2W&O{~`I?2v^-X72!{?RwM=c>rA+AjCE^SJK%8I+Wj9PFA z8QV`Cl(?VcpJVH`_HY$``<5}RE$>^VbOP zN`hwx=CY+xrF=oH!#nDMs)afxdmVoC!W~&5(a=9*zgW4d3HR#l@uPh)wx0zrDKM#a zvhF~2%(`~rc4kcVJ%!b}h{Rk3t`f!$rFdEI+8EHoYXneCwD;0APT)1!ICt)WN zUniu7Z}3Ax<@rrBc@%@qKrP!=fFwxx(_t_5Q;A>J2}nI0){5;)W&CaD|FQs_xPr0S zx^O~U7q0}zL`vV>3HG|{;jl2#kT|Gk-e%Vn9P=`icxtZ>Zao)oah7<^k%3n)D)kaT zRjVtth1<8+P4$Xr4?})ze`&d8L(=p^P2ZS46cq)JNX(#(V6~j*mz^l{>3fQ_onLAo~6RMTkP_hX|0k$aHloWxlF? zau77b-~F0}GPPNv4d!4GfaUHxWIK%DR*%kd6!vXP)((NCV%e|27e1?-!iXdU&W5ca z$US*203mZ_RCPmt9CcPx_hey4M$|pfG2hR4**i$vf3cASY(wDD(ev#-3jBu26BJMe zohuuTy*#Jc)UcnG{QLg%JJ$d1IWq?MSNREE(K~kJv}JrENH7X&ywh0A2+xXmPGxr2 zS7~Z6J_ObVT^;u5n;pxf7yKL7y_&iXd$#g7OsAtK=HKjHF8m^(KU6f$)y-sxX`o+%%G+=#Z+Nk+XRsh8D=Xh2rl0go z`wt_y`PR(`wRNz*V7NCz7AwQSdTD}bs(|XBtt^se=4HBO?(NLAWWRLk>xGMRIP9hv z-P?EntLJEji%ePi7SHb)rGcV8ixG;utb}=wr;8boU?qzXnlgum_OvF&Fqh)eoWd zVgChnYervhjLIS=3RnSQDLyt!Qxk2q-^Tug4{zT)4@OwYH7sapGQ_fo5dVv^>P-}W zN@n_;SH9P1q<)@=zlXnDsKk6f<3-~iysi7gKZT>TmU8?u+X16ZJ~8NC84_@dkXR{} z8D3rYcFEA?x%5g~EcNqCKQ=6KO-p4gy;KpCH~;X6lX!$BsIv%6n~ zDd!Z7%eJjQ_;$q6JZRMKf#PXk4O&$s(!rHZNp5yLM~0^raKhqJDe+-RmKlbMdfo0w z{wk!{aza_&8qfSM&9LG~p<>k6{Y9xiKIbVZB-VF65*)OJ)#1OUW=pNBD;+C7sNew- z0X|klLz3FqRFX39TcO4nX({nFPY!cmQdlvAfemP{w++Y6wUHPH+iXvh>`x*ZfNY|HrxLVw2srMH3&3s)c7S{;+(e)Z(q z-`QQdhcoDdN~d~9HuOrdvsT+Y?Qkx0x$bp6AeXDt5c$&}s^(rN4Hq#-Jq!h1uT2M{ zk_ExB5O&t&UNdvs%_nbeKhMW<~`X8#=tpl6K29hiP!`;0~ z5a(DCXu(+aK}8sp{Gnzaoq}#Yad8!1aW26Z*H|+zAu9Uv%ai(h6$2d^2*i0{Y<~*J za4z4C?LY6%JuXb4+1OPn9m;8|YL5&X`Fka!Z?wQ>|C+f$@7Jg~gDJzS`gQmnRRaN3 zA-~u?k_O8|`f*Z}Fj=!ifuW1)huB_7hfkdkZNGsV>nbb7iLXy|((VfkYm5;JDYq~K zGR$5(RyI0vI181fF@j9X^gxp;t20YBv*gB0hVYl)uQ|BSKMroB>Y6{dFZ(m>?mX94>z zSi#TVPTF%JI4@g_mCS@(Fr;a!pC^LqP^3rqW9 zi!kjIGQ0*~Qw%5~3GVLIsc~GVwzD1`=b;ExI+_w8Gf6WSy05Z$2#z)DBXHaT@7-Hp za@?%vI%ght9`Y45ZPmpnK@z>0hnS4N;YJ2PZZW?-H3JO$wQajEncUg!bDFrK@Hjim}?j%TrGm?%(poQ!&_M z%<9L*3)H(mN=&|UH4MgbU?n1Av#I7_zr@E+w!J0bH%{(pheD1V8p*wX@1m{~Dq33H zYUkSM%ADZV{$Bp@`Yz6|N5?Nt_&K+eJF^yzz~AY7utOgajI#NTcKK;|^~URJ707Ej zkbF#e0q?BvhbGT{clG z{(UgX;2eTim%Xw2LExPnrMfD59dV;cib~M`iyqW3Atk|I82o^)q;@~}z{j;J-~jfY zO?~EfOi57bJojo1Hi|>GW?~QI4>+G=yH0FN&PJce4LJ}O!NiiM%qo`5(L8(Bj=uI& zrl-2Rkjqhv+;{x&;9#lm5xJw+%t2Pp*<{gQ|&)v{uejgO!~W@#+J^23+=iu85h|n6i2Wg=0HO8nH5WJzf3HQo}XQMg( zO-3||^%&LP4|x(9cp%W~V*QEuj&oENJ15{ZG+k0*_tZ&Isr6GnzW-|7z*sM@)&tnh zwffXeEke1jtEDBGJOtyuxfI%zJ@yuP&gr4|tGd@{Wx1rDy_xrB^9lYFrA!+TV$oE~ zYHi?`g;TG=6{G^BZe}xSryM>`9YyVcEC3aH`j@|(Yz~4)AB)8%Qmi@eC(rXiN*3tx zb)UBA*;w8-M|1lQUKX-Zc~yXh5KXl|U<&ot@cDLXgzFwqR_T{cMc#(4?R3KWQ!G2C zg7eHKhDxdazKxBQXTt^2>hsyHwN3GPnj9cG>TI@Twa8>LRX|Ax z3AdeIVlU42*Mb*EVTZLQMt^k07ROWgdD4f1Nfp(L_}n)#->Tg_Fj(= z;_fj;yA78D$(B=_CcX(E0{+lys}mysbM%zk2VPQcI$285){8oUh4ECEJiS5(7^m7d zZAk+9`QS6ZeZ#~3O2eLPU!DEs|wEjhUn!N5DSQu2-jSJF>IfG zbQyO2Y2M5soOA~O=w0oUVCyyNfESwfPEw#xOs%XPi~?v)Eg-V3(tA}FCu?FD%@r0m zjylA@$}7ac%~qV*fC+8h(%770qnOZ<8AfCPI_9VvpA85sbCs%p)uZIWv@ZEhJa8mo zJjzvsd09P*->_km7CR#=G!@$N1LxpOgc;(z2X8J&Xd zEiUyAMS4Mr)-||5o;m=$o+?EkUgSQI6Zc&0XM(E-!oi8|(ug8&6J{j2%Iq8tsc8|y&^MEd%bg8Vf!7X?9Mq4s z162NdtnTe}%*E64o_B|J6?XE3ZS^sUnIxzP{r9dv$i?q(=>v$!`PCC#W`O3nObpZ@ zydSZ+i3u!|a*J77T&uNx!+;>ez0aamdM;zVxm!EVnD5}-&h+SVK71`glJ3`G$BA)@ z)%!e*-{U3*Oy)1fsIFDZB+;k_%(Ze6exMN-+NmSOV==$=UXpn6r}P+Z9pF3i+@0N2 z^&YqxSq@9CxH5B#t$(i3iYe#W;yF))@~PIL)W$9~UP)56@fBSET5ar6Vw0k$MFnbq zA?)AAmd{ziinIpnZ2bkf!SGZF>CQ-oC|*a>$E<%}7g)680`d{5To&ze(Y*^#_6`IP z{zY{&OrE`cz1S`BUxCkw}{kb;lg?*OinWqJVP-;O z5I!0GA{{rgE@n^nKHgQ(5B^GC zW9IjGT-51rZI2cIVj0yLc$cR)&lm9t+`O1zr!5yNGz*+aS+= z>anuaF`Nm}$5_Kyx;HzyQ|g&KzE6pem|X~^5H-%$WD*>nHBo$t3{b0jlD%NW#NRxl zSjcR_fWf)uja2R!XGB>i0qz4ybKc}Sf3Axwn`!7AfJ)!q&F)yWj4&bZ(pTiz0pw?} zjyq0o;eJ$Z5Q8B>XMSCTTpgxMgWFr3%o=tsYvozjUHzX=Y}`4_-X3~OKR!2>oC@`3 z-*n0Bb-LJi7T#XE_3S+zQ;;A-1**Qm^H8Zyhumc}(7&F^xAJ7U1TJ!TAapuGyBQ~- z0{&*l<@viagG`R~4y>nquiC=fvADD_4zYMk!pB1m z|ILM3{^8;xkim=-$MV8W{Q$tkmHstq%oeSFeoegXIJe9O`S@p18$Jy-k#(QJIK;_& zOzu4qy!gbNvK-toqfId+>?H~Ptm;Rcj znVKV!V_Y7y`LnF3lfdeF1AEj`Py*_O0tIy1f4(;nz+#(i@45;c?vO%`n5AIFvIev` za*h6sQPA4e*EX~6u~ikBu+NWhC53XS8m;=@Ot_#NTyFxD|F#TgezSSRKvB|82nexX zJ*`+PczV5i@>qhSKGw*aWzPa+Bltva_1Tg6Tf$?^_>i897D~(t>PPZq&jhn**o6Y| zfpzV>ch9OCLO<~!DsFkr`e3Jl`S$HJNlT^Jc3(8m&z2f~v&?U^7eXuWm%he`1Yt7F zC%=zKs(3kVxMe~OH{{A6#RrR5zdt+q^9&%pwE1L5a~%~L>5`*AagLko`0hRm%5zc8 z9g1P8%RauyiNX*VodP3n!(2+}$M3*fjm{(OQaY1`U2n;SirB7n#^b0WPa2KX!E z72vK|mII-@wbgQOS@OB8oSk31x+B}g{A8QL7EOC^EPQb|e%FP=LqEWQ27DbppO8-A>fysq#7&93Ff3@N-YH>~0eZ#lg?a#p5lZ zc3%O4NUbv82tpt1SDLYxGT}oY8KQUI+H4OXI&C8=dtmO*bww~EO@|I`Ad0W&{clM^ zuzE%#FVFrP1e5q;@=wv*L1};nrfE>MKtq`zwo>u9?qX>vhC~hp6f=)9`BV^Rb`Pi2 z-0~f1m2J{$$!`<|(X-Zcci;bDn(ec^zklEg@#8j*D+B}r5U9+8b0@`r#`b_UGTg(? z3jv>w_JM!)s@KBUpn*}Ji=5%~QE(5KL@sUC`h;u8M3mzU*uKe${WTMTdnCnMg=V$i z7|bCOfyS3Qm!iI!v(=pl*za6ANg*Oy5B zf-@})gVP6~>%`wwNsre)7_s~tsj0GV!W)BIC~fB$CaOtED*U5b8cJ!Q`JV78m|5c4 zhaKqM_gZUFVz*2b=3dNEB08m!qS*w&JtG@|Tys5l6S6@@jid)DTP~S-9OkW5yE}o~ zo-4jPokeU}nNm$z&jR|8RMB`Zs(F5EzTxo)6#4(I4C$_#4$xo}rjWf8o-;J1SrDLA z)voH|mwNeWYRK8Kb_t|E1_s5q8c~4NjQGNZCICe!Z+Gf( zxqeUrvaAoZ`#$sZ-5-g+VJ3?3nu11FZ?l&dtq9{ zQ{F~ajRcVK(mqqWFnJZk&LGTKg-ZD2Dv)&%eKi+9$`mhGY-@Lt5`qvx9$LzOWcYB? z1Q`0jvApU)inAD%)l+MeL#}T7Yu_Jxn@TrwVQ=^=D(ZI|%e<yxc?a7x&gE zXS5o&+_Y%ej{X;;(OFiOH|Vj^OZr3g#I+@boZTV>CFbkQ(QdqH z+|0cz?-1~z5qvI4KK}j(k{(+i4M~5eRRssW zBtlNgm~M^V!X#gy%k80WxnYA@P-W>h_%PGjV8iHwWuPW7FU~id;z`vRJO+Bg|9x~a zSaS2`XEa(bwvb2`*9$4H3%?;jl+n$1J};iJYO^Rd!yxtk;&4g$ob5-bO?Y=yA`pTG zo0bSD0q}yd71}Zs*Uh^(fkRekis6rO=5JhLd~oR^*4{5)zeYXAP=DFjG`yrExXd}H z2Z?Ks_cyctvfgIKMUK##b+*W{83*nxHWBzEu(lPN7orW8VBCDp-HT;KlyA;#tU)!hDh}`OfWY!X1PW((l&U==e$UsAaI@%av<5zpdF~W3@QuGrCc0 z@SC{WwoPz9LxXetuohXRMstQUcnzGwfnHwD5f^{<0uBE0-$+l!d*?Oy;cr6m9@EI1 zj8Ptr^$bT1m)2L9k~S@7JjvWap5J__Sr|xvp(H-7A4((ut2IO-C~ry32DvxbqqsO^ zi<+2Gxm*5b2B>SIcR;|=(zdoZd{w~J4~%VXH)@j~8Z~Pby4{7M$JNUg3gYkkP6%@w z?1bLt&2vAnLc^eY@uI0R_03j@OxkNZ4CtJ@=N6-drc+Cv>E&HyeVN{z@*0wrSV?4^ zhO}$`|CIs0H*Lb(k+}fwx!_$;%MW}MbJLF%cMKtTV8b=0#*4T7fGB{yQbsOcXYOPU zti}FvZU`M3@r#)m>D5OxEH|TO8bdjUu=VW?AdXv^P^Znh=S}xM`lfsXWohNV&3C=IEfMni zQ0Sx~U}mQ<%<5Mm*&W9-;tBi!Ed~U-{i~t4tYf{MF}az{He`6oux83}=eBnJC2vg8#s0gPzTfy~VceTweX zPcb2Q5BwJR>Wa~UsflVivq75QJmq&3WGXM1NdIaY1nh-Ln#-V(4_zbLY%Bl(q}bJk z{!6^8_vQm|X+yu7|imk7u>R>6$ z0Fu_h8Ylm5)EA>n=C|x2I?Eo=SH$B1UC9yv3^mF0c zw=oAG7V}nFLd%%uW^&&P>kgcxyPxl>T4ko)7cxjV6tc`@N(&%{8lU-tE{gv(Qxv8} zmQ(G@dC_zJ@V zJEY%IsqBiOz9ZeC?`}C^x(%wX)IVGRfbFuEk-c12#&Cc922L3^_(Xptt|h7wup$dcMO0s+s(`%!oPKJ_@Btfw}0u^+_d`TeX%+D z505<%=?9s&28qHKlX>?}N)t2l*iYiT_w?+VIIRn{!7Pv_*rFLX%|uY#JwsmA=Xoz^ z20=L}pgo!DxLWC3OhupG&nk}IsM&)$wT8}&6U}zb$_y37xf37`lV#g~ALEKD3VbTf z_Th4N2genFzx(W@VUsgjf@3+4Vr!pwPZY*TH`)IHlQIeUt?1xe%{XFR%`4#p?IvKm zaa0z7x=c`6SIbrF%FVToMKjsIZV{GUi7afXV$?*xXiBxcj@LTU?V#>({bFoU#%#tg zKJ7*SV%1ou((EBh)UZkPZ<`S2Ht6b0wDQQ@e7ISQmU2vZ{f2=degvT;^N!I-A+ww* z(@muE`Y+QL<%Vtd11H1F%1_fjk4UR(tpjyhK9ziT1?{4ntSr7M9Xc_NG$RC7Oc|$c zb|f#yRCX0G(0%sz>OyRsp=OEbGmNK-WtLa1?Zn%-S*}m>>Ib^xvOp3D{-Ti-ll{8t zN7R*E@f~a7TPYtnMX10s`DANH5xdV)j8-QT*N;9aVwB=5ygX}x%_q-llizFh!n7wX z&63Xy4%jkBZXLjh(CEm0Xxpgqa1l|mGN40-;Jpog(;MF03))|Hw>|EW!)(Q#D!;Vm z#P&g79Hv!qm!Xg(K*)sEe5oOMY^G|fhOm2Nqe0!ghb)R3JkV07prIkQcef+tR4p#j z{9x7R(Z!BZi-UdNfK+*0t{^@{SSy}S5h3!@R0vy^bQu~N8f0yf9pr3Y@Tze|xo*Tb z3F4HM{HpoHP1F0&^Wg?hy5Jo=a9|DG*N~i#oRW_oSgX`sy3!zYjdRP&u-)(J8UBR?n}M@ z%8m&azF>lx*g?sBUD4tKd&JOtyM!u zblqZ*lZ%Job1qcXCCco8!?A$Wlr&iO|{%OXP zjVSna{DsM1vx37V^DO-5`CMteNyYr*!zM^xl20|6wZ=t{qrUStMW3ocXG*EPx}BWF z;J-HFbWYRggSaQ}R-D9y$iTMTF6qh4{<_3*_X}kG(c^3i8TDC~u!}pP5&PXn!A`;$ zjXh6svdqn6Hv`}1u9EX_Op0fBiW?%*R1XB!(h;4{jW*B5zC<-8+g7@lonOV@+y_RO z-pMVx|BFYtaJfEZ^FIfw01?K^b8L^ddz4Sj#%-{(FLR%?oy@`hG1Z*JvopF=_j6mB z0A9jh;LD=(`p;Cts2uW0FA2UssxP|)P0;Y)k47uG*+ttlX2VK_t`}-Pq#Bv&FfKca z<||rJXZsBo{3L_!y#87}CX2Bsi7$MsXP4oe(pwG$&dub#Io|c*T@@sggQw?>(z&hy zxqSRv&Mp#lEE)G0g53bT8YK}R7mjnQ%zh}qw}Awrr;c44D0@cP?ge?;MR?6*21N3Q z5}@4e5+S`C>gp;TJM0hEEO^w~??G%4s&h97eg*jY!za7$qm4)9d1p9@=0u1^ll1^*8TvUn_1uMs4c=4i-p?zn9hnr$FFmpWgux|onN*A6sZY5 z>=>=Xw0J?)Z>&<6B{h*si_|MQX!nhV7=keEk4YyzGTO1%5}EwE^Nn+zjGwEH#FOzC zYq`o%LX*&WZo{j%h}@Mvo{AygM57&(?{m3=hO8;d`>}>ZCEasFrS@2Uw*I{L`!~2< zzZ*PCa*|cq6x$r<+HTe;v)p@kk@sj$dq>O#;69YvZ9|0{Y3$xhvo1T}mOR!0cMzVQ z2QHTzxw_GxEG^hOuh{oCo(!<_y>cb#nO<-0KgV6*f2yX_Rjis-8wk6k8p3twLKH3oAc;P@UTZ#lxYmU zIreFqgBVT-yRO=j05On!1OJ*p1xYu*2t!)29~3HsbVKo8kfZ4L$v_v8k|%jgXy6j$ z5yvjds{AzNp!vlJh&*I{IX&*~r%jm#{TUd&J~?kgS-Yw&Y-qua!xFWO47}mg8y@HM z^I7FUdi3+|BF~yTsP2qCNjg#cG+1|#_g$a3E;m@!U!mXbn!lty$GY%%7(7HsXal10 zTTgH+Co9wAnJE{a(c31!M)MY%2kJQ@;Rno_Il~kcq_<_i3ow{TaT_H`DzHd397@smDgiEb!CxjKp(3tYHm(;VtiC>M=q(P6UejD zGT*(3)S;N>?xodh8BhCKp&3RD#-zCli-lnS!+15Nj#VoM?;k#jfHx-Jx4bvlpeHM{ zBiVy^G71&IvEyJm2c}XSZd#v^9?|ne4doU}R)%rVz0&&3x*h+aXhA_8w^8?cMM=L+Ed-pz-(5Z`mfn`F>)@f=z# z6)0;}4E2X3Y$=>dAA<{E+S)M{czh5kYYyLQVabH3(g@-Q{B>2@m^H)5Sm=GhyNCl{ zf&@i$5nJURKR){8iUz|c>!-{Y=CVocacB^KGVgkz7Z17jX4)5BKCsVJ&9?33-&^rP zgR8wAcawftg)~q?G*w0ylX66a)Tq+QTeV6VMt2eHS~$kt#IivFzjl#U74w}(X3gs= zm`SJHHur|)-_NcLAPRTVm>FOTs)JBYit^}=Nrrd9DXW-)+gsMSJi_J=M@<`ynb-e>Hdb^iZAAB?xrdED2x)DXU(G<{< zKwqRJg0mNloj9FybO2x$45)t;MV*x?)vhyW#8W}%?Ziu`5$rkmx4{B?PRO)-jhE_g z?d^{*9>!6?{Ii{%z!*2b4_>lHw-j#Pe*_!v1RJ59)5xzBVS84ac>*H}dR0PvolZ1hY_ND%APo_soF>CvS;m}_u$Kj-X6x;dw<3nHN{VxTSg&w!b zhiRniCywPmk z4I;+JYhv#S`GaFX z_Qb4}-TQl3)~mqyNUZhF1SR$HJ6O8pC%^Z<-cEC22K z1)?b-`6~6yY!wh2#*8lF996b(XH(xborRSNB$;f9=(Ndttl<#w=O8Bi^IOXXUvH2c zEO%S1Db3zR6q+U%ZG08e^=_4RZ*t|grK?)f80^Arj?l{uaMu|rkh4vq5ehD(;JgXy zeX*=*-TSWKB_}Gi0@Lg3CNR$N@nAO~d?HB=YN?H&V~O@>vX z1B;*rm!k1;#mjIcGmPtZE7#wZ$`=7MhK09?SsK5_ByoHR;@>#t6_>wu=zj!c^a_&{ zr&k;+M3szo;VH(t*X$m@7qnyV&T;vRFv!sC168YEy9L38(-1TSy!L3l6DdtCcyY>e zx5hG?B`dX-tss2PzEN9Vi-7?yt4(+;aAeHvnXH(%%cm@EL3)pzI^TK^C{w13ZU z@2{C7JK99$BL53&r*M*-ODH%AJHSTa?=6(1A{xBdj0e^c=_Y$yxjYuYg7S-A zvP#OMn))C?>8zRo&AXpJRG&)x=Q5S$g*8&@-#4Z)YpS?}vjCAl94EG0nSX6pogKW_ zVW`>fQr%(^{It&SC^0~ zPTV1^hW&&S&t)@Ph!-hEA0aGJ^LbYvWLy5dwrUi1kBtr}3UIvm&D$YEje&&!Sm`-> z=!PH-rfOhd$hHD|n=`mYn=4~_*J~=0`kb|M4q#^Zb~Ktb09#eChYG6`lgIe(SzW=l zd(F>6+lZ{*1nF;onGQ?T(c4Q(qBl1Zs;h{HZ8M@2_BM>dEHd3iuzGqiaPoGk`u*)M ziU)Pf;O0YT80_+>$PzUxN@!c~Z*zI{fE>~i<}yjI#$?h1OU!0(L;CM1J3YohmPGvG z0A8|VOLkj^Zsii6*!#jP*VI?{VRC_*kA~zJ*{WQR^%`Y;px-#@?`-3iDT0C(?5ot@^Yl;oKkaflConcuR=W6Fnw@h zw*1fJ{mo#sqKfb8(lz^K=}Qk5lO&QS6x}g16ah|wJ@ry4%`4}gV@om5Yq+H!34{N`QYmnaLtmSe~tKQTg zgelFg(GO+OFc~E)2wP9e!FaJ7$LytmUw|DhvP{m7cTRCbm(%)8>4lLJ-iy`$cG61U zVFD!6vLn@oHFYsxr2E!uc=ABl`>l+K^};T8D>+3XLqLq92NR?}Z(nO&79J*LbW;lq z19*)ik|+!m*kn7G-FE z)z!!5q;45?+4U(Cl``J71x5kB`BH$Gnheb2*bwneUm6UV^z}auuZ-3~xLLR7A+C5S zP4m93@E~+-X;Cp00P+?=m8X8VIhwh%7L1!fm5(ULYo1MZ&I`d}EAeT4(scBiw{Ls; z?v&QioKryJJmE>91ju-IypC(|0}p>;4=7;1XkC#Dqe z;p^KcT>2gBGC%*ggX8aA!FU7a$YErlI={!ktOK9%apZw<2|wurREW{9z->*)3@u6$ z5>|Q&!I2mU(1}TIJtU^pheF8F?s<6xKhkftZ1t)ejg#?Gy~GNf@A zGO@s;`4dF#{i6cf;Ls#w&-gm<$zOHZdvxga{&*Pq3e|1zlBm{E02O?avd>T!FmQEy z%dIOg=Dc<%)A;Kg2SxKKFSl4{^jN4o< zOp3Hx%a-(F`>*vDz}BX&xFE1`Y%FoR1WQfm_AY8M@ar?5UVf;>pU%)tCz$AzUfN?f zv~e4n_oIz|#{?lj3))s18T=h=_&Kq)!87@;q8#$wy*Tn$yAR5|GbOdnNi}uBt!JN# zQln*BYgt33Ys;TidtKo6_fr~=(b(#1f=y*^QPADRpa=b$)*2SxEmOYlfgf!pP2Mbc z4rm(m4NsKXvYmfP2~jGhR~&^FweC#(lFE8eqG)SL<{Pd11uiQ4rbq8!QmODtKS4^% z{zbf9Qj%h>I_K38g-*_nhjL$mjFM(=YTvEf6dMTQgouT07rAMVYa~8?0oJOprBf3} z?{_x+``tMX$$aLjWdKrxg1JHkz6}q}4~oFuan9&2Q@`Je>T*2eyAx&RrmrMgf0=0G zZjSZ7dwqY&i2rpUTJqjSQwNVsV-sp!Od}mS4HnyHh&D4_)Lk|Cu#M zkn>ayzphJgs8md?J3k=#V<&-h`GJG!8sCXB3Nv5H(*++PKI*x&WnAWle*CJ9-K@|ynBzZp(3Uqy}~ zJ-0bymK*xpE^H1q`zcJgxKovDq30K~+__`{pSmC0J#zhLmVI3L?e~I(EbZLsVIdwglI_aYqCsoGGp{n}_-1Gw9iEw6 zT%l{H^%MUUJt?*&Y#%O0n!+e)<9>W$>z73FCA217#Wnr!pFb!2uP1~Gd9h=CO;5RW z-?}3{P+0Y2Vjc}ExB5R`@-D68{LLdyNu(`c+f9Pk=iTwDb6EVSg=5X@KBLDXJ3DVz z5$D|>QE0O00s8yexB~R@C;E30dRQVXkXp&>{ajQU{eL7zV9@mUM;CWtE;iTZTTIkX zNZ&|NF6-lxdBbPf#YGGJ#9tglT;;_2vu}xSD}ugF|EvBOp0aU+SW^sQrKDYcXKJ-J zVsnnR`J~lmEo)`5Rcee`c<{e)%F2q}JVpiV$`U#NmpADPJ+Rz@8AVN|hFT7P{sYEH z(nW!-KP`KfHix_0o3=dNpO7qBUYFr8uOS2?!yH8>7wRsSxV+q_mUTHxgw;eo^E{bY zTxV{B3gLK^s0yRb81esuGEEx4sK%tzybiU*i-TP{`c!8q!;S!P!VtG%HA~kXW0+tR zC@-|I?5#asp5RZ^z_W6GeuKMfX!r5(b5ytz>4w^vq&3}TpkXC1D`5&c5*Q?-n&-Mly0Q46h=g{KuA7}oJSe+y{=`HUP!QiKbSHRDdKU5%MYU`TC zv{DSG7cw_|K&=!3-+)Y4>!&XEmf>!rr^(=YqO)?6I}fU8?2LibIsozeaSw4LUv7PR z4VG@zbOp>{Jkbn|6+lz|JN9;jDW|~z^WS7NiT6)uf(!Xp!>C{C*e#UInG=T6k*>lm z`znUTbU1G>s*w=e>nGUpiO@X<*pQ3L$dc56Q?aJ~`fl&)S8@APY!M^I4;PEYa9w8M zCwknD9v+Xd8y|&~&gLn7$h-8`p!)Q71QN%hH1sGhC89CUkh+&AK)D=B3har3D0^Gh z{8s_a7MKG051jU*zD_J3yKE`k1I|`6L{k?P^#6*Jz3uoY@NjctLZUkUkE)71Nh;3` zHR+2*B<&Oz@1f7SeZtFD4&UO=@GiT6;gexUPoXGH4Gqi!Ja^;x7!}sFe-dIg+d(%f z0d0`yka%l3s%K&^M!3(5P6aWCW+%kjKF;Vv)Nb1ayb0in1L&L`K#YMvTE^aDu;Hn$fq9tum|8OD^_zsRil+8GzMuUk+6_ zHOE{U2ZqsyaiD6)gPn}%qAMgk8Q(Q)`z?O3Q2zKtu&=T0-j3~y>=Y)ciRu)vtB-jgPgdCe_Uwta+fTdOXFIA{5` za#PozDZkb3WR04g<=z-D<*CmvX0348l#tCBVwSf1Y*$yAr{Q~&ep5G6QOKm5$%lQO zEJmc2roW${9s*Bz6JgYkz~KKZ8~mhy=ea7n7wi-Fqu;$KhN9)pcxuD6o%m@an!Q+) z`Ft$P&jDiCbty>H#;5t+CYjdDdy}l@yJKV8A^ReiIpCUq)(5t9Y4k;c-1!UQsgjB{ zuAS8&2>AYuWcPOku7U=kHQx!@*owKo3ol8BZPIoVT2c25XH0Kmod)pV4{FwdG28C` zMUJkyeH?!?>qYjx_|9_a!#X^gR(!RKEdC{B%%93)5wm?diS2nkEzwUhAjf>>r%c)> zyr+M6DGAC!oE z5sd_^HFkvYO$VHji}eDfJkjFpB@?lEkZOEAy1kI#7nbP9#AqQkGgMVec< z{*=1bBvdbb9T0fHMiBaYuOaVmH#NmiADF#Nhv0NaILp3PQ@*Ewjc1PZs*uIKaXKfKY=+J(eCV@mnT|9Z~eROzSi+&_T z>-wsq^S^@7(YI079dj7KoCWP+0*_BoFfKaThPQE%%6_~}3G*WBXU~l7a>}}bc(b2; zPckAtC@?0>Ok~Yr?_}}2&%1oXzL`-teNn%lWeaPReXh)#5c3yrvR6|Wlj6KjgeLe< zB1}@5iFsLoyn5w(pUE4scFPL01YmNVFqV5djtWTpK zNo~mF9)G^OJ7j=d(})b*TSYL3MWNMEu>}E=WYqjtbe-hl=1yKcQAl=aJKzlr(23{) zp)Sq$5FHH8WdkC%z)OjX0{DbOuu^(#H2Y#!nM~Y#zbzW-o+wt<(Cl!(G3B)GIZ-!& zFbPR2eErxK7$Y2XLyR~Gd3#&?9^NU(qRL)TQC6Ax%I{K|BMvfku{rG1`>9=b#`*84Ui=ja^ShFe$HRELS_$W^^Eoju>QfhXl-c*8TI- z>}-b#cukY^=Os6Ru4PDEeQmyr57EDPV1B}y`=(AJYoO8x%~v0yqc@^ysDpn01YcA% z-nIC8<)}I|3FQr5%uh3FaxC@?mD#=132HNbvGN$QG^BQPa$28E`HTe1CF}zSO`sO$5*pqM7(p80 zgD0(fQeVM{-gEA_&s)1Sl@Va@tl5IkMW_qvf=3m%+q&*Tf8lgs`O5(L*2U32dj`C; zd?hCS728yEJ_@)PI2z9^4Hp?QyPwUGzAr(`Ow82O8%s8AbkWfsT2z+ECe3*1@{#2?*)L zI8hrpImYw5vfZ&Kt`D#MXu1LqL{k*SM_ydQvtRmc`|&qvFjL_Zh4_Gz&=l&4^I0 z`qSzQtX9pQzQIvkx;vKWL& zr1G9#31>CAeS%h|U}v6&VN2>c@o6+6W}<8q;#Ogl6?cax%C3b%+aQA$EO1#}CjVTRMd%?(vQ=!1)$l9nFocZhGqiAzulVy-cB!worRd z5zB?zYhi_Zj@+JOJ-Ja~DEiB)M*03{cU)g2$4>F7um9~?V!Fp=5@dgcZe_R%EBgLy zQHd3fr|^bCFQ&uZx4QW^mnDjFge0yV-Xpr+wZ;V>d;D1xjes}SnYkbC(H8jxGy+Ms z&i31CpRF$gE7dBFgT-S{Y*mSj0KpS3m^q=pV$B<*p#=H>z6PEer4##RCtv+~pl7g4 zjHHD7F`m3+)4ZX4Sp+|5jhFH}MJcLV!N(63oupWgv`Ah+_GR)^#*mL}B_-N64j27> zn(O~q04ebBtGE@WQ=J}oPD6!*k>XHvn7Cf;)ysOFtK=!wWI+71W(*b?!b|!x0HLOq*PajgnQfdxt3u~6VPp3UTUS2_C z&--&?SDaGADd83MEVwKDG+*MSR)If({|qFquWwL2h0Uj6FIE?$p>5npvRKB|V3goa z1MXTtFAt$P3TC9UFB7#_yUK7XSn!@6c>oOKLEU4C^prh;&*fJUtrAx^b<<1TkQzTW z$;tE5!o)ovsbc3M1w9jfSJTsNAs&!`)A;QDASia5b?sdczIcM9gm?ijmqJnWcDej^ z17%6!Da0~_dUa8*1L#do5UycSWAgR(QqP6* zI6Lq3mADyEW@hdZ6OU<@_V@3EgjDAJJQbt`++32~ugPq`ZX!Pm1bJyr+RHfG1_rSkTUUR@_E;ltDyZ(78GqBQq+M??;fSpk0Ff(&S ziH#FWt#Ec9N~gAL!b98=q072gjVk6%huTsWWw;f)(?T}F_g}iV4nk7a>)5C8hu|L#E-bA-{ybp#*Jq%m)S~R!RQny zwqu5g(jGReP8$$TwUN) zMboATY1Az9h2@US(M&vK%Ok#}cGl{|$S7rPk`j3l7aQ?eEqhX22*&OVQZKmwc+n_c z>GBYk+_5}JRBa@%TFj-164}VBN?R%fYFvrOvinQ8_%Xq2mhXR9=^x*{F7~mk_=JB} z>OEHp*E-hSQzFYEs+gJ2Zk>KBUTJT*KZFm&)p|%=X+~==E)snJFV+VGvDC!N_#73n zHl;&tq<6+yH;lriQp)*mc5u68>4VRBc;(%?=16Yyihrc1X#2f_UlI0xJt{A3BTOx zI@Ynmdy+OA*w)H+eq+z)!syuOwa=5E%56lM3(anH!?uvD#!4ZJx<7TR$0x|FCPN9_ zz~sZ@ZDcz1d7rvJOW0zHE4LY`|F(HPmHazIK6t^a=v#FE9{LteJaIV8d=P#xdNZqp z{b$oFE+TXy4abCd4OC{*x*L<0DwEZe1 z@E6DsXFKEiXsvlqeDu__o?KZZ#E1^p+nJd6?xEs+9Ojuf>I|i}BKz!c?=uqb{j9h| zE8ir%A%xxmB|jc6Nj!8ujo`lYEFc724IQfEcayv@4n`~65An8{dSCmL`5xIz5zjx< z{?c)lmJ>Ckk#BrHX3)H|xYyapd7x^!@tssgJMB&+xX|xf*MC6Hy#v+#tLL}EpW)RrFEi7w+jd{%G^abISI%eZ>}y%s zS~~LmFWklyFI=^1ta;v~)*Wa7d2lmBuW&H4oKH#PzdkBuvgE$ksjHhh*&c?O&ucAw zn1y;3DQ(6&Y)~ry3#7V;3g-$v?ccA8NRpqxMVb;b!5gFJ2!>EU_wcjxv+bD$*&Q$V zlLL?#XnEmL=8bPwS1et=evcYFzD@MFz#WzR$f5bAW$!zbK}tr{O;10f;FB9J8UpGeoiVdLgxo&6B$aywTKS1SnR=^>F6>qgc2grQ{dZK8 zc|E=~Aryff(0fnMHi+@6w z!&OCDPhaTK@&wVjaJrXrRm!X5WJzuq_?@x4o6+M#sKEAdjRd;|ms%fbtE^qa0=w^tIy``5O_Q;hreadS6TxcqDwf;dtP> zx5u3B`fP@}{E_QlJ@2dQbHvF@8{*)>gw`c;aKv}(_l|5~)@q>_dzYth=)`S!bhsJ* zMm9{Coc+hW7%HmSrafgOVl~jL9{h|Vr){?fS}we+&Q$zXi=~hhWS#y1>RUy+(AA3w zhncOk9LA^zI~#^EOSNS1KZl~Bxnw8dP^Pux7Fsl;S{GKaqJ6;7uS@f%Nb-wqWK{Tn zf0)t{1DZB>cq5PjUeK0`u#1!9?Qmq+8KUD3YQR=K8O%5IEjm$bx{#|R)`t8TwVW`MSZw%u1H0sn#7%ft zziIh8TBNE64jK5sHTi%XC%5-ZEN%3$+IYX(|z*-kxNdqZDMj6!jP*1 z$l2a{>VgQ&hyK%|rdrnB4%*su?RR7?cz6C>wD5i;k&1@^hM4qm0-L)Z2c=Wa6RSjR}HA6Sp4yhheZCkLpSwIRArXU zv3nCun`!f=0%}Q5-whC#dg@q}Omi zY@LReo(ZRMz}3*lMV!RY<*q;{jG}sVfqlhnWF7qv{~}{gn6iSni>!Cp?Pq+SSCdxT zF&n7+uRz@phA{pk%YKM4|IAxKw|n)OhYTI24hyUMH8$@u6(t$pgOxRk<93+0sz5Mn zgUF6Qebc#wOo|FncxSZ8IaxUOh~Fg3AEF@`J=bCNHoZRqc$sW1=tI3;tIDLDzm9tA zP)O+-8}M?J0EWZ-lT6xK-ca9tegcqJA^x!-y}F&3U|VB3h#^M z8U3h8Z6;HgqK&}G3}YJS0Zsdf z0gz>``c_GW_m5Wex(8mCj_}mX7bweOpQS!{^=<$!*!f(LWbX%%+^j!Ely59Gqc2rn zDH%_wcm8swBA&W_`{q>gQ_kJZQfWt`UJsYEe*PUg-mFZ;MgOBl<(AefpocVw6eIR`Ei&r zbav=azBQ_L=f(Y$TLMih_6(=VXPYxKB&uX@$8)N!b--;>pZ!kV6^iIAWGBl9ne_UN z$dg_>-h+za2LrPi{)em|DD}BA+|&QPQI62`sk@vF>YzP+eF{bj=6`)v?ZBHRwlwE2 z%I6RDU4{yF|Bef!|DGj(w0ZXxX`%jT`q+L4Nl#(F8c2;>kE*jFy!K!Xp(`m7z&#Tg z*?PX~I177#z0x%j={F@+@N05FbT@QGbOhh@8a=RDtGU%n)a?1g83j=HJG|9|zBJuw z;`DrpED}4TOQNml@u9mR4FmT4mmgRu3DVqi24#VtAwNuTCV!%3<#FAnzx#mjM{^AL zLpdZJ>OMmDQ&fZUM!vu4$; zx5a!uMiZ1q)FSxreOtbN;0{4kdnRn*s@wP^?g^qS`Sh2K`U0=$&M9&h!%H-2*z+3C z+`;B`b}8Mh9kj8;H7rDFE@Iejk^*>!(-Y$;QZ)9jB-_fHMLOqq<8vib}FdY zM*V8wBUG%`H7Qb8yqVI!^DU2CZmY!Q<4Z%Lyd6mW9TK|QKwOpPpr>L6E&fp)7t1d4 zzPEakBU2b!0rQvFa15(k2jsdI=BGLu!2Zz@(IrSUu>vq6yGp&|;saIPP(?qSo@m7k zbraF%JPg38$l;naiVETZAI6F-EwXBtKXg_mA&*fzSU6Ki-09O1*$cQn`YB{?cHSl` zG-)m)*~QqQc~JT{Xrqcmis2zykQK-kE)Ply(qvyYWDKEkR3*tESWr z!qEYf*{KU_!I=+2icYvS4uJ%DlsW8uKA2&a8xOvA3f_2R_Gm3kVj1lio`fbgjOU{d zjbTM85e}D{wL)sty1Fn2@8{SOz;LLiX*-3sz%*22UH<(@AW2f}Kxl$#!%Spm0> zErJIOeR!z<>q!+EKD~PS$6x0N=KAxrdR6pt3Tklo1lV6og3or<MYkFHUyGSe30DNU z`EP9t8{$#;3*O}X5Cij=LtUKZZQ@4X;UgKTpfmlWFyYXxcdj*|Zt{^>fWz>b4hz%k9M}@|PT+#4^jVs|3ltTms#qRbUjwuWGs~ z481QRqbG&AHnZ~YuuPJZOn&)G9;)eG=2zDuK0L6p9o^y}*RSz6U<9bR$gHdfx98&s^hi!a+ z2qzeS>%50s2!bWT%DQs~L`6=U?YG2czcT+jnUxTzrAqE*7=>1oBi=$@;8-@#&d>VyoJBwT~lE6*bJ;#>+*WlAp6XTEL3lY?My z8Tt)iW=CuJk4tU`{;@T37<4_(59L zehTCIf8(AeZeL!xE?9{jTZ`GkbMMXhmJqa{pHrH|Hld$-WKr0K|2k|y{PA=JO(!%0XiB!L*qJg&jm{?CdAv^S1Kh0id;klPQWd7(ecJ&?1b9M1t%03#*|0-gzRegcb3Y~E7IitINGkd$a z!vi;|&`=a{zAY8axwt^SjfpywCkeCH)fY2xtMF9tTRc}EGCsZ|pU|P!d)c{5xADud zP8?VcT1WUwtIDb|qWB=`>2oi$8|@d6OC$@Hs~)vHr%E@SF5G$GnD?UEYnsH!#pv&Q zYJN6~1P-a5M{RKq(imL4R5tV~8q}#(=|STlFGNrvuU z8x_bPC^1|o+~~mbVsh#7)vcBN+fP3HnB-}*AK#^$lYT`$e$D(6!jk^08c_+a?$bCv zvzYmfv55e){=kQ^{8+WSi4GzE4dHIQ#{yw{o#lSu@056VM62b{7@;A=92XuI=3cMI zBb9u@r5!4EAw$Zfw3QYL=IFb!|DYr5Dxx1_?sITqu8k_^N{GxpC~=)e_FU9qJ3`~_LaCgDA^PpAyjqJYR|VjZfiZtZad2rquVY;?`m3KJcrZz zJyUpzOGs@qUmKj?WcbI7Vuwj;BOVg%U`#hD=Axls<(BApVbUKe)``QREHbYr;?q-J z93nGxbHp}5^^}X$Sg=};%_-3vh3Q&ncH~*RJ@8ay2y@<`CQ3D%-(za8uZ_$?KY!!} zr2IJi#*QE*gBw18^8sC|#Js1|Kf|y7V+=(zz&w5gZoA#%P7O^5gE1COa}T+p7Fv~)2S5@+cEmm?%W zjx*ZE|2&ENoWLk*7IYGvA*ndr-pozG3|er--FbuLNNaz>EaT!^gy)U|wj{K2fKlG{ z-{|e5i;b|L*LcsF8bagh;;8u>-Q3?#EHmG@;c+Mywry%Te&~Us=f>YlrwKP9vGiJN zS}D_foF!_UBebH71(wC*z^=T?gmv!tUKy3i{m1yf;TM#rJ2D5qN8jX80soTa*xrwu z)xMcLob`g%Q&e~*iq+wIgetSGXJ-(G+4=F=5R%Gwe;{$NC421b`i{w3i-rbq`d9ex z9BPc!;J@}`JMwF#EEbuw-ob7rL?q2mnK44YF3QxY8u?BDEP)Dth->iXDvv?g?ksC5 zpnWU#eX#mG9nD-|=fdFlgWdh}!rr8i(QbGJf(}gIDL>=F2rO0Xv2sPu+aKbWq?aO2 zZ&bq5LfuI6&mDrD7WsgK1-vpBf6hzR zCyHXwSznni_vvZF3zX*^_Hx1E#NefojrAq@n3fZ){kre?@5D+G%V{s8v^ForPlAAp z_#tzKFq^Wq`rDR=;V>>yplbOPQKY>tMXcruh@@3ejCcC z$XWKMYlTS=Ut%Y|{DA7ruGiK~^a<>IIu0ELCV;zyL%~~O)bV@718HJa6g&KmjR{VJ zy=$Br-xQ1`R?Ik-amVIqSP0S-{dG<7p23K19x2Bj!OL$NJk+4Z%QrkA2!9BB4GfT^O9&W9_+)_36~`hg;=1|sO~Xk8t35v{=j&7UO;x1xdhwk3osEY`$$ z#(y%g3!$lhPQF*6`f~6LVy3c%`bt8fn{Mj+#h|$X^+}$zMOJ3mf~0%rf>YM+kML43 z-xtz!i*}uYcQ&k{#S@|l9W0*I(cOt-HkR8 z$LHoglN|w!Xl_0K{Yqy9jz{xdkjGVFu}K8Ncn@_(l~UE!^5MHoSl_8{cmHfX!7tr< zvCWZ|bc-)^@YK}ZG9Gn>ZMm)d%D0k>PF0N*$aPI3iR7b1>}_f^?XIg?^>+QK+1~vK z>lSLHWMQ{y=2AFm%sogfZM}I^;9{h!`T4-NJ&rv8FGr1pVtb&TrNK868&r6^h#7=?Un?h6C*hCW1~;$xr_`Cp;5=4u7W zo;T^E18vMb3Wq0cT^_`DxEuO~!WF?xLo?J>Aat+!E0mz7rDm>Hs$v>p+{mYF`t7 zbyEapj>F*#{|cgjqBx%YT>qnZ=L3JlRO-O>vqN1fxBN`}z{@Vk+o)LQ|6>6%C(+*y zwxT&SiG~a1A3{Owv=ioTo9nv!da2KaYJCwgyORNjHpi1cO8!XMgBJArh~Pxd%u@Y3>Vf^DUeJJ%iIodflHpmN zk-Em5Wg~6h{=>%P@A2{H`d)VnBEdhVb|$HJvY5u*wie5WyENl-)ZDG4JjbRb8uLVk zHO_C8J+gbc2u%&&3QHH?jrdo==xty9nZ|ygZ|2^l`Yr=vF4XEWV%)ho_ zb~cCKVjn^4U83*R$2Fsj#6x#_U{gm=e$W8A1KecUP%KsZocIpfL;)DR=c5wiu% z%tUYny?i>r%Q{2p)5tFK;x0K&s!;Dw6e^0OyUu@ox*lJY1)Bf!l-PR)aTTf1lbMLR zOmwYJ57ByEIM%#;YR#o@-h{scVq9 z2>(d$D%q%b7;w8=B+U`+t5?oMYY-n`9onRnn%ShL{#ovWZdoKqx^#BTx8wPEmE zk*V_gP`9B?)sfaDtGhiymZ@Dvapb44KTBcnMw+0SAqZcy@7z+N{nsEa7>dkhvBpA` zQQQ+t1QR;13sSu`&Pm#3=q;1WcEPqmjcV8v9Kq5*i+6)HsgXX%mfwA}5ks+jgPty` zSB_=tvhUxbL#rP_;g|AMRCcW;y2O!vJ(*+b5O*~Mc$Zfoqh0hNWrPI zsWL>m3Gs>nT< z{mXlcSUdB;(1a@SN4^Sy-!&We%v3W&@5ngWUnSnesRk59=X!hKV0@xVJi|6O=HZtx zPk3%N7(L4WTEhyv9!;Y#XIn_Ah36K;K;oO1U9g2HJ)8(0=-eAjc;gLCxw}KB`LA*2 zEsf^+rp2!7KV2@j;lJ@U-vh1j*)jPA$kQ`{M>Ca>P$yr0r=Aq*Jdcs3%Q zrt5TmlCZS9RNQ`@6iRU3dbrh=CI0;P_tM8(_WwDxm7VlF9QIz(f5Zm&8U0tNe+~ah z=5Yw4Cg7u~ISn-c>fkJFYw#nmcN|?lO9J<`_caOPQ+g~xi z3k@Rflg!M<-=5ubU;?GI?DGxnfr7Qh7f38UG!wOqj;`SN%YRIsK##l}9Z+5Ah3rb1 z+$rr(0UZh?LRn5=T5!%gv!_%kn9ilpbSCA${#|tpr|~{N{=$?Og(pab_a$UW8}jg^ zT#^5PpTIs@4gTY^haV7H`7?Fq!QPmC#=W0ij|JGTBFjvfr{=EXpj=L5FTM`pl=mMf z&ODGUF&fV)4wB;sjcC~vN(+&#&wE;WFNG4SMr2MxI}Z&xJzKnSTKj!y!tkAd&+27a z(1Kxa*mFbZ>S7$_`WnKpWGeVd4}(_tBAxPeC@RYmN(q5Acb(Ohv$p7mTbR!Xo}1hW zIN%_T@u!u{M%TN&-6v zMwEDa<~X}AI%Q2X5P`IK=|95JW;@_s6ABabEw5M!KKns zGqUJdi?hAKS`hNoJq<9`UR&D-iQ}PRLa_t0?~$~gx4Nu|qLgW~c9)EmuJ0ehe&};G z=-~?H;tFrKQIk)>54iPuG!FR8OIfP{&OzsrXqB}KsdOG zp_A22j96UMxM(OgOe6$&{rKCOey8`|-ap6~Lz?Zf6D*05e_*cAlr^J<|FnC#h{&#; zxd`{NoH}+D(L=vd8B?7w9UpncF;dW3C{+@?Pj*r4u5?D9|h~6 z^{~$M*Ula>uFGL(qFmncr|cz@4pX0%I^ezo#dWsKBPsGxo|Ct3cPR+2II9c=AKfZ3 zzFZ(4E%oQgWk%o4q>tB`LUVY6jYeddJd9sA`j!^m;rp(z1Kzz^uwwH@g5fmvfkMg& zox&SnJqCoqAcOpj>2=j$@n$P7g0~+vE=K~t{y&<|`;p53f8%9KQQ7kpB70Lfgtrvg zWIG`da?HeW?2(v|*4 zLeRw7z7q(YZRs3y|Kq+->HT1DJ>cXQ+l8$tFDroCzk2cIwyP(|e)xg!0hr`0E|w|H z&qh@Cka&vuyK>zH1XHguC2LawkUbfkzjet8<#gA7lqexkq3--uNGtgAjcn9a?EVGS zl$n;}zdq&N_h*znu^mrm*KK)Xpq8Aqv8@vJBr=&=^+Tp_^PkKZC9nK-rj+na4chc~ z4j=DPC>ij?K}GN}#7^&|mJ-SIyvDS$v)CZB(cM>c&sEU^{#Te;DpJ6M-Ro28lfm6C ze5O=v>xThLwkZYrm35?`&9C1rn20&CC_7DfY8E?@IUn@D*~-X#e0NB<4=Jh9BKXq| zs|h4F83^SfSm=&ta1_Upt52ARr4dfrhuenaO;D^ z`eJl)kB7wc?({Ox4Qq+=lv=If`odVLyQj5K8u5Sy*3(ZEZ*Awn9?G|-3BKMyJoJsz z6ZM-o-}km$GkwjHej?MqLFIp>tKxgmCMm2QW#pmc@LP(DT#BGcZ%>1j{(+4dJCFt9 zTvjs-3OV!VKA-a&tFAA2N8SS3!kDeQF!4yz#-?Oacrbj>R9n-}XP%Sc&d);&w1e^a2f#FC-9uKyYz9gyofmlni*1 zw?t1n*hY2mLfP^of6vp?w#uGEO&`;!|BPHCdf(Z@{aW?Oj;Va0S_k$YMK^XbaLwz+Vk8pX$tnLlo-U9AJ(UyEie1*j z4Xck*qG;YEO?>KwMUNqM-aU#ER#+*0r@7ElXQ7&C(D4%Jn*tM>)5o8>C zo&CK_J(#lyv|jMWecmVgKPo;=(G=s~9y$)_u%4N5WPD+N|4IOz0(m>1bLuW?rJOU^ z@bIyRvtcKc&GYXay#We9>S);m3=1XXz+wf1iGnTK&pq5TvzX8UO8;`&CnvnRHGL{` zG1^kHbp~s~HR0@47z4FXv>%llhTpdlu}WcwG9pj&TH22V*D!k{6|gZ2 zj#7l?vrytKnM9rRUuJLwJoVXN8>AEV$Kvq<=?Ys}gnS{L38J~o{^vS%JDx;t2N0;% z+3oImPb)^aYBT+q z9XySuuLB=;xza_WeHpt8f$+qP{~!&}Tr7EYgc5NC8J91COZov_Lq)zw((%P@Tz?<7 zCzY3dCtsQ|d;#^#f((#%evzGhYXad(fW;@1L4orhsihG?Wl@I0wjNY^eLB=B8WqT`-M7}qBE_p1F-?8Z?_#()f6~QKZ{DY z-3;8(kcUG`ww;!#-!MR!PN!@9ezV7gE@zhf`$)VzD_fY;X6YMzBN2t|?|O?Dv=JF? zVbr{??X%PNKj#n1AL1NL6Z6Ac(F5y;NSA-iZu?@J>2Vhe5!&J@3+8p zw0NC-t2R@o1GHg^y(9vrlIHe?R!E&ZGJCu1Ir^o;8>ECkt7+Cd7w~>B(f1hx5N%*8RCDF;XqovKx z01_Ro-JOwvceQw8RV4{8P<3NqtygRFNm&C(!(TLaPM%>f1)*lttmjY;tL%*wLn-ibm$18#l++MGiotTqtiJP+tu{p* zMvfj>;pe(K%93jltcJxVoORJQt!GukK^Y3(i{rC1o2NgxJa)Nk#rqt4;#lUs1tk%E z9vnZ-g;C;b2h47=l-qudgq!Cw25u_8i4RM%M5$?BIku8ypn2~W`=`=>I;rLu>Rzo3 zgMW?QyIG`6+Z6lr-)!Wxy(T4r_;FM3W$dI;5 z(J#i+xs<00e7g3o4@1et8^uFzphSmyNr+Ze2#Z44g3UrY~>eYRv=fEy>=X6=()=0>y=e(?7SO`y9B>un~j#@I$4+m&4ss@DpinYOv|D_ zTI#)iUw&+5 zORH_MT8240^{oqjv5p@S&%R6Q$bTUOsdx~>Ejmf!JIi2LQlR$xhs=s z58%q&gBVu!8C9+KzfpN9g2BG>B(uhhLCs<6tMpdPSE91YnU?{b&}UVl1}OaipQ^|u zFP>HR!RRS^Gqt0O#(UZtK=jw643IlQ?W+o zW5yyyVuOtR#YQ8W?or1l>i_X6^X-8bVi~*K@dUOCi}@&1)ADt{fIyE%=_XS?e3S4f z&1v}#7Uxu>kYU{ngAm62A4<`^9>&R9wSogxR0WBJxDrozKbrcYdvI9KbWT(tM86^5 zu+Z{tJn&J0%=xdvwT1*9$zN5zXShz_wL=A1OwUcPY^m=LEl~`V;3W}%R*z+P{*=(@ zoJisHc|2ajHbTBDGigQAL^{v6g4-*V8ME&p|Y zWyDIwt&Ht>lH3EGQU62OY8k;aFr2C74G!${_bh(-8Dzhdt5)OETR#>J*GiNmSaIXcuH%Z6PwB1t<$jMpgmM$)PG4zW)rv>**h4y*6lP`=4H~z z=v6UvMVDjuq`Hz5t*^@zoc#P2mPLgtdlK##xf7wYMXg3{q1w0pxuH)mJkCa7*;+vP`V$yu)He=3TEk$LlE;Qil5;;lq{$JDqalxc`DBfcai`_hz748W>&h` zE6C$xU5-kNAbs+Mi45X{w#4yZNw*R#s`V_o~zAC$ua^Kke86`r!| zfOkiCR_1vogO%>1vNvnhlYs>xiQsWQXCE(54gz0z5?#$7H07zLvfumL7skjQd0XV+ z8mr!_ct9+QQ_}DG-mH1f%EfX#LQC^162U6If0u6n0I=$Tmc_{yg-wKGjal)Q`jfMj zHmP6Qk6A;i!$OC=AU`^t_R6&nTkRds(Dy?1!v|a+m3oN^dt`({e(oteI8cyn-g;kq zQ--Xhb9RjEBq=G54~dD7V~h8I$1Ev@f>xR)Xt4x}AcNz=SgfguX4kUO6Ug~nJY?dQ z-q+sR@jt$*N!dPuHwdmf^)GD3O%olTWBQiS)LRyu3Op38U;&r&djwU`l1Q#H(%SO; zhv*+XJ8t%p!~7Hm$qoot!B+TfQ`#j_U6TI^bW=b4t($VI6B>rSQo2dhtj~lUUusye%sWARnoc6Wg%T4H>vK^-z_BBMJl&eg zw0r804@S~z0r6fECmsxBR}km(7pNoV*vxyU()}N~g*E5zoqix3G9q`)MPA~gbsf_x za(XwOeE|R}pz5L{PK4szZ+KPvU$NMD0#?{u z&NoJa?XNqK2qS6Lk~Hx|572LHlF0ct=g;8Oua6vMUm!8iYm>J%@aTg*$BEtlo^tsl z6K^;E1^f%dLR5JelAzGGP^j2xSSNH#fR>M7`C<4%hu$8Oed&W=oV?EVY(ckoqp`6_ z!Sp)UIaaX~ONly0f_~15e-nvf@7^VbcD8gwv+*hQf=;_3o{sC!9#mS|#&Y^g;6SB& z;!Lpx9f~j5I^Q`pAePtX)zh^*5k~DpG~D37O(}mnkH>H0QV~6FK&}#lqH}cL$ulmD zL$$w&ugq|v{(;K4>!~VqL+Px<8=OU)kXu;gnYfQwNa^f(zFe_p?2PrWJ%w_ZUphhj$ z3`@VJ;y*vWtL3F6mdUmrDz=Z50Qc0{+bZphy8HrF+e!?NQUZ#^7CYw8fH9Ex<$Vwz zUXzDmZ0H^&#_v|2VEN@f0exk!xOT{dZ{qukZJv5__K^|=7t~2E2fq$~=m=I8uurO$ zPr7%?8-iib&MdCf`ln*n`&H04cwUF4Wy*n=P(ZnG8aDkHMOQr#1Nm}{&~&>6*qDG| zAMUD!RFI+t4$8||qm~G+uf}`<*A-updk7?NOZInsnhid@u<-YInm6EA(Gu(Fli>SzC-3T+#SK-?YZ8Q^UkwfEMpMszZyF5)cqTzY z@=nd&zWnY%taRov2;$r7C63!)@9iU-cre8okK}_yrO5d!1(y4V#IEenVkeG2hN4jH z86mH{H(a@VS!16$PF7BOC4D%T)$N@Q@!x$O11x}|pY%c}*!7t%&i?iPE5e^<%yjut zqW`_MSLbVSKxC@8X_YaDzsb*$m)wBNfjw?h6H$Ty&IK{v9pI^KvXapP!mET98~tPy zb^vMWzQR&#gUiPj3afN5BuT#$^9_dIV$;x5XAaj&BDVi4q}#9rM(pCHfk^H$c%eCV zso7i1M+b+Kf@O(S1ao_<<s71*E?`YEMn4hxc3_FYyAyB^e?SQZI}OO(ip&QxxM7po=^rN{TqBCvvb zQ>x3NZQ(O6=zDI-eq$GQo_cRtnHCz73i98M9lhPt1l9B(=;{2rXR3B<1#?}_|>7Jy$uLLm1%wbyLhi-YjUgMrxPiK!eZIno_^UOO4N zk6M;wx+N6cPX0}jO}V9yh)vB#KPLvsTtAbZ z==p{$F&q>~5RcvR!pfX#nmp>*sGgjAXszMD3ptw@G{5!tp%{8u@EJa{6&gT2Z->|7 z`uzEm<=Eq_EtgF?XU84~c!MTqBGG&`hb-ZFXtm#00*v@-bj4M)4IV?H$Jah26#lqu zSXXfm@;Mn8p}FwLqWgQ8{881{`_+7OrmXP4ICk$bRhOcg)~ z*LGMb2(a*^_te5gRz=QZAw`uo@b{jdC+LZ1((vnl$m_I^#3#uwib+_8uW>%yd$Te4 zH}jddgRVnSFKeng=s3&{osOP3;+;&Rul}1~I1TPs(?Wi}wmfV9$U4?@{t4d^ul8#9 z8FAhlK-S3E+OVw_l9@|&kHGGWx2%}E`)MhN_e6<`Lof~<1)+i~0&H$vh{lHAJ!4sE z;r!K)Wq_xp$TN9MFd&ZTu{Ty=&1b>h_06`IGx7GA@ReUQfu_>iM4&9*Bn#?~GfDbWpn;Og2q-$I#FP>D zA$j6J!Zd9?uu8QPiZltXX*L7rL@QWpS9E7+0Dgiw8XqY)EIIEaz|)2{bF(^=1zL;} z#?x*f{(-f2AW>Op7^JU9gCAewp!%nlt$&B@c=L(^&mI8HFYpvR;3irKh`F98Lh@!% z)!axY3~WB%QJ3fKUdco+wCo4EUi39M2-r*t2swUT@lou-g5>c4@J(=nzcnV^WpQYT+^6}1(ouww22T|l|mcq??-^-YW^ zQc#t!H*r>4Q}WJN`|D(ciz? zyeCEaR(?0-Fr&QQsQC)&+!ZP4d8Hpg>L~v4gBwSFe5+}K@1(~I9Qe(*6{|6Cj&2KZvp0tw8(g zvY8&@(W>>%XtveEd{+rTMyKxM#@+DUVN8T9Z)#sYpa+wE%VHOYQBz&7kUf@`4H`;PnI&nlj1iv#r|NAzSt!3Hpg(BmcHVI9j# zaGPHqP%q|*wrS^vOYHq?96b0BzdAM6eunM1&+@lH_Ag-%vn;5{vWvx-DR0sjw5})8 zj<;6!9M~r1atvpmy6Mh2|It0o;l#RdiSD0Jfh_Ut&|tZiT4BUtj>F-xN2%#>EM!GR z=PN{0#$6~zn^lGqWgER{v3iDxUR9?UE#a8ShK$Z3;Yivu`ji)b0w`2&=6+#S77_h4 zh#}K|x%eee6U%re&X%CFR=mGREJU&nK);Try=+&B`3cJK=y&Qqu*Z+uU?tYP7q~ir z^$yXxzSP0Rt@?T9o{Xl{FAADLxycZYrTR0@YF~AD?6SA=b8+$3&da5$P#?7;2b!yE z(9`&^!@T>I7u|0f2o37j7HeQy-n7{9W&2$n6`IoGXVLiQ5f^_ zr7Cv+!p{rc3R_Hy={FLPnZH8`o;D*t(0@737^LVG0cCN3AJDa)yUN%Mud9^M2M*4| zMv>J8DY8InBJtIChgNXyq2Fy|We56UEn_A8mC7EYyX@ITb60l2wo^%|Y|7aqJV}7( zj!;syybOw}I*#MQa+~Xi~>VU^>zS}ZfN^VLb+am%R-LtP*DjcYpf*UIRo(ZlyU+LYwa8R| zTLnmP6t(JC zQ(8Gx4p#UZSGKBVL2lIBTOEF=tnah zdZ`Q-4=gs2oszXRF!dJy^uIBM&Voap7BjjPr- zsZKxXKlUpV5ZQT)TgLvU2|r0BRaQ~C>nRzmf-QT2ub*^DK_vFsiH%a-|1IlAETS>% zwrg4a{ep+Ke5dsk*G(S?T^}kVjgNtRSoZ`_1ZBafRC--=KUHLu6&e2|ONX9g9d_t? zWRh6@w!qoM9|5x$33kmZ1P8JM6^kBhrbsulB;22KAH1p~_+fw+$8rv!*Hbr&`api6s&SCz=(kJ*Kn_AD zX;cI0KPApZ@P8-e5XVICwH}w{z4BE1+i^hPr*r7sq=GFRu7OMlpG)Gul6jf!_;bs( zfX6uVCXqLj2F0}W8+muc8-0LX-{_+z2GzD1%HMD60n|*eu7?!UV-!;%WB^j+He}@j z71Vp{sURF+^>)S4KvIXC48~R*BRY=P<3RS@Rb<_ja z`O(z5B?^&zIS=?XGh6i}q!X%=1NpOWyPUS8bV4{bMgXjA`+~n8a~kix3zsm{%{p(N zjq+J7Zo9z~xedC87e|;LPcNd(J;~+b^OfD?krl2&@pNo&f|PvCtP0H};B%VrZ=i)T zbT!})lsGtnP}Lr#-c!TM3zZYfM5>(Dxiv1ck9y%TEq#ZGy9@|FSGuuvixyiQ4IJYc zGc$?&q||-@t{$$vAG4nz5)e*%RtKwCT+40j zVa4r{L$!HV9sPDJ-Le3`C0Bj9;Y^1FcJ~ZAXV$Eu3cN^4f}dPNpI5M(nDw)%3eQ`3%*TwoczdX=y$uy8qd{qzUoz*?))mO_E0YCqIAt+ z-6zY!^^WP*&9lh6kx#r{%=^|PrB|#Bk)Sp{U3W?&N-OKl$&0UY+(aPQwL+@jDg01* zMN4e{RpXN_gX`2cOlsKp#W6>zzOk#OAr8$V0vmuZdj_}P=#N->{NeU-`ANqzcMO^; zP|Y5YW@lU+U{!2>oUmH3IZRyeAM>+=!%c$v(?7u=SC!X;QyhwSPpw01uXbE2^;hCp z-pc-lH(TW2tHHhCn4$eold_j#k$CrTgOFDd494P<>89A#eC_f5%Dj`C!M6y!9=q#q zPNG}Mkee<+WK+xK5+91(D1tmAEk<}#)wzz9=bqi_GDzLlnU7E`obS8ZEEmmm(Zp7> zL7J>5Ly4n*R91ryk`6ZO)}X^5ckhaBy@#=T!Oh!w5PmqP$@>JKxnBi>HX&zQH>!LA!?D&XJH&~)+TKM9gA!Oc&X*H|43=RqP+m8Hkufu2wybqE-bto-7wq;YBJ~O@A0=e^Xm(yZyvygD{BGnQ8{umptjglm!W<1dp(sTzJ>l&rq1 zHNk;c%e!?LE4|#yW);E}a; zyNu_1+TA>KA2a)9ozI^bz1e;EytYM|!1PSBL725>eb2A> zwlDWdz_xqQr;0|tf>*z^{w*)>249g_9iFV{w?t{B(~VkSSii4v(lwJG>g1x__GLY= zIj#xZSru!np0_cc5g|bIiJ7Xkt%)6o_Kzbj9iH6S>;b9b1OnqBg+LpzUEfydHjRZZ%5FD znFz3<`Qp}s`I6w3imgUZ?L3OwAG7HeqV(crlXc4P>mj`Zj>BFRJA03y>3Y3QU8O1l z=H^kTX`>gVZ z%~V5Ggw2Xhmcm#ZxYF6EH3cy_enRqAzEgapp?)~(K&-FW5bTPu_sP0-3D;9gwJ8pBMKG zkfVngBxhH5nD<*T6TTM2VO49~NiT360u!zuPTl~HE@bCopj^^SO}3_;zzb@uh$+dB zPJuC+ioU94S5X_gteG)W)d$zcx;90YECqCw+wJ-et&pVNKQov2z4Lq7b=i_GMus8r zmG(K=&g2l%J6uAq)2VWTmdjw*YDxqi-K^%cIDgz~{CzW32M}V$xuuHU^w76Nxh6q4 zC!h)%lb#Zxkb`w&e9ZbhmHYE(OMjrM?sguImDpBNZx;$deCq{fchk=4aIwsISNy() zihEpNE!mP2H#Ln2xyjd^Z%pDr`}@j`Y5bOzLx^JT+MaQDnv+t z)ik(o+WyX=feLLzhCxts#V-AxAWwh1-F8hzztLrA$t&QKP{3H=vdz_Irfq|#=PrVJ zJfQZaaeeCJGm1-qCVh|7bh0YI=DZ0B^37m_81h~>*5PDbrKKN^hf4Ip#`X71+OVAE zZXe#u4y8QD2`hTb=mNVFnzO%Xl5g(Ubg#Yz+H$@=mKJ(k1@Sy6D_=ZXx%tG;kb4st zmJ@3}Z*-rGQ@bFYr?*7_B;M_jyL|CWm^rChT>;j96GeZ@a`73$*a8y>t{ZeLO2(Nf2^fX4)m7%r=e}Qmtq$u zDnENi@4sThmkr-H;+R3IHvq1<{~BMp>Ryg&myaYoWi6-cho}yd<-KU!3e(3nOv#*% zWt`~LuvX9~Z}L(!K1$QQ~VBtkT8fw-VJ@~Sa;=w%?6 zz>F)IYF7=8|L9Z_U>xY?Kyox*%d={iBe;I4Z z?jxnV{FQCHrrMZ7l?lW$jbQr@cu@5DM>D@WWvE87!lR^T=)CDgQ%%EK1#|1$e3_=k zRxE^|fu~$_nd8MKS&DurPCMju7tpt6X?o%tAW(?#$>#eJmiR~6l3n}OeS-DC$&(pX zj|hlwYh}X>bx=gg<#=jpN#bymNS1${{XUn-j zW1`ApkqZX=m|gE8BkqzQCw2&;AW+I-#z`V27vlm33%0d69D zA|;;rQ;LZPE)zeE-;cKI8NZOm4*C!;PQf6oQg+^b8;d2>5BZ-q!NBJH*2%|snQiJg z@oI(oWo`txW;YCjHU8)DBF4OQkkKQlBrnJkMvpp{2{%UM*83@Sdf>ES#KReHhHlbm zIC=0(-YcqBr=2VRH@nEXvM$M&+E~6*wl+^}{}^&aT;oz}%Qvv+GAduo?00*bPc$?X zdA?!u!$@1?Y)ho{?+06}%&!217Wi^BRXp>@e^!T{CWxe5iXjyBj;l=AwPTbM_bzOI zL>zW8`V9uMj};R-e<2+h0=)w3&zsF>?IIPrQ9zPL(=i;B6WyTtZRnfAf_S)+T+76R zK?1>Vu>#{flLaaIsb10<7WhG1%oJxUrmvc}Gqau1N`g_*4`s0qTKC^yg1HetvM4^S zLGc8d@}7Y8Isdz|vq(9d@YcVNUbT&C;-S0zp_s(6cP|3iWT;{=CI2kgM#pQb4tw28`|fzv(jDI0;U>I6mrCvM;g=tv7GFc>ZaJh7oLxfV zeIA0Rd@xDj&3UnJKNY?B{g9BOfGq~|e-CP@X)P%YV*iP@G!)eX+U>6_W2Vxbd=EtJf%?e1XhAc_p^P$PH!8v&5L7jrW~6aCf6Fq@%FSDWx)|f+pS(NOV-)0_z$jgh-BsZP zmVa^wvj1V%e_`*QKFPmPI$1(DVUEe1d$T3^(=r0h+zL#5MRscn5qx^=>T39M)nneQ z{0tmV(jb=*6H^;3@lMm?bM1^hl+S_~9Fx4LucR%xOddIg=pKSpm~s71qmW*x{K&JrHs>2<)G#&Q4kl-9BwlO(nVg;oebSrmzg~SVn;nb`O?UnfO&lf? zf3#B}h8%-S;yUM|%ho~&)Z^^!`0cQyTbcaZJp2=*Q3WdJKK=_^XZw{jBS4klLYE!v zhLM%zKe+is2X!fZkpxib%olm1-7tp9^q8td@y%7e`;AZE<}=)duA;v}`X-groQwL$ zy0BIxhAT|-)!_>AYW<(xpX)FC^l%+REuJN_L4~n=#0z1Okc;BLt{HA-l zP@z@cM+Lppyo9`02^q%(&z(N_F22G+)o7u}ds>EI+cJ<$v__qzhlf3Bn_>;16D1t* zY^Ibf=K8VzE`TEK)UHkFVOS z`&3CG7N=&;GvK?#61h4*trN&prl^ZhyrAcAYmV?l$eWf#w5Hmpo|Yb-51r95F-*MH zidFP&YnJ|F0UXsnhiXruD}(x@)uTtgx&=XLkg`dR(cfbyWrq_BvvR8^0SeGGzUTT( zMiDQ_rQLt-x?=VL2#{B{c>RqR&&M-_U*{Wli36wDz+gZ^?_(!2WObz@GaX;qr15XW z&wHlQ1vhqt0w(V5 z$(jcYHmULkw*qrN21qdmF7c28k~7e}KUE@rHjiae?T=>vpSpM$#?LwzXgd*S7!}@Jo!Mkn5?GXVo~2)^~f%gApZkp6N#oL0++ZyLH3&>-i%Vmk&G!d@k5{^S{Ty z6Vo{0q!aV^RfR#tC&vDj$O}Gxx#SMV!_Mr9QAWry4^>VuFQNV8Pl*@Uzw5O{D@WDFaw9xm?st_nFJNzv?0q}H%bN$!SK8S2PJ(`p? zPefLi0wU63ke8`jazPd_lF8PcsrzGD*N4{ z1p<0kPU$f524rwKBPt=}eFy2kUWP>`{onQ`{m_Gh0~fE;msOwL9JVYz@?Vy&msqDW zUWn3Pkf!>r9iZWJBl47<@MPOpL9Z*+o?bqd?ly$;oyDx9zVmr3NXS1jO5$h~Wa55b z;5$Y9Oj~322_ETF``xu+BWYj3qyO(x^jt-HZQZl+Nn^rqh4dE~R)1OBZe;&UXzgaV z=^FUiFi{cT!kLDctgAgJYf2~%$fWbY;GACYyZ;<`^30CxmZZrBoY6z)?IQX zeoQ*cHIp;6>`dGE<|k%^-@NS6c78Kh;RWMs;vK^6cu4qv6$>!QV?E5&NbX*gx8oB5 z7Ez*e#(4MfLi@2MIkQQBOZTg%IMiC^uDg(ZFfHC{FALJJtt-0sQaykU5PkRGzlfKy zD)7ZS06yeEBV%|dgl-Hx|M&g=k%7&44e!j8;&#IKTvLl03WvQ%FNm2G9;q`#{_6i(fJfN*U#lwH9)QU>+UiZSt-A!eTkwMVq_H?j z)!)mHJ70Z`RzTpu6e_^Ix~jUJ;zxH+EB1_o1(?p*{@yrPl>VA4n9eT99*4rh)l@uH z1DPp;q!NLY2U(E2guU~x*SC7WziSDwMbM0|Gx8eomG0VjE_^~87=b#ON<|2^JFX0Z zyIOP%TKAwb#{7z+M;C<1272gk-T=55;hRgly4@9K&93$|0Iw#nDd!tfTluKcVh(+q z`de-L2d$DS|NP_gY<`JKM9Gs^%YSmmn5ONm;g@q*E8OMeXq1u6#Q4rX5Ai)4nTK9= zB4!Uh-)Jr<;xokY5uB;w%qO(MKs+5SJN!EdVM$x8k^8vxFRKYzGjG;Kq@^pC>XkZM z1`?ZY>CwDfse9(i>**4toz-7=p^CwGgLO?X8J=B zZm`7|aDK27qfFRq1+(#9tWU0$BmK&rX3ufgF-yKeS7J==5yS#Ep_Vx8iA4p(SgHGVK@ z!KT`DKaE^#CaCrDlP6{cgF?Gmdad7gdHsC%3+nteH4O6i;Oa~fFI5Zm(; zE&`P!VV#T|9&W~b zp&nhldNF-!b=CAaI zc-9QqJLkV;Bw>xGC^xiTD`8!ce_#yfyA-vUMC{(%np<3+yIxr%bN3hWGKM%=y>|;g zL3b8E#Fo=YM=1GI8jt2pkU`QH2_E4N_gP||O6*Dr?Uf@Mvb_|28lU6k&a_8eJur7x z>||t)ndH@9NW~wI*kc;f?SJ&pUhojI{-;FE$s`=7BXB9P%!=xAd25{_A|%;iFWQPa zG%2MszDthinfigb@qBWg$253Y5eFTlQ+VM7+Pnd|Of!2jY9_)9XPt7+lGUqt+59;- zwr=krh`49!4wNOyX3TB){&;M$;2FF>h*7_-viajlv`W`*ODHC*vJ~HM@jnJN2_m?w z0Crwb6&jd6N1VukiPPFcf-n8gow{&^5@PxBjvc;nc$d0!)a}=ov`y20heaCeJ_T~g zoOA-4S^A;{OIn==#UBboL|;#Tfox699XitJ-J#EW9h+Xeugild5k)?d+g(19a|ufl zQZ6v}H#2BOInUDOi7fkL#2)PoiYUGVF%rh(0yIi09^ewo>;~5)g?B_38Ab8-WL>sEXjzi%% zvt3_`Ku`R9;nqufADdnARE(T>(!Je>H(?{4P`Lm75n|q1MGi`?L&bjeGQ0m zXLj>55<{P#U=+uWO>G5l6-Pt46t2PlsqBxAxqVwKyK80(uJmo0-}6IT zuUz~wIEPuXE`_vM)+5J;fL54WlbQRRcFZO%<-y*UlT9`?4BQO|xeoF1=B2#4R#}!q z)qVF}%luqK*f`&B&XvO;qh3iX1O%ZXHdUbxT&NQibfIbw`kO8@k7BKIAbXVUT10pH zSk&dxE{e>(@C!jD3i`qnykOed0>&bRe5YB?d0x@*2Zz#-fhM?jy6S%R1du;~Yc_jQ z4rQt3U*poQjr2i!siu#28?IfUzMO_MtzV{y2^Q6wM0)F^6-nvLL5eiiK1ea=`8PM8 z*JjZK*_+ESf7oEU)Sp&Ai_V3gjw7sBj6c9F`YJ8Q|E5<34lYSUQV zvNz7Ox38>gMeVfyVV18s*vfhE4zTyWi4 z2?t&6Vw68#;_+Tf#g-%N{_zgxFjMgbS^gt}ZN(3v%6M9O$8Z>64`;XVs0`7mDsbAI+;L<#^;Aa75Q;1tY#=>9C8&zf zoj}g696>yG6XDmfGPrmVT%x|baWDSrMXUjn;d~S#vGv-G7;%4hobt!x_+1B%hWdTc zo;?k|`Z(G^P;DA>;gmxZP1*CjV!UjI$5V*jZ_L(Y8P#Ob;)ht)4dBCH+8Ujnt zo-Pj6lg)TWj>r70sUf~zoT>WOK-m%~ML=$>5x!_A6xLs_dT=`aum{$)W$ODY6=eRW z!wY&YlQ7iP()XE#1KWY^$38fD`+otJ7is7KknWYW^9}%d@}Cs~e(srCETg)}{aHg} z=BQO~F**>HYXEq8w;q@~DK{FY)&yos&2bAp){}J_JD~gHI(NKp+PuD+K_}_k+IMJ>}`Hv4`4WML+jVxgG8Vez^P+oqJ-jxK;8S0w3($jepf* zpj=DYb{luqE$0AVvXsmjQB?Gun$Ip1R=?VSf}>wZP--3bsOS5J?AFRr>U$}{1)KJm z8yMXAHAgloH_J?$DU~7-_-so@HP2TZNR`%LnFUfeACaMhi6%lN|NVgP=$$y)ADdRGRA*i_j= z2ELT8Sv6Dd{i-eatRvqn_Y2u>(S&NO6e!2O<8*Y1m!$sHBHowG%>HD~s zpmw6*`hTyaCAWk3Fec`?7q`s)B6M%w#N1~?@JF~m;(d8PGk&zq^YakSYabE}d?Q-9 zg$*`oPIB`2C?kKq@O8@=XbK@?K-&6V& zE|KN16JGxx{R{cRZ=ZX#@bT?B@QVZBADN!w>t>`6(nXGU#y%nrpqI6`?u8rp0>|-V z@|nCRLC>!#Z%4}s!_OIeLwW_5TjG369F9WOp}sI#tnw+?nZUhAp6a<}ehs&tAM{v^ zOcZ8S>RWK{1^#)xdvbL2Dz6vf-okeG=2UGTv&lJVu7&Akknqk;QXRF9i;&yCIlqRlK^BU+b( zzsAuI_Sp?BV?CcLYC{B&_Rzy?94qj zJ;Oonx?=7hlf>!ywdNvRDGy-J`I%Y9*e^FciVL~7=)-k`YDeaS$CvpxPMK8YyY-mDFOVaH>d1NwN$=eP}c8_A!N&z$ftl$iL~4;PR7_%m0~RJSJ(vM z1+J2j(eEnBLp@+?khI6)#1&lI&*br67Wk;=w@Dv+u`i^@9^WYn*T3 z#XVrZ*Rj|3SHN5CnwEI(4b?J8b4l=bWADb+Xq4J04{%RP zy0*PAQ&-#*_np0opevO48P&5(i(~d^>_>{+|8|Og8DZbM-@|-k!d`+ohVffKAJm*J zat}*aJW_!rveaqqrH*i+Y5c{%X2ey<`wAS3t3&$r>8N93Y1r!R(m-lLwb z1gi578<6X3GWOi`F6JKO{oc#p4%GJOb91UpWSytHb?^iCA#~y4E{b?}Iqg?QNh*@; z+5_05Dkpo{v)r2|DkDRGi|pvn1{j&g41y{YVymhkNH!?cH*I!l{Z?o_mp-od*Ys~dMR8-&#bmQM;^KVm+X5Q z!WVfCUC5wMzjWQD>5FvS<4^;X_&Avd-x`8nRZ6jIb`SS#pBTnIah-cQ;vUuQ%L)7} z?vI)^A$Biu{h+M{#O zT&W)W6p4?%y|>Ln;7E3d{PoIB7%Y>Ux~bi4|xnJmW&dS)qeSgNIr6C>8t4*`7%ZXWo z*&qRw)A3vGJCTFicI=_Pi^5))vD(~k4BX@1)F|#7ABIV*O8GV5-rAnwJ>2~Yo{o!Sz-k@IG=PZg@;w%5pm>!6|M160Mec0pOrc5ov+&k>03Ec`L z)yQ5Vf|rkv6s1c0P)8m+IEq{6{+w$R`)q%`1&)j*fij8vL2Q_BJ@zioMx2N@9>RZn zczf$|PZv?{1V1+feO-rPumOKim~>yy@A~z4NAAYniF-`qa^R;HxVN@SRR!3yeLn$w zBO|NJi+j(#)>1ohkFE!SZhSvEK6`)PgZ*knL3`{9hN-z+?2d((myh3M#jZ)hSwE*T zYFhHQa4+R3_6OqV2tJJ_oUP`!LsE?Re%$M_)a9GTH?H?y#0Z$P^HS%){eNwmCfhB??++sHwES2EV&M-E;C*fww#*{?k1Kug z*9!T*2m2R~y;Jiua&Jb1h4O22@4N|dN=eWC^fz#CMx}jrFzp)K-%U&u7OOqnkAQ!} z+#~i1m{-FC?*R8{ovMMjZ_PDZyJ>vudKg?8sr>12PouA`RvI&?RNx-t_y0QtKF`S^ z2U}$EqPRDdf5fdOB@RH0b_l-`t*wz`2EK@7eIg_5{bZr`c3+AzIaKot*7A9SMd0`R zPx6N|kLINr&)Ga@EF&A`9{o8Y8{__#uRD;6BT5f&FXHN3v|Uv_l=M~Xqp=SA!`$~~ zaX5L8O>Wzlv<2|DWx7@9&;Px*aiJfYljSnPKBqxkB>33(U)Ms$lR@~E;6Y~12>0Qr z&t9FdC+w3E>@Vg%A9BypqM%O(@cZs3`LhMS#xQJSh9xA$S+QT_j&;1fA6#IeLG{} zVt2Wp>6?cN0Lkiz@Qs87hwVYf$JdL~gWeAZa3r-+lq1+*ko#gF?Aezeej?k!eet8g z#{!Ec7WkLJek3D`yOpyKd92gNZEHz~{i6f!34CN-JEfr?kZHNEwcTUj53Y@N#d6sE zru&Gg<~-fU$3w#2RT*S$xhirW1Bt!2;om7p$Uh}9CAhB1eek~Dp;I_vpZJuZ-VMJP z_akW|-LAO|{_xeVelqwd?wh(c7sh@eS7Uy?j3PH?%&}Kw<~v@`5$>ZsM$qpLzJ@;6 zYrT*=ljlcVAKNF_0&6*T9&uGpa)5f*qPxR=NAJQeJE@55VV3peL4dR6alb={LyeS5l6x@iX3ug;A94teiJWSF1BeaovD z>$0;q<)St3)nX_2qYh6$&|)(>L@8Nd46nyMwrCwXBJ-eshiTrexX0HPQeC8!{*0pGDvop}0{FeyE6&c%3n@DzcwSJuIbEZG7O_OZ&4I!phy^ z-p$PVA>1$IfcvSgidN0nJE|o(!DSEkyUdToeRfp~J&fP(5%>7o%2IHNfdQqTqYrCa zm1Xkz`S|!ddIm9`uHn>dG336uAotyj963xEkl9G*A-Vdg0$)2vld3z|XBQ}cmwUuL z#}Nlrzfy?r4E_n+s}VtrE#G%O&c?6B9_|Mb035y6X*@N;y@-DUxu?-Qu&_L2&BZ{e zObM}lwexVR@pf7smT`zA~J zOnuM&G?N9#52%3s!oz>KOZDcdtgs6LHMyMjRKDD|(-C37eaxcczHTMH=Jp#@>ihZr z_-~XNG+KlePC!?baW(FH6*prZ5)k;g9Cq9-{s!(ZIKN;JBrUo$m@qrG!~J(XZwK5@ z8tZGVs*(HIJ{mCZtI~l#jeAtuv1gM7-K0Z);C_IjQ>xOzlp#icDTkCtLUU%Oy{1;{$%XJjz)Wt8!`SBY~_kN{j#jw+sibU{2}Mzjez}#0V-EQBJ`!O}Y$VXZ#$YKC~F3#*k6M3*LBYkFe#uzrPDts~^BUw%e$iMjhrpRqLZ>onqb&PPLeL;{p4WCg;Ru0P)2yhS+0c zMa~4S{7Ig1sV{J!Y`2f7=Z}c{wr#!ay3wc{pu_!{Geq;AujoL%Zx8$;RFM2U?w77Q zOqmP6IazcA(Od*FBJlfzOunZ_mFmpfTqufmPiTOOZLak(-0LSETr}-hZQFuI3)sI@m8(#n=GSfuf)Hvq;Fw`ksmwVlRn&>ZR!eCu+X}ew?^3X_U?O zVbbr~7JK5p=wI~lK4*SP(pI(H!-FZcRb`qc?;z}3@MS-ElMNnF=52D2=l-mxd{=MJ zGI3C8AL%U1`O!a&d)#GdsxSXc`6%~2c`tS}_FR2S?x|h2G``PHTX25}{9~{O1%LB^ z{mqZ%zUaC2Mp6UAbhP0EVr32>|M+i`bO{P21=+|!!r*tF{>YJPYUnaTm7`` z9UPseuYr9wNP*1rfn#sH=MOh>`>t2m@MqKMw{dp$ihBI%a-*lk?rn@cX6O$RrbZKj zLkYl$-l&q~IRW;Q9&)a>EnAKDNtNVF?3_Ah1%G7jwVZcSkdaTVi^Y%PzPt+dUF$wN ze0$tyKaP99)MdHXEc5lWq#eio+SUIo7X9%k<8W-AxB_51_K#txbq^q}C0gz1i!QUg zZ)Kbp{GnfO-bvv?5#opG`AS^{`-Pmu{Z85xUp`e$Vc@#x!>nXmm}fZ^KehpVtyEPF_3f43xflFe&j3D9 z+k8la^owj(mc4YpPgBk6JNRdGvFzbqU;)Df(E&LLpzgQd| zh&Xc2@8mugm*D=R`9OJ%^aK7!be4eg0-2}LrTR|r(IP*~vrads9c?p>!OT5j=l~%6 zf&1^T=mYZlMs^QZ0nC3fl-x<){KLOIgZokNPY<1akcwV6ANYCPBWP7sZf5x%{Nus* zA{^7f0O@_+B*Ter@GCWb{s4i0OUr`jE|1}UY0Coz&v7q=l<;A+he%bC6KR<;$H6mVR2^em6y~t=5&c@V!m>E zK0VTX2ONt%x<<904nAP-@7^8!8vuWa%$LivbMKRd&%}MzsfIWXd~Re?fx_Uo;GO#u zJT2rLoz8uG2k#!$Taozs7Pp>@-EV@up^qBVu9~_r zQ+_88rI>VL)Xn`uesk(IB|vD5sc4Pv)~WVA1ygKV;;>~4A9wD*2loaOG8;~{oHQYf z&WeRI3h2manmhR49ecl6+UqKviZ7XH7SLDpdAG8@$71o`xGL63BSGn`z`6`Y%;Wsv zJNDljdz&upa;cW7#mEST@g{S>aK07qUb(ODv;bYDnx>hjvMW=&9J#w6_d72O+PbCe z2TLA0{NtVAzu>(0L0C}O=OC(H;NRDMeIx2U z@e{^>cYbvVODUJ!sqX^+zV7S0V6RoBQq0-lQr4MTK8AXIDa^EqfA@7?_x1JIyGjh_ z(XZxk&nem3eZZGH_xE*Q-vN7))2@IO6E@~p_aX8V*8PIs*L{5paqq-+ curr)" + string name = 997; string displayName = 998; string avatar = 999; @@ -146,6 +148,7 @@ message FireballBullet { int32 teamId = 19; int32 bulletLocalId = 20; + int32 speciesId = 21; int32 virtualGridX = 999; int32 virtualGridY = 1000; diff --git a/frontend/assets/resources/prefabs/ControlledCharacter.prefab b/frontend/assets/resources/prefabs/ControlledCharacter.prefab index e740a9e..a0a6592 100644 --- a/frontend/assets/resources/prefabs/ControlledCharacter.prefab +++ b/frontend/assets/resources/prefabs/ControlledCharacter.prefab @@ -31,13 +31,10 @@ "_components": [ { "__id__": 22 - }, - { - "__id__": 23 } ], "_prefab": { - "__id__": 24 + "__id__": 23 }, "_opacity": 255, "_color": { @@ -869,32 +866,6 @@ "fileId": "7aN7Gcc/tBw5EGlTJVBj2+", "sync": false }, - { - "__type__": "cc.Sprite", - "_name": "", - "_objFlags": 0, - "node": { - "__id__": 1 - }, - "_enabled": true, - "_materials": [], - "_srcBlendFactor": 770, - "_dstBlendFactor": 771, - "_spriteFrame": null, - "_type": 0, - "_sizeMode": 0, - "_fillType": 0, - "_fillCenter": { - "__type__": "cc.Vec2", - "x": 0, - "y": 0 - }, - "_fillStart": 0, - "_fillRange": 0, - "_isTrimmedMode": true, - "_atlas": null, - "_id": "" - }, { "__type__": "b74b05YDqZFRo4OkZRFZX8k", "_name": "", diff --git a/frontend/assets/resources/prefabs/Fireball.prefab b/frontend/assets/resources/prefabs/Fireball.prefab new file mode 100644 index 0000000..137f70d --- /dev/null +++ b/frontend/assets/resources/prefabs/Fireball.prefab @@ -0,0 +1,224 @@ +[ + { + "__type__": "cc.Prefab", + "_name": "", + "_objFlags": 0, + "_native": "", + "data": { + "__id__": 1 + }, + "optimizationPolicy": 0, + "asyncLoadAssets": false, + "readonly": false + }, + { + "__type__": "cc.Node", + "_name": "Root", + "_objFlags": 0, + "_parent": null, + "_children": [ + { + "__id__": 2 + } + ], + "_active": true, + "_components": [ + { + "__id__": 6 + } + ], + "_prefab": { + "__id__": 7 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 120, + "height": 120 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 2, + "groupIndex": 2, + "_id": "" + }, + { + "__type__": "cc.Node", + "_name": "Fireball1", + "_objFlags": 0, + "_parent": { + "__id__": 1 + }, + "_children": [], + "_active": false, + "_components": [ + { + "__id__": 3 + }, + { + "__id__": 4 + } + ], + "_prefab": { + "__id__": 5 + }, + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 0, + "height": 0 + }, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_trs": { + "__type__": "TypedArray", + "ctor": "Float64Array", + "array": [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1 + ] + }, + "_eulerAngles": { + "__type__": "cc.Vec3", + "x": 0, + "y": 0, + "z": 0 + }, + "_skewX": 0, + "_skewY": 0, + "_is3DNode": false, + "_groupIndex": 0, + "groupIndex": 0, + "_id": "" + }, + { + "__type__": "cc.Animation", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 2 + }, + "_enabled": true, + "_defaultClip": null, + "_clips": [ + { + "__uuid__": "ba12416b-eec3-4260-8402-7fc25b125624" + } + ], + "playOnLoad": false, + "_id": "" + }, + { + "__type__": "cc.Sprite", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 2 + }, + "_enabled": true, + "_materials": [], + "_srcBlendFactor": 770, + "_dstBlendFactor": 771, + "_spriteFrame": null, + "_type": 0, + "_sizeMode": 1, + "_fillType": 0, + "_fillCenter": { + "__type__": "cc.Vec2", + "x": 0, + "y": 0 + }, + "_fillStart": 0, + "_fillRange": 0, + "_isTrimmedMode": true, + "_atlas": { + "__uuid__": "6dcd5722-8ef9-47fd-9520-861d2713e274" + }, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__uuid__": "d92d4831-cd65-4eb5-90bd-b77021aec35b" + }, + "fileId": "9ds3kDxvVFFqyr760jrV4a", + "sync": false + }, + { + "__type__": "e66a2qRmRZGnqSyVMwLy6Pw", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 1 + }, + "_enabled": true, + "_id": "" + }, + { + "__type__": "cc.PrefabInfo", + "root": { + "__id__": 1 + }, + "asset": { + "__uuid__": "d92d4831-cd65-4eb5-90bd-b77021aec35b" + }, + "fileId": "4cx75uwJJFa7U8QL187QCL", + "sync": false + } +] \ No newline at end of file diff --git a/frontend/assets/resources/prefabs/Fireball.prefab.meta b/frontend/assets/resources/prefabs/Fireball.prefab.meta new file mode 100644 index 0000000..b3275c9 --- /dev/null +++ b/frontend/assets/resources/prefabs/Fireball.prefab.meta @@ -0,0 +1,8 @@ +{ + "ver": "1.2.5", + "uuid": "d92d4831-cd65-4eb5-90bd-b77021aec35b", + "optimizationPolicy": "AUTO", + "asyncLoadAssets": false, + "readonly": false, + "subMetas": {} +} \ No newline at end of file diff --git a/frontend/assets/scenes/login.fire b/frontend/assets/scenes/login.fire index fce2e50..6324f99 100644 --- a/frontend/assets/scenes/login.fire +++ b/frontend/assets/scenes/login.fire @@ -440,7 +440,7 @@ "array": [ 0, 0, - 210.3490857485811, + 209.57814771583418, 0, 0, 0, diff --git a/frontend/assets/scenes/offline_map.fire b/frontend/assets/scenes/offline_map.fire index a0d54b2..4ebd00f 100644 --- a/frontend/assets/scenes/offline_map.fire +++ b/frontend/assets/scenes/offline_map.fire @@ -262,6 +262,9 @@ "controlledCharacterPrefab": { "__uuid__": "59bff7a2-23e1-4d69-bce7-afb37eae196a" }, + "fireballPrefab": { + "__uuid__": "d92d4831-cd65-4eb5-90bd-b77021aec35b" + }, "joystickInputControllerNode": { "__id__": 7 }, @@ -461,7 +464,7 @@ "array": [ 0, 0, - 215.64032554232523, + 210.49935741157617, 0, 0, 0, diff --git a/frontend/assets/scripts/Fireball.js b/frontend/assets/scripts/Fireball.js new file mode 100644 index 0000000..6d7d727 --- /dev/null +++ b/frontend/assets/scripts/Fireball.js @@ -0,0 +1,26 @@ +cc.Class({ + extends: cc.Component, + + ctor() { + this.lastUsed = -1; + this.bulletLocalId = -1; + this.speciesName = null; + }, + + setSpecies(speciesName) { + if (speciesName == this.speciesName) return; + this.speciesName = speciesName; + this.effAnimNode = this.node.getChildByName(this.speciesName); + this.animComp = this.effAnimNode.getComponent(cc.Animation); + this.effAnimNode.active = true; + for (let k in this.children) { + const child = this.children[k]; + if (!child.active) continue; + if (child == effAnimNode || child.name == speciesName) continue; + child.active = false; + } + }, + + onLoad() { + }, +}); diff --git a/frontend/assets/scripts/Heap.js.meta b/frontend/assets/scripts/Fireball.js.meta similarity index 74% rename from frontend/assets/scripts/Heap.js.meta rename to frontend/assets/scripts/Fireball.js.meta index 91cf7da..ccbada2 100644 --- a/frontend/assets/scripts/Heap.js.meta +++ b/frontend/assets/scripts/Fireball.js.meta @@ -1,6 +1,6 @@ { "ver": "1.0.5", - "uuid": "247b7613-6c6e-4f01-b1d6-5f8f041b5688", + "uuid": "e66a2a91-9916-469e-a4b2-54cc0bcba3f0", "isPlugin": false, "loadPluginInWeb": true, "loadPluginInNative": true, diff --git a/frontend/assets/scripts/Map.js b/frontend/assets/scripts/Map.js index 152e859..236169a 100644 --- a/frontend/assets/scripts/Map.js +++ b/frontend/assets/scripts/Map.js @@ -2,6 +2,7 @@ const i18n = require('LanguageData'); i18n.init(window.language); // languageID should be equal to the one we input in New Language ID input field const RingBuffer = require('./RingBuffer'); +const PriorityQueue = require("./PriorityQueue"); window.ALL_MAP_STATES = { VISUAL: 0, // For free dragging & zooming. @@ -44,6 +45,10 @@ cc.Class({ type: cc.Prefab, default: null, }, + fireballPrefab: { + type: cc.Prefab, + default: null, + }, joystickInputControllerNode: { type: cc.Node, default: null @@ -287,6 +292,30 @@ cc.Class({ self.playerRichInfoDict = new Map(); // Clearing previous info of all players. [ENDS] + // Clearing cached fireball rendering nodes [BEGINS] + if (null != self.cachedFireballs) { + while (!self.cachedFireballs.isEmpty()) { + const v = self.cachedFireballs.pop(); + if (v && v.node && v.node.parent) { + v.node.parent.removeChild(v.node); + } + } + } else { + self.cachedFireballs = new PriorityQueue(); + } + for (let k = 0; k < 1000; k++) { + const newFireballNode = cc.instantiate(self.fireballPrefab); + const newFireball = newFireballNode.getComponent("Fireball"); + newFireballNode.setPosition(cc.v2(Number.MAX_VALUE, Number.MAX_VALUE)); + safelyAddChild(self.node, newFireballNode); + setLocalZOrder(newFireballNode, 5); + newFireball.lastUsed = -1; + newFireball.bulletLocalId = -1; + const initLookupKey = -(k + 1); // there's definitely no suck "bulletLocalId" + self.cachedFireballs.push(newFireball.lastUsed, newFireball, initLookupKey); + } + // Clearing cached fireball rendering nodes [ENDS] + self.renderFrameId = 0; // After battle started self.bulletBattleLocalIdCounter = 0; self.lastAllConfirmedInputFrameId = -1; @@ -590,7 +619,7 @@ cc.Class({ const jsFireballBulletsArr = new Array(pbRdf.fireballBullets.length).fill(null); for (let k = 0; k < pbRdf.fireballBullets.length; ++k) { const pbBullet = pbRdf.fireballBullets[k]; - const jsFireballBullet = gopkgs.NewFireballBulletJs(pbBullet.bulletLocalId, pbBullet.originatedRenderFrameId, pbBullet.offenderJoinIndex, pbBullet.startupFrames, pbBullet.cancellableStFrame, pbBullet.cancellableEdFrame, pbBullet.activeFrames, pbBullet.hitStunFrames, pbBullet.blockStunFrames, pbBullet.pushbackVelX, pbBullet.pushbackVelY, pbBullet.damage, pbBullet.selfLockVelX, pbBullet.selfLockVelY, pbBullet.hitboxOffsetX, pbBullet.hitboxOffsetY, pbBullet.hitboxSizeX, pbBullet.hitboxSizeY, pbBullet.blowUp, pbBullet.teamId, pbBullet.virtualGridX, pbBullet.virtualGridY, pbBullet.dirX, pbBullet.dirY, pbBullet.velX, pbBullet.velY, pbBullet.speed); + const jsFireballBullet = gopkgs.NewFireballBulletJs(pbBullet.bulletLocalId, pbBullet.originatedRenderFrameId, pbBullet.offenderJoinIndex, pbBullet.startupFrames, pbBullet.cancellableStFrame, pbBullet.cancellableEdFrame, pbBullet.activeFrames, pbBullet.hitStunFrames, pbBullet.blockStunFrames, pbBullet.pushbackVelX, pbBullet.pushbackVelY, pbBullet.damage, pbBullet.selfLockVelX, pbBullet.selfLockVelY, pbBullet.hitboxOffsetX, pbBullet.hitboxOffsetY, pbBullet.hitboxSizeX, pbBullet.hitboxSizeY, pbBullet.blowUp, pbBullet.teamId, pbBullet.virtualGridX, pbBullet.virtualGridY, pbBullet.dirX, pbBullet.dirY, pbBullet.velX, pbBullet.velY, pbBullet.speed, pbBullet.speciesId); jsFireballBulletsArr[k] = jsFireballBullet; } @@ -709,10 +738,9 @@ cc.Class({ equalMeleeBullets(lhs, rhs) { if (null == lhs || null == rhs) return false; - if (lhs.battleLocalId != rhs.battleLocalId) return false; - if (lhs.offenderPlayerId != rhs.offenderPlayerId) return false; - if (lhs.offenderJoinIndex != rhs.offenderJoinIndex) return false; - if (lhs.originatedRenderFrameId != rhs.originatedRenderFrameId) return false; + if (lhs.BulletLocalId != rhs.BulletLocalId) return false; + if (lhs.OffenderJoinIndex != rhs.OffenderJoinIndex) return false; + if (lhs.OriginatedRenderFrameId != rhs.OriginatedRenderFrameId) return false; return true; }, @@ -1039,6 +1067,27 @@ othersForcedDownsyncRenderFrame=${JSON.stringify(othersForcedDownsyncRenderFrame } }, + _renderFireballBullet(fireballBullet) { + const self = this; + let pqNode = self.cachedFireballs.popAny(fireballBullet.Bullet.BulletLocalId); + const speciesName = `Fireball${fireballBullet.SpeciesId}`; + + if (null == pqNode) { + pqNode = self.cachedFireballs.pop(); + } else { + console.log(`Using a cached fireball node for rendering for bulletLocalId=${fireballBullet.Bullet.BulletLocalId}`); + } + const cachedFireball = pqNode.value; + cachedFireball.setSpecies(speciesName); + cachedFireball.lastUsed = self.renderFrameId; + cachedFireball.bulletLocalId = fireballBullet.Bullet.BulletLocalId; + + const [wx, wy] = gopkgs.VirtualGridToWorldPos(fireballBullet.VirtualGridX, fireballBullet.VirtualGridY); + cachedFireball.node.setPosition(cc.v2(wx, wy)); + + self.cachedFireballs.push(cachedFireball.lastUsed, cachedFireball, cachedFireball.bulletLocalId); + }, + applyRoomDownsyncFrameDynamics(rdf, prevRdf) { const self = this; const playersArr = rdf.PlayersArr; @@ -1053,6 +1102,18 @@ othersForcedDownsyncRenderFrame=${JSON.stringify(othersForcedDownsyncRenderFrame playerRichInfo.scriptIns.updateCharacterAnim(currPlayerDownsync, prevRdfPlayer, false, chConfig); } + // Move all to infinitely far away first + for (let k in self.cachedFireballs.list) { + const pqNode = self.cachedFireballs.list[k]; + const fireball = pqNode.value; + fireball.node.setPosition(cc.v2(Number.MAX_VALUE, Number.MAX_VALUE)); + } + const fireballBullets = rdf.FireballBullets; + for (let k in fireballBullets) { + const fireballBullet = fireballBullets[k]; + self._renderFireballBullet(fireballBullet); + } + // Update countdown self.countdownNanos = self.battleDurationNanos - self.renderFrameId * self.rollbackEstimatedDtNanos; if (self.countdownNanos <= 0) { diff --git a/frontend/assets/scripts/Heap.js b/frontend/assets/scripts/PriorityQueue.js similarity index 50% rename from frontend/assets/scripts/Heap.js rename to frontend/assets/scripts/PriorityQueue.js index c5501d7..aedfd40 100644 --- a/frontend/assets/scripts/Heap.js +++ b/frontend/assets/scripts/PriorityQueue.js @@ -12,32 +12,15 @@ var BinaryHeap = function (customCompare) { * @private */ this.list = []; + this.lookupKeyToIndex = {}; if (customCompare) { this.compare = customCompare; } }; -/** - * Builds a heap with the provided keys and values, this will discard the - * heap's current data. - * - * @param {Array} keys An array of keys. - * @param {Array} values An array of values. This must be the same size as the - * key array. - */ -BinaryHeap.prototype.buildHeap = function (keys, values) { - if (typeof values !== 'undefined' && values.length !== keys.length) { - throw new Error('Key array must be the same length as value array'); - } - - var nodeArray = []; - - for (var i = 0; i < keys.length; i++) { - nodeArray.push(new Node(keys[i], values ? values[i] : undefined)); - } - - buildHeapFromNodeArray(this, nodeArray); +BinaryHeap.prototype.contains = function (lookupKey) { + return null != this.lookupKeyToIndex[lookupKey]; }; /** @@ -45,6 +28,7 @@ BinaryHeap.prototype.buildHeap = function (keys, values) { */ BinaryHeap.prototype.clear = function () { this.list.length = 0; + this.lookupKeyToIndex = null; }; /** @@ -53,15 +37,20 @@ BinaryHeap.prototype.clear = function () { * @return {Node} node The heap's minimum node or undefined if the heap is * empty. */ -BinaryHeap.prototype.extractMinimum = function () { - if (!this.list.length) { - return undefined; +BinaryHeap.prototype.pop = function () { + if (0 == this.list.length) { + return null; } - if (this.list.length === 1) { + if (1 == this.list.length) { + delete this.lookupKeyToIndex[Object.keys(this.lookupKeyToIndex)[0]]; return this.list.shift(); } var min = this.list[0]; + delete this.lookupKeyToIndex[min.lookupKey]; + this.list[0] = this.list.pop(); + this.lookupKeyToIndex[this.list[0].lookupKey] = 0; + heapify(this, 0); return min; }; @@ -72,8 +61,8 @@ BinaryHeap.prototype.extractMinimum = function () { * @return {Node} node The heap's minimum node or undefined if the heap is * empty. */ -BinaryHeap.prototype.findMinimum = function () { - return this.isEmpty() ? undefined : this.list[0]; +BinaryHeap.prototype.top = function () { + return this.isEmpty() ? null : this.list[0]; }; /** @@ -83,25 +72,79 @@ BinaryHeap.prototype.findMinimum = function () { * @param {Object} value The value to insert. * @return {Node} node The inserted node. */ -BinaryHeap.prototype.insert = function (key, value) { +BinaryHeap.prototype.push = function (key, value, lookupKey) { var i = this.list.length; - var node = new Node(key, value); + var node = new Node(key, value, lookupKey); this.list.push(node); - var parent = getParent(i); - while (typeof parent !== 'undefined' && - this.compare(this.list[i], this.list[parent]) < 0) { - swap(this.list, i, parent); - i = parent; - parent = getParent(i); + this.lookupKeyToIndex[lookupKey] = i; + let u = getParent(i); + while (null != u && this.compare(this.list[i], this.list[u]) < 0) { + swap(this.list, i, u, this.lookupKeyToIndex); + i = u; + u = getParent(i); } return node; }; +BinaryHeap.prototype.update = function (lookupKey, newKey, newValue) { + if (null == this.lookupKeyToIndex[lookupKey]) return null; + var i = this.lookupKeyToIndex[lookupKey]; + + this.list[i].key = newKey; + this.list[i].value = newValue; + + let u = getParent(i); + if (null != u && this.compare(this.list[i], this.list[u]) < 0) { + while (null != u && this.compare(this.list[i], this.list[u]) < 0) { + swap(this.list, i, u, this.lookupKeyToIndex); + i = u; + u = getParent(i); + } + } else { + heapify(this, i); + } +}; + +BinaryHeap.prototype.popAny = function (lookupKey) { + if (null == this.lookupKeyToIndex[lookupKey]) return null; + + if (0 == this.list.length) { + return null; + } + + if (1 == this.list.length) { + delete this.lookupKeyToIndex[Object.keys(this.lookupKeyToIndex)[0]]; + return this.list.shift(); + } + + var i = this.lookupKeyToIndex[lookupKey]; + + + var old = this.list[i]; + delete this.lookupKeyToIndex[old.lookupKey]; + + this.list[i] = this.list.pop(); + this.lookupKeyToIndex[this.list[i].lookupKey] = i; + + let u = getParent(i); + if (null != u && this.compare(this.list[i], this.list[u]) < 0) { + while (null != u && this.compare(this.list[i], this.list[u]) < 0) { + swap(this.list, i, u, this.lookupKeyToIndex); + i = u; + u = getParent(i); + } + } else { + heapify(this, i); + } + + return old; +}; + /** * @return {boolean} Whether the heap is empty. */ BinaryHeap.prototype.isEmpty = function () { - return !this.list.length; + return 0 == this.list.length; }; /** @@ -111,16 +154,6 @@ BinaryHeap.prototype.size = function () { return this.list.length; }; -/** - * Joins another heap to this one. - * - * @param {BinaryHeap} otherHeap The other heap. - */ -BinaryHeap.prototype.union = function (otherHeap) { - var array = this.list.concat(otherHeap.list); - buildHeapFromNodeArray(this, array); -}; - /** * Compares two nodes with each other. * @@ -147,34 +180,27 @@ BinaryHeap.prototype.compare = function (a, b) { * @param {number} i The index of the node to heapify. */ function heapify(heap, i) { - var l = getLeft(i); - var r = getRight(i); - var smallest = i; - if (l < heap.list.length && - heap.compare(heap.list[l], heap.list[i]) < 0) { - smallest = l; - } - if (r < heap.list.length && - heap.compare(heap.list[r], heap.list[smallest]) < 0) { - smallest = r; - } - if (smallest !== i) { - swap(heap.list, i, smallest); - heapify(heap, smallest); - } -} + let cur = i; + let smallest = -1; + while (cur != smallest) { + const l = getLeft(cur); + const r = getRight(cur); + + smallest = cur; + if (l < heap.list.length && + heap.compare(heap.list[l], heap.list[smallest]) < 0) { + smallest = l; + } + if (r < heap.list.length && + heap.compare(heap.list[r], heap.list[smallest]) < 0) { + smallest = r; + } -/** - * Builds a heap from a node array, this will discard the heap's current data. - * - * @private - * @param {BinaryHeap} heap The heap to override. - * @param {Node[]} nodeArray The array of nodes for the new heap. - */ -function buildHeapFromNodeArray(heap, nodeArray) { - heap.list = nodeArray; - for (var i = Math.floor(heap.list.length / 2); i >= 0; i--) { - heapify(heap, i); + if (smallest !== cur) { + swap(heap.list, cur, smallest, heap.lookupKeyToIndex); + cur = smallest; + smallest = -1; + } } } @@ -186,10 +212,16 @@ function buildHeapFromNodeArray(heap, nodeArray) { * @param {number} a The index of the first element. * @param {number} b The index of the second element. */ -function swap(array, a, b) { +function swap(array, a, b, lookupKeyToIndex) { + var aLookupKey = array[a].lookupKey; + var bLookupKey = array[b].lookupKey; + var temp = array[a]; array[a] = array[b]; array[b] = temp; + + lookupKeyToIndex[aLookupKey] = b; + lookupKeyToIndex[bLookupKey] = a; } /** @@ -200,8 +232,8 @@ function swap(array, a, b) { * @return {number} The index of the node's parent. */ function getParent(i) { - if (i === 0) { - return undefined; + if (0 == i) { + return null; } return Math.floor((i - 1) / 2); } @@ -235,9 +267,10 @@ function getRight(i) { * @param {Object} key The key of the new node. * @param {Object} value The value of the new node. */ -function Node(key, value) { +function Node(key, value, lookupKey) { this.key = key; this.value = value; + this.lookupKey = lookupKey; } module.exports = BinaryHeap; diff --git a/frontend/assets/scripts/PriorityQueue.js.meta b/frontend/assets/scripts/PriorityQueue.js.meta new file mode 100644 index 0000000..921cf2d --- /dev/null +++ b/frontend/assets/scripts/PriorityQueue.js.meta @@ -0,0 +1,9 @@ +{ + "ver": "1.0.5", + "uuid": "20a75b4a-e220-42cd-bab4-9fc63a289b3f", + "isPlugin": false, + "loadPluginInWeb": true, + "loadPluginInNative": true, + "loadPluginInEditor": false, + "subMetas": {} +} \ No newline at end of file diff --git a/frontend/assets/scripts/modules/room_downsync_frame_proto_bundle.forcemsg.js b/frontend/assets/scripts/modules/room_downsync_frame_proto_bundle.forcemsg.js index f5e476b..948e4b2 100644 --- a/frontend/assets/scripts/modules/room_downsync_frame_proto_bundle.forcemsg.js +++ b/frontend/assets/scripts/modules/room_downsync_frame_proto_bundle.forcemsg.js @@ -1216,6 +1216,7 @@ $root.protos = (function() { * @property {number|null} [framesInvinsible] PlayerDownsync framesInvinsible * @property {number|null} [bulletTeamId] PlayerDownsync bulletTeamId * @property {number|null} [chCollisionTeamId] PlayerDownsync chCollisionTeamId + * @property {boolean|null} [onWall] PlayerDownsync onWall * @property {string|null} [name] PlayerDownsync name * @property {string|null} [displayName] PlayerDownsync displayName * @property {string|null} [avatar] PlayerDownsync avatar @@ -1436,6 +1437,14 @@ $root.protos = (function() { */ PlayerDownsync.prototype.chCollisionTeamId = 0; + /** + * PlayerDownsync onWall. + * @member {boolean} onWall + * @memberof protos.PlayerDownsync + * @instance + */ + PlayerDownsync.prototype.onWall = false; + /** * PlayerDownsync name. * @member {string} name @@ -1534,6 +1543,8 @@ $root.protos = (function() { writer.uint32(/* id 24, wireType 0 =*/192).int32(message.bulletTeamId); if (message.chCollisionTeamId != null && Object.hasOwnProperty.call(message, "chCollisionTeamId")) writer.uint32(/* id 25, wireType 0 =*/200).int32(message.chCollisionTeamId); + if (message.onWall != null && Object.hasOwnProperty.call(message, "onWall")) + writer.uint32(/* id 26, wireType 0 =*/208).bool(message.onWall); if (message.name != null && Object.hasOwnProperty.call(message, "name")) writer.uint32(/* id 997, wireType 2 =*/7978).string(message.name); if (message.displayName != null && Object.hasOwnProperty.call(message, "displayName")) @@ -1674,6 +1685,10 @@ $root.protos = (function() { message.chCollisionTeamId = reader.int32(); break; } + case 26: { + message.onWall = reader.bool(); + break; + } case 997: { message.name = reader.string(); break; @@ -1796,6 +1811,9 @@ $root.protos = (function() { if (message.chCollisionTeamId != null && message.hasOwnProperty("chCollisionTeamId")) if (!$util.isInteger(message.chCollisionTeamId)) return "chCollisionTeamId: integer expected"; + if (message.onWall != null && message.hasOwnProperty("onWall")) + if (typeof message.onWall !== "boolean") + return "onWall: boolean expected"; if (message.name != null && message.hasOwnProperty("name")) if (!$util.isString(message.name)) return "name: string expected"; @@ -1870,6 +1888,8 @@ $root.protos = (function() { message.bulletTeamId = object.bulletTeamId | 0; if (object.chCollisionTeamId != null) message.chCollisionTeamId = object.chCollisionTeamId | 0; + if (object.onWall != null) + message.onWall = Boolean(object.onWall); if (object.name != null) message.name = String(object.name); if (object.displayName != null) @@ -1918,6 +1938,7 @@ $root.protos = (function() { object.framesInvinsible = 0; object.bulletTeamId = 0; object.chCollisionTeamId = 0; + object.onWall = false; object.name = ""; object.displayName = ""; object.avatar = ""; @@ -1972,6 +1993,8 @@ $root.protos = (function() { object.bulletTeamId = message.bulletTeamId; if (message.chCollisionTeamId != null && message.hasOwnProperty("chCollisionTeamId")) object.chCollisionTeamId = message.chCollisionTeamId; + if (message.onWall != null && message.hasOwnProperty("onWall")) + object.onWall = message.onWall; if (message.name != null && message.hasOwnProperty("name")) object.name = message.name; if (message.displayName != null && message.hasOwnProperty("displayName")) @@ -4759,6 +4782,7 @@ $root.protos = (function() { * @property {boolean|null} [blowUp] FireballBullet blowUp * @property {number|null} [teamId] FireballBullet teamId * @property {number|null} [bulletLocalId] FireballBullet bulletLocalId + * @property {number|null} [speciesId] FireballBullet speciesId * @property {number|null} [virtualGridX] FireballBullet virtualGridX * @property {number|null} [virtualGridY] FireballBullet virtualGridY * @property {number|null} [dirX] FireballBullet dirX @@ -4943,6 +4967,14 @@ $root.protos = (function() { */ FireballBullet.prototype.bulletLocalId = 0; + /** + * FireballBullet speciesId. + * @member {number} speciesId + * @memberof protos.FireballBullet + * @instance + */ + FireballBullet.prototype.speciesId = 0; + /** * FireballBullet virtualGridX. * @member {number} virtualGridX @@ -5063,6 +5095,8 @@ $root.protos = (function() { writer.uint32(/* id 19, wireType 0 =*/152).int32(message.teamId); if (message.bulletLocalId != null && Object.hasOwnProperty.call(message, "bulletLocalId")) writer.uint32(/* id 20, wireType 0 =*/160).int32(message.bulletLocalId); + if (message.speciesId != null && Object.hasOwnProperty.call(message, "speciesId")) + writer.uint32(/* id 21, wireType 0 =*/168).int32(message.speciesId); if (message.virtualGridX != null && Object.hasOwnProperty.call(message, "virtualGridX")) writer.uint32(/* id 999, wireType 0 =*/7992).int32(message.virtualGridX); if (message.virtualGridY != null && Object.hasOwnProperty.call(message, "virtualGridY")) @@ -5191,6 +5225,10 @@ $root.protos = (function() { message.bulletLocalId = reader.int32(); break; } + case 21: { + message.speciesId = reader.int32(); + break; + } case 999: { message.virtualGridX = reader.int32(); break; @@ -5314,6 +5352,9 @@ $root.protos = (function() { if (message.bulletLocalId != null && message.hasOwnProperty("bulletLocalId")) if (!$util.isInteger(message.bulletLocalId)) return "bulletLocalId: integer expected"; + if (message.speciesId != null && message.hasOwnProperty("speciesId")) + if (!$util.isInteger(message.speciesId)) + return "speciesId: integer expected"; if (message.virtualGridX != null && message.hasOwnProperty("virtualGridX")) if (!$util.isInteger(message.virtualGridX)) return "virtualGridX: integer expected"; @@ -5390,6 +5431,8 @@ $root.protos = (function() { message.teamId = object.teamId | 0; if (object.bulletLocalId != null) message.bulletLocalId = object.bulletLocalId | 0; + if (object.speciesId != null) + message.speciesId = object.speciesId | 0; if (object.virtualGridX != null) message.virtualGridX = object.virtualGridX | 0; if (object.virtualGridY != null) @@ -5441,6 +5484,7 @@ $root.protos = (function() { object.blowUp = false; object.teamId = 0; object.bulletLocalId = 0; + object.speciesId = 0; object.virtualGridX = 0; object.virtualGridY = 0; object.dirX = 0; @@ -5489,6 +5533,8 @@ $root.protos = (function() { object.teamId = message.teamId; if (message.bulletLocalId != null && message.hasOwnProperty("bulletLocalId")) object.bulletLocalId = message.bulletLocalId; + if (message.speciesId != null && message.hasOwnProperty("speciesId")) + object.speciesId = message.speciesId; if (message.virtualGridX != null && message.hasOwnProperty("virtualGridX")) object.virtualGridX = message.virtualGridX; if (message.virtualGridY != null && message.hasOwnProperty("virtualGridY")) diff --git a/jsexport/battle/battle.go b/jsexport/battle/battle.go index ffc4ad9..ad011d0 100644 --- a/jsexport/battle/battle.go +++ b/jsexport/battle/battle.go @@ -865,10 +865,11 @@ func ApplyInputFrameDownsyncDynamicsOnSingleRenderFrame(inputsBuffer *RingBuffer } return &RoomDownsyncFrame{ - Id: currRenderFrame.Id + 1, - PlayersArr: nextRenderFramePlayers, - MeleeBullets: nextRenderFrameMeleeBullets, - FireballBullets: nextRenderFrameFireballBullets, + Id: currRenderFrame.Id + 1, + PlayersArr: nextRenderFramePlayers, + BulletLocalIdCounter: bulletLocalId, + MeleeBullets: nextRenderFrameMeleeBullets, + FireballBullets: nextRenderFrameFireballBullets, } } diff --git a/jsexport/battle/characterConfig.go b/jsexport/battle/characterConfig.go index d94ea4f..3f8026d 100644 --- a/jsexport/battle/characterConfig.go +++ b/jsexport/battle/characterConfig.go @@ -122,7 +122,7 @@ var Characters = map[int]*CharacterConfig{ GetUpFramesToRecover: int32(30), Speed: int32(float64(1.0) * WORLD_TO_VIRTUAL_GRID_RATIO), - JumpingInitVelY: int32(float64(9) * WORLD_TO_VIRTUAL_GRID_RATIO), + JumpingInitVelY: int32(float64(7.5) * WORLD_TO_VIRTUAL_GRID_RATIO), SkillMapper: func(patternId int, currPlayerDownsync *PlayerDownsync) int { if 1 == patternId { @@ -434,7 +434,8 @@ var skills = map[int]*Skill{ BoundChState: ATK_CHARACTER_STATE_ATK4, Hits: []interface{}{ &FireballBullet{ - Speed: int32(float64(8) * WORLD_TO_VIRTUAL_GRID_RATIO), + SpeciesId: int32(1), + Speed: int32(float64(8) * WORLD_TO_VIRTUAL_GRID_RATIO), Bullet: Bullet{ StartupFrames: int32(15), ActiveFrames: MAX_INT32, diff --git a/jsexport/battle/room_downsync_frame.go b/jsexport/battle/room_downsync_frame.go index 6206e6a..6d46bd2 100644 --- a/jsexport/battle/room_downsync_frame.go +++ b/jsexport/battle/room_downsync_frame.go @@ -33,6 +33,7 @@ type PlayerDownsync struct { MaxHp int32 CharacterState int32 InAir bool + OnWall bool ActiveSkillId int32 ActiveSkillHit int32 @@ -104,6 +105,7 @@ type FireballBullet struct { VelX int32 VelY int32 Speed int32 + SpeciesId int32 Bullet } diff --git a/jsexport/main.go b/jsexport/main.go index 49fc767..72c9756 100644 --- a/jsexport/main.go +++ b/jsexport/main.go @@ -102,7 +102,7 @@ func NewMeleeBulletJs(bulletLocalId, originatedRenderFrameId, offenderJoinIndex, }) } -func NewFireballBulletJs(bulletLocalId, originatedRenderFrameId, offenderJoinIndex, startupFrames, cancellableStFrame, cancellableEdFrame, activeFrames, hitStunFrames, blockStunFrames, pushbackVelX, pushbackVelY, damage, selfLockVelX, selfLockVelY, hitboxOffsetX, hitboxOffsetY, hitboxSizeX, hitboxSizeY int32, blowUp bool, teamId int32, virtualGridX, virtualGridY, dirX, dirY, velX, velY, speed int32) *js.Object { +func NewFireballBulletJs(bulletLocalId, originatedRenderFrameId, offenderJoinIndex, startupFrames, cancellableStFrame, cancellableEdFrame, activeFrames, hitStunFrames, blockStunFrames, pushbackVelX, pushbackVelY, damage, selfLockVelX, selfLockVelY, hitboxOffsetX, hitboxOffsetY, hitboxSizeX, hitboxSizeY int32, blowUp bool, teamId int32, virtualGridX, virtualGridY, dirX, dirY, velX, velY, speed, speciesId int32) *js.Object { return js.MakeWrapper(&FireballBullet{ VirtualGridX: virtualGridX, VirtualGridY: virtualGridY, @@ -111,6 +111,7 @@ func NewFireballBulletJs(bulletLocalId, originatedRenderFrameId, offenderJoinInd VelX: velX, VelY: velY, Speed: speed, + SpeciesId: speciesId, Bullet: Bullet{ BulletLocalId: bulletLocalId, OriginatedRenderFrameId: originatedRenderFrameId,