├── .gitattributes ├── .gitignore ├── LICENSE ├── README.md ├── core ├── camera │ ├── FreeCamera.gd │ └── FreeCamera.tscn ├── generator │ ├── map_generator_1.gd │ ├── map_generator_1.tscn │ ├── map_generator_2.gd │ ├── map_generator_2.tscn │ ├── map_generator_base.gd │ ├── room_1.gd │ ├── room_2.gd │ └── room_base.gd └── global │ └── genum.gd ├── icon.png ├── icon.png.import ├── level ├── gridmap_library.tscn ├── level_1.tscn ├── level_2.tscn └── mesh_library.tres └── project.godot /.gitattributes: -------------------------------------------------------------------------------- 1 | # Normalize EOL for all files that Git considers text files. 2 | * text=auto eol=lf 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Godot 4+ specific ignores 2 | .godot/ 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 廉价喵 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Godot-MapGeneratorSampleProject 2 | 3 | ![icon](https://user-images.githubusercontent.com/88229072/183573519-d90b3999-142a-4fc9-a8f3-fe6c00517469.png) 4 | 5 | ![不规则地图](https://user-images.githubusercontent.com/88229072/183570548-0015167d-6454-47cb-a162-95222f493504.gif) 6 | ![规则地图](https://user-images.githubusercontent.com/88229072/183570549-346005f5-7550-41c3-8602-06015a0fdfe5.gif) 7 | 8 | ## 二维随机地图生成方法 9 | 10 | 1.新建一个枚举类型的二维数组 `map`,每个元素代表着每一个格子,枚举内容代表格子的种类,例如空地、墙(六边形网格地图可以变形为四边形网格地图) 11 | 12 | 2.自定义随机填充算法初始化 `map` 13 | 14 | 3.自定义平滑算法处理 `map` 15 | 16 | 例如:遍历 `map` 每个元素,计算其周围 8 个元素为墙的个数,等于 4 个时保持不变,大于一半则自己也变成墙,反之为空地 17 | 18 | 4.清除小的墙体、空地 19 | 20 | `map` 中一些位置连续的,同一枚举类型的元素可以视为一个整体,它不是墙就是空地,用 `List` 表示,通过广度优先找出 21 | 22 | 先删掉小墙体,这样有些房间就会变大,找小空洞时,所有房间的大小确定不变 23 | 24 | 再删掉小空地,并且把没删掉的作为房间存起来 25 | 26 | 最后把房间最大的作为主房间 27 | 28 | 5.房间连接 29 | 30 | 遍历所有房间,对其中每一个房间,寻找可能存在的,距离自己最近的,与自己尚未连接的房间 31 | 32 | 连接房间时,进行两项操作: 33 | 34 | (1) 连接时遍历两个房间的边界上的节点,找到两个房间之间距离最近的一对边节点,由直线生成算法获得直线上各点。遍历各点,在以给定的通道宽度为半径,列表元素为圆心的,圆内的所有地图节点,都置为空地 35 | 36 | (2) 房间 a 如果可以到达主房间,那么与之相连的所有房间都可以连接到主房间 37 | 重复遍历若干次,直至所有房间都可以到达主房间 38 | 39 | ## 2D Random Map Generation Method 40 | 41 | 1.Create a new two-dimensional array `map` of enumeration type, each element represents each grid, and the enumeration content represents the type of grid, such as open space, wall (the hexagonal grid map can be transformed into a quadrilateral grid map) 42 | 43 | 2.Customize the random filling algorithm to initialize the `map` 44 | 45 | 3.Custom smoothing algorithm to process `map` 46 | 47 | For example: traverse each element of the `map`, and calculate the number of walls around the 8 elements. If it is equal to 4, it will remain unchanged. If it is greater than half, it will become a wall, else it will be space. 48 | 49 | 4.Clear small walls and spaces 50 | 51 | Some elements of the same enumeration type in the map that are continuous in position can be regarded as a whole. It is either a hand of walls or spaces. It is represented by `List` and is found by BFS. 52 | 53 | Delete the small walls first, so that some rooms will become larger. When looking for small holes, the size of all rooms will be fixed. 54 | 55 | Then delete the small space, and save the ones that are not deleted as the room 56 | 57 | Finally, use the largest room as the main room 58 | 59 | 5.Room connection 60 | 61 | Traverse all the rooms, and for each of them, look for the possible room that is closest to you and has not yet been connected to yourself 62 | 63 | When connecting rooms, do two things: 64 | 65 | (1) Traverse the nodes on the boundary of the two rooms, find a pair of edge nodes with the closest distance between the two rooms, and obtain each point on the line by the line generation algorithm. Traverse each point in the line as center, with the given passage width as the radius, all map nodes in the circle are set as empty spaces 66 | 67 | (2) If room a can reach main room, all rooms connected to a can be connected to the main room 68 | 69 | Repeat the traversal until all rooms can reach the main room 70 | -------------------------------------------------------------------------------- /core/camera/FreeCamera.gd: -------------------------------------------------------------------------------- 1 | #Copyright © 2022 Marc Nahr: https://github.com/MarcPhi/godot-free-look-camera 2 | extends Camera3D 3 | 4 | @export_range(0, 10, 0.01) var sensitivity : float = 3 5 | @export_range(0, 1000, 0.1) var default_velocity : float = 5 6 | @export_range(0, 10, 0.01) var speed_scale : float = 1.17 7 | @export var max_speed : float = 1000 8 | @export var min_speed : float = 0.2 9 | 10 | @onready var _velocity = default_velocity 11 | 12 | func _input(event): 13 | if not current: 14 | return 15 | 16 | if Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED: 17 | if event is InputEventMouseMotion: 18 | rotation.y -= event.relative.x / 1000 * sensitivity 19 | rotation.x -= event.relative.y / 1000 * sensitivity 20 | rotation.x = clamp(rotation.x, PI/-2, PI/2) 21 | 22 | if event is InputEventMouseButton: 23 | match event.button_index: 24 | MOUSE_BUTTON_RIGHT: 25 | Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED if event.pressed else Input.MOUSE_MODE_VISIBLE) 26 | MOUSE_BUTTON_WHEEL_UP: # increase fly velocity 27 | _velocity = clamp(_velocity * speed_scale, min_speed, max_speed) 28 | MOUSE_BUTTON_WHEEL_DOWN: # decrease fly velocity 29 | _velocity = clamp(_velocity / speed_scale, min_speed, max_speed) 30 | 31 | func _process(delta): 32 | var direction = Vector3( 33 | float(Input.is_key_pressed(KEY_D)) - float(Input.is_key_pressed(KEY_A)), 34 | float(Input.is_key_pressed(KEY_E)) - float(Input.is_key_pressed(KEY_Q)), 35 | float(Input.is_key_pressed(KEY_S)) - float(Input.is_key_pressed(KEY_W)) 36 | ).normalized() 37 | 38 | translate(direction * _velocity * delta) 39 | -------------------------------------------------------------------------------- /core/camera/FreeCamera.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=2 format=3] 2 | 3 | [ext_resource type="Script" path="res://core/camera/FreeCamera.gd" id="1_sos6e"] 4 | 5 | [node name="FreeCamera" type="Camera3D"] 6 | script = ExtResource("1_sos6e") 7 | -------------------------------------------------------------------------------- /core/generator/map_generator_1.gd: -------------------------------------------------------------------------------- 1 | extends MapGeneratorBase 2 | 3 | const Room = preload("room_1.gd") 4 | 5 | # 随机填充百分比,越大洞越小 6 | @export_range(0.0,1.0) var fillThreshold : float = 0.55 7 | 8 | # 平滑程度(次数) 9 | @export_range(0,20) var smoothLevel : int = 4 10 | 11 | # 清除小墙体的阈值 12 | @export var wallThresholdSize : int = 50 13 | # 清除小孔的的阈值 14 | @export var roomThresholdSize : int = 50 15 | 16 | # 通道(房间与房间直接)宽度 17 | @export var passageWidth : int = 4 18 | 19 | @export var borderSize : int = 1 20 | 21 | # 地图集,Empty为空洞,Wall为实体墙 22 | var map : Array 23 | 24 | func _ready(): 25 | generate_map() 26 | set_gridmap_by_empty() 27 | 28 | func _input(event): 29 | if event is InputEventMouseButton: 30 | match event.button_index: 31 | MOUSE_BUTTON_LEFT: 32 | clear_map() 33 | generate_map() 34 | set_gridmap_by_empty() 35 | 36 | # 清理地图 37 | func clear_map(): 38 | map.clear() 39 | roomList.clear() 40 | clear() 41 | 42 | # 生成随机地图 43 | func generate_map(): 44 | for x in range(width): 45 | map.append([]) 46 | for y in range(height): 47 | map[x].append(GEnum.TileType.Empty) 48 | random_fill_map() 49 | 50 | for i in range(smoothLevel): 51 | smooth_map() 52 | 53 | # 清除小洞,小墙 54 | eliminate_small_hole_and_wall() 55 | 56 | # 连接各个幸存房间 57 | connect_all_rooms_to_mainroom() 58 | 59 | # 设置 3d 瓦片地图 60 | func set_gridmap_by_empty(): 61 | for x in range(width): 62 | for y in range(height): 63 | if map[x][y] == GEnum.TileType.Empty: 64 | set_cell_item(Vector3i(x,0,y),0,0) 65 | 66 | # 随机填充地图 67 | func random_fill_map(): 68 | if useRandomSeed: 69 | mapSeed = Time.get_datetime_string_from_system() 70 | seed(mapSeed.hash()) 71 | 72 | for x in range(width): 73 | for y in range(height): 74 | if x == 0 || x == width - 1 || y == 0 || y == height - 1: 75 | map[x][y] = GEnum.TileType.Wall 76 | else: 77 | map[x][y] = GEnum.TileType.Wall if randf_range(0,1) < fillThreshold else GEnum.TileType.Empty 78 | 79 | # 平滑地图 80 | func smooth_map(): 81 | for x in range(width): 82 | for y in range(height): 83 | var neighbourWallTiles = get_surround_wall_count(x, y) 84 | if neighbourWallTiles > 4: # 周围大于四个墙,那自己也是墙 85 | map[x][y] = GEnum.TileType.Wall 86 | elif neighbourWallTiles < 4: #周围大于四个为空,那自己也为空 87 | map[x][y] = GEnum.TileType.Empty 88 | # 还有如果四四开,那就保持不变。 89 | 90 | # 获取该点周围 8 个点为实体墙(map[x][y] == 1)的个数 91 | func get_surround_wall_count(x, y): 92 | var wallCount = 0 93 | for nx in [x-1, x+1]: 94 | for ny in [y-1, y+1]: 95 | if nx >= 0 && nx < width && ny >= 0 && ny < height: 96 | wallCount += 1 if map[x][y] == GEnum.TileType.Wall else 0 97 | else: 98 | wallCount += 1 99 | return wallCount 100 | 101 | # 加工地图,清除小洞,小墙,连接房间。 102 | func eliminate_small_hole_and_wall(): 103 | # 获取最大房间的索引 104 | var currentIndex : int = 0 105 | var maxIndex : int = 0 106 | var maxSize : int = 0 107 | 108 | # 获取墙区域 109 | var wallRegions = get_regions(GEnum.TileType.Wall) 110 | for wallRegion in wallRegions: 111 | if wallRegion.size() < wallThresholdSize: 112 | for tile in wallRegion: 113 | map[tile.x][tile.y] = GEnum.TileType.Empty # 把小于阈值的都铲掉 114 | 115 | # 获取空洞区域 116 | var roomRegions = get_regions(GEnum.TileType.Empty) 117 | for roomRegion in roomRegions: 118 | if roomRegion.size() < roomThresholdSize: 119 | for tile in roomRegion: 120 | map[tile.x][tile.y] = GEnum.TileType.Wall # 把小于阈值的都填充 121 | else: 122 | var sRoom = Room.new(roomRegion, map) 123 | roomList.append(sRoom) # 添加到幸存房间列表里 124 | if maxSize < roomRegion.size(): 125 | maxSize = roomRegion.size() 126 | maxIndex = currentIndex # 找出最大房间的索引 127 | currentIndex += 1 128 | 129 | if roomList.size() == 0: 130 | print_debug("No Survived Rooms Here!!") 131 | else: 132 | roomList[maxIndex].isMainRoom = true # 最大房间就是主房间 133 | roomList[maxIndex].isAccessibleFromMainRoom = true 134 | 135 | # 获取区域 136 | func get_regions(tileType): 137 | var regions : Array 138 | var mapFlags = BitMap.new() 139 | mapFlags.create(Vector2(width, height)) 140 | 141 | for x in range(width): 142 | for y in range(height): 143 | if mapFlags.get_bit(x, y) == false && map[x][y] == tileType: 144 | regions.append(get_region_tiles(x, y, tileType, mapFlags)) 145 | 146 | return regions 147 | 148 | # 从这个点开始获取区域,广度优先算法 149 | func get_region_tiles(startX, startY, tileType, mapFlags): 150 | var tiles : Array 151 | var quene1 : Array 152 | var quene2 : Array 153 | quene1.append(Vector2i(startX, startY)) 154 | mapFlags.set_bit(startX, startY, true) 155 | 156 | while quene1.size() > 0: 157 | var tile = quene1.pop_back() 158 | tiles.append(tile) 159 | 160 | # 遍历上下左右四格 161 | for i in range(4): 162 | var x = tile.x + GEnum.Vector2_Dir[i].x; 163 | var y = tile.y + GEnum.Vector2_Dir[i].y; 164 | if is_in_map_range(x, y) && mapFlags.get_bit(x, y) == false && map[x][y] == tileType: 165 | mapFlags.set_bit(x, y, true) 166 | quene2.append(Vector2i(x, y)) 167 | 168 | if quene1.size() == 0: 169 | quene1 = quene2 170 | quene2 = Array() 171 | 172 | return tiles 173 | 174 | # 把所有房间都连接到主房间 175 | func connect_all_rooms_to_mainroom(): 176 | for room in roomList: 177 | connect_to_closest_room(room) 178 | 179 | var count = 0 180 | for room in roomList: 181 | if room.isAccessibleFromMainRoom: 182 | count += 1 183 | if count != roomList.size(): 184 | connect_all_rooms_to_mainroom() 185 | 186 | # 连接本房间与距离自己最近的一个与自己尚未连接的房间 187 | # 可能找不到满足条件的待连接房间 188 | func connect_to_closest_room(roomA): 189 | var bestDistance : int = 9223372036854775807 190 | var bestTileA : Vector2i 191 | var bestTileB : Vector2i 192 | var bestRoomB 193 | 194 | var hasChecked = false 195 | 196 | for roomB in roomList: 197 | if roomA == roomB || roomA.IsConnected(roomB): 198 | continue 199 | 200 | for tileA in roomA.edgeTiles: 201 | for tileB in roomB.edgeTiles: 202 | var distanceBetweenRooms = (tileA - tileB).length_squared() 203 | # 如果找到更近的(相对roomA)房间,更新最短路径。 204 | if distanceBetweenRooms < bestDistance: 205 | bestDistance = distanceBetweenRooms 206 | bestTileA = tileA 207 | bestTileB = tileB 208 | bestRoomB = roomB 209 | 210 | if bestRoomB != null: 211 | create_passage(roomA, bestRoomB, bestTileA, bestTileB) 212 | 213 | # 创建两个房间的通道 214 | func create_passage(roomA, roomB, tileA, tileB): 215 | roomA.ConnectRooms(roomB) 216 | var line = get_line(tileA, tileB) 217 | for coord in line: 218 | draw_circle(coord, passageWidth) 219 | 220 | # 以点c为原点,r为半径,画圈(拆墙) 221 | func draw_circle(c, r): 222 | for x in range(-r, r): 223 | for y in range(-r, r): 224 | if x * x + y * y <= r * r: 225 | var drawX = c.x + x 226 | var drawY = c.y + y 227 | if is_in_map_range(drawX, drawY): 228 | map[drawX][drawY] = GEnum.TileType.Empty 229 | -------------------------------------------------------------------------------- /core/generator/map_generator_1.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=3 format=3 uid="uid://c4hha3hb0auhq"] 2 | 3 | [ext_resource type="MeshLibrary" uid="uid://b1i1fqm8d6c1c" path="res://level/mesh_library.tres" id="1_vfcvn"] 4 | [ext_resource type="Script" path="res://core/generator/map_generator_1.gd" id="2_qn3dp"] 5 | 6 | [node name="MapGenerator1" type="GridMap"] 7 | mesh_library = ExtResource("1_vfcvn") 8 | cell_size = Vector3(1, 1, 1) 9 | script = ExtResource("2_qn3dp") 10 | -------------------------------------------------------------------------------- /core/generator/map_generator_2.gd: -------------------------------------------------------------------------------- 1 | extends MapGeneratorBase 2 | 3 | const Room = preload("room_2.gd") 4 | 5 | # 各房间中点之间的距离(不包括两端点)(钳制到最大允许奇数) 6 | @export var roomCentersSpace : Vector2i = Vector2i(21, 21) 7 | 8 | # 最小房间尺寸(钳制到最大允许奇数) 9 | @export var minRoomSize : Vector2i = Vector2i(7, 7) 10 | # 最大房间尺寸(钳制到最大允许奇数) 11 | @export var maxRoomSize : Vector2i = Vector2i(19, 19) 12 | 13 | # 最小房间数目 14 | @export var minRoomCount : int = 4 15 | # 最大房间数目(钳制到地图限制) 16 | @export var maxRoomCount : int = 10 17 | 18 | # 通道(房间与房间直接)宽度 19 | @export var passageWidth : int = 3 20 | 21 | # 地图集的横向大小 22 | var mapSizeX : int 23 | # 地图集的纵向大小 24 | var mapSizeY : int 25 | # 地图集,Empty为空洞,Wall为实体墙 26 | var map : Array 27 | 28 | # Called when the node enters the scene tree for the first time. 29 | func _ready(): 30 | generate_map() 31 | draw_rooms() 32 | connect_all_rooms_to_mainroom() 33 | 34 | func _input(event): 35 | if event is InputEventMouseButton: 36 | match event.button_index: 37 | MOUSE_BUTTON_LEFT: 38 | clear_map() 39 | generate_map() 40 | draw_rooms() 41 | connect_all_rooms_to_mainroom() 42 | 43 | # 清理地图 44 | func clear_map(): 45 | map.clear() 46 | roomList.clear() 47 | clear() 48 | 49 | # 生成随机地图 50 | func generate_map(): 51 | mapSizeX = floor(width/roomCentersSpace.x) 52 | mapSizeY = floor(height/roomCentersSpace.y) 53 | for x in range(mapSizeX): 54 | map.append([]) 55 | for y in range(mapSizeY): 56 | map[x].append(GEnum.TileType.Empty) 57 | random_fill_map() 58 | 59 | # 随机填充地图 60 | func random_fill_map(): 61 | if useRandomSeed: 62 | mapSeed = Time.get_datetime_string_from_system() 63 | seed(mapSeed.hash()) 64 | 65 | var roomCount = randi_range(minRoomCount, maxRoomCount) 66 | roomCount = mini(roomCount, mapSizeX*mapSizeY) 67 | var expandSize = (maxRoomSize - minRoomSize)/2 68 | 69 | var center = Vector2i(floor(mapSizeX/2), floor(mapSizeY/2)) 70 | var halfSize : Vector2i 71 | var room 72 | 73 | var acc : int = 0 74 | 75 | while acc < roomCount: 76 | # 如果不是第一个房间,那么房间的中心需要随机确定 77 | if acc != 0: 78 | room = roomList[randi_range(0, roomList.size()-1)] 79 | center = room.center + GEnum.Vector2_Dir[randi_range(0,3)] 80 | # 越界则重找 81 | if center.x < 0 || center.x >= mapSizeX || center.y < 0 || center.y >= mapSizeY: 82 | continue 83 | # 该位置已有房间,则重找 84 | if map[center.x][center.y] == GEnum.TileType.Wall: 85 | continue 86 | 87 | # 找到一个可用的房间 88 | acc += 1 89 | map[center.x][center.y] = GEnum.TileType.Wall 90 | 91 | # 随机扩大 92 | halfSize = (minRoomSize-Vector2i.ONE)/2 + Vector2i(randi_range(0, expandSize.x), randi_range(0, expandSize.y)) 93 | room = Room.new(center, halfSize) 94 | # 取第一个房间为主房间 95 | if acc == 1: 96 | room.isMainRoom = true 97 | room.MarkAccessibleFromMainRoom() 98 | roomList.append(room) 99 | 100 | # 绘制房间 101 | func draw_rooms(): 102 | var center : Vector2i 103 | for room in roomList: 104 | # 转化到世界坐标 105 | center = room.center * roomCentersSpace 106 | for x in range(center.x-room.halfSize.x, center.x+room.halfSize.x+1): 107 | for y in range(center.y-room.halfSize.y, center.y+room.halfSize.y+1): 108 | set_cell_item(Vector3i(x,0,y),0,0) 109 | 110 | # 把所有房间都连接到主房间 111 | func connect_all_rooms_to_mainroom(): 112 | for room in roomList: 113 | connect_to_closest_room(room) 114 | 115 | var count = 0 116 | for room in roomList: 117 | if room.isAccessibleFromMainRoom: 118 | count += 1 119 | if count != roomList.size(): 120 | connect_all_rooms_to_mainroom() 121 | 122 | # 连接本房间与距离自己最近的一个与自己尚未连接的房间 123 | # 可能找不到满足条件的待连接房间 124 | func connect_to_closest_room(roomA): 125 | # 只找上下左右一格内的房间 126 | var center = roomA.center + GEnum.Vector2_Dir[randi_range(0,3)] 127 | # 越界则放弃 128 | if center.x < 0 || center.x >= mapSizeX || center.y < 0 || center.y >= mapSizeY: 129 | return 130 | # 该位置没有房间,则放弃 131 | if map[center.x][center.y] == GEnum.TileType.Empty: 132 | return 133 | 134 | for roomB in roomList: 135 | if roomB.center == center: 136 | if !roomA.IsConnected(roomB): 137 | create_passage(roomA, roomB) 138 | break 139 | 140 | # 创建两个房间的通道 141 | func create_passage(roomA, roomB): 142 | roomA.ConnectRooms(roomB) 143 | # 转化到世界坐标 144 | var centerA = roomA.center * roomCentersSpace 145 | var centerB = roomB.center * roomCentersSpace 146 | # 方向 1 代表 横向,0 代表 纵向 147 | var dir 148 | if (roomB.center - roomA.center).abs().x != 0: 149 | dir = 1 150 | else: 151 | dir = 0 152 | # 通道半宽 153 | var halfWidth = floor(passageWidth/2) 154 | # 两点连线上各点 155 | var line = get_line(centerA, centerB) 156 | for dot in line: 157 | if dir == 1: 158 | for y in range(dot.y-halfWidth, dot.y+halfWidth+1): 159 | set_cell_item(Vector3i(dot.x,0,y),0,0) 160 | else: 161 | for x in range(dot.x-halfWidth, dot.x+halfWidth+1): 162 | set_cell_item(Vector3i(x,0,dot.y),0,0) 163 | -------------------------------------------------------------------------------- /core/generator/map_generator_2.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=3 format=3 uid="uid://0wdh12f2vr3p"] 2 | 3 | [ext_resource type="MeshLibrary" uid="uid://b1i1fqm8d6c1c" path="res://level/mesh_library.tres" id="1_pv1uy"] 4 | [ext_resource type="Script" path="res://core/generator/map_generator_2.gd" id="2_coq24"] 5 | 6 | [node name="MapGenerator2" type="GridMap"] 7 | mesh_library = ExtResource("1_pv1uy") 8 | cell_size = Vector3(1, 1, 1) 9 | script = ExtResource("2_coq24") 10 | width = 128 11 | height = 128 12 | -------------------------------------------------------------------------------- /core/generator/map_generator_base.gd: -------------------------------------------------------------------------------- 1 | class_name MapGeneratorBase 2 | extends GridMap 3 | 4 | # 地图的宽度 5 | @export var width : int = 64 6 | # 地图的高度 7 | @export var height : int = 64 8 | 9 | # 地图种子 10 | @export var mapSeed : String 11 | # 是否使用随机种子 12 | @export var useRandomSeed : bool = true 13 | 14 | # 房间列表 15 | var roomList : Array 16 | 17 | # Bresenham 直线生成算法 18 | # 对于直线 y = k*x (0 0.5 d 为累加器,初值为 0,取得直线上方一格后需减 1 22 | # 两边同乘 2*dx 其中 dx 为起点到终点的在 x 方向上的距离,得 23 | # 2*dx*d += 2*dy > dx 其中 dy 为起点到终点的在 x 方向上的距离 24 | func get_line(from, to): 25 | var line : Array 26 | 27 | var x = from.x 28 | var y = from.y 29 | 30 | var dx = to.x - from.x 31 | var dy = to.y - from.y 32 | 33 | var inverted = false 34 | var step = sign(dx) 35 | var gradientStep = sign(dy) 36 | 37 | var longest = abs(dx) 38 | var shortest = abs(dy) 39 | 40 | if longest < shortest: 41 | inverted = true 42 | longest = abs(dy) 43 | shortest = abs(dx) 44 | 45 | step = sign(dy) 46 | gradientStep = sign(dx) 47 | 48 | var acc = 0 49 | for i in range(longest): 50 | line.append(Vector2i(x, y)) 51 | 52 | if inverted: 53 | y += step 54 | else: 55 | x += step 56 | 57 | acc += 2*shortest # 梯度每次增长为短边的长度。 58 | if acc >= longest: 59 | if inverted: 60 | x += gradientStep 61 | else: 62 | y += gradientStep 63 | acc -= 2*longest 64 | 65 | return line 66 | 67 | # 判断坐标是否在地图里,不管墙还是洞 68 | func is_in_map_range(x, y): 69 | return x >= 0 && x < width && y >= 0 && y < height 70 | -------------------------------------------------------------------------------- /core/generator/room_1.gd: -------------------------------------------------------------------------------- 1 | extends RoomBase 2 | 3 | var tiles : Array = [] # 所有坐标 4 | var edgeTiles : Array = [] # 靠边的坐标 5 | 6 | func _init(roomTiles, map): 7 | tiles = roomTiles 8 | UpdateEdgeTiles(map) 9 | 10 | # 更新房间边缘瓦片集 11 | func UpdateEdgeTiles(map): 12 | edgeTiles.clear() 13 | # 遍历上下左右四格,判断是否有墙 14 | for tile in tiles: 15 | for i in range(4): 16 | var x = tile.x + GEnum.Vector2_Dir[i].x 17 | var y = tile.y + GEnum.Vector2_Dir[i].y 18 | if map[x][y] == GEnum.TileType.Wall && !edgeTiles.has(tile): 19 | edgeTiles.append(tile) 20 | -------------------------------------------------------------------------------- /core/generator/room_2.gd: -------------------------------------------------------------------------------- 1 | extends RoomBase 2 | 3 | # 房间的中心(在 map 中的坐标,不是世界坐标) 4 | var center : Vector2i 5 | # 房间半长(不包括中心) 6 | var halfSize : Vector2i 7 | 8 | func _init(ct, hs): 9 | center = ct 10 | halfSize = hs 11 | -------------------------------------------------------------------------------- /core/generator/room_base.gd: -------------------------------------------------------------------------------- 1 | class_name RoomBase 2 | extends Object 3 | 4 | var connectedRooms : Array = [] # 与其直接相连的房间。 5 | var isAccessibleFromMainRoom : bool = false # 是否能连接到主房间 6 | var isMainRoom : bool = false # 是否主房间(最大的房间) 7 | 8 | # 标记相对于主房间的连接性 9 | func MarkAccessibleFromMainRoom(): 10 | # 标记自己能够连接到主房间 11 | if !isAccessibleFromMainRoom: 12 | isAccessibleFromMainRoom = true 13 | # 和自己连接的房间都能连到主房间 14 | for connectedRoom in connectedRooms: 15 | connectedRoom.MarkAccessibleFromMainRoom() 16 | 17 | # 连接房间 18 | func ConnectRooms(roomB): 19 | # 传递连接标记 20 | if isAccessibleFromMainRoom: 21 | roomB.MarkAccessibleFromMainRoom() 22 | elif roomB.isAccessibleFromMainRoom: 23 | MarkAccessibleFromMainRoom() 24 | # 传递连接行为 25 | connectedRooms.append(roomB) 26 | roomB.connectedRooms.append(self) 27 | 28 | # 是否连接另一个房间 29 | func IsConnected(otherRoom): 30 | if connectedRooms.find(otherRoom) == -1: 31 | return false 32 | else: 33 | return true 34 | -------------------------------------------------------------------------------- /core/global/genum.gd: -------------------------------------------------------------------------------- 1 | extends Node 2 | 3 | enum TileType {Empty, Wall} 4 | 5 | var Vector2_Dir : Array = [Vector2i(0,1), Vector2i(0,-1), Vector2i(-1,0), Vector2i(1,0)] 6 | -------------------------------------------------------------------------------- /icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CheapMeow/Godot-MapGeneratorSampleProject/7154c0cd80d703f0c843cd936d74709faa32bbf0/icon.png -------------------------------------------------------------------------------- /icon.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://c73o2rpxvgnki" 6 | path="res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://icon.png" 14 | dest_files=["res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/lossy_quality=0.7 20 | compress/hdr_compression=1 21 | compress/bptc_ldr=0 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /level/gridmap_library.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=3 format=3 uid="uid://cnxgq3b8o8wib"] 2 | 3 | [sub_resource type="BoxMesh" id="BoxMesh_1wf4v"] 4 | 5 | [sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_7p0fy"] 6 | data = PackedVector3Array(-0.5, 0.5, 0.5, 0.5, 0.5, 0.5, -0.5, -0.5, 0.5, 0.5, 0.5, 0.5, 0.5, -0.5, 0.5, -0.5, -0.5, 0.5, 0.5, 0.5, -0.5, -0.5, 0.5, -0.5, 0.5, -0.5, -0.5, -0.5, 0.5, -0.5, -0.5, -0.5, -0.5, 0.5, -0.5, -0.5, 0.5, 0.5, 0.5, 0.5, 0.5, -0.5, 0.5, -0.5, 0.5, 0.5, 0.5, -0.5, 0.5, -0.5, -0.5, 0.5, -0.5, 0.5, -0.5, 0.5, -0.5, -0.5, 0.5, 0.5, -0.5, -0.5, -0.5, -0.5, 0.5, 0.5, -0.5, -0.5, 0.5, -0.5, -0.5, -0.5, 0.5, 0.5, 0.5, -0.5, 0.5, 0.5, 0.5, 0.5, -0.5, -0.5, 0.5, 0.5, -0.5, 0.5, -0.5, 0.5, 0.5, -0.5, -0.5, -0.5, 0.5, 0.5, -0.5, 0.5, -0.5, -0.5, -0.5, 0.5, -0.5, 0.5, 0.5, -0.5, -0.5, -0.5, -0.5, -0.5) 7 | 8 | [node name="GridMapLib" type="Node3D"] 9 | 10 | [node name="Box1" type="MeshInstance3D" parent="."] 11 | mesh = SubResource("BoxMesh_1wf4v") 12 | 13 | [node name="StaticBody3D" type="StaticBody3D" parent="Box1"] 14 | 15 | [node name="CollisionShape3D" type="CollisionShape3D" parent="Box1/StaticBody3D"] 16 | shape = SubResource("ConcavePolygonShape3D_7p0fy") 17 | -------------------------------------------------------------------------------- /level/level_1.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=3 format=3 uid="uid://cgrvbb4wfthlo"] 2 | 3 | [ext_resource type="PackedScene" uid="uid://c4hha3hb0auhq" path="res://core/generator/map_generator_1.tscn" id="1_omkf0"] 4 | [ext_resource type="PackedScene" path="res://core/camera/FreeCamera.tscn" id="2_57wd1"] 5 | 6 | [node name="Level1" type="Node3D"] 7 | 8 | [node name="MapGenerator1" parent="." instance=ExtResource("1_omkf0")] 9 | 10 | [node name="FreeCamera" parent="." instance=ExtResource("2_57wd1")] 11 | transform = Transform3D(1, 0, 0, 0, 0.927027, 0.374995, 0, -0.374995, 0.927027, 0, 1.4525, 3.91049) 12 | 13 | [node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] 14 | transform = Transform3D(1, 0, 0, 0, 0.800773, 0.598968, 0, -0.598968, 0.800773, 0, 0, 0) 15 | -------------------------------------------------------------------------------- /level/level_2.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=3 format=3 uid="uid://bg4evcut1v4je"] 2 | 3 | [ext_resource type="PackedScene" uid="uid://0wdh12f2vr3p" path="res://core/generator/map_generator_2.tscn" id="1_cism5"] 4 | [ext_resource type="PackedScene" path="res://core/camera/FreeCamera.tscn" id="2_6sibj"] 5 | 6 | [node name="Level2" type="Node3D"] 7 | 8 | [node name="MapGenerator2" parent="." instance=ExtResource("1_cism5")] 9 | 10 | [node name="FreeCamera" parent="." instance=ExtResource("2_6sibj")] 11 | transform = Transform3D(1, 0, 0, 0, 0.927027, 0.374995, 0, -0.374995, 0.927027, 0, 1.4525, 3.91049) 12 | 13 | [node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] 14 | transform = Transform3D(1, 0, 0, 0, 0.800773, 0.598968, 0, -0.598968, 0.800773, 0, 0, 0) 15 | -------------------------------------------------------------------------------- /level/mesh_library.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="MeshLibrary" load_steps=5 format=3 uid="uid://b1i1fqm8d6c1c"] 2 | 3 | [sub_resource type="BoxMesh" id="BoxMesh_fe6p0"] 4 | 5 | [sub_resource type="Image" id="Image_6l85g"] 6 | data = { 7 | "data": PackedByteArray(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 185, 185, 185, 255, 185, 185, 185, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 175, 175, 175, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 175, 175, 175, 255, 175, 175, 175, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 184, 184, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 184, 184, 255, 184, 184, 184, 255, 184, 184, 184, 255, 184, 184, 184, 255, 184, 184, 184, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 184, 184, 184, 255, 184, 184, 184, 255, 184, 184, 184, 255, 184, 184, 184, 255, 184, 184, 184, 255, 184, 184, 184, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 184, 184, 184, 255, 184, 184, 184, 255, 184, 184, 184, 255, 184, 184, 184, 255, 184, 184, 184, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 184, 184, 184, 255, 184, 184, 184, 255, 184, 184, 184, 255, 184, 184, 184, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 184, 184, 184, 255, 184, 184, 184, 255, 184, 184, 184, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 184, 184, 184, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 185, 185, 185, 255, 185, 185, 185, 255, 185, 185, 185, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 175, 175, 175, 255, 175, 175, 175, 255, 175, 175, 175, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 175, 175, 175, 255, 175, 175, 175, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 175, 175, 175, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 175, 175, 175, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 174, 174, 174, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 174, 174, 174, 255, 174, 174, 174, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 109, 109, 109, 255, 174, 174, 174, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, 255, 109, 109, 109, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), 8 | "format": "RGBA8", 9 | "height": 64, 10 | "mipmaps": false, 11 | "width": 64 12 | } 13 | 14 | [sub_resource type="ImageTexture" id="ImageTexture_jybuj"] 15 | image = SubResource("Image_6l85g") 16 | 17 | [sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_7p0fy"] 18 | data = PackedVector3Array(-0.5, 0.5, 0.5, 0.5, 0.5, 0.5, -0.5, -0.5, 0.5, 0.5, 0.5, 0.5, 0.5, -0.5, 0.5, -0.5, -0.5, 0.5, 0.5, 0.5, -0.5, -0.5, 0.5, -0.5, 0.5, -0.5, -0.5, -0.5, 0.5, -0.5, -0.5, -0.5, -0.5, 0.5, -0.5, -0.5, 0.5, 0.5, 0.5, 0.5, 0.5, -0.5, 0.5, -0.5, 0.5, 0.5, 0.5, -0.5, 0.5, -0.5, -0.5, 0.5, -0.5, 0.5, -0.5, 0.5, -0.5, -0.5, 0.5, 0.5, -0.5, -0.5, -0.5, -0.5, 0.5, 0.5, -0.5, -0.5, 0.5, -0.5, -0.5, -0.5, 0.5, 0.5, 0.5, -0.5, 0.5, 0.5, 0.5, 0.5, -0.5, -0.5, 0.5, 0.5, -0.5, 0.5, -0.5, 0.5, 0.5, -0.5, -0.5, -0.5, 0.5, 0.5, -0.5, 0.5, -0.5, -0.5, -0.5, 0.5, -0.5, 0.5, 0.5, -0.5, -0.5, -0.5, -0.5, -0.5) 19 | 20 | [resource] 21 | item/0/name = "Box1" 22 | item/0/mesh = SubResource("BoxMesh_fe6p0") 23 | item/0/mesh_transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0) 24 | item/0/shapes = [SubResource("ConcavePolygonShape3D_7p0fy"), Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)] 25 | item/0/navmesh_transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0) 26 | item/0/preview = SubResource("ImageTexture_jybuj") 27 | metadata/_editor_source_scene = "res://Map/GridMapLib.tscn" 28 | -------------------------------------------------------------------------------- /project.godot: -------------------------------------------------------------------------------- 1 | ; Engine configuration file. 2 | ; It's best edited using the editor UI and not directly, 3 | ; since the parameters that go here are not all obvious. 4 | ; 5 | ; Format: 6 | ; [section] ; section goes between [] 7 | ; param=value ; assign values to parameters 8 | 9 | config_version=5 10 | 11 | _global_script_classes=[{ 12 | "base": "GridMap", 13 | "class": &"MapGeneratorBase", 14 | "language": &"GDScript", 15 | "path": "res://core/generator/map_generator_base.gd" 16 | }, { 17 | "base": "Object", 18 | "class": &"RoomBase", 19 | "language": &"GDScript", 20 | "path": "res://core/generator/room_base.gd" 21 | }] 22 | _global_script_class_icons={ 23 | "MapGeneratorBase": "", 24 | "RoomBase": "" 25 | } 26 | 27 | [application] 28 | 29 | config/name="MapGeneratorSampleProject" 30 | run/main_scene="res://level/level_1.tscn" 31 | config/features=PackedStringArray("4.0") 32 | config/icon="res://icon.png" 33 | 34 | [autoload] 35 | 36 | GEnum="*res://core/global/genum.gd" 37 | 38 | [display] 39 | 40 | window/size/viewport_width=1920 41 | window/size/viewport_height=1080 42 | 43 | [input] 44 | 45 | ui_left={ 46 | "deadzone": 0.5, 47 | "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":16777231,"physical_keycode":0,"unicode":16777231,"echo":false,"script":null) 48 | , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":13,"pressure":0.0,"pressed":false,"script":null) 49 | , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"unicode":0,"echo":false,"script":null) 50 | ] 51 | } 52 | ui_right={ 53 | "deadzone": 0.5, 54 | "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":16777233,"physical_keycode":0,"unicode":16777233,"echo":false,"script":null) 55 | , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":14,"pressure":0.0,"pressed":false,"script":null) 56 | , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"unicode":0,"echo":false,"script":null) 57 | ] 58 | } 59 | ui_up={ 60 | "deadzone": 0.5, 61 | "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":16777232,"physical_keycode":0,"unicode":16777232,"echo":false,"script":null) 62 | , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":11,"pressure":0.0,"pressed":false,"script":null) 63 | , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"unicode":0,"echo":false,"script":null) 64 | ] 65 | } 66 | ui_down={ 67 | "deadzone": 0.5, 68 | "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":16777234,"physical_keycode":0,"unicode":16777234,"echo":false,"script":null) 69 | , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":12,"pressure":0.0,"pressed":false,"script":null) 70 | , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"unicode":0,"echo":false,"script":null) 71 | ] 72 | } 73 | --------------------------------------------------------------------------------