From 4f4e7038865985b19e63449bb6ac1cd29c6257d7 Mon Sep 17 00:00:00 2001 From: Tabby <41929769+tabby-cat-nya@users.noreply.github.com> Date: Wed, 14 May 2025 19:53:34 +1000 Subject: [PATCH] meow --- games/cam_follow.gd | 15 ++++++++ games/cam_follow.gd.uid | 1 + games/platformer/lab_platform.gd | 17 +++++++++ games/platformer/lab_platform.tscn | 3 +- games/platformer/platformer.tscn | 48 +++++++++++++++++++++++--- games/platformer/platformerCam.gd | 23 ++++++++++++ games/platformer/platformerCam.gd.uid | 1 + games/platformer/player.gd | 9 ++++- sprites/box.pdn | Bin 0 -> 4333 bytes sprites/box.png | Bin 0 -> 439 bytes sprites/box.png.import | 34 ++++++++++++++++++ 11 files changed, 145 insertions(+), 6 deletions(-) create mode 100644 games/cam_follow.gd create mode 100644 games/cam_follow.gd.uid create mode 100644 games/platformer/platformerCam.gd create mode 100644 games/platformer/platformerCam.gd.uid create mode 100644 sprites/box.pdn create mode 100644 sprites/box.png create mode 100644 sprites/box.png.import diff --git a/games/cam_follow.gd b/games/cam_follow.gd new file mode 100644 index 0000000..bdcc1f3 --- /dev/null +++ b/games/cam_follow.gd @@ -0,0 +1,15 @@ +extends Camera2D +class_name CamFollow + +@export var target : Node2D +@export var following : bool = true + +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + pass # Replace with function body. + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta: float) -> void: + if(following): + global_position = target.global_position diff --git a/games/cam_follow.gd.uid b/games/cam_follow.gd.uid new file mode 100644 index 0000000..8bace2d --- /dev/null +++ b/games/cam_follow.gd.uid @@ -0,0 +1 @@ +uid://c4vewqfmgu8ph diff --git a/games/platformer/lab_platform.gd b/games/platformer/lab_platform.gd index 7b0685e..52f5c8e 100644 --- a/games/platformer/lab_platform.gd +++ b/games/platformer/lab_platform.gd @@ -4,6 +4,9 @@ const offset_multiplier : float = 2 var float_offset : float var starting_y : float var elapsed : float +var realness : float = 0 +var becoming_real : bool = false +@export var collider : CollisionShape2D # Called when the node enters the scene tree for the first time. func _ready() -> void: @@ -15,3 +18,17 @@ func _process(delta: float) -> void: elapsed += delta float_offset = sin(elapsed * offset_multiplier) position.y = starting_y + float_offset + collider.disabled = realness < 0.1 + modulate = Color(1,1,1,realness) + if(becoming_real): + realness = clampf(realness + delta, 0 , 1) + else: + realness = clampf(realness - delta, 0 , 1) + #if(Input.is_action_just_pressed("ui_left")): + #becoming_real = !becoming_real + +func fade_out(): + becoming_real = false + +func fade_in(): + becoming_real = true diff --git a/games/platformer/lab_platform.tscn b/games/platformer/lab_platform.tscn index 5c2fe45..9b70294 100644 --- a/games/platformer/lab_platform.tscn +++ b/games/platformer/lab_platform.tscn @@ -6,8 +6,9 @@ [sub_resource type="RectangleShape2D" id="RectangleShape2D_x2rtd"] size = Vector2(96, 8) -[node name="LabPlatformer" type="AnimatableBody2D"] +[node name="LabPlatformer" type="AnimatableBody2D" node_paths=PackedStringArray("collider")] script = ExtResource("1_y0tou") +collider = NodePath("CollisionShape2D") [node name="Sprite2D" type="Sprite2D" parent="."] scale = Vector2(2, 2) diff --git a/games/platformer/platformer.tscn b/games/platformer/platformer.tscn index 36042fa..707b2dc 100644 --- a/games/platformer/platformer.tscn +++ b/games/platformer/platformer.tscn @@ -1,9 +1,11 @@ -[gd_scene load_steps=11 format=4 uid="uid://ckbyiwy0dxbsd"] +[gd_scene load_steps=15 format=4 uid="uid://ckbyiwy0dxbsd"] [ext_resource type="Script" uid="uid://dqyddqx8xm0gw" path="res://games/platformer/player.gd" id="1_1wj3w"] [ext_resource type="Texture2D" uid="uid://diilj7xuttpqu" path="res://icon.svg" id="1_oyf6i"] [ext_resource type="Texture2D" uid="uid://g5arxk4po7kw" path="res://sprites/platformer_lab_tile.png" id="3_84mot"] [ext_resource type="PackedScene" uid="uid://q3wdnawp7n63" path="res://games/platformer/lab_platform.tscn" id="4_w58m1"] +[ext_resource type="Script" uid="uid://43jxroyergh0" path="res://games/platformer/platformerCam.gd" id="5_x2rtd"] +[ext_resource type="Texture2D" uid="uid://dyjxtuapxfiip" path="res://sprites/box.png" id="6_02uuf"] [sub_resource type="Gradient" id="Gradient_1wj3w"] offsets = PackedFloat32Array(0.0209205, 1) @@ -11,11 +13,16 @@ colors = PackedColorArray(0.241156, 0.241156, 0.241156, 1, 0.462291, 0.462291, 0 [sub_resource type="GradientTexture2D" id="GradientTexture2D_84mot"] gradient = SubResource("Gradient_1wj3w") +width = 300 +height = 180 fill_from = Vector2(1, 1) [sub_resource type="RectangleShape2D" id="RectangleShape2D_oyf6i"] size = Vector2(32, 32) +[sub_resource type="RectangleShape2D" id="RectangleShape2D_02uuf"] +size = Vector2(32, 32) + [sub_resource type="RectangleShape2D" id="RectangleShape2D_1wj3w"] size = Vector2(608, 46) @@ -28,18 +35,28 @@ texture = ExtResource("3_84mot") physics_layer_0/collision_layer = 1 sources/0 = SubResource("TileSetAtlasSource_w58m1") +[sub_resource type="RectangleShape2D" id="RectangleShape2D_86tx6"] +size = Vector2(32, 32) + [node name="Platformer" type="Node"] -[node name="TextureRect" type="TextureRect" parent="."] +[node name="Parallax2D" type="Parallax2D" parent="."] +scroll_scale = Vector2(0, 0) + +[node name="TextureRect" type="TextureRect" parent="Parallax2D"] +z_index = -6 anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 +offset_right = 320.0 +offset_bottom = 180.0 grow_horizontal = 2 grow_vertical = 2 +scale = Vector2(2, 2) texture = SubResource("GradientTexture2D_84mot") [node name="Player" type="CharacterBody2D" parent="."] -position = Vector2(124, 155) +position = Vector2(-976, 272) script = ExtResource("1_1wj3w") [node name="Sprite2D" type="Sprite2D" parent="Player"] @@ -49,6 +66,12 @@ texture = ExtResource("1_oyf6i") [node name="CollisionShape2D" type="CollisionShape2D" parent="Player"] shape = SubResource("RectangleShape2D_oyf6i") +[node name="hitbox" type="Area2D" parent="Player"] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Player/hitbox"] +shape = SubResource("RectangleShape2D_02uuf") +debug_color = Color(5.29438e-07, 0.629247, 0.48448, 0.42) + [node name="StaticBody2D" type="StaticBody2D" parent="."] position = Vector2(319, 344) @@ -57,7 +80,7 @@ shape = SubResource("RectangleShape2D_1wj3w") [node name="TileMapLayer" type="TileMapLayer" parent="."] scale = Vector2(2, 2) -tile_map_data = PackedByteArray("AAAAAAkAAAAAAAAAAAABAAkAAAAAAAAAAAACAAkAAAAAAAAAAAADAAkAAAAAAAAAAAAEAAkAAAAAAAAAAAAFAAkAAAAAAAAAAAAGAAkAAAAAAAAAAAAHAAkAAAAAAAAAAAAIAAkAAAAAAAAAAAAJAAkAAAAAAAAAAAAKAAkAAAAAAAAAAAALAAkAAAAAAAAAAAAMAAkAAAAAAAAAAAANAAkAAAAAAAAAAAAOAAkAAAAAAAAAAAAPAAkAAAAAAAAAAAAQAAkAAAAAAAAAAAARAAkAAAAAAAAAAAASAAkAAAAAAAAAAAATAAkAAAAAAAAAAAATAAoAAAAAAAAAAAATAAsAAAAAAAAAAAASAAsAAAAAAAAAAAARAAsAAAAAAAAAAAAQAAsAAAAAAAAAAAAPAAsAAAAAAAAAAAAOAAsAAAAAAAAAAAANAAsAAAAAAAAAAAAMAAsAAAAAAAAAAAALAAsAAAAAAAAAAAAKAAsAAAAAAAAAAAAJAAsAAAAAAAAAAAAIAAsAAAAAAAAAAAAHAAsAAAAAAAAAAAAGAAsAAAAAAAAAAAAFAAsAAAAAAAAAAAAEAAsAAAAAAAAAAAADAAsAAAAAAAAAAAACAAsAAAAAAAAAAAABAAsAAAAAAAAAAAABAAoAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAsAAAAAAAAAAAACAAoAAAAAAAAAAAADAAoAAAAAAAAAAAAEAAoAAAAAAAAAAAAFAAoAAAAAAAAAAAAGAAoAAAAAAAAAAAAHAAoAAAAAAAAAAAAIAAoAAAAAAAAAAAAJAAoAAAAAAAAAAAAKAAoAAAAAAAAAAAALAAoAAAAAAAAAAAAMAAoAAAAAAAAAAAANAAoAAAAAAAAAAAAOAAoAAAAAAAAAAAAPAAoAAAAAAAAAAAAQAAoAAAAAAAAAAAARAAoAAAAAAAAAAAASAAoAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAACAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAJAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAALAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAANAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAARAAAAAAAAAAAAAAASAAAAAAAAAAAAAAATAAAAAAAAAAAAAAATAAEAAAAAAAAAAAATAAIAAAAAAAAAAAATAAMAAAAAAAAAAAATAAQAAAAAAAAAAAATAAUAAAAAAAAAAAATAAYAAAAAAAAAAAATAAcAAAAAAAAAAAATAAgAAAAAAAAAAAA=") +tile_map_data = PackedByteArray("AAAAAAkAAAAAAAAAAAABAAkAAAAAAAAAAAACAAkAAAAAAAAAAAADAAkAAAAAAAAAAAAEAAkAAAAAAAAAAAAFAAkAAAAAAAAAAAAGAAkAAAAAAAAAAAAHAAkAAAAAAAAAAAAIAAkAAAAAAAAAAAAJAAkAAAAAAAAAAAAKAAkAAAAAAAAAAAALAAkAAAAAAAAAAAAMAAkAAAAAAAAAAAANAAkAAAAAAAAAAAAOAAkAAAAAAAAAAAAPAAkAAAAAAAAAAAAQAAkAAAAAAAAAAAARAAkAAAAAAAAAAAASAAkAAAAAAAAAAAATAAkAAAAAAAAAAAATAAoAAAAAAAAAAAATAAsAAAAAAAAAAAASAAsAAAAAAAAAAAARAAsAAAAAAAAAAAAQAAsAAAAAAAAAAAAPAAsAAAAAAAAAAAAOAAsAAAAAAAAAAAANAAsAAAAAAAAAAAAMAAsAAAAAAAAAAAALAAsAAAAAAAAAAAAKAAsAAAAAAAAAAAAJAAsAAAAAAAAAAAAIAAsAAAAAAAAAAAAHAAsAAAAAAAAAAAAGAAsAAAAAAAAAAAAFAAsAAAAAAAAAAAAEAAsAAAAAAAAAAAADAAsAAAAAAAAAAAACAAsAAAAAAAAAAAABAAsAAAAAAAAAAAABAAoAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAsAAAAAAAAAAAACAAoAAAAAAAAAAAADAAoAAAAAAAAAAAAEAAoAAAAAAAAAAAAFAAoAAAAAAAAAAAAGAAoAAAAAAAAAAAAHAAoAAAAAAAAAAAAIAAoAAAAAAAAAAAAJAAoAAAAAAAAAAAAKAAoAAAAAAAAAAAALAAoAAAAAAAAAAAAMAAoAAAAAAAAAAAANAAoAAAAAAAAAAAAOAAoAAAAAAAAAAAAPAAoAAAAAAAAAAAAQAAoAAAAAAAAAAAARAAoAAAAAAAAAAAASAAoAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAACAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAJAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAALAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAANAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAARAAAAAAAAAAAAAAASAAAAAAAAAAAAAAATAAAAAAAAAAAAAAATAAEAAAAAAAAAAAATAAIAAAAAAAAAAAATAAMAAAAAAAAAAAATAAQAAAAAAAAAAAATAAUAAAAAAAAAAAD//wkAAAAAAAAAAAD+/wkAAAAAAAAAAAD9/wkAAAAAAAAAAAD8/wkAAAAAAAAAAAD7/wkAAAAAAAAAAAD6/wkAAAAAAAAAAAD5/wkAAAAAAAAAAAD4/wkAAAAAAAAAAAD3/wkAAAAAAAAAAAD2/wkAAAAAAAAAAAD1/wkAAAAAAAAAAAD0/wkAAAAAAAAAAADz/wkAAAAAAAAAAADy/wkAAAAAAAAAAADx/wkAAAAAAAAAAAAUAAkAAAAAAAAAAAAVAAkAAAAAAAAAAAAWAAkAAAAAAAAAAAAXAAkAAAAAAAAAAAAYAAkAAAAAAAAAAAAZAAkAAAAAAAAAAAAaAAkAAAAAAAAAAAAbAAkAAAAAAAAAAAAcAAkAAAAAAAAAAAAdAAkAAAAAAAAAAAAeAAkAAAAAAAAAAAAfAAkAAAAAAAAAAADw/wkAAAAAAAAAAADv/wkAAAAAAAAAAADu/wkAAAAAAAAAAADt/wkAAAAAAAAAAADs/wkAAAAAAAAAAADr/wkAAAAAAAAAAADq/wkAAAAAAAAAAADp/wkAAAAAAAAAAADo/wkAAAAAAAAAAADn/wkAAAAAAAAAAADm/wkAAAAAAAAAAADl/wkAAAAAAAAAAADk/wkAAAAAAAAAAADj/wkAAAAAAAAAAADi/wkAAAAAAAAAAADh/wkAAAAAAAAAAADg/wkAAAAAAAAAAADf/wkAAAAAAAAAAAD//wMAAAAAAAAAAAD+/wMAAAAAAAAAAAD9/wMAAAAAAAAAAAD8/wMAAAAAAAAAAAD7/wMAAAAAAAAAAAD6/wMAAAAAAAAAAAD5/wMAAAAAAAAAAAD4/wMAAAAAAAAAAAD3/wMAAAAAAAAAAAD2/wMAAAAAAAAAAAD1/wMAAAAAAAAAAAD0/wMAAAAAAAAAAADz/wMAAAAAAAAAAADy/wMAAAAAAAAAAADx/wMAAAAAAAAAAADw/wMAAAAAAAAAAADv/wMAAAAAAAAAAADu/wMAAAAAAAAAAADt/wMAAAAAAAAAAADs/wMAAAAAAAAAAADr/wMAAAAAAAAAAADq/wMAAAAAAAAAAADp/wMAAAAAAAAAAADo/wMAAAAAAAAAAADn/wMAAAAAAAAAAADm/wMAAAAAAAAAAADl/wMAAAAAAAAAAADk/wMAAAAAAAAAAADj/wMAAAAAAAAAAADi/wMAAAAAAAAAAADh/wMAAAAAAAAAAADg/wMAAAAAAAAAAADf/wMAAAAAAAAAAAAUAAMAAAAAAAAAAAAVAAMAAAAAAAAAAAAWAAMAAAAAAAAAAAAXAAMAAAAAAAAAAAAYAAMAAAAAAAAAAAAZAAMAAAAAAAAAAAAaAAMAAAAAAAAAAAAbAAMAAAAAAAAAAAAcAAMAAAAAAAAAAAAdAAMAAAAAAAAAAAAeAAMAAAAAAAAAAAAfAAMAAAAAAAAAAAA=") tile_set = SubResource("TileSet_x2rtd") [node name="LabPlatformer" parent="." instance=ExtResource("4_w58m1")] @@ -71,3 +94,20 @@ position = Vector2(368, 112) [node name="LabPlatformer4" parent="." instance=ExtResource("4_w58m1")] position = Vector2(240, 112) + +[node name="Camera2D" type="Camera2D" parent="." node_paths=PackedStringArray("target")] +position = Vector2(-976, 180) +position_smoothing_enabled = true +script = ExtResource("5_x2rtd") +target = NodePath("../Player") + +[node name="Box" type="Area2D" parent="."] +position = Vector2(-672, 272) + +[node name="Sprite2D" type="Sprite2D" parent="Box"] +texture = ExtResource("6_02uuf") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Box"] +shape = SubResource("RectangleShape2D_86tx6") + +[connection signal="area_entered" from="Player/hitbox" to="Player" method="_on_hitbox_area_entered"] diff --git a/games/platformer/platformerCam.gd b/games/platformer/platformerCam.gd new file mode 100644 index 0000000..eb4fcb1 --- /dev/null +++ b/games/platformer/platformerCam.gd @@ -0,0 +1,23 @@ +extends Camera2D + +@export var target : Node2D +@export var following : bool = true + +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + pass # Replace with function body. + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta: float) -> void: + if(following): + global_position.x = target.global_position.x + if(Input.is_action_just_pressed("ui_right")): + start_arena_cam() + pass + +func start_arena_cam(): + print("weh!") + following = false + position = Vector2(320,180) + #offset = Vector2(0,0) diff --git a/games/platformer/platformerCam.gd.uid b/games/platformer/platformerCam.gd.uid new file mode 100644 index 0000000..7fc026b --- /dev/null +++ b/games/platformer/platformerCam.gd.uid @@ -0,0 +1 @@ +uid://43jxroyergh0 diff --git a/games/platformer/player.gd b/games/platformer/player.gd index 1b0dd4d..26da81a 100644 --- a/games/platformer/player.gd +++ b/games/platformer/player.gd @@ -5,7 +5,7 @@ extends CharacterBody2D @export var JUMP_VELOCITY = -450.0 -func _physics_process(delta: float) -> void: +func _process(delta: float) -> void: # Add the gravity. if not is_on_floor(): velocity += get_gravity() * delta @@ -23,3 +23,10 @@ func _physics_process(delta: float) -> void: velocity.x = move_toward(velocity.x, 0, SPEED) move_and_slide() + + +func _on_hitbox_area_entered(area: Area2D) -> void: + #box event + #laser event + #sticky tape event + pass # Replace with function body. diff --git a/sprites/box.pdn b/sprites/box.pdn new file mode 100644 index 0000000000000000000000000000000000000000..40f924a47e9a59e085776e8d4374cb42a0a03385 GIT binary patch literal 4333 zcmd^BS!^3s7oKUnO-O0VRwzrSrh%qY4R^$!OILW6A%|xqBv;4W$Ib3>QW+IFr>f(trp&o9p$BvBMb& zC(}}5Q_9}Gd3b&!7z~a^B9bxINJ$YX9<1Q{WFb*rD%1rbZX*6@TqqPb?n@$IOkP?j zPcBu|$*Gc%LS_J$1;oYWco?Vh=f;V{IM#&>;81;Vi&!hyVSwWV$ zKkSNGM6MbV^*Pi={+G$Vv4~eSJxoSYKL9 zhlJeBx}-{aa?>uyl+x1FW+Ed@Ytyk*FrJ>=oGmAVwW)-dJu;Q3iuJ=uVVca&Er!P? zi&X>V3JG;$zLK*u)mY5W2M>)0w}Tz8b`$->Z*{2djnIIWj!2B>^wj=m9>B+mxh)@E1qtcijU(IuN0wPhKBvT z3YU?8V8qW`jT(vip|nzfs9#D>)bd)!p06xOskmgPbK!;{M5B0ZvfqGR(YBtR4k=-j zvJ<9)Eh&Q$0H;y_+YthVx+w%|g#-B2HsG!fz+nXJg{jdtz%c-#fMeT$aE>NmtGG3R zzuX4Cq62sYfv-Ft7!H#lBV@xy+fMWu(XHJH@2Q*@B>#kL&hdk=NHI zd+wZAjKC|~cjO#3&>pPMx4(VK5l(3*0KE&Zg&o{=Kw7u-UIalSQ)^!j9qtAoEruIm zz@h^v!%fiP_5o=z@Gx*A@*g`D-pk%RL`8A7=DMZ*3=))G(OEG2W^|(}tIZ)Ef*xc) z%EW_Q$SxQ>9VOjkLPaeSw^@+25G=aj8t-sZFfEm zUFvSM#kRveP;8m*mesfeFlN~;_xo@Q{lAkcJ;#rKUo3(p1^D z2-gP!SS!PLejpc_fWS!;(2W`KYbk{B>jP~| zR(T}Mm1T2|{^0qFWQ`aGDZ(Jw7ahu=I@m6ezbF>N53SE)w4q5`263Z* zFFGo4D@F#3zV8IO%&Dfx!7z92d(`Ljx=+8ppJn)7*ME)&@7eA7-|olsSDtv}^S9pn z_p3jA;Ctz#FTefq%meiE<0nss-;8LsqZ?kXPP?NG>+Pp@GNB&Ve?NNg^Ap}{PGLQvBHyx2>$b z{I6FI>`5>m-!O0HK3#cg<$2})i5Fk^>F9B7>)>m<&Kx~nUOcT26;B4gf8*@T;?|At UEuRfC%(0Up=KoLM`y$Hv8J=ML;{X5v literal 0 HcmV?d00001 diff --git a/sprites/box.png b/sprites/box.png new file mode 100644 index 0000000000000000000000000000000000000000..521dbeb23d4623fd3ee9ab292c82063e8418ef91 GIT binary patch literal 439 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6-$0X`wFH4%RQ|Nq}#8?@g@(LaR$Cs3TTz$3Dlfr0NZ2s0kfUy%Y7lqhkH zC<)F_D=AMbN@WO0%*-p%^K%VRFx4~EGy1)Uc^gp8w$upEG*3@01`Z&Hl|hP;m4Ok+ z@&aOMC>!KT4Mt|LI1`X<$jHPX0HmXUIJ2DvES?2qgFpfhgY?5_G)ozP{+z(hzyefZ zU}S8-xBy}*NC)czh)Gj`Y!F}qn!^NE8DwbzWI=Tq8W@0NUtaxYaq3o16_DxY>Ealo zaXz_$$