diff --git a/addons/terrain-editing/terrain_editing_controls.gd b/addons/terrain-editing/terrain_editing_controls.gd index 6f093ee..0787dc8 100644 --- a/addons/terrain-editing/terrain_editing_controls.gd +++ b/addons/terrain-editing/terrain_editing_controls.gd @@ -28,8 +28,8 @@ var tool_shape : ToolShape: set(value): set_pressed(tool_shape_buttons, value); tool_shape_changed() ## Gets or sets the currently selected texture to paint with. var texture : int: - get: return index_of_pressed(paint_texture_buttons) - set(value): set_pressed(paint_texture_buttons, value) + get: return index_of_pressed(paint_texture_buttons) + 1 + set(value): set_pressed(paint_texture_buttons, value - 1) ## Gets or sets the current draw size for CIRCLE or SQUARE shapes. var draw_size : int: get: return roundi(-draw_size_slider.value) @@ -45,9 +45,9 @@ var is_connected : bool: func _ready() -> void: # Update 'tool_mode', 'tool_shape' or 'texture' when any of the buttons are pressed. - for i in len(tool_mode_buttons ): tool_mode_buttons [i].pressed.connect(func(): tool_mode = i) - for i in len(tool_shape_buttons ): tool_shape_buttons [i].pressed.connect(func(): tool_shape = i) - for i in len(paint_texture_buttons): paint_texture_buttons[i].pressed.connect(func(): texture = i) + for i in len(tool_mode_buttons ): tool_mode_buttons [i].pressed.connect(func(): tool_mode = i ) + for i in len(tool_shape_buttons ): tool_shape_buttons [i].pressed.connect(func(): tool_shape = i ) + for i in len(paint_texture_buttons): paint_texture_buttons[i].pressed.connect(func(): texture = i + 1) # Update 'draw_size_label' whenever the slider changes. draw_size_slider.value_changed.connect(func(_value): diff --git a/level.tscn b/level.tscn index cb70642..b03b130 100644 --- a/level.tscn +++ b/level.tscn @@ -1,7 +1,8 @@ -[gd_scene load_steps=8 format=3 uid="uid://cmootlmme7yid"] +[gd_scene load_steps=9 format=3 uid="uid://cmootlmme7yid"] [ext_resource type="PackedScene" uid="uid://daihc7acaxfns" path="res://character.tscn" id="1_ymqel"] [ext_resource type="Script" path="res://CameraController.cs" id="2_wn05g"] +[ext_resource type="Resource" uid="uid://54xdqxlq2y2g" path="res://level_terrain_data.tres" id="4_axdnd"] [ext_resource type="Material" uid="uid://doe8owgx4jeu1" path="res://terrain/terrain_material.tres" id="4_edbby"] [ext_resource type="PackedScene" uid="uid://c732i0mrp6klk" path="res://objects/tree_oak_round.tscn" id="6_xbyit"] [ext_resource type="PackedScene" uid="uid://2giwj61d3h66" path="res://objects/tree_oak_tall.tscn" id="7_wghwq"] @@ -36,1893 +37,8 @@ far = 50.0 [node name="Terrain" type="StaticBody3D" parent="."] collision_mask = 0 script = ExtResource("9_rniku") +Data = ExtResource("4_axdnd") Material = ExtResource("4_edbby") -Tiles = { -Vector2i(18, 20): { -"heights": PackedFloat32Array(0, 0, 4, 0), -"texture": 2 -}, -Vector2i(18, 21): { -"heights": PackedFloat32Array(0, 4, 4, 0), -"texture": 2 -}, -Vector2i(18, 22): { -"heights": PackedFloat32Array(0, 4, 4, 0), -"texture": 2 -}, -Vector2i(18, 23): { -"heights": PackedFloat32Array(0, 4, 4, 0), -"texture": 2 -}, -Vector2i(18, 24): { -"heights": PackedFloat32Array(0, 4, 0, 0), -"texture": 2 -}, -Vector2i(18, 25): { -"heights": PackedFloat32Array(0, 0, 1, 0), -"texture": 0 -}, -Vector2i(18, 26): { -"heights": PackedFloat32Array(0, 1, 0.5, 0), -"texture": 0 -}, -Vector2i(18, 27): { -"heights": PackedFloat32Array(0, 0.5, 0.5, 0), -"texture": 0 -}, -Vector2i(18, 28): { -"heights": PackedFloat32Array(0, 0.5, 0, 0), -"texture": 0 -}, -Vector2i(19, 20): { -"heights": PackedFloat32Array(0, 0, 6, 4), -"texture": 2 -}, -Vector2i(19, 21): { -"heights": PackedFloat32Array(4, 6, 6, 4), -"texture": 2 -}, -Vector2i(19, 22): { -"heights": PackedFloat32Array(4, 6, 4, 4), -"texture": 2 -}, -Vector2i(19, 23): { -"heights": 4.0, -"texture": 2 -}, -Vector2i(19, 24): { -"heights": PackedFloat32Array(4, 4, 0, 0), -"texture": 2 -}, -Vector2i(19, 25): { -"heights": PackedFloat32Array(0, 0, 1, 1), -"texture": 0 -}, -Vector2i(19, 26): { -"heights": PackedFloat32Array(1, 1, 0.5, 0.5), -"texture": 0 -}, -Vector2i(19, 27): { -"heights": 0.5, -"texture": 0 -}, -Vector2i(19, 28): { -"heights": PackedFloat32Array(0.5, 0.5, 0, 0), -"texture": 0 -}, -Vector2i(20, 19): { -"heights": PackedFloat32Array(0, 0, 1.5, 0), -"texture": 2 -}, -Vector2i(20, 20): { -"heights": PackedFloat32Array(0, 1.5, 4.5, 6), -"texture": 2 -}, -Vector2i(20, 21): { -"heights": PackedFloat32Array(6, 4.5, 5.5, 6), -"texture": 2 -}, -Vector2i(20, 22): { -"heights": PackedFloat32Array(6, 5.5, 3.5, 4), -"texture": 2 -}, -Vector2i(20, 23): { -"heights": PackedFloat32Array(4, 3.5, 1.5, 4), -"texture": 2 -}, -Vector2i(20, 24): { -"heights": PackedFloat32Array(4, 1.5, 1.5, 0), -"texture": 2 -}, -Vector2i(20, 25): { -"heights": PackedFloat32Array(0, 1.5, 0.5, 1), -"texture": 2 -}, -Vector2i(20, 26): { -"heights": PackedFloat32Array(1, 0.5, 0.5, 0.5), -"texture": 0 -}, -Vector2i(20, 27): { -"heights": PackedFloat32Array(0.5, 0.5, 1, 0.5), -"texture": 0 -}, -Vector2i(20, 28): { -"heights": PackedFloat32Array(0.5, 1, 1, 0), -"texture": 0 -}, -Vector2i(20, 29): { -"heights": PackedFloat32Array(0, 1, 0.5, 0), -"texture": 0 -}, -Vector2i(20, 30): { -"heights": PackedFloat32Array(0, 0.5, 0.5, 0), -"texture": 0 -}, -Vector2i(20, 31): { -"heights": PackedFloat32Array(0, 0.5, 0, 0), -"texture": 0 -}, -Vector2i(21, 19): { -"heights": PackedFloat32Array(0, 0, 1.5, 1.5), -"texture": 2 -}, -Vector2i(21, 20): { -"heights": PackedFloat32Array(1.5, 1.5, 4, 4.5), -"texture": 2 -}, -Vector2i(21, 21): { -"heights": PackedFloat32Array(4.5, 4, 5, 5.5), -"texture": 2 -}, -Vector2i(21, 22): { -"heights": PackedFloat32Array(5.5, 5, 4.5, 3.5), -"texture": 2 -}, -Vector2i(21, 23): { -"heights": PackedFloat32Array(3.5, 4.5, 5, 1.5), -"texture": 2 -}, -Vector2i(21, 24): { -"heights": PackedFloat32Array(1.5, 5, 4, 1.5), -"texture": 2 -}, -Vector2i(21, 25): { -"heights": PackedFloat32Array(1.5, 4, 0.5, 0.5), -"texture": 2 -}, -Vector2i(21, 26): { -"heights": 0.5, -"texture": 0 -}, -Vector2i(21, 27): { -"heights": PackedFloat32Array(0.5, 0.5, 1, 1), -"texture": 0 -}, -Vector2i(21, 28): { -"heights": 1.0, -"texture": 0 -}, -Vector2i(21, 29): { -"heights": PackedFloat32Array(1, 1, 0.5, 0.5), -"texture": 0 -}, -Vector2i(21, 30): { -"heights": 0.5, -"texture": 0 -}, -Vector2i(21, 31): { -"heights": PackedFloat32Array(0.5, 0.5, 0, 0), -"texture": 0 -}, -Vector2i(22, 19): { -"heights": PackedFloat32Array(0, 0, 4, 1.5), -"texture": 2 -}, -Vector2i(22, 20): { -"heights": PackedFloat32Array(1.5, 4, 6.5, 4), -"texture": 2 -}, -Vector2i(22, 21): { -"heights": PackedFloat32Array(4, 6.5, 4, 5), -"texture": 2 -}, -Vector2i(22, 22): { -"heights": PackedFloat32Array(5, 4, 5, 4.5), -"texture": 2 -}, -Vector2i(22, 23): { -"heights": PackedFloat32Array(4.5, 5, 6.5, 5), -"texture": 2 -}, -Vector2i(22, 24): { -"heights": PackedFloat32Array(5, 6.5, 4, 4), -"texture": 2 -}, -Vector2i(22, 25): { -"heights": PackedFloat32Array(4, 4, 0, 0.5), -"texture": 2 -}, -Vector2i(22, 26): { -"heights": PackedFloat32Array(0.5, 0, 0, 0.5), -"texture": 0 -}, -Vector2i(22, 27): { -"heights": PackedFloat32Array(0.5, 0, 0.5, 1), -"texture": 0 -}, -Vector2i(22, 28): { -"heights": PackedFloat32Array(1, 0.5, 0.5, 1), -"texture": 0 -}, -Vector2i(22, 29): { -"heights": PackedFloat32Array(1, 0.5, 0.5, 0.5), -"texture": 0 -}, -Vector2i(22, 30): { -"heights": 0.5, -"texture": 0 -}, -Vector2i(22, 31): { -"heights": PackedFloat32Array(0.5, 0.5, 0, 0), -"texture": 0 -}, -Vector2i(22, 32): { -"heights": PackedFloat32Array(0, 0, 0.5, 0), -"texture": 0 -}, -Vector2i(22, 33): { -"heights": PackedFloat32Array(0, 0.5, 0.5, 0), -"texture": 0 -}, -Vector2i(22, 34): { -"heights": PackedFloat32Array(0, 0.5, 1, 0), -"texture": 0 -}, -Vector2i(22, 35): { -"heights": PackedFloat32Array(0, 1, 1, 0), -"texture": 0 -}, -Vector2i(22, 36): { -"heights": PackedFloat32Array(0, 1, 0, 0), -"texture": 0 -}, -Vector2i(23, 19): { -"heights": PackedFloat32Array(0, 0, 4, 4), -"texture": 2 -}, -Vector2i(23, 20): { -"heights": PackedFloat32Array(4, 4, 5, 6.5), -"texture": 2 -}, -Vector2i(23, 21): { -"heights": PackedFloat32Array(6.5, 5, 3.5, 4), -"texture": 2 -}, -Vector2i(23, 22): { -"heights": PackedFloat32Array(4, 3.5, 5, 5), -"texture": 2 -}, -Vector2i(23, 23): { -"heights": PackedFloat32Array(5, 5, 3, 6.5), -"texture": 2 -}, -Vector2i(23, 24): { -"heights": PackedFloat32Array(6.5, 3, 3, 4), -"texture": 2 -}, -Vector2i(23, 25): { -"heights": PackedFloat32Array(4, 1.5, 0, 0), -"texture": 2 -}, -Vector2i(23, 27): { -"heights": PackedFloat32Array(0, 0, -1, 0.5), -"texture": 0 -}, -Vector2i(23, 28): { -"heights": PackedFloat32Array(0.5, -1, -1, 0.5), -"texture": 0 -}, -Vector2i(23, 29): { -"heights": PackedFloat32Array(0.5, -1, -1, 0.5), -"texture": 0 -}, -Vector2i(23, 30): { -"heights": PackedFloat32Array(0.5, -1, 0, 0.5), -"texture": 0 -}, -Vector2i(23, 31): { -"heights": PackedFloat32Array(0.5, 0, 0, 0), -"texture": 0 -}, -Vector2i(23, 32): { -"heights": PackedFloat32Array(0, 0, 0.5, 0.5), -"texture": 0 -}, -Vector2i(23, 33): { -"heights": 0.5, -"texture": 0 -}, -Vector2i(23, 34): { -"heights": PackedFloat32Array(0.5, 0.5, 1, 1), -"texture": 0 -}, -Vector2i(23, 35): { -"heights": 1.0, -"texture": 0 -}, -Vector2i(23, 36): { -"heights": PackedFloat32Array(1, 1, 0, 0), -"texture": 0 -}, -Vector2i(24, 19): { -"heights": PackedFloat32Array(0, 0, 1.5, 4), -"texture": 2 -}, -Vector2i(24, 20): { -"heights": PackedFloat32Array(4, 1.5, 3.5, 5), -"texture": 2 -}, -Vector2i(24, 21): { -"heights": PackedFloat32Array(5, 3.5, 4.5, 3.5), -"texture": 2 -}, -Vector2i(24, 22): { -"heights": PackedFloat32Array(3.5, 4.5, 3.5, 5), -"texture": 2 -}, -Vector2i(24, 23): { -"heights": PackedFloat32Array(5, 3.5, 2, 3), -"texture": 2 -}, -Vector2i(24, 24): { -"heights": PackedFloat32Array(3, 1, 0, 3), -"texture": 2 -}, -Vector2i(24, 25): { -"heights": PackedFloat32Array(1.5, 0, 0, 0), -"texture": 2 -}, -Vector2i(24, 27): { -"heights": PackedFloat32Array(0, 0, -1, -1), -"texture": 0 -}, -Vector2i(24, 28): { -"heights": -1.0, -"texture": 3 -}, -Vector2i(24, 29): { -"heights": -1.0, -"texture": 3 -}, -Vector2i(24, 30): { -"heights": PackedFloat32Array(-1, -1, 0, 0), -"texture": 0 -}, -Vector2i(24, 32): { -"heights": PackedFloat32Array(0, 0, 1, 0.5), -"texture": 0 -}, -Vector2i(24, 33): { -"heights": PackedFloat32Array(0.5, 1, 1, 0.5), -"texture": 0 -}, -Vector2i(24, 34): { -"heights": PackedFloat32Array(0.5, 1, 0.5, 1), -"texture": 0 -}, -Vector2i(24, 35): { -"heights": PackedFloat32Array(1, 0.5, 0.5, 1), -"texture": 0 -}, -Vector2i(24, 36): { -"heights": PackedFloat32Array(1, 0.5, 0, 0), -"texture": 0 -}, -Vector2i(25, 19): { -"heights": PackedFloat32Array(0, 0, 1.5, 1.5), -"texture": 2 -}, -Vector2i(25, 20): { -"heights": PackedFloat32Array(1.5, 1.5, 3.5, 3.5), -"texture": 2 -}, -Vector2i(25, 21): { -"heights": PackedFloat32Array(3.5, 3.5, 4, 4.5), -"texture": 2 -}, -Vector2i(25, 22): { -"heights": PackedFloat32Array(4.5, 4, 3, 3.5), -"texture": 2 -}, -Vector2i(25, 23): { -"heights": PackedFloat32Array(3.5, 3, 0.5, 2), -"texture": 2 -}, -Vector2i(25, 24): { -"heights": -0.5, -"texture": 0 -}, -Vector2i(25, 25): { -"heights": PackedFloat32Array(-0.5, -0.5, -1.5, 0), -"texture": 0 -}, -Vector2i(25, 26): { -"heights": PackedFloat32Array(0, -1.5, -1.5, 0), -"texture": 0 -}, -Vector2i(25, 27): { -"heights": PackedFloat32Array(0, -1.5, -1.5, -1), -"texture": 0 -}, -Vector2i(25, 28): { -"heights": PackedFloat32Array(-1, -1.5, -1.5, -1), -"texture": 3 -}, -Vector2i(25, 29): { -"heights": PackedFloat32Array(-1, -1.5, -1.5, -1), -"texture": 3 -}, -Vector2i(25, 30): { -"heights": PackedFloat32Array(-1, -1.5, -1.5, 0), -"texture": 0 -}, -Vector2i(25, 31): { -"heights": PackedFloat32Array(0, -1.5, 0, 0), -"texture": 0 -}, -Vector2i(25, 32): { -"heights": PackedFloat32Array(0, 0, 1, 1), -"texture": 0 -}, -Vector2i(25, 33): { -"heights": 1.0, -"texture": 0 -}, -Vector2i(25, 34): { -"heights": PackedFloat32Array(1, 1, 0.5, 0.5), -"texture": 0 -}, -Vector2i(25, 35): { -"heights": 0.5, -"texture": 0 -}, -Vector2i(25, 36): { -"heights": PackedFloat32Array(0.5, 0.5, 0, 0), -"texture": 0 -}, -Vector2i(26, 17): { -"heights": PackedFloat32Array(0, 0, 1, 0), -"texture": 2 -}, -Vector2i(26, 18): { -"heights": PackedFloat32Array(0, 1, 1, 0), -"texture": 2 -}, -Vector2i(26, 19): { -"heights": PackedFloat32Array(0, 1, 2.5, 1.5), -"texture": 2 -}, -Vector2i(26, 20): { -"heights": PackedFloat32Array(1.5, 2.5, 1.5, 3.5), -"texture": 2 -}, -Vector2i(26, 21): { -"heights": PackedFloat32Array(3.5, 1.5, 3.5, 4), -"texture": 2 -}, -Vector2i(26, 22): { -"heights": PackedFloat32Array(4, 3.5, 3.5, 3), -"texture": 2 -}, -Vector2i(26, 23): { -"heights": PackedFloat32Array(3, 2.5, 0.5, 0.5), -"texture": 2 -}, -Vector2i(26, 24): { -"heights": -0.5, -"texture": 0 -}, -Vector2i(26, 25): { -"heights": PackedFloat32Array(-0.5, -0.5, -1.5, -1.5), -"texture": 0 -}, -Vector2i(26, 26): { -"heights": -1.5, -"texture": 3 -}, -Vector2i(26, 27): { -"heights": -1.5, -"texture": 3 -}, -Vector2i(26, 28): { -"heights": -1.5, -"texture": 3 -}, -Vector2i(26, 29): { -"heights": -1.5, -"texture": 3 -}, -Vector2i(26, 30): { -"heights": -1.5, -"texture": 3 -}, -Vector2i(26, 31): { -"heights": PackedFloat32Array(-1.5, -1.5, 0, 0), -"texture": 0 -}, -Vector2i(26, 32): { -"heights": PackedFloat32Array(0, 0, 0, 1), -"texture": 0 -}, -Vector2i(26, 33): { -"heights": PackedFloat32Array(1, 0, 0, 1), -"texture": 0 -}, -Vector2i(26, 34): { -"heights": PackedFloat32Array(1, 0, 0, 0.5), -"texture": 0 -}, -Vector2i(26, 35): { -"heights": PackedFloat32Array(0.5, 0, 0, 0.5), -"texture": 0 -}, -Vector2i(26, 36): { -"heights": PackedFloat32Array(0.5, 0, 0, 0), -"texture": 0 -}, -Vector2i(27, 17): { -"heights": PackedFloat32Array(0, 0, 3, 1), -"texture": 2 -}, -Vector2i(27, 18): { -"heights": PackedFloat32Array(1, 3, 5.5, 1), -"texture": 2 -}, -Vector2i(27, 19): { -"heights": PackedFloat32Array(1, 5.5, 5.5, 2.5), -"texture": 2 -}, -Vector2i(27, 20): { -"heights": PackedFloat32Array(2.5, 5.5, 4, 1.5), -"texture": 2 -}, -Vector2i(27, 21): { -"heights": PackedFloat32Array(1.5, 4, 4.5, 3.5), -"texture": 2 -}, -Vector2i(27, 22): { -"heights": PackedFloat32Array(3.5, 4.5, 3, 3.5), -"texture": 2 -}, -Vector2i(27, 23): { -"heights": PackedFloat32Array(2.5, 3, -0.5, 0.5), -"texture": 2 -}, -Vector2i(27, 24): { -"heights": -0.5, -"texture": 0 -}, -Vector2i(27, 25): { -"heights": PackedFloat32Array(-0.5, -0.5, -1.5, -1.5), -"texture": 0 -}, -Vector2i(27, 26): { -"heights": -1.5, -"texture": 3 -}, -Vector2i(27, 27): { -"heights": -1.5, -"texture": 3 -}, -Vector2i(27, 28): { -"heights": -1.5, -"texture": 3 -}, -Vector2i(27, 29): { -"heights": -1.5, -"texture": 3 -}, -Vector2i(27, 30): { -"heights": -1.5, -"texture": 3 -}, -Vector2i(27, 31): { -"heights": PackedFloat32Array(-1.5, -1.5, -0.5, 0), -"texture": 0 -}, -Vector2i(27, 32): { -"heights": PackedFloat32Array(0, -0.5, -0.5, 0), -"texture": 0 -}, -Vector2i(27, 33): { -"heights": PackedFloat32Array(0, -0.5, 0, 0), -"texture": 0 -}, -Vector2i(27, 35): { -"heights": 0.0, -"texture": 1 -}, -Vector2i(27, 36): { -"heights": 0.0, -"texture": 1 -}, -Vector2i(27, 37): { -"heights": 0.0, -"texture": 1 -}, -Vector2i(27, 38): { -"heights": 0.0, -"texture": 1 -}, -Vector2i(28, 17): { -"heights": PackedFloat32Array(0, 0, 3, 3), -"texture": 2 -}, -Vector2i(28, 18): { -"heights": PackedFloat32Array(3, 3, 6, 5.5), -"texture": 2 -}, -Vector2i(28, 19): { -"heights": PackedFloat32Array(5.5, 6, 7, 5.5), -"texture": 2 -}, -Vector2i(28, 20): { -"heights": PackedFloat32Array(5.5, 7, 5.5, 4), -"texture": 2 -}, -Vector2i(28, 21): { -"heights": PackedFloat32Array(4, 5.5, 4, 4.5), -"texture": 2 -}, -Vector2i(28, 22): { -"heights": PackedFloat32Array(4.5, 4, 1.5, 3), -"texture": 2 -}, -Vector2i(28, 23): { -"heights": PackedFloat32Array(3, 1.5, 0, -0.5), -"texture": 2 -}, -Vector2i(28, 24): { -"heights": PackedFloat32Array(-0.5, 0, 0, -0.5), -"texture": 0 -}, -Vector2i(28, 25): { -"heights": PackedFloat32Array(-0.5, 0, -1.5, -1.5), -"texture": 0 -}, -Vector2i(28, 26): { -"heights": -1.5, -"texture": 3 -}, -Vector2i(28, 27): { -"heights": -1.5, -"texture": 3 -}, -Vector2i(28, 28): { -"heights": -1.5, -"texture": 3 -}, -Vector2i(28, 29): { -"heights": -1.5, -"texture": 1 -}, -Vector2i(28, 30): { -"heights": -1.5, -"texture": 1 -}, -Vector2i(28, 31): { -"heights": PackedFloat32Array(-1.5, -1.5, -0.5, -0.5), -"texture": 1 -}, -Vector2i(28, 32): { -"heights": -0.5, -"texture": 1 -}, -Vector2i(28, 33): { -"heights": PackedFloat32Array(-0.5, -0.5, 0, 0), -"texture": 1 -}, -Vector2i(28, 34): { -"heights": 0.0, -"texture": 1 -}, -Vector2i(28, 35): { -"heights": 0.0, -"texture": 1 -}, -Vector2i(28, 36): { -"heights": 0.0, -"texture": 1 -}, -Vector2i(28, 37): { -"heights": 0.0, -"texture": 1 -}, -Vector2i(28, 38): { -"heights": 0.0, -"texture": 1 -}, -Vector2i(29, 16): { -"heights": PackedFloat32Array(0, 0, 1, 0), -"texture": 2 -}, -Vector2i(29, 17): { -"heights": PackedFloat32Array(0, 1, 2, 3), -"texture": 2 -}, -Vector2i(29, 18): { -"heights": PackedFloat32Array(3, 2, 6, 6), -"texture": 2 -}, -Vector2i(29, 19): { -"heights": PackedFloat32Array(6, 6, 6, 7), -"texture": 2 -}, -Vector2i(29, 20): { -"heights": PackedFloat32Array(7, 6, 2, 5.5), -"texture": 2 -}, -Vector2i(29, 21): { -"heights": PackedFloat32Array(5.5, 2, 0, 4), -"texture": 2 -}, -Vector2i(29, 22): { -"heights": PackedFloat32Array(4, 0, 0, 1.5), -"texture": 2 -}, -Vector2i(29, 23): { -"heights": PackedFloat32Array(1.5, 0, 0, 0), -"texture": 2 -}, -Vector2i(29, 25): { -"heights": PackedFloat32Array(0, 0, -1.5, -1.5), -"texture": 0 -}, -Vector2i(29, 26): { -"heights": -1.5, -"texture": 3 -}, -Vector2i(29, 27): { -"heights": -1.5, -"texture": 3 -}, -Vector2i(29, 28): { -"heights": -1.5, -"texture": 1 -}, -Vector2i(29, 29): { -"heights": -1.5, -"texture": 1 -}, -Vector2i(29, 30): { -"heights": -1.5, -"texture": 1 -}, -Vector2i(29, 31): { -"heights": PackedFloat32Array(-1.5, -1.5, -0.5, -0.5), -"texture": 1 -}, -Vector2i(29, 32): { -"heights": -0.5, -"texture": 1 -}, -Vector2i(29, 33): { -"heights": PackedFloat32Array(-0.5, -0.5, 0, 0), -"texture": 1 -}, -Vector2i(29, 34): { -"heights": 0.0, -"texture": 1 -}, -Vector2i(29, 35): { -"heights": 0.0, -"texture": 1 -}, -Vector2i(30, 16): { -"heights": PackedFloat32Array(0, 0, 2.5, 1), -"texture": 2 -}, -Vector2i(30, 17): { -"heights": PackedFloat32Array(1, 2.5, 3.5, 2), -"texture": 2 -}, -Vector2i(30, 18): { -"heights": PackedFloat32Array(2, 3.5, 6, 6), -"texture": 2 -}, -Vector2i(30, 19): { -"heights": PackedFloat32Array(6, 6, 5, 6), -"texture": 2 -}, -Vector2i(30, 20): { -"heights": PackedFloat32Array(5, 4, 0, 2), -"texture": 2 -}, -Vector2i(30, 21): { -"heights": PackedFloat32Array(2, 0, 0, 0), -"texture": 2 -}, -Vector2i(30, 25): { -"heights": PackedFloat32Array(0, 0, -1.5, -1.5), -"texture": 0 -}, -Vector2i(30, 26): { -"heights": -1.5, -"texture": 3 -}, -Vector2i(30, 27): { -"heights": -1.5, -"texture": 3 -}, -Vector2i(30, 28): { -"heights": -1.5, -"texture": 1 -}, -Vector2i(30, 29): { -"heights": -1.5, -"texture": 1 -}, -Vector2i(30, 30): { -"heights": -1.5, -"texture": 1 -}, -Vector2i(30, 31): { -"heights": PackedFloat32Array(-1.5, -1.5, 0, -0.5), -"texture": 0 -}, -Vector2i(30, 32): { -"heights": PackedFloat32Array(-0.5, 0, 0, -0.5), -"texture": 0 -}, -Vector2i(30, 33): { -"heights": PackedFloat32Array(-0.5, 0, 0, 0), -"texture": 0 -}, -Vector2i(30, 35): { -"heights": PackedFloat32Array(0, 0, 0.5, 0), -"texture": 0 -}, -Vector2i(30, 36): { -"heights": PackedFloat32Array(0, 0.5, 0.5, 0), -"texture": 0 -}, -Vector2i(30, 37): { -"heights": PackedFloat32Array(0, 0.5, 0, 0), -"texture": 0 -}, -Vector2i(31, 16): { -"heights": PackedFloat32Array(0, 0, 2.5, 2.5), -"texture": 2 -}, -Vector2i(31, 17): { -"heights": PackedFloat32Array(2.5, 2.5, 2.5, 3.5), -"texture": 2 -}, -Vector2i(31, 18): { -"heights": PackedFloat32Array(3.5, 2.5, 5, 6), -"texture": 2 -}, -Vector2i(31, 19): { -"heights": PackedFloat32Array(6, 5, 4.5, 4.5), -"texture": 2 -}, -Vector2i(31, 20): { -"heights": PackedFloat32Array(2.5, 3.5, 0.5, 0), -"texture": 2 -}, -Vector2i(31, 21): { -"heights": PackedFloat32Array(0, 0, 0.5, 0), -"texture": 0 -}, -Vector2i(31, 22): { -"heights": PackedFloat32Array(0, 0.5, 0, 0), -"texture": 0 -}, -Vector2i(31, 25): { -"heights": PackedFloat32Array(0, 0, -1.5, -1.5), -"texture": 0 -}, -Vector2i(31, 26): { -"heights": -1.5, -"texture": 3 -}, -Vector2i(31, 27): { -"heights": -1.5, -"texture": 3 -}, -Vector2i(31, 28): { -"heights": -1.5, -"texture": 1 -}, -Vector2i(31, 29): { -"heights": -1.5, -"texture": 1 -}, -Vector2i(31, 30): { -"heights": -1.5, -"texture": 3 -}, -Vector2i(31, 31): { -"heights": PackedFloat32Array(-1.5, -1.5, 0, 0), -"texture": 0 -}, -Vector2i(31, 32): { -"heights": PackedFloat32Array(0, 0, 0.5, 0), -"texture": 0 -}, -Vector2i(31, 33): { -"heights": PackedFloat32Array(0, 0.5, 1, 0), -"texture": 0 -}, -Vector2i(31, 34): { -"heights": PackedFloat32Array(0, 1, 1, 0), -"texture": 0 -}, -Vector2i(31, 35): { -"heights": PackedFloat32Array(0, 1, 1.5, 0.5), -"texture": 0 -}, -Vector2i(31, 36): { -"heights": PackedFloat32Array(0.5, 1.5, 0.5, 0.5), -"texture": 0 -}, -Vector2i(31, 37): { -"heights": PackedFloat32Array(0.5, 0.5, 0, 0), -"texture": 0 -}, -Vector2i(32, 16): { -"heights": PackedFloat32Array(0, 1, 4.5, 2.5), -"texture": 2 -}, -Vector2i(32, 17): { -"heights": PackedFloat32Array(2.5, 4.5, 5.5, 2.5), -"texture": 2 -}, -Vector2i(32, 18): { -"heights": PackedFloat32Array(2.5, 5.5, 6, 5), -"texture": 2 -}, -Vector2i(32, 19): { -"heights": PackedFloat32Array(5, 6, 5.5, 4), -"texture": 2 -}, -Vector2i(32, 20): { -"heights": PackedFloat32Array(3, 5, 1.5, 0.5), -"texture": 2 -}, -Vector2i(32, 21): { -"heights": PackedFloat32Array(0, 0.5, 0.5, 0.5), -"texture": 0 -}, -Vector2i(32, 22): { -"heights": PackedFloat32Array(0.5, 0.5, 0, 0), -"texture": 0 -}, -Vector2i(32, 25): { -"heights": PackedFloat32Array(0, 0, 0, -1.5), -"texture": 0 -}, -Vector2i(32, 26): { -"heights": PackedFloat32Array(-1.5, 0, 0, -1.5), -"texture": 0 -}, -Vector2i(32, 27): { -"heights": PackedFloat32Array(-1.5, 0, -1, -1.5), -"texture": 0 -}, -Vector2i(32, 28): { -"heights": PackedFloat32Array(-1.5, -1, -1, -1.5), -"texture": 1 -}, -Vector2i(32, 29): { -"heights": PackedFloat32Array(-1.5, -1, -1, -1.5), -"texture": 1 -}, -Vector2i(32, 30): { -"heights": PackedFloat32Array(-1.5, -1, 0, -1.5), -"texture": 0 -}, -Vector2i(32, 31): { -"heights": PackedFloat32Array(-1.5, 0, 0, 0), -"texture": 0 -}, -Vector2i(32, 32): { -"heights": PackedFloat32Array(0, 0, 0.5, 0.5), -"texture": 0 -}, -Vector2i(32, 33): { -"heights": PackedFloat32Array(0.5, 0.5, 1, 1), -"texture": 0 -}, -Vector2i(32, 34): { -"heights": 1.0, -"texture": 0 -}, -Vector2i(32, 35): { -"heights": PackedFloat32Array(1, 1, 1, 1.5), -"texture": 0 -}, -Vector2i(32, 36): { -"heights": PackedFloat32Array(1.5, 1, 0, 0.5), -"texture": 0 -}, -Vector2i(32, 37): { -"heights": PackedFloat32Array(0.5, 0, 0, 0), -"texture": 0 -}, -Vector2i(33, 16): { -"heights": PackedFloat32Array(1, 2, 4.5, 4.5), -"texture": 2 -}, -Vector2i(33, 17): { -"heights": PackedFloat32Array(4.5, 4.5, 4.5, 5.5), -"texture": 2 -}, -Vector2i(33, 18): { -"heights": PackedFloat32Array(5.5, 4.5, 4, 6), -"texture": 2 -}, -Vector2i(33, 19): { -"heights": PackedFloat32Array(6, 4, 3.5, 5.5), -"texture": 2 -}, -Vector2i(33, 20): { -"heights": PackedFloat32Array(5, 3.5, 1, 1.5), -"texture": 2 -}, -Vector2i(33, 21): { -"heights": 0.5, -"texture": 0 -}, -Vector2i(33, 22): { -"heights": PackedFloat32Array(0.5, 0.5, 0.5, 0), -"texture": 0 -}, -Vector2i(33, 23): { -"heights": PackedFloat32Array(0, 0.5, 0.5, 0), -"texture": 0 -}, -Vector2i(33, 24): { -"heights": PackedFloat32Array(0, 0.5, 0, 0), -"texture": 0 -}, -Vector2i(33, 27): { -"heights": PackedFloat32Array(0, 0, -1, -1), -"texture": 0 -}, -Vector2i(33, 28): { -"heights": -1.0, -"texture": 1 -}, -Vector2i(33, 29): { -"heights": -1.0, -"texture": 1 -}, -Vector2i(33, 30): { -"heights": PackedFloat32Array(-1, -1, 0, 0), -"texture": 0 -}, -Vector2i(33, 32): { -"heights": PackedFloat32Array(0, 0, 0.5, 0.5), -"texture": 0 -}, -Vector2i(33, 33): { -"heights": PackedFloat32Array(0.5, 0.5, 0.5, 1), -"texture": 0 -}, -Vector2i(33, 34): { -"heights": PackedFloat32Array(1, 0.5, 0.5, 1), -"texture": 0 -}, -Vector2i(33, 35): { -"heights": PackedFloat32Array(1, 0.5, 0.5, 1), -"texture": 0 -}, -Vector2i(33, 36): { -"heights": PackedFloat32Array(1, 0.5, 0, 0), -"texture": 0 -}, -Vector2i(34, 16): { -"heights": PackedFloat32Array(2, 2, 4, 4.5), -"texture": 2 -}, -Vector2i(34, 17): { -"heights": PackedFloat32Array(4.5, 4, 4, 4.5), -"texture": 2 -}, -Vector2i(34, 18): { -"heights": PackedFloat32Array(4.5, 4, 5, 4), -"texture": 2 -}, -Vector2i(34, 19): { -"heights": PackedFloat32Array(4, 5, 4, 3.5), -"texture": 2 -}, -Vector2i(34, 20): { -"heights": PackedFloat32Array(3.5, 4, 2, 1), -"texture": 2 -}, -Vector2i(34, 21): { -"heights": PackedFloat32Array(0.5, 1, 0.5, 0.5), -"texture": 0 -}, -Vector2i(34, 22): { -"heights": PackedFloat32Array(0.5, 0.5, -0.5, 0.5), -"texture": 1 -}, -Vector2i(34, 23): { -"heights": PackedFloat32Array(0.5, -0.5, -0.5, 0.5), -"texture": 1 -}, -Vector2i(34, 24): { -"heights": PackedFloat32Array(0.5, -0.5, 0, 0), -"texture": 0 -}, -Vector2i(34, 27): { -"heights": PackedFloat32Array(0, 0, 0, -1), -"texture": 0 -}, -Vector2i(34, 28): { -"heights": PackedFloat32Array(-1, 0, 0, -1), -"texture": 1 -}, -Vector2i(34, 29): { -"heights": PackedFloat32Array(-1, 0, 0, -1), -"texture": 1 -}, -Vector2i(34, 30): { -"heights": PackedFloat32Array(-1, 0, 0, 0), -"texture": 0 -}, -Vector2i(34, 32): { -"heights": PackedFloat32Array(0, 0, 0, 0.5), -"texture": 0 -}, -Vector2i(34, 33): { -"heights": PackedFloat32Array(0.5, 0, 0, 0.5), -"texture": 0 -}, -Vector2i(34, 34): { -"heights": PackedFloat32Array(0.5, 0, 0, 0.5), -"texture": 0 -}, -Vector2i(34, 35): { -"heights": PackedFloat32Array(0.5, 0, 0, 0.5), -"texture": 0 -}, -Vector2i(34, 36): { -"heights": PackedFloat32Array(0.5, 0, 0, 0), -"texture": 0 -}, -Vector2i(35, 16): { -"heights": PackedFloat32Array(2, 0, 1, 4), -"texture": 2 -}, -Vector2i(35, 17): { -"heights": PackedFloat32Array(4, 1, 2.5, 4), -"texture": 2 -}, -Vector2i(35, 18): { -"heights": PackedFloat32Array(4, 2.5, 6, 5), -"texture": 2 -}, -Vector2i(35, 19): { -"heights": PackedFloat32Array(5, 6, 5.5, 4), -"texture": 2 -}, -Vector2i(35, 20): { -"heights": PackedFloat32Array(4, 5.5, 2.5, 2.5), -"texture": 2 -}, -Vector2i(35, 21): { -"heights": PackedFloat32Array(2.5, 2.5, 2, 2), -"texture": 2 -}, -Vector2i(35, 22): { -"heights": PackedFloat32Array(0.5, 0.5, -0.5, -0.5), -"texture": 1 -}, -Vector2i(35, 23): { -"heights": PackedFloat32Array(-0.5, -0.5, -1, -0.5), -"texture": 1 -}, -Vector2i(35, 24): { -"heights": PackedFloat32Array(-0.5, -1, 0, 0), -"texture": 1 -}, -Vector2i(35, 25): { -"heights": PackedFloat32Array(0, 0, 0.5, 0), -"texture": 1 -}, -Vector2i(35, 26): { -"heights": PackedFloat32Array(0, 0.5, 0.5, 0), -"texture": 0 -}, -Vector2i(35, 27): { -"heights": PackedFloat32Array(0, 0.5, 0, 0), -"texture": 0 -}, -Vector2i(35, 28): { -"heights": 0.0, -"texture": 1 -}, -Vector2i(35, 29): { -"heights": 0.0, -"texture": 1 -}, -Vector2i(36, 16): { -"heights": PackedFloat32Array(0, 0, 2.5, 1), -"texture": 2 -}, -Vector2i(36, 17): { -"heights": PackedFloat32Array(1, 2.5, 4, 2.5), -"texture": 2 -}, -Vector2i(36, 18): { -"heights": PackedFloat32Array(2.5, 4, 4, 6), -"texture": 2 -}, -Vector2i(36, 19): { -"heights": PackedFloat32Array(6, 4, 4.5, 5.5), -"texture": 2 -}, -Vector2i(36, 20): { -"heights": PackedFloat32Array(5.5, 4.5, 4.5, 2.5), -"texture": 2 -}, -Vector2i(36, 21): { -"heights": PackedFloat32Array(2.5, 4.5, 3, 2), -"texture": 2 -}, -Vector2i(36, 22): { -"heights": PackedFloat32Array(1, 3, 0, -0.5), -"texture": 2 -}, -Vector2i(36, 23): { -"heights": PackedFloat32Array(-0.5, 0, -0.5, -1), -"texture": 1 -}, -Vector2i(36, 24): { -"heights": PackedFloat32Array(-1, -0.5, 0, 0), -"texture": 1 -}, -Vector2i(36, 25): { -"heights": PackedFloat32Array(0, 0, 0.5, 0.5), -"texture": 1 -}, -Vector2i(36, 26): { -"heights": 0.5, -"texture": 0 -}, -Vector2i(36, 27): { -"heights": PackedFloat32Array(0.5, 0.5, 0, 0), -"texture": 0 -}, -Vector2i(36, 28): { -"heights": 0.0, -"texture": 1 -}, -Vector2i(36, 29): { -"heights": 0.0, -"texture": 1 -}, -Vector2i(37, 16): { -"heights": PackedFloat32Array(0, 0, 2.5, 2.5), -"texture": 2 -}, -Vector2i(37, 17): { -"heights": PackedFloat32Array(2.5, 2.5, 4, 4), -"texture": 2 -}, -Vector2i(37, 18): { -"heights": 4.0, -"texture": 2 -}, -Vector2i(37, 19): { -"heights": PackedFloat32Array(4, 4, 5, 4.5), -"texture": 2 -}, -Vector2i(37, 20): { -"heights": PackedFloat32Array(4.5, 5, 5, 4.5), -"texture": 2 -}, -Vector2i(37, 21): { -"heights": PackedFloat32Array(4.5, 5, 3, 3), -"texture": 2 -}, -Vector2i(37, 22): { -"heights": PackedFloat32Array(3, 3, -0.5, 0), -"texture": 2 -}, -Vector2i(37, 23): { -"heights": PackedFloat32Array(0, -0.5, -0.5, -0.5), -"texture": 1 -}, -Vector2i(37, 24): { -"heights": PackedFloat32Array(-0.5, -0.5, 0.5, 0), -"texture": 1 -}, -Vector2i(37, 25): { -"heights": PackedFloat32Array(0, 0.5, 0, 0.5), -"texture": 1 -}, -Vector2i(37, 26): { -"heights": PackedFloat32Array(0.5, 0, 0, 0.5), -"texture": 0 -}, -Vector2i(37, 27): { -"heights": PackedFloat32Array(0.5, 0, 0, 0), -"texture": 0 -}, -Vector2i(37, 28): { -"heights": 0.0, -"texture": 1 -}, -Vector2i(37, 29): { -"heights": 0.0, -"texture": 1 -}, -Vector2i(37, 30): { -"heights": 0.0, -"texture": 1 -}, -Vector2i(38, 16): { -"heights": PackedFloat32Array(0, 0, 2.5, 2.5), -"texture": 2 -}, -Vector2i(38, 17): { -"heights": PackedFloat32Array(2.5, 2.5, 2.5, 4), -"texture": 2 -}, -Vector2i(38, 18): { -"heights": PackedFloat32Array(4, 2.5, 2.5, 4), -"texture": 2 -}, -Vector2i(38, 19): { -"heights": PackedFloat32Array(4, 2.5, 5, 5), -"texture": 2 -}, -Vector2i(38, 20): { -"heights": PackedFloat32Array(5, 5, 6.5, 5), -"texture": 2 -}, -Vector2i(38, 21): { -"heights": PackedFloat32Array(5, 6.5, 4.5, 3), -"texture": 2 -}, -Vector2i(38, 22): { -"heights": PackedFloat32Array(3, 4.5, -0.5, -0.5), -"texture": 2 -}, -Vector2i(38, 23): { -"heights": -0.5, -"texture": 1 -}, -Vector2i(38, 24): { -"heights": PackedFloat32Array(-0.5, -0.5, 0.5, 0.5), -"texture": 1 -}, -Vector2i(38, 25): { -"heights": PackedFloat32Array(0.5, 0.5, 0, 0), -"texture": 0 -}, -Vector2i(38, 29): { -"heights": 0.0, -"texture": 1 -}, -Vector2i(38, 30): { -"heights": 0.0, -"texture": 1 -}, -Vector2i(39, 16): { -"heights": PackedFloat32Array(0, 0, 0, 2.5), -"texture": 2 -}, -Vector2i(39, 17): { -"heights": PackedFloat32Array(2.5, 0, 0, 2.5), -"texture": 2 -}, -Vector2i(39, 18): { -"heights": PackedFloat32Array(2.5, 0, 0, 2.5), -"texture": 2 -}, -Vector2i(39, 19): { -"heights": PackedFloat32Array(2.5, 0, 3, 5), -"texture": 2 -}, -Vector2i(39, 20): { -"heights": PackedFloat32Array(5, 3, 4.5, 6.5), -"texture": 2 -}, -Vector2i(39, 21): { -"heights": PackedFloat32Array(6.5, 4.5, 4.5, 4.5), -"texture": 2 -}, -Vector2i(39, 22): { -"heights": PackedFloat32Array(4.5, 4.5, -0.5, -0.5), -"texture": 2 -}, -Vector2i(39, 23): { -"heights": -0.5, -"texture": 1 -}, -Vector2i(39, 24): { -"heights": PackedFloat32Array(-0.5, -0.5, 0, 0.5), -"texture": 1 -}, -Vector2i(39, 25): { -"heights": PackedFloat32Array(0.5, 0, 0, 0), -"texture": 0 -}, -Vector2i(39, 29): { -"heights": 0.0, -"texture": 1 -}, -Vector2i(39, 30): { -"heights": 0.0, -"texture": 1 -}, -Vector2i(40, 19): { -"heights": PackedFloat32Array(0, 0, 3, 3), -"texture": 2 -}, -Vector2i(40, 20): { -"heights": PackedFloat32Array(3, 3, 3, 4.5), -"texture": 2 -}, -Vector2i(40, 21): { -"heights": PackedFloat32Array(4.5, 3, 3, 4.5), -"texture": 2 -}, -Vector2i(40, 22): { -"heights": PackedFloat32Array(4.5, 3, -0.5, -0.5), -"texture": 2 -}, -Vector2i(40, 23): { -"heights": -0.5, -"texture": 1 -}, -Vector2i(40, 24): { -"heights": PackedFloat32Array(-0.5, -0.5, 0, 0), -"texture": 1 -}, -Vector2i(40, 29): { -"heights": 0.0, -"texture": 1 -}, -Vector2i(40, 30): { -"heights": 0.0, -"texture": 1 -}, -Vector2i(40, 34): { -"heights": PackedFloat32Array(0, 0, 1, 0), -"texture": 3 -}, -Vector2i(40, 35): { -"heights": PackedFloat32Array(0, 1, 1, 0), -"texture": 3 -}, -Vector2i(40, 36): { -"heights": 1.5, -"texture": 2 -}, -Vector2i(40, 37): { -"heights": 2.0, -"texture": 2 -}, -Vector2i(40, 38): { -"heights": 2.0, -"texture": 2 -}, -Vector2i(40, 39): { -"heights": 2.0, -"texture": 2 -}, -Vector2i(40, 40): { -"heights": 2.0, -"texture": 2 -}, -Vector2i(40, 41): { -"heights": 1.5, -"texture": 2 -}, -Vector2i(41, 19): { -"heights": PackedFloat32Array(0, 0, 3, 3), -"texture": 2 -}, -Vector2i(41, 20): { -"heights": PackedFloat32Array(3, 3, 4, 3), -"texture": 2 -}, -Vector2i(41, 21): { -"heights": PackedFloat32Array(3, 4, 4, 3), -"texture": 2 -}, -Vector2i(41, 22): { -"heights": PackedFloat32Array(3, 4, 0, -0.5), -"texture": 2 -}, -Vector2i(41, 23): { -"heights": PackedFloat32Array(-0.5, 0, 0, -0.5), -"texture": 1 -}, -Vector2i(41, 24): { -"heights": PackedFloat32Array(-0.5, 0, 0, 0), -"texture": 0 -}, -Vector2i(41, 25): { -"heights": PackedFloat32Array(0, 0, 0.5, 0), -"texture": 0 -}, -Vector2i(41, 26): { -"heights": PackedFloat32Array(0, -0.5, -0.5, 0), -"texture": 0 -}, -Vector2i(41, 27): { -"heights": PackedFloat32Array(0, -1, 0, 0), -"texture": 0 -}, -Vector2i(41, 34): { -"heights": PackedFloat32Array(0, 0, 1, 1), -"texture": 3 -}, -Vector2i(41, 35): { -"heights": 1.0, -"texture": 1 -}, -Vector2i(41, 36): { -"heights": 2.0, -"texture": 2 -}, -Vector2i(41, 37): { -"heights": PackedFloat32Array(2, 2, 1, 2), -"texture": 2 -}, -Vector2i(41, 38): { -"heights": PackedFloat32Array(2, 1, 1, 2), -"texture": 0 -}, -Vector2i(41, 39): { -"heights": PackedFloat32Array(2, 1, 1, 2), -"texture": 0 -}, -Vector2i(41, 40): { -"heights": PackedFloat32Array(2, 1, 2, 2), -"texture": 2 -}, -Vector2i(41, 41): { -"heights": 2.0, -"texture": 2 -}, -Vector2i(42, 19): { -"heights": PackedFloat32Array(0, 0, 4.5, 3), -"texture": 2 -}, -Vector2i(42, 20): { -"heights": PackedFloat32Array(3, 4.5, 7, 4), -"texture": 2 -}, -Vector2i(42, 21): { -"heights": PackedFloat32Array(4, 7, 5.5, 4), -"texture": 2 -}, -Vector2i(42, 22): { -"heights": PackedFloat32Array(4, 5.5, 0, 0), -"texture": 2 -}, -Vector2i(42, 25): { -"heights": PackedFloat32Array(0, 0, -0.5, -0.5), -"texture": 0 -}, -Vector2i(42, 26): { -"heights": -0.5, -"texture": 0 -}, -Vector2i(42, 27): { -"heights": PackedFloat32Array(-0.5, -0.5, 0, 0), -"texture": 0 -}, -Vector2i(42, 34): { -"heights": PackedFloat32Array(0, 0, 1, 1), -"texture": 3 -}, -Vector2i(42, 35): { -"heights": 1.0, -"texture": 1 -}, -Vector2i(42, 36): { -"heights": 2.0, -"texture": 2 -}, -Vector2i(42, 37): { -"heights": PackedFloat32Array(2, 2, 1, 1), -"texture": 0 -}, -Vector2i(42, 38): { -"heights": PackedFloat32Array(1, 1, 3, 1), -"texture": 0 -}, -Vector2i(42, 39): { -"heights": PackedFloat32Array(3, 1, 1, 1), -"texture": 0 -}, -Vector2i(42, 40): { -"heights": PackedFloat32Array(1, 1, 2, 2), -"texture": 0 -}, -Vector2i(42, 41): { -"heights": 2.0, -"texture": 2 -}, -Vector2i(43, 19): { -"heights": PackedFloat32Array(0, 0, 4.5, 4.5), -"texture": 2 -}, -Vector2i(43, 20): { -"heights": PackedFloat32Array(4.5, 4.5, 6, 7), -"texture": 2 -}, -Vector2i(43, 21): { -"heights": PackedFloat32Array(7, 6, 4.5, 5.5), -"texture": 2 -}, -Vector2i(43, 22): { -"heights": PackedFloat32Array(5.5, 4.5, 0, 0), -"texture": 2 -}, -Vector2i(43, 25): { -"heights": PackedFloat32Array(0, 0, 0, 1), -"texture": 0 -}, -Vector2i(43, 26): { -"heights": PackedFloat32Array(-0.5, 0, 0, -0.5), -"texture": 0 -}, -Vector2i(43, 27): { -"heights": PackedFloat32Array(1.5, 0, 1, 0), -"texture": 2 -}, -Vector2i(43, 28): { -"heights": PackedFloat32Array(0, 1, 1, 0), -"texture": 2 -}, -Vector2i(43, 29): { -"heights": PackedFloat32Array(0, 1, 0, 0), -"texture": 2 -}, -Vector2i(43, 34): { -"heights": PackedFloat32Array(0, 0, 1, 1), -"texture": 3 -}, -Vector2i(43, 35): { -"heights": 1.0, -"texture": 1 -}, -Vector2i(43, 36): { -"heights": 2.0, -"texture": 2 -}, -Vector2i(43, 37): { -"heights": PackedFloat32Array(2, 2, 1, 1), -"texture": 0 -}, -Vector2i(43, 38): { -"heights": PackedFloat32Array(1, 1, 1, 3), -"texture": 0 -}, -Vector2i(43, 39): { -"heights": PackedFloat32Array(1, 3, 1, 1), -"texture": 0 -}, -Vector2i(43, 40): { -"heights": PackedFloat32Array(1, 1, 2, 2), -"texture": 0 -}, -Vector2i(43, 41): { -"heights": 2.0, -"texture": 2 -}, -Vector2i(44, 19): { -"heights": PackedFloat32Array(0, 0, 3, 4.5), -"texture": 2 -}, -Vector2i(44, 20): { -"heights": PackedFloat32Array(4.5, 3, 3, 6), -"texture": 2 -}, -Vector2i(44, 21): { -"heights": PackedFloat32Array(6, 3, 3, 4.5), -"texture": 2 -}, -Vector2i(44, 22): { -"heights": PackedFloat32Array(4.5, 3, 0, 0), -"texture": 2 -}, -Vector2i(44, 27): { -"heights": PackedFloat32Array(0, 0, 2, 1), -"texture": 2 -}, -Vector2i(44, 28): { -"heights": PackedFloat32Array(2, 4, 5.5, 4.5), -"texture": 2 -}, -Vector2i(44, 29): { -"heights": PackedFloat32Array(1, 2, 0, 0), -"texture": 2 -}, -Vector2i(44, 34): { -"heights": PackedFloat32Array(0, 0, 1, 1), -"texture": 3 -}, -Vector2i(44, 35): { -"heights": 1.0, -"texture": 1 -}, -Vector2i(44, 36): { -"heights": 2.0, -"texture": 2 -}, -Vector2i(44, 37): { -"heights": PackedFloat32Array(2, 2, 2, 1), -"texture": 2 -}, -Vector2i(44, 38): { -"heights": PackedFloat32Array(1, 2, 2, 1), -"texture": 0 -}, -Vector2i(44, 39): { -"heights": PackedFloat32Array(1, 2, 2, 1), -"texture": 0 -}, -Vector2i(44, 40): { -"heights": PackedFloat32Array(1, 2, 2, 2), -"texture": 2 -}, -Vector2i(44, 41): { -"heights": 2.0, -"texture": 2 -}, -Vector2i(45, 19): { -"heights": PackedFloat32Array(0, 0, 0, 3), -"texture": 2 -}, -Vector2i(45, 20): { -"heights": PackedFloat32Array(3, 0, 0, 3), -"texture": 2 -}, -Vector2i(45, 21): { -"heights": PackedFloat32Array(3, 0, 0, 3), -"texture": 2 -}, -Vector2i(45, 22): { -"heights": PackedFloat32Array(3, 0, 0, 0), -"texture": 2 -}, -Vector2i(45, 25): { -"heights": PackedFloat32Array(0.5, 1, 1.5, 2), -"texture": 0 -}, -Vector2i(45, 27): { -"heights": 2.0, -"texture": 2 -}, -Vector2i(45, 28): { -"heights": PackedFloat32Array(3.5, 3.5, 4.5, 4.5), -"texture": 2 -}, -Vector2i(45, 29): { -"heights": PackedFloat32Array(2, 1, 0, 0), -"texture": 2 -}, -Vector2i(45, 34): { -"heights": PackedFloat32Array(0, 0, 1, 1), -"texture": 3 -}, -Vector2i(45, 35): { -"heights": 1.0, -"texture": 1 -}, -Vector2i(45, 36): { -"heights": 1.5, -"texture": 2 -}, -Vector2i(45, 37): { -"heights": 2.0, -"texture": 2 -}, -Vector2i(45, 38): { -"heights": 2.0, -"texture": 2 -}, -Vector2i(45, 39): { -"heights": 2.0, -"texture": 2 -}, -Vector2i(45, 40): { -"heights": 2.0, -"texture": 2 -}, -Vector2i(45, 41): { -"heights": 1.5, -"texture": 2 -}, -Vector2i(46, 27): { -"heights": PackedFloat32Array(0, 0, 0, 1), -"texture": 2 -}, -Vector2i(46, 28): { -"heights": PackedFloat32Array(1, 0, 0, 1), -"texture": 2 -}, -Vector2i(46, 29): { -"heights": PackedFloat32Array(1, 0, 0, 0), -"texture": 2 -}, -Vector2i(46, 34): { -"heights": PackedFloat32Array(0, 0, 1, 1), -"texture": 3 -}, -Vector2i(46, 35): { -"heights": 1.0, -"texture": 1 -}, -Vector2i(46, 36): { -"heights": 1.0, -"texture": 1 -}, -Vector2i(46, 37): { -"heights": 1.0, -"texture": 1 -}, -Vector2i(46, 38): { -"heights": 1.0, -"texture": 1 -}, -Vector2i(46, 39): { -"heights": 1.0, -"texture": 1 -}, -Vector2i(46, 40): { -"heights": 1.0, -"texture": 1 -}, -Vector2i(46, 41): { -"heights": PackedFloat32Array(1, 1, 0, 0), -"texture": 3 -}, -Vector2i(47, 34): { -"heights": PackedFloat32Array(0, 0, 0, 1), -"texture": 3 -}, -Vector2i(47, 35): { -"heights": PackedFloat32Array(1, 0, 0, 1), -"texture": 3 -}, -Vector2i(47, 36): { -"heights": PackedFloat32Array(1, 0, 0, 1), -"texture": 3 -}, -Vector2i(47, 37): { -"heights": PackedFloat32Array(1, 0, 0, 1), -"texture": 3 -}, -Vector2i(47, 38): { -"heights": PackedFloat32Array(1, 0, 0, 1), -"texture": 3 -}, -Vector2i(47, 39): { -"heights": PackedFloat32Array(1, 0, 0, 1), -"texture": 3 -}, -Vector2i(47, 40): { -"heights": PackedFloat32Array(1, 0, 0, 1), -"texture": 3 -}, -Vector2i(47, 41): { -"heights": PackedFloat32Array(1, 0, 0, 0), -"texture": 3 -} -} [node name="Trees" type="Node3D" parent="."] diff --git a/level_terrain_data.tres b/level_terrain_data.tres new file mode 100644 index 0000000..26ea340 --- /dev/null +++ b/level_terrain_data.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="TerrainData" load_steps=7 format=4 uid="uid://54xdqxlq2y2g"] + +[ext_resource type="Script" path="res://terrain/TerrainChunk.cs" id="1_m42vr"] +[ext_resource type="Script" path="res://terrain/TerrainData.cs" id="2_fq61j"] + +[sub_resource type="Resource" id="Resource_v0n2t"] +script = ExtResource("1_m42vr") +Data = PackedByteArray("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAAAAAIAAAADAAAAAAAAAAUAAgADAAAAAAAAAAUABQADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAADAAAAAAAAAAYAAgADAAAAAAAAAAYABgADAAAAAAACAAQABgADAAAAAgAFAAcABAADAAAABQAFAAUABwADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAIAAAADAAAAAgAGAAsAAgADAAAABgAGAAwACwADAAAABgAEAAwADAADAAAABAAHAAwADAADAAAABwAFAAoADAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAAAAAMAAAADAAAAAAAAAAMAAwADAAAAAAAAAAgAAwADAAAAAAAAAAgACAADAAAAAAAAAAMACAADAAAAAAAAAAMAAwADAAAAAAACAAUAAwADAAAAAgALAAsABQADAAAACwAMAA4ACwADAAAADAAMAAwADgADAAAADAAMAAoADAADAAAADAAKAAkACQADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAADAAAAAAAAAAwACAADAAAAAAADAAkADAADAAAAAwADAAgACQADAAAAAwAIAA0ACAADAAAACAAIAAoADQADAAAACAADAAcACgADAAAAAwADAAcABwADAAAAAwAFAAMABwADAAAABQALAAgAAwADAAAACwAOAAsACAADAAAADgAMAAQACwADAAAACgAIAAAABAADAAAABQAHAAEAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAgAAAADAAAACAAMAAwACAADAAAADAAJAAsADAADAAAACQAIAAoACwADAAAACAANAAgACgADAAAADQAKAAcACAADAAAACgAHAAkABwADAAAABwAHAAgACQADAAAABwADAAcACAADAAAAAwAIAAkABwADAAAACAALAAgACQADAAAACwAEAAAACAADAAAABAAAAAAAAAADAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAgAAAADAAAACAAMAAgACAADAAAADAALAAcACAADAAAACwAKAAkABwADAAAACgAIAAoACQADAAAACAAHAAoACgADAAAABwAJAAcACgADAAAACQAIAAYABwADAAAACAAHAAcABgADAAAABwAJAAYABwADAAAACQAIAAMABgADAAAACAAAAAAAAwADAAAAAAAAAAAAAAABAAAAAAABAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAgAAAADAAAACAAIAAgACAADAAAACAAHAAMACAADAAAABwAJAAoAAwADAAAACQAKAA0ACgADAAAACgAKAAYADQADAAAACgAHAAQABgADAAAABwAGAAEABAADAAAABgAFAAEAAQADAAAABQAGAP//AQADAAAABgADAAAA//8DAAAAAwAAAAAAAAADAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAADAAAACAAIAAAAAAADAAAACAADAAMAAAADAAAAAwAKAAgAAwADAAAACgANAAgACAADAAAADQAGAAYACAADAAAABgACAAAABgADAAAA//////////8BAAAA//////////8BAAAA//////////8BAAAA//8AAAAA//8BAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAABAAAAAAAAAAIAAgABAAAAAAADAAEAAgADAAAAAwAIAAEAAQADAAAACAAIAAAAAQADAAAACAADAAAAAAADAAAAAwAAAAAAAAADAAAA//////3/AAABAAAA//////3//f8BAAAA//////3//f8BAAAA//8AAP3//f8BAAAAAAAAAP3//f8BAAAAAAAAAP3//f8BAAAAAAAAAP3//f8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAEAAAABAAAAAgACAAEAAQABAAAAAgABAAEAAQABAAAAAQABAAEAAQABAAAAAQAAAAAAAQABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAD9//3/AAABAAAA/f/9//3//f8EAAAA/f/9//3//f8EAAAA/f/9//3//f8EAAAA/f/9//3//f8EAAAA/f/9//3//f8EAAAA/f/9//3//f8EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAAABAAAAAQABAAEAAQABAAAAAQABAAIAAQABAAAAAQABAAIAAgABAAAAAQAAAAEAAgABAAAAAAAAAP7/AQABAAAAAAAAAP7//v8BAAAAAAD9//3//v8BAAAA/f/9//3//f8EAAAA/f/9//3//f8EAAAA/f/9//3//f8EAAAA/f/9//3//f8EAAAA/f/9//3//f8EAAAA/f/9//3//f8EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAABAAAAAQABAAAAAAABAAAAAQACAAIAAAABAAAAAgACAAIAAgABAAAAAgABAAEAAgABAAAAAQD+//7/AQABAAAA/v/+//7//v8EAAAA/v/9//3//v8EAAAA/f/9//3//f8EAAAA/f/9//3//f8EAAAA/f/9//3//f8EAAAA/f/9//3//f8CAAAA/f/9//3//f8CAAAA/f/9//3//f8CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAACAAEAAAABAAAAAgACAAEAAQABAAAAAgABAAEAAQABAAAAAQD+//7/AQABAAAA/v/+//7//v8EAAAA/v/9//3//v8EAAAA/f/9//3//f8EAAAA/f/9//3//f8EAAAA/f/9//3//f8CAAAA/f/9//3//f8CAAAA/f/9//3//f8CAAAA/f/9//3//f8CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAABAAEAAAABAAAAAQABAAEAAQABAAAAAQABAAEAAQABAAAAAQD+/wAAAQABAAAA/v/+/wAAAAABAAAA/v/9//3/AAABAAAA/f/9//3//f8EAAAA/f/9//3//f8EAAAA/f/9//3//f8CAAAA/f/9//3//f8CAAAA/f/9//3//f8CAAAA/f/9//3//f8EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAABAAAAAAABAAAAAQABAAAAAAABAAAAAQABAAAAAAABAAAAAQAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAD9/wAAAAABAAAA/f/9/wAAAAABAAAA/f/9////AAABAAAA/f/9//////8CAAAA/f/9//////8CAAAA/f/9/wAA//8BAAAA/f/9/wAAAAABAAAA") + +[sub_resource type="Resource" id="Resource_8bw2b"] +script = ExtResource("1_m42vr") +Data = PackedByteArray("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAEAAAABAAAAAAAAAAEAAQABAAAAAAAAAAIAAQABAAAAAAAAAAIAAgABAAAAAAAAAAAAAgABAAAAAAD/////AAABAAAA//////////8CAAAA//////////8CAAAA//8AAAAA//8BAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAABAAEAAAABAAAAAQABAAEAAQABAAAAAQACAAIAAQABAAAAAgACAAIAAgABAAAAAgAAAAAAAgABAAAAAAD//wAAAAABAAAA/////wAAAAACAAAA/////wAAAAACAAAA//8AAAAAAAABAAAAAAABAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAABAAIAAAABAAAAAQABAAIAAgABAAAAAQACAAEAAgABAAAAAgACAAEAAQABAAAAAgAAAAAAAQABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAACAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAACAAIAAAABAAAAAgACAAIAAgABAAAAAgABAAEAAgABAAAAAQABAAEAAQABAAAAAQAAAAAAAQABAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACAAAAAAAAAAEAAAABAAAAAAACAAMAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAACAAAAAAABAAAAAgACAAAAAAABAAAAAgABAAAAAAABAAAAAQABAAAAAAABAAAAAQAAAAAAAAABAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAABAAEAAAABAAAAAQADAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAABAAAAAAABAAAAAQABAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA") + +[sub_resource type="Resource" id="Resource_drl5p"] +script = ExtResource("1_m42vr") +Data = PackedByteArray("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAkABQADAAAAAgAEAAkACQADAAAABAAEAAgACQADAAAABAAAAAIACAADAAAAAAAAAAUAAgADAAAAAAAAAAUABQADAAAAAAAAAAUABQADAAAAAAAAAAAABQADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAJAAsABQADAAAACQAJAAkACwADAAAACQAIAAgACQADAAAACAACAAUACAADAAAAAgAFAAgABQADAAAABQAFAAgACAADAAAABQAFAAUACAADAAAABQAAAAAABQADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQALAAwACgADAAAACwAJAAgADAADAAAACQAIAAoACAADAAAACAAFAAwACgADAAAABQAIAAgADAADAAAACAAIAAgACAADAAAACAAFAAUACAADAAAABQAAAAAABQADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAMAAsACAADAAAADAAIAAcACwADAAAACAAKAAgABwADAAAACgAMAAsACAADAAAADAAIAAkACwADAAAACAAIAAoACQADAAAACAAFAAoACgADAAAABQAAAAYACgADAAAAAAAAAAYABgADAAAAAAAAAAYABgADAAAAAAAAAAkABgADAAAAAAAAAAkACQADAAAAAAAAAAYACQADAAAAAAAAAAAABgADAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAKAAMAAQADAAAACgAHAAIAAwADAAAABwAIAAQAAgADAAAACAALAAUABQADAAAACwAJAAkABQADAAAACQAKAAoACQADAAAACgAKAA0ACgADAAAACgAGAAkADQADAAAABgAGAAYACQADAAAABgAGAAgABgADAAAABgAJAA4ACAADAAAACQAJAAwADgADAAAACQAGAAYADAADAAAABgAAAAAABgADAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAAAAQABAAEAAQABAAAAAQACAAEAAQABAAAABQAFAAQABAADAAAABQAJAAYABAADAAAACQAKAAYABgADAAAACgANAAkABgADAAAADQAJAAkACQADAAAACQAGAAYACQADAAAABgAIAAgABgADAAAACAAOAAsACAADAAAADgAMAAkACwADAAAADAAGAAYACQADAAAABgAAAAAABgADAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAAAAAABAAAAAQABAAEAAAABAAAAAQABAP//AQACAAAAAQABAP////8CAAAAAgAGAAAA//8DAAAABgAGAP//AAADAAAABgAJAP////8DAAAACQAJAP////8DAAAACQAGAP////8DAAAABgAIAAAA//8DAAAACAALAAAAAAADAAAACwAJAAAAAAADAAAACQAGAAAAAAADAAAABgAAAAAAAAADAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAABAAEAAAABAAAAAQD/////AQACAAAA//////7///8CAAAA//8AAP///v8CAAAAAAD///////8CAAAA//////////8CAAAA//////////8CAAAA//////////8CAAAA//8AAAAA//8CAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAABAAAAAAABAAAAAQD//wAAAAABAAAA///+/wAAAAACAAAA/v///wAAAAACAAAA/////wEAAAACAAAA/////wEAAQACAAAA/////wAAAQACAAAA/////wAAAAACAAAA//8AAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f8BAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAEAAAACAAAAAAAAAAEAAQACAAAAAAABAAAAAQACAAAAAQABAAAAAAABAAAAAQAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAEAAAABAAAAAAAAAP////8BAAAAAAAAAAAAAgABAAAAAAAAAAAAAAABAAAAAQACAAMABAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f8AAAAA/f8BAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAABAAEAAAABAAAAAQABAAEAAQABAAAAAQAAAAAAAQABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAD/////AAABAAAA//////////8BAAAA//8AAAAA//8BAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f8AAP7//f8BAAAAAAAAAP7//v8BAAAAAAAAAAAA/v8BAAAAAAABAAAAAAABAAAAAQABAAAAAAABAAAAAQAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAD+/wAAAAABAAAA/////wAAAAABAAAAAwAAAAIAAAADAAAAAAAAAAQAAgADAAAABAAEAAQABAADAAAAAAAAAAAAAgADAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f/+//7//f8CAAAA/v/+//7//v8CAAAA/v8AAAAA/v8CAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAACAAIAAAADAAAABAAIAAsACQADAAAABwAHAAkACQADAAAAAgAAAAAAAgADAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f/+//7//f8CAAAA/v/+//7//v8CAAAA/v8AAAAA/v8CAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAACAAAAAAADAAAAAgAEAAAAAAADAAAABAACAAAAAAADAAAAAgAAAAAAAAADAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f/+/wAA/f8BAAAA/v/+/wAAAAABAAAA/v8AAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f8AAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA") + +[sub_resource type="Resource" id="Resource_gjri6"] +script = ExtResource("1_m42vr") +Data = PackedByteArray("AAAAAAEAAQABAAAAAAAAAAEAAQABAAAAAAAAAAAAAQABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAIAAgABAAAAAQABAAEAAgABAAAAAQAAAAAAAQABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgACAAIAAgABAAAAAgABAAEAAgABAAAAAQAAAAAAAQABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAIAAAAEAAAAAAAAAAIAAgAEAAAAAAAAAAIAAgAEAAAAAAAAAAIAAgAEAAAAAAAAAAIAAgAEAAAAAAAAAAIAAgAEAAAAAAAAAAIAAgAEAAAAAAAAAAAAAgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgACAAIAAwABAAAAAgABAAEAAgABAAAAAQAAAAAAAQABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAACAAIAAAAEAAAAAgACAAIAAgACAAAAAgACAAIAAgACAAAAAgACAAIAAgACAAAAAgACAAIAAgACAAAAAgACAAIAAgACAAAAAgACAAIAAgACAAAAAgAAAAAAAgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwACAAAAAQABAAAAAgABAAAAAAABAAAAAQAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAwADAAMAAwADAAAABAAEAAQABAADAAAABAAEAAQABAADAAAABAAEAAQABAADAAAABAAEAAQABAADAAAAAwADAAMAAwADAAAAAgACAAIAAgACAAAAAgAAAAAAAgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAABAAEAAQABAADAAAABAAEAAIABAADAAAABAAEAAIAAgABAAAABAAEAAIAAgABAAAABAAEAAQAAgADAAAABAAEAAQABAADAAAAAgACAAIAAgACAAAAAgAAAAAAAgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAABAAAABAAEAAQABAADAAAABAACAAIABAABAAAAAgACAAYAAgABAAAAAgACAAIABgABAAAAAgAEAAQAAgABAAAABAAEAAQABAADAAAAAgACAAIAAgACAAAAAgAAAAAAAgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAABAAAABAAEAAQABAADAAAABAACAAIABAABAAAABgACAAIAAgABAAAAAgAGAAIAAgABAAAAAgAEAAQAAgABAAAABAAEAAQABAADAAAAAgACAAIAAgACAAAAAgAAAAAAAgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAABAAAABAAEAAQABAADAAAABAACAAQABAADAAAAAgACAAQABAABAAAAAgACAAQABAABAAAAAgAEAAQABAADAAAABAAEAAQABAADAAAAAgACAAIAAgACAAAAAgAAAAAAAgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAwADAAMAAwADAAAABAAEAAQABAADAAAABAAEAAQABAADAAAABAAEAAQABAADAAAABAAEAAQABAADAAAAAwADAAMAAwADAAAAAgACAAAAAAAEAAAAAgAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA") + +[resource] +script = ExtResource("2_fq61j") +Chunks = { +Vector2i(-1, -1): SubResource("Resource_v0n2t"), +Vector2i(-1, 0): SubResource("Resource_8bw2b"), +Vector2i(0, -1): SubResource("Resource_drl5p"), +Vector2i(0, 0): SubResource("Resource_gjri6") +} diff --git a/terrain/Terrain+Editing.cs b/terrain/Terrain+Editing.cs index 4e746cc..fd84856 100644 --- a/terrain/Terrain+Editing.cs +++ b/terrain/Terrain+Editing.cs @@ -3,10 +3,12 @@ using System.Runtime.InteropServices; public partial class Terrain { + // These mirror the modes / shapes in 'terrain_editing_controls.gd'. enum ToolMode { Height, Flatten, Paint } enum ToolShape { Corner, Circle, Square } // Set by the terrain editing plugin. + // Enables access to the in-editor undo/redo system. public EditorUndoRedoManager EditorUndoRedo { get; set; } // Dummy value to satisfy the overly careful compiler. @@ -34,7 +36,7 @@ public partial class Terrain var toolMode = (ToolMode)(int)controls.Get("tool_mode"); var toolShape = (ToolShape)(int)controls.Get("tool_shape"); - var texture = (int)controls.Get("texture"); + var texture = (byte)(int)controls.Get("texture"); var drawSize = (int)controls.Get("draw_size"); var isRaise = (bool)controls.Get("is_raise"); @@ -49,37 +51,37 @@ public partial class Terrain // Offset hover tile position by corner. // FIXME: This causes FLATTEN to calculate the wrong height in some cases. - if (isEven) hover.Position = hover.Corner switch { - Corner.TopLeft => hover.Position.Offset(0, 0), - Corner.TopRight => hover.Position.Offset(1, 0), - Corner.BottomRight => hover.Position.Offset(1, 1), - Corner.BottomLeft => hover.Position.Offset(0, 1), + if (isEven) hover.Position += hover.Corner switch { + Corner.TopLeft => (0, 0), + Corner.TopRight => (1, 0), + Corner.BottomRight => (1, 1), + Corner.BottomLeft => (0, 1), _ => throw new InvalidOperationException(), }; IEnumerable GetTilesInSquare() { - var min = hover.Position.Offset(-radius, -radius); - var max = hover.Position.Offset(+radius, +radius); - if (isEven) max = max.Offset(-1, -1); + var min = hover.Position + (-radius, -radius); + var max = hover.Position + (+radius, +radius); + if (isEven) max += (-1, -1); for (var x = min.X; x <= max.X; x++) - for (var y = min.Y; y <= max.Y; y++) - yield return new(x, y); + for (var z = min.Z; z <= max.Z; z++) + yield return new(x, z); } IEnumerable GetTilesInRadius() { - var center = isEven ? hover.Position.ToVector2I() - : hover.Position.ToCenter(); - var distanceSqr = Pow(radius + 0.25f * (isEven ? -1 : 1), 2); + var center = isEven ? (Vector2I)hover.Position + : hover.Position.Center; + var distanceSqr = Pow(radius + (isEven ? -1 : 1) * 0.25f, 2); return GetTilesInSquare().Where(tile => - center.DistanceSquaredTo(tile.ToCenter()) < distanceSqr); + center.DistanceSquaredTo(tile.Center) < distanceSqr); } // TODO: Allow click-dragging which doesn't affect already changed tiles / corners. // TODO: Use ArrayMesh instead of ImmediateMesh. - // TODO: Dynamically expand terrain instead of having it be a set size. // Holds onto all the tiles and which of their corners corners will be affected by this edit operation. var tilesToChange = new Dictionary>(); + // Don't look at this black magic. The Dictionary type should have this by default I swear! // Basically, this returns a reference to an entry in the dictionary that can be modified directly. ref Corners Tile(TilePos position) => ref CollectionsMarshal.GetValueRefOrAddDefault(tilesToChange, position, out _dummy); @@ -109,9 +111,9 @@ public partial class Terrain // If the 'connected_toggle' button is active, move "connected" corners. // This is a simplified version of the code below that only affects the 3 neighboring corners. if (isConnected) { - var height = GetTile(hover.Position).Height[hover.Corner]; + var height = Data.GetTileOrDefault(hover.Position).Height[hover.Corner]; foreach (var neighbor in GetNeighbors(hover.Position, hover.Corner)) { - var neighborHeight = GetTile(neighbor.Position).Height[neighbor.Corner]; + var neighborHeight = Data.GetTileOrDefault(neighbor.Position).Height[neighbor.Corner]; if (neighborHeight != height) continue; Tile(neighbor.Position)[neighbor.Corner] = true; } @@ -132,12 +134,12 @@ public partial class Terrain // If the 'connected_toggle' button is active, move "connected" corners. // Connected corners are the ones that are at the same height as ones already being moved. if (isConnected) foreach (var pos in tiles) { - var tile = GetTile(pos); + var tile = Data.GetTileOrDefault(pos); foreach (var corner in Enum.GetValues()) { var height = tile.Height[corner]; foreach (var neighbor in GetNeighbors(pos, corner)) { if (tiles.Contains(neighbor.Position)) continue; - var neighborHeight = GetTile(neighbor.Position).Height[neighbor.Corner]; + var neighborHeight = Data.GetTileOrDefault(neighbor.Position).Height[neighbor.Corner]; if (neighborHeight != height) continue; Tile(neighbor.Position)[neighbor.Corner] = true; } @@ -157,11 +159,11 @@ public partial class Terrain if (toolMode == ToolMode.Paint) { // TODO: Support blending somehow. - var tilesPrevious = new List<(TilePos, int)>(); - var tilesChanged = new List<(TilePos, int)>(); + var tilesPrevious = new List<(TilePos, byte)>(); + var tilesChanged = new List<(TilePos, byte)>(); foreach (var (pos, corners) in tilesToChange) { - var tile = GetTile(pos); + var tile = Data.GetTileOrDefault(pos); tilesPrevious.Add((pos, tile.TexturePrimary)); tilesChanged.Add((pos, texture)); } @@ -171,22 +173,28 @@ public partial class Terrain doArgs = [ PackTextureData(tilesChanged) ]; undoArgs = [ PackTextureData(tilesPrevious) ]; } else { - var tilesPrevious = new List<(TilePos, Corners)>(); - var tilesChanged = new List<(TilePos, Corners)>(); + var tilesPrevious = new List<(TilePos, Corners)>(); + var tilesChanged = new List<(TilePos, Corners)>(); - const float AdjustHeight = 0.5f; - var amount = isFlatten ? GetTile(hover.Position).Height[hover.Corner] - : isRaise ? AdjustHeight : -AdjustHeight; + var amount = isFlatten ? Data.GetTileOrDefault(hover.Position).Height[hover.Corner] + : isRaise ? (short)+1 : (short)-1; foreach (var (pos, corners) in tilesToChange) { - var tile = GetTile(pos); + var tile = Data.GetTileOrDefault(pos); tilesPrevious.Add((pos, tile.Height)); var newHeight = tile.Height; - if (corners.TopLeft ) newHeight.TopLeft = isFlatten ? amount : newHeight.TopLeft + amount; - if (corners.TopRight ) newHeight.TopRight = isFlatten ? amount : newHeight.TopRight + amount; - if (corners.BottomRight) newHeight.BottomRight = isFlatten ? amount : newHeight.BottomRight + amount; - if (corners.BottomLeft ) newHeight.BottomLeft = isFlatten ? amount : newHeight.BottomLeft + amount; + if (isFlatten) { + if (corners.TopLeft ) newHeight.TopLeft = amount; + if (corners.TopRight ) newHeight.TopRight = amount; + if (corners.BottomRight) newHeight.BottomRight = amount; + if (corners.BottomLeft ) newHeight.BottomLeft = amount; + } else { + if (corners.TopLeft ) newHeight.TopLeft += amount; + if (corners.TopRight ) newHeight.TopRight += amount; + if (corners.BottomRight) newHeight.BottomRight += amount; + if (corners.BottomLeft ) newHeight.BottomLeft += amount; + } tilesChanged.Add((pos, newHeight)); } @@ -222,20 +230,14 @@ public partial class Terrain public void DoModifyTerrainHeight(byte[] data) { - foreach (var (pos, corners) in UnpackHeightData(data)) { - var tile = GetTile(pos); - tile.Height = corners; - SetTile(pos, tile); - } + foreach (var (pos, corners) in UnpackHeightData(data)) + Data[pos].Height = corners; } public void DoModifyTerrainTexture(byte[] data) { - foreach (var (pos, texture) in UnpackTextureData(data)) { - var tile = GetTile(pos); - tile.TexturePrimary = texture; - SetTile(pos, tile); - } + foreach (var (pos, texture) in UnpackTextureData(data)) + Data[pos].TexturePrimary = texture; } @@ -254,7 +256,7 @@ public partial class Terrain } foreach (var (tile, visible) in tiles) { - var positions = GetTileCornerPositions(tile); + var positions = ToPositions(tile); foreach (var side in Enum.GetValues()) { var (corner1, corner2) = side.GetCorners(); if (!visible[corner1] && !visible[corner2]) continue; @@ -274,8 +276,7 @@ public partial class Terrain (TilePos Position, Corner Corner) ToTilePos(Vector3 position) { var local = ToLocal(position); - var coord = new Vector2(local.X, local.Z) / TileSize + (Size + Vector2.One) / 2; - var pos = TilePos.From(coord); + var coord = new Vector2(local.X, local.Z) / TileSize; var corner = coord.PosMod(1).RoundToVector2I() switch { (0, 0) => Corner.TopLeft, (1, 0) => Corner.TopRight, @@ -283,26 +284,26 @@ public partial class Terrain (0, 1) => Corner.BottomLeft, _ => throw new InvalidOperationException(), }; - return (pos, corner); + return ((TilePos)coord, corner); } - static readonly Dictionary _offsetLookup = new(){ + static readonly Dictionary _offsetLookup = new(){ [Corner.TopLeft ] = [(-1, -1, Corner.BottomRight), (-1, 0, Corner.TopRight ), (0, -1, Corner.BottomLeft )], [Corner.TopRight ] = [(+1, -1, Corner.BottomLeft ), (+1, 0, Corner.TopLeft ), (0, -1, Corner.BottomRight)], [Corner.BottomRight] = [(+1, +1, Corner.TopLeft ), (+1, 0, Corner.BottomLeft ), (0, +1, Corner.TopRight )], [Corner.BottomLeft ] = [(-1, +1, Corner.TopRight ), (-1, 0, Corner.BottomRight), (0, +1, Corner.TopLeft )], }; static IEnumerable<(TilePos Position, Corner Corner)> GetNeighbors(TilePos pos, Corner corner) - => _offsetLookup[corner].Select(e => (new TilePos(pos.X + e.X, pos.Y + e.Y), e.Opposite)); + => _offsetLookup[corner].Select(e => (new TilePos(pos.X + e.X, pos.Z + e.Z), e.Opposite)); - static byte[] PackHeightData(IEnumerable<(TilePos Position, Corners Corners)> data) + static byte[] PackHeightData(IEnumerable<(TilePos Position, Corners Corners)> data) { using var stream = new MemoryStream(); using var writer = new BinaryWriter(stream); foreach (var (pos, corners) in data) { writer.Write(pos.X); - writer.Write(pos.Y); + writer.Write(pos.Z); writer.Write(corners.TopLeft); writer.Write(corners.TopRight); writer.Write(corners.BottomRight); @@ -311,33 +312,33 @@ public partial class Terrain return stream.ToArray(); } - static IEnumerable<(TilePos Position, Corners Corners)> UnpackHeightData(byte[] data) + static IEnumerable<(TilePos Position, Corners Corners)> UnpackHeightData(byte[] data) { using var stream = new MemoryStream(data); using var reader = new BinaryReader(stream); while (stream.Position < stream.Length) { var x = reader.ReadInt32(); var y = reader.ReadInt32(); - var corners = new Corners( - reader.ReadSingle(), reader.ReadSingle(), - reader.ReadSingle(), reader.ReadSingle()); + var corners = new Corners( + reader.ReadInt16(), reader.ReadInt16(), + reader.ReadInt16(), reader.ReadInt16()); yield return (new(x, y), corners); } } - static byte[] PackTextureData(IEnumerable<(TilePos Position, int Texture)> data) + static byte[] PackTextureData(IEnumerable<(TilePos Position, byte Texture)> data) { using var stream = new MemoryStream(); using var writer = new BinaryWriter(stream); foreach (var (pos, texture) in data) { writer.Write(pos.X); - writer.Write(pos.Y); - writer.Write((byte)texture); + writer.Write(pos.Z); + writer.Write(texture); } return stream.ToArray(); } - static IEnumerable<(TilePos Position, int Texture)> UnpackTextureData(byte[] data) + static IEnumerable<(TilePos Position, byte Texture)> UnpackTextureData(byte[] data) { using var stream = new MemoryStream(data); using var reader = new BinaryReader(stream); diff --git a/terrain/Terrain.cs b/terrain/Terrain.cs index 609364a..365fd7f 100644 --- a/terrain/Terrain.cs +++ b/terrain/Terrain.cs @@ -2,38 +2,16 @@ public partial class Terrain : StaticBody3D { - [Export] public Vector2I Size { get; set; } = new(64, 64); [Export] public float TileSize { get; set; } = 2.0f; + [Export] public float TileStep { get; set; } = 0.5f; - [Export] public ShaderMaterial Material { get; set; } - - // If value at position non-existant => [ 0, 0, 0, 0 ] - // If value at position is float => [ v, v, v, v ] - // If value at position is float[] => value - [Export] public Godot.Collections.Dictionary Tiles { get; set; } + [Export] public TerrainData Data { get; set; } = new(); + [Export] public ShaderMaterial Material { get; set; } public override void _Ready() => UpdateMeshAndShape(); - - public Tile GetTile(TilePos pos) - => (Tiles?.TryGetValue(pos.ToVector2I(), out var result) == true) - ? Tile.FromDictionary(result.AsGodotDictionary()) : default; - - public void SetTile(TilePos pos, Tile value) - { - var key = pos.ToVector2I(); - var dict = value.ToDictionary(); - if (dict == null) Tiles.Remove(key); - else Tiles[key] = dict; - } - - public bool Contains(TilePos pos) - => (pos.X >= 0) && (pos.X < Size.X) - && (pos.Y >= 0) && (pos.Y < Size.Y); - - public void UpdateMeshAndShape() { var mesh = GetOrCreateMesh("MeshInstance"); @@ -41,7 +19,7 @@ public partial class Terrain mesh.ClearSurfaces(); mesh.SurfaceBegin(Mesh.PrimitiveType.Triangles); - var points = new List(); + var points = new List(); // for CollisionShape void AddPoint(Vector3 pos, Vector2 uv) { mesh.SurfaceSetUV(uv); @@ -60,103 +38,102 @@ public partial class Terrain } // TODO: Don't hardcode. - var num_textures = 4; - var num_blend_textures = 7; - - var rnd = new Random(); - for (var x = 0; x < Size.X; x++) - for (var z = 0; z < Size.Y; z++) { - var tile = GetTile(new(x, z)); - var corners = GetTileCornerPositions(new(x, z), tile); - - mesh.SurfaceSetColor(new( - (float)tile.TexturePrimary / num_textures, - (float)tile.TextureSecondary / num_textures, - (float)tile.TextureBlend / num_blend_textures - )); - - var sorted = new (Corner Corner, float Height)[] { - (Corner.TopLeft , tile.Height.TopLeft ), - (Corner.TopRight , tile.Height.TopRight ), - (Corner.BottomRight, tile.Height.BottomRight), - (Corner.BottomLeft , tile.Height.BottomLeft ), - }; - Array.Sort(sorted, (a, b) => a.Height.CompareTo(b.Height)); - - // Find the "ideal way" to split the quad for the tile into two triangles. - // This is done by finding the corner with the least variance between its neighboring corners. - var minDiff = Abs(sorted[0].Height - sorted[2].Height); // Difference between lowest and 3rd lowest point. - var maxDiff = Abs(sorted[3].Height - sorted[1].Height); // Difference between highest and 3rd highest point. - var first = sorted[(minDiff > maxDiff) ? 0 : 3].Corner; - - if (first is Corner.TopLeft or Corner.BottomRight) { - AddTriangle(corners.TopLeft , new(0.0f, 0.0f), - corners.TopRight , new(1.0f, 0.0f), - corners.BottomLeft , new(0.0f, 1.0f)); - AddTriangle(corners.TopRight , new(1.0f, 0.0f), - corners.BottomRight, new(1.0f, 1.0f), - corners.BottomLeft , new(0.0f, 1.0f)); - } else { - AddTriangle(corners.TopRight , new(1.0f, 0.0f), - corners.BottomRight, new(1.0f, 1.0f), - corners.TopLeft , new(0.0f, 0.0f)); - AddTriangle(corners.BottomRight, new(1.0f, 1.0f), - corners.BottomLeft , new(0.0f, 1.0f), - corners.TopLeft , new(0.0f, 0.0f)); - } + var stone_texture = 3; + // These are floats to ensure floating point division is used when calling 'SurfaceSetColor'. + var num_textures = 4.0f; + var num_blend_textures = 7.0f; + + void SetTexture(int primary, int secondary = 1, int blend = 0) + => mesh.SurfaceSetColor(new( + (primary - 1) / num_textures, + (secondary - 1) / num_textures, + blend / num_blend_textures + )); + + foreach (var (chunkPos, chunk) in Data.Chunks) { + var offset = TerrainChunk.ToTileOffset(chunkPos); + for (var x = 0; x < TerrainChunk.Size; x++) + for (var z = 0; z < TerrainChunk.Size; z++) { + var pos = new TilePos(x, z) + offset; + var tile = chunk[pos]; + if (tile.IsDefault) continue; + + var corners = ToPositions(pos, tile); + + SetTexture(tile.TexturePrimary, tile.TextureSecondary, tile.TextureBlend); + + // Find the "ideal way" to split the quad for the tile into two triangles. + // This is done by finding the corner with the least variance between its neighboring corners. + var sorted = tile.Height.ToArray(); Array.Sort(sorted); + var minDiff = Abs(sorted[0] - sorted[2]); // Difference between lowest and 3rd lowest point. + var maxDiff = Abs(sorted[3] - sorted[1]); // Difference between highest and 3rd highest point. + var first = (Corner)sorted[(minDiff > maxDiff) ? 0 : 3]; + + if (first is Corner.TopLeft or Corner.BottomRight) { + AddTriangle(corners.TopLeft , new(0.0f, 0.0f), + corners.TopRight , new(1.0f, 0.0f), + corners.BottomLeft , new(0.0f, 1.0f)); + AddTriangle(corners.TopRight , new(1.0f, 0.0f), + corners.BottomRight, new(1.0f, 1.0f), + corners.BottomLeft , new(0.0f, 1.0f)); + } else { + AddTriangle(corners.TopRight , new(1.0f, 0.0f), + corners.BottomRight, new(1.0f, 1.0f), + corners.TopLeft , new(0.0f, 0.0f)); + AddTriangle(corners.BottomRight, new(1.0f, 1.0f), + corners.BottomLeft , new(0.0f, 1.0f), + corners.TopLeft , new(0.0f, 0.0f)); + } - // Set stone texture for walls. - mesh.SurfaceSetColor(new( - (float)2 / num_textures, - (float)2 / num_textures, - (float)0 / num_blend_textures - )); - - void DrawWall(TilePos nbrPos, Side side) { - var nbrTile = GetTile(nbrPos); - var nbrCorners = GetTileCornerPositions(nbrPos, nbrTile); - - var (c1, c2) = side.GetCorners(); - var (c3, c4) = side.GetOpposite().GetCorners(); - - var corner1 = corners[c1]; // "TopRight" - var corner2 = corners[c2]; // "TopLeft" - var corner3 = nbrCorners[c3]; // "BottomLeft" - var corner4 = nbrCorners[c4]; // "BottomRight" - - var equal1 = IsEqualApprox(corner1.Y, corner4.Y); - var equal2 = IsEqualApprox(corner2.Y, corner3.Y); - - switch (equal1, equal2) { - case (true, true): - // Both corners are connected, no wall needed. - break; - case (true, false): - AddTriangle(corner1, new(1.0f, corner1.Y / TileSize), - corner3, new(0.0f, corner3.Y / TileSize), - corner2, new(0.0f, corner2.Y / TileSize)); - break; - case (false, true): - AddTriangle(corner1, new(1.0f, corner1.Y / TileSize), - corner4, new(1.0f, corner4.Y / TileSize), - corner2, new(0.0f, corner2.Y / TileSize)); - break; - case (false, false): - // FIXME: In some configurations this creates a shape we don't want. - // Need to find a way to detect this, and switch the way triangles make up a quad. - AddTriangle(corner1, new(1.0f, corner1.Y / TileSize), - corner4, new(1.0f, corner4.Y / TileSize), - corner2, new(0.0f, corner2.Y / TileSize)); - AddTriangle(corner2, new(0.0f, corner2.Y / TileSize), - corner4, new(1.0f, corner4.Y / TileSize), - corner3, new(0.0f, corner3.Y / TileSize)); - break; + // Set stone texture for walls. + SetTexture(stone_texture); + + void DrawWall(TilePos nbrPos, Side side) { + var nbrTile = Data.GetTileOrDefault(nbrPos); + var nbrCorners = ToPositions(nbrPos, nbrTile); + + var (c1, c2) = side.GetCorners(); + var (c3, c4) = side.GetOpposite().GetCorners(); + + var corner1 = corners[c1]; // "TopRight" + var corner2 = corners[c2]; // "TopLeft" + var corner3 = nbrCorners[c3]; // "BottomLeft" + var corner4 = nbrCorners[c4]; // "BottomRight" + + var equal1 = IsEqualApprox(corner1.Y, corner4.Y); + var equal2 = IsEqualApprox(corner2.Y, corner3.Y); + + switch (equal1, equal2) { + case (true, true): + // Both corners are connected, no wall needed. + break; + case (true, false): + AddTriangle(corner1, new(1.0f, corner1.Y / TileSize), + corner3, new(0.0f, corner3.Y / TileSize), + corner2, new(0.0f, corner2.Y / TileSize)); + break; + case (false, true): + AddTriangle(corner1, new(1.0f, corner1.Y / TileSize), + corner4, new(1.0f, corner4.Y / TileSize), + corner2, new(0.0f, corner2.Y / TileSize)); + break; + case (false, false): + // FIXME: In some configurations this creates a shape we don't want. + // Need to find a way to detect this, and switch the way triangles make up a quad. + AddTriangle(corner1, new(1.0f, corner1.Y / TileSize), + corner4, new(1.0f, corner4.Y / TileSize), + corner2, new(0.0f, corner2.Y / TileSize)); + AddTriangle(corner2, new(0.0f, corner2.Y / TileSize), + corner4, new(1.0f, corner4.Y / TileSize), + corner3, new(0.0f, corner3.Y / TileSize)); + break; + } } - } - if (x < Size.X - 1) DrawWall(new(x + 1, z), Side.Right); - if (z < Size.Y - 1) DrawWall(new(x, z + 1), Side.Bottom); - } + DrawWall(pos + (1, 0), Side.Right); + DrawWall(pos + (0, 1), Side.Bottom); + } + } mesh.SurfaceEnd(); mesh.SurfaceSetMaterial(0, Material); @@ -165,20 +142,6 @@ public partial class Terrain } - public Corners GetTileCornerPositions(TilePos pos) - => GetTileCornerPositions(pos, GetTile(pos)); - public Corners GetTileCornerPositions(TilePos pos, Tile tile) - { - var half = TileSize / 2; - var vx = (pos.X - Size.X / 2.0f) * TileSize; - var vz = (pos.Y - Size.Y / 2.0f) * TileSize; - return new(new(vx - half, tile.Height.TopLeft , vz - half), - new(vx + half, tile.Height.TopRight , vz - half), - new(vx + half, tile.Height.BottomRight, vz + half), - new(vx - half, tile.Height.BottomLeft , vz + half)); - } - - public ImmediateMesh GetOrCreateMesh(string name) { var meshInstance = (MeshInstance3D)GetNodeOrNull(name); @@ -200,4 +163,18 @@ public partial class Terrain } return (ConcavePolygonShape3D)collisionShape.Shape; } + + + public Corners ToPositions(TilePos pos) + => ToPositions(pos, Data.GetTileOrDefault(pos)); + + public Corners ToPositions(TilePos pos, Tile tile) + { + var x = pos.X * TileSize; + var z = pos.Z * TileSize; + return new(new(x , tile.Height.TopLeft * TileStep, z ), + new(x + TileSize, tile.Height.TopRight * TileStep, z ), + new(x + TileSize, tile.Height.BottomRight * TileStep, z + TileSize), + new(x , tile.Height.BottomLeft * TileStep, z + TileSize)); + } } diff --git a/terrain/TerrainChunk.cs b/terrain/TerrainChunk.cs new file mode 100644 index 0000000..b397845 --- /dev/null +++ b/terrain/TerrainChunk.cs @@ -0,0 +1,31 @@ +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +[Tool] +[GlobalClass] +public partial class TerrainChunk + : Resource +{ + // ChunkShift of 5 results in a ChunkSize of 32. + public const int Shift = 5; + public const int Mask = ~(~0 << Shift); + public const int Size = Mask + 1; + + static readonly int SizeInBytes = Size * Size * Unsafe.SizeOf(); + + [Export] public byte[] Data { get; set; } = new byte[SizeInBytes]; + + public ref Tile this[TilePos pos] { get { + var tiles = MemoryMarshal.Cast(Data); + return ref tiles[GetIndex(pos)]; + } } + + public static Vector2I ToChunkPos(TilePos pos) + => new(pos.X >> Shift, pos.Z >> Shift); + + public static Vector2I ToTileOffset(Vector2I chunkPos) + => new(chunkPos.X << Shift, chunkPos.Y << Shift); + + static int GetIndex(TilePos pos) + => (pos.X & Mask) | ((pos.Z & Mask) << Shift); +} diff --git a/terrain/TerrainData.cs b/terrain/TerrainData.cs new file mode 100644 index 0000000..66f652d --- /dev/null +++ b/terrain/TerrainData.cs @@ -0,0 +1,21 @@ +[Tool] +[GlobalClass] +public partial class TerrainData + : Resource +{ + [Export] public Godot.Collections.Dictionary Chunks { get; set; } = []; + + public ref Tile this[TilePos pos] { get { + var chunkPos = TerrainChunk.ToChunkPos(pos); + if (!Chunks.TryGetValue(chunkPos, out var chunk)) + Chunks.Add(chunkPos, chunk = new()); + return ref chunk[pos]; + } } + + public Tile GetTileOrDefault(TilePos pos) + { + var chunkPos = TerrainChunk.ToChunkPos(pos); + return Chunks.TryGetValue(chunkPos, out var chunk) + ? chunk[pos] : default; + } +} diff --git a/terrain/Tile.cs b/terrain/Tile.cs index f2802a9..37eed4b 100644 --- a/terrain/Tile.cs +++ b/terrain/Tile.cs @@ -1,94 +1,40 @@ -using Dictionary = Godot.Collections.Dictionary; - -public readonly record struct TilePos(int X, int Y) -{ - public TilePos GetNeighbor(Side side) - => side switch { - Side.Left => new(X - 1, Y), - Side.Top => new(X, Y - 1), - Side.Right => new(X + 1, Y), - Side.Bottom => new(X, Y + 1), - _ => throw new ArgumentException($"Invalid Side value '{side}'", nameof(side)), - }; - - public TilePos GetNeighbor(Corner corner) - => corner switch { - Corner.TopLeft => new(X - 1, Y - 1), - Corner.TopRight => new(X + 1, Y - 1), - Corner.BottomRight => new(X + 1, Y + 1), - Corner.BottomLeft => new(X - 1, Y + 1), - _ => throw new ArgumentException($"Invalid Corner value '{corner}'", nameof(corner)), - }; - - public TilePos Offset(Vector2I value) => Offset(value.X, value.Y); - public TilePos Offset(int x, int y) => new(X + x, Y + y); - - public static TilePos From(Vector2I value) => new(value.X, value.Y); - public static TilePos From(Vector2 value) => new(FloorToInt(value.X), FloorToInt(value.Y)); - public Vector2I ToVector2I() => new(X, Y); - public Vector2 ToCenter() => new(X + 0.5f, Y + 0.5f); -} - public struct Tile { - public Corners Height; + public Corners Height; // TODO: Replace with enum or something more permanent? - public int TexturePrimary; - public int TextureSecondary; - public int TextureBlend; - - - public static Tile FromDictionary(Dictionary dict) - { - if (dict == null) return default; + public byte TexturePrimary; + public byte TextureSecondary; + public byte TextureBlend; + + public readonly bool IsDefault + => Height == default + && TexturePrimary == 0 + && TextureSecondary == 0 + && TextureBlend == 0; + + public readonly override string ToString() + => $"Tile {{ Height = {Height}, TexturePrimary = {TexturePrimary}, TextureSecondary = {TextureSecondary}, TextureBlend = {TextureBlend} }}"; +} - float topLeft, topRight, bottomRight, bottomLeft; - switch (dict["heights"]) { - case { VariantType: Variant.Type.Float } variant: - var height = (float)variant; - (topLeft, topRight, bottomRight, bottomLeft) = (height, height, height, height); - break; - case { VariantType: Variant.Type.PackedFloat32Array } variant: - var heights = (float[])variant; - (topLeft, topRight, bottomRight, bottomLeft) = (heights[0], heights[1], heights[2], heights[3]); - break; - default: throw new Exception("Invalid variant type"); - }; +public readonly record struct TilePos(int X, int Z) +{ + public Vector2 Center => new(X + 0.5f, Z + 0.5f); - int texturePrimary, textureSecondary, textureBlend; - switch (dict["texture"]) { - case { VariantType: Variant.Type.Int } variant: - var texture = (int)variant; - (texturePrimary, textureSecondary, textureBlend) = (texture, 0, 0); - break; - case { VariantType: Variant.Type.PackedInt32Array } variant: - var textures = (int[])variant; - (texturePrimary, textureSecondary, textureBlend) = (textures[0], textures[1], textures[2]); - break; - default: throw new Exception("Invalid variant type"); - }; + public static TilePos operator +(TilePos left, Vector2I right) => new(left.X + right.X, left.Z + right.Y); + public static TilePos operator +(TilePos left, (int X, int Y) right) => new(left.X + right.X, left.Z + right.Y); - return new(){ - Height = new(topLeft, topRight, bottomRight, bottomLeft), - TexturePrimary = texturePrimary, - TextureSecondary = textureSecondary, - TextureBlend = textureBlend, - }; - } + public static TilePos operator -(TilePos left, Vector2I right) => new(left.X - right.X, left.Z - right.Y); + public static TilePos operator -(TilePos left, (int X, int Y) right) => new(left.X - right.X, left.Z - right.Y); - public readonly Dictionary ToDictionary() - { - if (Height.IsZeroApprox() && (TexturePrimary == 0) && (TextureBlend == 0)) - return null; - return new(){ - ["heights"] = Height.IsEqualApprox() ? Height.TopLeft : new[]{ Height.TopLeft, Height.TopRight, Height.BottomRight, Height.BottomLeft }, - ["texture"] = (TextureBlend == 0) ? TexturePrimary : new[]{ TexturePrimary, TextureSecondary, TextureBlend }, - }; - } + public static explicit operator TilePos(Vector2I value) => new(value.X, value.Y); + public static explicit operator TilePos(Vector2 value) => new(FloorToInt(value.X), FloorToInt(value.Y)); + public static explicit operator Vector2I(TilePos pos) => new(pos.X, pos.Z); } public struct Corners(T topLeft, T topRight, T bottomRight, T bottomLeft) + : IEquatable> + where T : IEquatable { public T TopLeft = topLeft; public T TopRight = topRight; @@ -115,33 +61,23 @@ public struct Corners(T topLeft, T topRight, T bottomRight, T bottomLeft) } } } - public readonly void Deconstruct( - out T topLeft , out T topRight, - out T bottomRight, out T bottomLeft) - { - topLeft = TopLeft; - topRight = TopRight; - bottomRight = BottomRight; - bottomLeft = BottomLeft; - } -} + public readonly T[] ToArray() + => [ TopLeft, TopRight, BottomRight, BottomLeft ]; -public static class CornersExtensions -{ - public static void Adjust(this ref Corners self, float amount) - { - self.TopLeft += amount; - self.TopRight += amount; - self.BottomRight += amount; - self.BottomLeft += amount; - } + public readonly bool Equals(Corners other) + => TopLeft .Equals(other.TopLeft ) + && TopRight .Equals(other.TopRight ) + && BottomRight.Equals(other.BottomRight) + && BottomLeft .Equals(other.BottomLeft ); + + public readonly override bool Equals(object obj) + => (obj is Corners other) && Equals(other); + public readonly override int GetHashCode() + => HashCode.Combine(TopLeft, TopRight, BottomRight, BottomLeft); - public static bool IsZeroApprox(this Corners self) - => Mathf.IsZeroApprox(self.TopLeft ) && Mathf.IsZeroApprox(self.TopRight ) - && Mathf.IsZeroApprox(self.BottomRight) && Mathf.IsZeroApprox(self.BottomLeft); + public readonly override string ToString() + => $"Corners(TopLeft: {TopLeft}, TopRight: {TopRight}, BottomRight: {BottomRight}, BottomLeft: {BottomLeft})"; - public static bool IsEqualApprox(this Corners self) - => Mathf.IsEqualApprox(self.TopLeft, self.TopRight ) - && Mathf.IsEqualApprox(self.TopLeft, self.BottomRight) - && Mathf.IsEqualApprox(self.TopLeft, self.BottomLeft ); + public static bool operator ==(Corners left, Corners right) => left.Equals(right); + public static bool operator !=(Corners left, Corners right) => !left.Equals(right); }