From e70fb4a67e1760e30bb33567ee1f521021ab3c8b Mon Sep 17 00:00:00 2001 From: Relintai Date: Fri, 15 Apr 2022 19:40:12 +0200 Subject: [PATCH] Created the rest of the skeleton classes for the paint module, and moved the code into them. --- modules/paint/Canvas.gd | 461 ---- modules/paint/Colors.gd | 34 - modules/paint/DebugTextDisplay.gd | 9 - modules/paint/Editor.gd | 834 ------- modules/paint/Editor.tscn | 1265 ---------- modules/paint/Layer.gd | 98 - modules/paint/MenuButtonExtended.gd | 13 - modules/paint/Navbar.gd | 106 - modules/paint/PaintCanvasContainer.gd | 2 - modules/paint/SaveFileDialog.gd | 72 - modules/paint/SelectionBox.gd | 24 - modules/paint/Settings.gd | 24 - modules/paint/Settings.tscn | 64 - modules/paint/TextInfo.gd | 39 - modules/paint/Util.gd | 94 - modules/paint/ViewportContainer.gd | 6 - modules/paint/actions/Brighten.gd | 53 - modules/paint/actions/Brush.gd | 47 - modules/paint/actions/Bucket.gd | 49 - modules/paint/actions/Darken.gd | 55 - modules/paint/actions/Line.gd | 59 - modules/paint/actions/MultiLine.gd | 44 - modules/paint/actions/PasteCut.gd | 59 - modules/paint/actions/Pencil.gd | 43 - modules/paint/actions/Rainbow.gd | 58 - modules/paint/actions/brighten_action.cpp | 87 + modules/paint/actions/brighten_action.h | 51 + modules/paint/actions/brush_action.cpp | 81 + .../brush_action.h} | 29 +- modules/paint/actions/bucket_action.cpp | 82 + .../bucket_action.h} | 29 +- .../paint/actions/{Cut.gd => cut_action.cpp} | 86 +- modules/paint/actions/cut_action.h | 55 + modules/paint/actions/darken_action.cpp | 87 + modules/paint/actions/darken_action.h | 51 + modules/paint/actions/line_action.cpp | 91 + modules/paint/actions/line_action.h | 51 + modules/paint/actions/multiline_action.cpp | 78 + modules/paint/actions/multiline_action.h | 51 + .../actions/{Action.gd => paint_action.cpp} | 120 +- modules/paint/actions/paint_action.h | 64 + modules/paint/actions/paste_cut_action.cpp | 93 + modules/paint/actions/paste_cut_action.h | 49 + modules/paint/actions/pencil_action.cpp | 80 + modules/paint/actions/pencil_action.h | 51 + modules/paint/actions/rainbow_action.cpp | 94 + modules/paint/actions/rainbow_action.h | 49 + .../actions/{Rect.gd => rect_action.cpp} | 74 +- modules/paint/actions/rect_action.h | 51 + modules/paint/assets/BrushCircle.png.import | 35 - .../assets/BrushCircle_Hovered.png.import | 35 - modules/paint/assets/BrushHLine.png.import | 35 - .../assets/BrushHLine_Hovered.png.import | 35 - modules/paint/assets/BrushRect.png.import | 35 - .../paint/assets/BrushRect_Hovered.png.import | 35 - modules/paint/assets/BrushVLine.png.import | 35 - .../assets/BrushVLine_Hovered.png.import | 35 - .../paint/assets/Godoxel_Preview.png.import | 35 - modules/paint/assets/arrow_down.png.import | 35 - modules/paint/assets/arrow_up.png.import | 35 - .../COPYRIGHT.TXT | 124 - .../bitstream_vera_sans_font_6016/README.TXT | 11 - .../RELEASENOTES.TXT | 162 -- .../bitstream_vera_sans_font_6016/Vera.ttf | Bin 65932 -> 0 bytes .../bitstream_vera_sans_font_6016/VeraBI.ttf | Bin 63208 -> 0 bytes .../bitstream_vera_sans_font_6016/VeraBd.ttf | Bin 58716 -> 0 bytes .../bitstream_vera_sans_font_6016/VeraIt.ttf | Bin 63684 -> 0 bytes .../all-free-download.com.url | 8 - modules/paint/assets/grid.png.import | 35 - modules/paint/assets/lock_layer.png.import | 35 - modules/paint/assets/lock_layer_1.png.import | 35 - modules/paint/assets/minidotta.png.import | 35 - .../paint/assets/minidotta_invis.png.import | 35 - modules/paint/assets/unlock_layer.png.import | 35 - .../paint/dialogs/paint_save_file_dialog.cpp | 91 + .../{ => dialogs}/paint_save_file_dialog.h | 14 +- modules/paint/paint_canvas.cpp | 487 ++++ modules/paint/paint_canvas.h | 87 + modules/paint/paint_canvas_layer.cpp | 141 ++ modules/paint/paint_canvas_layer.h | 69 + modules/paint/paint_color_grid.cpp | 31 + modules/paint/paint_color_grid.h | 10 +- ...ayerButton.tscn => paint_layer_button.cpp} | 38 + ...int_image_layer.h => paint_layer_button.h} | 14 +- modules/paint/paint_navbar.cpp | 129 + modules/paint/paint_navbar.h | 18 + modules/paint/paint_selection_box.cpp | 25 + modules/paint/paint_selection_box.h | 6 + modules/paint/paint_settings.cpp | 125 + modules/paint/paint_settings.h | 55 + modules/paint/paint_text_info.cpp | 41 + modules/paint/paint_text_info.h | 5 + modules/paint/paint_utilities.cpp | 108 + modules/paint/paint_utilities.h | 24 +- modules/paint/paint_window.cpp | 2128 +++++++++++++++++ modules/paint/paint_window.h | 177 ++ modules/paint/plugin.cfg | 7 - modules/paint/plugin.gd | 37 - 98 files changed, 5338 insertions(+), 4675 deletions(-) delete mode 100644 modules/paint/Canvas.gd delete mode 100644 modules/paint/Colors.gd delete mode 100644 modules/paint/DebugTextDisplay.gd delete mode 100644 modules/paint/Editor.gd delete mode 100644 modules/paint/Editor.tscn delete mode 100644 modules/paint/Layer.gd delete mode 100644 modules/paint/MenuButtonExtended.gd delete mode 100644 modules/paint/Navbar.gd delete mode 100644 modules/paint/PaintCanvasContainer.gd delete mode 100644 modules/paint/SaveFileDialog.gd delete mode 100644 modules/paint/SelectionBox.gd delete mode 100644 modules/paint/Settings.gd delete mode 100644 modules/paint/Settings.tscn delete mode 100644 modules/paint/TextInfo.gd delete mode 100644 modules/paint/Util.gd delete mode 100644 modules/paint/ViewportContainer.gd delete mode 100644 modules/paint/actions/Brighten.gd delete mode 100644 modules/paint/actions/Brush.gd delete mode 100644 modules/paint/actions/Bucket.gd delete mode 100644 modules/paint/actions/Darken.gd delete mode 100644 modules/paint/actions/Line.gd delete mode 100644 modules/paint/actions/MultiLine.gd delete mode 100644 modules/paint/actions/PasteCut.gd delete mode 100644 modules/paint/actions/Pencil.gd delete mode 100644 modules/paint/actions/Rainbow.gd create mode 100644 modules/paint/actions/brighten_action.cpp create mode 100644 modules/paint/actions/brighten_action.h create mode 100644 modules/paint/actions/brush_action.cpp rename modules/paint/{paint_image_layer.cpp => actions/brush_action.h} (72%) create mode 100644 modules/paint/actions/bucket_action.cpp rename modules/paint/{paint_save_file_dialog.cpp => actions/bucket_action.h} (71%) rename modules/paint/actions/{Cut.gd => cut_action.cpp} (51%) create mode 100644 modules/paint/actions/cut_action.h create mode 100644 modules/paint/actions/darken_action.cpp create mode 100644 modules/paint/actions/darken_action.h create mode 100644 modules/paint/actions/line_action.cpp create mode 100644 modules/paint/actions/line_action.h create mode 100644 modules/paint/actions/multiline_action.cpp create mode 100644 modules/paint/actions/multiline_action.h rename modules/paint/actions/{Action.gd => paint_action.cpp} (57%) create mode 100644 modules/paint/actions/paint_action.h create mode 100644 modules/paint/actions/paste_cut_action.cpp create mode 100644 modules/paint/actions/paste_cut_action.h create mode 100644 modules/paint/actions/pencil_action.cpp create mode 100644 modules/paint/actions/pencil_action.h create mode 100644 modules/paint/actions/rainbow_action.cpp create mode 100644 modules/paint/actions/rainbow_action.h rename modules/paint/actions/{Rect.gd => rect_action.cpp} (52%) create mode 100644 modules/paint/actions/rect_action.h delete mode 100644 modules/paint/assets/BrushCircle.png.import delete mode 100644 modules/paint/assets/BrushCircle_Hovered.png.import delete mode 100644 modules/paint/assets/BrushHLine.png.import delete mode 100644 modules/paint/assets/BrushHLine_Hovered.png.import delete mode 100644 modules/paint/assets/BrushRect.png.import delete mode 100644 modules/paint/assets/BrushRect_Hovered.png.import delete mode 100644 modules/paint/assets/BrushVLine.png.import delete mode 100644 modules/paint/assets/BrushVLine_Hovered.png.import delete mode 100644 modules/paint/assets/Godoxel_Preview.png.import delete mode 100644 modules/paint/assets/arrow_down.png.import delete mode 100644 modules/paint/assets/arrow_up.png.import delete mode 100644 modules/paint/assets/bitstream_vera_sans_font_6016/COPYRIGHT.TXT delete mode 100644 modules/paint/assets/bitstream_vera_sans_font_6016/README.TXT delete mode 100644 modules/paint/assets/bitstream_vera_sans_font_6016/RELEASENOTES.TXT delete mode 100644 modules/paint/assets/bitstream_vera_sans_font_6016/Vera.ttf delete mode 100644 modules/paint/assets/bitstream_vera_sans_font_6016/VeraBI.ttf delete mode 100644 modules/paint/assets/bitstream_vera_sans_font_6016/VeraBd.ttf delete mode 100644 modules/paint/assets/bitstream_vera_sans_font_6016/VeraIt.ttf delete mode 100644 modules/paint/assets/bitstream_vera_sans_font_6016/all-free-download.com.url delete mode 100644 modules/paint/assets/grid.png.import delete mode 100644 modules/paint/assets/lock_layer.png.import delete mode 100644 modules/paint/assets/lock_layer_1.png.import delete mode 100644 modules/paint/assets/minidotta.png.import delete mode 100644 modules/paint/assets/minidotta_invis.png.import delete mode 100644 modules/paint/assets/unlock_layer.png.import create mode 100644 modules/paint/dialogs/paint_save_file_dialog.cpp rename modules/paint/{ => dialogs}/paint_save_file_dialog.h (79%) create mode 100644 modules/paint/paint_canvas_layer.cpp create mode 100644 modules/paint/paint_canvas_layer.h rename modules/paint/{LayerButton.tscn => paint_layer_button.cpp} (69%) rename modules/paint/{paint_image_layer.h => paint_layer_button.h} (83%) create mode 100644 modules/paint/paint_settings.cpp create mode 100644 modules/paint/paint_settings.h delete mode 100644 modules/paint/plugin.cfg delete mode 100644 modules/paint/plugin.gd diff --git a/modules/paint/Canvas.gd b/modules/paint/Canvas.gd deleted file mode 100644 index 77afa4e19..000000000 --- a/modules/paint/Canvas.gd +++ /dev/null @@ -1,461 +0,0 @@ -extends Control -class_name GECanvas -tool - -export var pixel_size: int = 16 setget set_pixel_size -export(int, 1, 2500) var canvas_width = 48 setget set_canvas_width # == pixels -export(int, 1, 2500) var canvas_height = 28 setget set_canvas_height # == pixels -export var grid_size = 16 setget set_grid_size -export var big_grid_size = 10 setget set_big_grid_size -export var can_draw = true - -var mouse_in_region -var mouse_on_top - -var layers : Array = [] # Key: layer_name, val: GELayer -var active_layer: GELayer -var preview_layer: GELayer -var tool_layer: GELayer -var canvas_layers: Control - -var canvas -var grid -var big_grid -var selected_pixels = [] - -var symmetry_x = false -var symmetry_y = false - - -func _enter_tree(): - #------------------------------- - # Set nodes - #------------------------------- - canvas = find_node("Canvas") - grid = find_node("Grid") - big_grid = find_node("BigGrid") - canvas_layers = find_node("CanvasLayers") - - #------------------------------- - # setup layers and canvas - #------------------------------- - connect("mouse_entered", self, "_on_mouse_entered") - connect("mouse_exited", self, "_on_mouse_exited") - - #------------------------------- - # setup layers and canvas - #------------------------------- - #canvas_size = Vector2(int(rect_size.x / grid_size), int(rect_size.y / grid_size)) - #pixel_size = canvas_size - - active_layer = add_new_layer("Layer1") - preview_layer = add_new_layer("Preview") - tool_layer = add_new_layer("Tool") - - set_process(true) - - -func _process(delta): - if not is_visible_in_tree(): - return - var mouse_position = get_local_mouse_position() - var rect = Rect2(Vector2(0, 0), rect_size) - mouse_in_region = rect.has_point(mouse_position) - - -func _draw(): - for layer in layers: - layer.update_texture() - - preview_layer.update_texture() - tool_layer.update_texture() - - -func resize(width: int, height: int): - if width < 0: - width = 1 - if height < 0: - height = 1 - - set_canvas_width(width) - set_canvas_height(height) - - preview_layer.resize(width, height) - tool_layer.resize(width, height) - for layer in layers: - layer.resize(width, height) - - -#------------------------------- -# Export -#------------------------------- - -func set_pixel_size(size: int): - pixel_size = size - set_grid_size(grid_size) - set_big_grid_size(big_grid_size) - set_canvas_width(canvas_width) - set_canvas_height(canvas_height) - - -func set_grid_size(size): - grid_size = size - if not find_node("Grid"): - return - find_node("Grid").size = size * pixel_size - - -func set_big_grid_size(size): - big_grid_size = size - if not find_node("BigGrid"): - return - find_node("BigGrid").size = size * pixel_size - - -func set_canvas_width(val: int): - canvas_width = val - rect_size.x = canvas_width * pixel_size - - -func set_canvas_height(val: int): - canvas_height = val - rect_size.y = canvas_height * pixel_size - - -#------------------------------- -# Layer -#------------------------------- - - - -func toggle_alpha_locked(layer_name: String): - var layer = find_layer_by_name(layer_name) - layer.toggle_alpha_locked() - - -func is_alpha_locked() -> bool: - return active_layer.alpha_locked - - -func get_content_margin() -> Rect2: - var rect = Rect2(999999, 999999, -999999, -999999) - - preview_layer.image.get_used_rect() - for layer in layers: - - var r = layer.image.get_used_rect() - - if r.position.x < rect.position.x: - rect.position.x = r.position.x - if r.position.y < rect.position.y: - rect.position.y = r.position.y - if r.size.x > rect.size.x: - rect.size.x = r.size.x - if r.size.y > rect.size.y: - rect.size.y = r.size.y - - return rect - - -func crop_to_content(): - var rect = get_content_margin() - - #print(rect) - - for layer in layers: - layer.image - -# set_canvas_width(rect.size.x) -# set_canvas_height(rect.size.x) - -# preview_layer.resize(width, height) -# tool_layer.resize(width, height) -# for layer in layers: -# layer.resize(width, height) - - -func get_active_layer(): - return active_layer - - -func get_preview_layer(): - return preview_layer - - -func clear_active_layer(): - active_layer.clear() - - -func clear_preview_layer(): - preview_layer.clear() - - -func clear_layer(layer_name: String): - for layer in layers: - if layer.name == layer_name: - layer.clear() - break - - -func remove_layer(layer_name: String): - # change current layer if the active layer is removed - var del_layer = find_layer_by_name(layer_name) - del_layer.clear() - if del_layer == active_layer: - for layer in layers: - if layer == preview_layer or layer == active_layer or layer == tool_layer: - continue - active_layer = layer - break - layers.erase(del_layer) - return active_layer - - -func add_new_layer(layer_name: String): - for layer in layers: - if layer.name == layer_name: - return - var layer = GELayer.new() - layer.name = layer_name - - if layer_name == "Preview": - layer.create($PreviewLayer, canvas_width, canvas_height) - elif layer_name == "Tool": - layer.create($ToolPreviewLayer, canvas_width, canvas_height) - else: - var texture_rect = TextureRect.new() - texture_rect.name = layer_name - canvas_layers.add_child(texture_rect, true) - texture_rect.expand = true - texture_rect.anchor_right = 1 - texture_rect.anchor_bottom = 1 - texture_rect.margin_right = 0 - texture_rect.margin_bottom = 0 - texture_rect.mouse_filter = Control.MOUSE_FILTER_IGNORE - layer.create(texture_rect, canvas_width, canvas_height) - layers.append(layer) - - return layer - - -func duplicate_layer(layer_name: String, new_layer_name: String): - for layer in layers: - if layer.name == new_layer_name: - return - - var dup_layer :GELayer = find_layer_by_name(layer_name) - var layer :GELayer = add_new_layer(new_layer_name) - layer.image.copy_from(dup_layer.image) - return layer - - -func toggle_layer_visibility(layer_name: String): - for layer in layers: - if layer.name == layer_name: - layer.visible = not layer.visible - - -func find_layer_by_name(layer_name: String): - for layer in layers: - if layer.name == layer_name: - return layer - return null - - -func toggle_lock_layer(layer_name: String): - find_layer_by_name(layer_name).toggle_lock() - - -func is_active_layer_locked() -> bool: - return active_layer.locked - - -func move_layer_forward(layer_name: String): - var layer = find_layer_by_name(layer_name).texture_rect_ref - var new_idx = max(layer.get_index() - 1, 0) - canvas_layers.move_child(layer, new_idx) - - -func move_layer_back(layer_name: String): - var layer = find_layer_by_name(layer_name).texture_rect_ref - canvas_layers.move_child(layer, layer.get_index() + 1) - - -func select_layer(layer_name: String): - active_layer = find_layer_by_name(layer_name) - - -#------------------------------- -# Check -#------------------------------- - -func _on_mouse_entered(): - mouse_on_top = true - - -func _on_mouse_exited(): - mouse_on_top = false - - -func is_inside_canvas(x, y): - if x < 0 or y < 0: - return false - if x >= canvas_width or y >= canvas_height: - return false - return true - - - -#------------------------------- -# Basic pixel-layer options -#------------------------------- - - -#Note: Arrays are always passed by reference. To get a copy of an array which -# can be modified independently of the original array, use duplicate. -# (https://docs.godotengine.org/en/stable/classes/class_array.html) -func set_pixel_arr(pixels: Array, color: Color): - for pixel in pixels: - _set_pixel(active_layer, pixel.x, pixel.y, color) - - -func set_pixel_v(pos: Vector2, color: Color): - set_pixel(pos.x, pos.y, color) - - -func set_pixel(x: int, y: int, color: Color): - _set_pixel(active_layer, x, y, color) - - -func _set_pixel_v(layer: GELayer, v: Vector2, color: Color): - _set_pixel(layer, v.x, v.y, color) - - -func _set_pixel(layer: GELayer, x: int, y: int, color: Color): - if not is_inside_canvas(x, y): - return - layer.set_pixel(x, y, color) - - -func get_pixel_v(pos: Vector2): - return get_pixel(pos.x, pos.y) - - -func get_pixel(x: int, y: int): - if active_layer: - return active_layer.get_pixel(x, y) - return null - - -func set_preview_pixel_v(pos: Vector2, color: Color): - set_preview_pixel(pos.x, pos.y, color) - - -func set_preview_pixel(x:int, y: int, color: Color): - if not is_inside_canvas(x, y): - return - preview_layer.set_pixel(x, y, color) - - -func get_preview_pixel_v(pos: Vector2): - return get_preview_pixel(pos.x, pos.y) - - -func get_preview_pixel(x: int, y: int): - if not preview_layer: - return null - return preview_layer.get_pixel(x, y) - - - -#------------------------------- -# Grid -#------------------------------- - - -func toggle_grid(): - $Grid.visible = not $Grid.visible - - -func show_grid(): - $Grid.show() - - -func hide_grid(): - $Grid.hide() - - -#------------------------------- -# Handy tools -#------------------------------- - - -func select_color(x, y): - print("???") - var same_color_pixels = [] - var color = get_pixel(x, y) - for x in range(active_layer.layer_width): - for y in range(active_layer.layer_height): - var pixel_color = active_layer.get_pixel(x, y) - if pixel_color == color: - same_color_pixels.append(color) - return same_color_pixels - - -func select_same_color(x, y): - return get_neighbouring_pixels(x, y) - - -# returns array of Vector2 -# yoinked from -# https://www.geeksforgeeks.org/flood-fill-algorithm-implement-fill-paint/ -func get_neighbouring_pixels(pos_x: int, pos_y: int) -> Array: - var pixels = [] - - var to_check_queue = [] - var checked_queue = [] - - to_check_queue.append(GEUtils.to_1D(pos_x, pos_y, canvas_width)) - - var color = get_pixel(pos_x, pos_y) - - while not to_check_queue.empty(): - var idx = to_check_queue.pop_front() - var p = GEUtils.to_2D(idx, canvas_width) - - if idx in checked_queue: - continue - - checked_queue.append(idx) - - if get_pixel(p.x, p.y) != color: - continue - - # add to result - pixels.append(p) - - # check neighbours - var x = p.x - 1 - var y = p.y - if is_inside_canvas(x, y): - idx = GEUtils.to_1D(x, y, canvas_width) - to_check_queue.append(idx) - - x = p.x + 1 - if is_inside_canvas(x, y): - idx = GEUtils.to_1D(x, y, canvas_width) - to_check_queue.append(idx) - - x = p.x - y = p.y - 1 - if is_inside_canvas(x, y): - idx = GEUtils.to_1D(x, y, canvas_width) - to_check_queue.append(idx) - - y = p.y + 1 - if is_inside_canvas(x, y): - idx = GEUtils.to_1D(x, y, canvas_width) - to_check_queue.append(idx) - - return pixels - diff --git a/modules/paint/Colors.gd b/modules/paint/Colors.gd deleted file mode 100644 index c198e59f9..000000000 --- a/modules/paint/Colors.gd +++ /dev/null @@ -1,34 +0,0 @@ -tool -extends GridContainer - -signal color_change_request - -func _enter_tree(): - for child in get_children(): - child.set("custom_styles/normal", StyleBoxFlat.new()) - child.get("custom_styles/normal").set("bg_color", Color(randf(), randf(), randf())) - for child in get_children(): - if child.is_connected("pressed", self, "change_color_to"): - return - child.connect("pressed", self, "change_color_to", [child.get("custom_styles/normal").bg_color]) - - -func change_color_to(color): - emit_signal("color_change_request", color) - - -func add_color_prefab(color: Color): - var dup = get_child(0).duplicate() - add_child(dup) - move_child(dup, 0) - dup.set("custom_styles/normal", StyleBoxFlat.new()) - dup.get("custom_styles/normal").set("bg_color", color) - for child in get_children(): - if child.is_connected("pressed", self, "change_color_to"): - return - child.connect("pressed", self, "change_color_to", [child.get("custom_styles/normal").bg_color]) - - - - - diff --git a/modules/paint/DebugTextDisplay.gd b/modules/paint/DebugTextDisplay.gd deleted file mode 100644 index bdb761666..000000000 --- a/modules/paint/DebugTextDisplay.gd +++ /dev/null @@ -1,9 +0,0 @@ -extends RichTextLabel -tool - -func _ready(): - pass - - -func display_text(text): - self.text = text diff --git a/modules/paint/Editor.gd b/modules/paint/Editor.gd deleted file mode 100644 index b9561b8a1..000000000 --- a/modules/paint/Editor.gd +++ /dev/null @@ -1,834 +0,0 @@ -tool -extends Control - -enum Tools { - PAINT, - BRUSH, - BUCKET, - RAINBOW, - LINE, - RECT, - DARKEN, - BRIGHTEN - COLORPICKER, - CUT, - PASTECUT, -} - -# Keyboard shortcuts -const K_UNDO = KEY_Z -const K_REDO = KEY_Y -const K_PENCIL = KEY_Q -const K_BRUSH = KEY_W -const K_BUCKET = KEY_F -const K_RAINBOW = KEY_R -const K_LINE = KEY_L -const K_DARK = KEY_D -const K_BRIGHT = KEY_B -const K_CUT = KEY_C -const K_PICK = KEY_P - - -var layer_buttons: Control -var paint_canvas_container_node -var paint_canvas: GECanvas -var canvas_background: TextureRect -var grids_node -var colors_grid -var selected_color = Color(1, 1, 1, 1) setget set_selected_color -var util = preload("res://addons/Godoxel/Util.gd") -var textinfo -var allow_drawing = true - -var mouse_in_region = false -var mouse_on_top = false - - -var _middle_mouse_pressed_pos = null -var _middle_mouse_pressed_start_pos = null -var _left_mouse_pressed_start_pos = Vector2() -var _previous_tool -var brush_mode - -var _layer_button_ref = {} - -var _total_added_layers = 1 - -var selected_brush_prefab = 0 -var _last_drawn_pixel = Vector2.ZERO -var _last_preview_draw_cell_pos = Vector2.ZERO - -var _selection_cells = [] -var _selection_colors = [] - -var _cut_pos = Vector2.ZERO -var _cut_size = Vector2.ZERO - -var _actions_history = [] # for undo -var _redo_history = [] -var _current_action - -var _last_mouse_pos_canvas_area = Vector2.ZERO - -var _picked_color = false - -var mouse_position = Vector2() -var canvas_position = Vector2() -var canvas_mouse_position = Vector2() -var cell_mouse_position = Vector2() -var cell_color = Color() - -var last_mouse_position = Vector2() -var last_canvas_position = Vector2() -var last_canvas_mouse_position = Vector2() -var last_cell_mouse_position = Vector2() -var last_cell_color = Color() - -const current_layer_highlight = Color(0.354706, 0.497302, 0.769531) -const other_layer_highlight = Color(0.180392, 0.176471, 0.176471) -const locked_layer_highlight = Color(0.098039, 0.094118, 0.094118) - -var big_grid_pixels = 4 # 1 grid-box is big_grid_pixels big - - - -func _ready(): - #-------------------- - #Setup nodes - #-------------------- - - paint_canvas_container_node = find_node("PaintCanvasContainer") - textinfo = find_node("DebugTextDisplay") - selected_color = find_node("ColorPicker").color - colors_grid = find_node("Colors") - paint_canvas = paint_canvas_container_node.find_node("Canvas") - layer_buttons = find_node("LayerButtons") - canvas_background = find_node("CanvasBackground") - - set_process(true) - - #-------------------- - #connect nodes - #-------------------- - if not colors_grid.is_connected("color_change_request", self, "change_color"): - colors_grid.connect("color_change_request", self, "change_color") - - if not is_connected("visibility_changed", self, "_on_Editor_visibility_changed"): - connect("visibility_changed", self, "_on_Editor_visibility_changed") - - find_node("CanvasBackground").material.set_shader_param( - "pixel_size", 8 * pow(0.5, big_grid_pixels)/paint_canvas.pixel_size) - - # ready - - set_brush(Tools.PAINT) - _layer_button_ref[layer_buttons.get_child(0).name] = layer_buttons.get_child(0) #ugly - _connect_layer_buttons() - highlight_layer(paint_canvas.get_active_layer().name) - - find_node("BrushSizeLabel").text = str(int(find_node("BrushSize").value)) - - paint_canvas.update() - - -func _input(event): - if is_any_menu_open(): - return - if not is_visible_in_tree(): - return - if paint_canvas_container_node == null or paint_canvas == null: - return - - if event is InputEventKey and event.is_pressed() and not event.is_echo(): - _handle_shortcuts(event.scancode) - - if is_mouse_in_canvas() and paint_canvas.mouse_on_top: - _handle_zoom(event) - - if paint_canvas.is_active_layer_locked(): - return - - if brush_mode == Tools.CUT: - if event is InputEventMouseButton: - if event.button_index == BUTTON_LEFT: - if not event.pressed: - commit_action() - - if (paint_canvas.mouse_in_region and paint_canvas.mouse_on_top): - if event is InputEventMouseButton: - match brush_mode: - Tools.BUCKET: - if event.button_index == BUTTON_LEFT: - if event.pressed: - if _current_action == null: - _current_action = get_action() - do_action([cell_mouse_position, last_cell_mouse_position, selected_color]) - - Tools.COLORPICKER: - if event.button_index == BUTTON_LEFT: - if event.pressed: - if paint_canvas.get_pixel(cell_mouse_position.x, cell_mouse_position.y).a == 0: - return - selected_color = paint_canvas.get_pixel(cell_mouse_position.x, cell_mouse_position.y) - _picked_color = true - find_node("Colors").add_color_prefab(selected_color) - elif _picked_color: - set_brush(_previous_tool) - elif event.button_index == BUTTON_RIGHT: - if event.pressed: - set_brush(_previous_tool) - - Tools.PASTECUT: - if event.button_index == BUTTON_RIGHT: - if event.pressed: - commit_action() - set_brush(Tools.PAINT) - - -func _process(delta): - if not is_visible_in_tree(): - return - if paint_canvas_container_node == null or paint_canvas == null: - return - if is_any_menu_open(): - return - - if is_mouse_in_canvas(): - _handle_scroll() - - #Update commonly used variables - var grid_size = paint_canvas.pixel_size - mouse_position = get_global_mouse_position() #paint_canvas.get_local_mouse_position() - canvas_position = paint_canvas.rect_global_position - canvas_mouse_position = Vector2(mouse_position.x - canvas_position.x, mouse_position.y - canvas_position.y) - - if is_mouse_in_canvas() && paint_canvas.mouse_on_top: - cell_mouse_position = Vector2( - floor(canvas_mouse_position.x / grid_size), - floor(canvas_mouse_position.y / grid_size)) - cell_color = paint_canvas.get_pixel(cell_mouse_position.x, cell_mouse_position.y) - - update_text_info() - -# if not is_mouse_in_canvas(): -# paint_canvas.tool_layer.clear() -# paint_canvas.update() -# paint_canvas.tool_layer.update_texture() -# else: - if is_mouse_in_canvas() && paint_canvas.mouse_on_top: - if not paint_canvas.is_active_layer_locked(): - if is_position_in_canvas(get_global_mouse_position()) or \ - is_position_in_canvas(_last_mouse_pos_canvas_area): - brush_process() - else: - print(cell_mouse_position, " not in ", paint_canvas_container_node.rect_size) - print("not in canvas") - - _draw_tool_brush() - - #Update last variables with the current variables - last_mouse_position = mouse_position - last_canvas_position = canvas_position - last_canvas_mouse_position = canvas_mouse_position - last_cell_mouse_position = cell_mouse_position - last_cell_color = cell_color - _last_mouse_pos_canvas_area = get_global_mouse_position() #paint_canvas_container_node.get_local_mouse_position() - - -func _handle_shortcuts(scancode): - match scancode: - K_UNDO: - undo_action() - - K_REDO: - redo_action() - - K_PENCIL: - set_brush(Tools.PAINT) - - K_BRUSH: - set_brush(Tools.BRUSH) - - K_BUCKET: - set_brush(Tools.BUCKET) - - K_RAINBOW: - set_brush(Tools.RAINBOW) - - K_LINE: - set_brush(Tools.LINE) - - K_DARK: - set_brush(Tools.DARKEN) - - K_BRIGHT: - set_brush(Tools.BRIGHTEN) - - K_CUT: - set_brush(Tools.CUT) - - K_PICK: - set_brush(Tools.COLORPICKER) - - -func _draw_tool_brush(): - paint_canvas.tool_layer.clear() - - match brush_mode: - Tools.PASTECUT: - for idx in range(_selection_cells.size()): - var pixel = _selection_cells[idx] -# if pixel.x < 0 or pixel.y < 0: -# print(pixel) - var color = _selection_colors[idx] - pixel -= _cut_pos + _cut_size / 2 - pixel += cell_mouse_position - paint_canvas._set_pixel_v(paint_canvas.tool_layer, pixel, color) - Tools.BRUSH: - var pixels = BrushPrefabs.get_brush(selected_brush_prefab, find_node("BrushSize").value) - for pixel in pixels: - - paint_canvas._set_pixel(paint_canvas.tool_layer, - cell_mouse_position.x + pixel.x, cell_mouse_position.y + pixel.y, selected_color) - - Tools.RAINBOW: - paint_canvas._set_pixel(paint_canvas.tool_layer, - cell_mouse_position.x, cell_mouse_position.y, Color(0.46875, 0.446777, 0.446777, 0.196078)) - - Tools.COLORPICKER: - paint_canvas._set_pixel(paint_canvas.tool_layer, - cell_mouse_position.x, cell_mouse_position.y, Color(0.866667, 0.847059, 0.847059, 0.196078)) - _: - paint_canvas._set_pixel(paint_canvas.tool_layer, - cell_mouse_position.x, cell_mouse_position.y, selected_color) - - paint_canvas.update() - #TODO add here brush prefab drawing - paint_canvas.tool_layer.update_texture() - - -func _handle_scroll(): - if Input.is_mouse_button_pressed(BUTTON_MIDDLE): - if _middle_mouse_pressed_start_pos == null: - _middle_mouse_pressed_start_pos = paint_canvas.rect_position - _middle_mouse_pressed_pos = get_global_mouse_position() - - paint_canvas.rect_position = _middle_mouse_pressed_start_pos - paint_canvas.rect_position += get_global_mouse_position() - _middle_mouse_pressed_pos - - elif _middle_mouse_pressed_start_pos != null: - _middle_mouse_pressed_start_pos = null - - -const max_zoom_out = 1 -const max_zoom_in = 50 - -func _handle_zoom(event): - if not event is InputEventMouseButton: - return - if event.is_pressed(): - if event.button_index == BUTTON_WHEEL_UP: - var px = min(paint_canvas.pixel_size * 2, max_zoom_in) - if px == paint_canvas.pixel_size: - return - paint_canvas.set_pixel_size(px) - find_node("CanvasBackground").material.set_shader_param( - "pixel_size", 8 * pow(0.5, big_grid_pixels)/paint_canvas.pixel_size) - paint_canvas.rect_position -= paint_canvas.get_local_mouse_position() - paint_canvas.rect_position.x = clamp(paint_canvas.rect_position.x, -paint_canvas.rect_size.x * 0.8, rect_size.x) - paint_canvas.rect_position.y = clamp(paint_canvas.rect_position.y, -paint_canvas.rect_size.y * 0.8, rect_size.y) - elif event.button_index == BUTTON_WHEEL_DOWN: - var px = max(paint_canvas.pixel_size / 2.0, max_zoom_out) - if px == paint_canvas.pixel_size: - return - paint_canvas.set_pixel_size(px) - find_node("CanvasBackground").material.set_shader_param( - # 4 2 1 - "pixel_size", 8 * pow(0.5, big_grid_pixels)/paint_canvas.pixel_size) - paint_canvas.rect_position += paint_canvas.get_local_mouse_position() / 2 - paint_canvas.rect_position.x = clamp(paint_canvas.rect_position.x, -paint_canvas.rect_size.x * 0.8, rect_size.x) - paint_canvas.rect_position.y = clamp(paint_canvas.rect_position.y, -paint_canvas.rect_size.y * 0.8, rect_size.y) - - -func _handle_cut(): - if Input.is_mouse_button_pressed(BUTTON_RIGHT): - paint_canvas.clear_preview_layer() - set_brush(_previous_tool) - return - - if Input.is_mouse_button_pressed(BUTTON_LEFT): - for pixel_pos in GEUtils.get_pixels_in_line(cell_mouse_position, last_cell_mouse_position): - for idx in range(_selection_cells.size()): - var pixel = _selection_cells[idx] - var color = _selection_colors[idx] - pixel -= _cut_pos + _cut_size / 2 - pixel += pixel_pos - paint_canvas.set_pixel_v(pixel, color) - else: - if _last_preview_draw_cell_pos == cell_mouse_position: - return - paint_canvas.clear_preview_layer() - for idx in range(_selection_cells.size()): - var pixel = _selection_cells[idx] - var color = _selection_colors[idx] - pixel -= _cut_pos + _cut_size / 2 - pixel += cell_mouse_position - paint_canvas.set_preview_pixel_v(pixel, color) - _last_preview_draw_cell_pos = cell_mouse_position - - -func brush_process(): - if Input.is_mouse_button_pressed(BUTTON_LEFT): - if _current_action == null: - _current_action = get_action() - if brush_mode == Tools.COLORPICKER: - _current_action = null - - match brush_mode: - Tools.PAINT: - do_action([cell_mouse_position, last_cell_mouse_position, selected_color]) - Tools.BRUSH: - do_action([cell_mouse_position, last_cell_mouse_position, selected_color, - selected_brush_prefab, find_node("BrushSize").value]) - Tools.LINE: - do_action([cell_mouse_position, last_cell_mouse_position, selected_color]) - Tools.RECT: - do_action([cell_mouse_position, last_cell_mouse_position, selected_color]) - Tools.DARKEN: - do_action([cell_mouse_position, last_cell_mouse_position, selected_color]) - Tools.BRIGHTEN: - do_action([cell_mouse_position, last_cell_mouse_position, selected_color]) - Tools.COLORPICKER: - pass - Tools.CUT: - do_action([cell_mouse_position, last_cell_mouse_position, selected_color]) - Tools.PASTECUT: - do_action([cell_mouse_position, last_cell_mouse_position, - _selection_cells, _selection_colors, - _cut_pos, _cut_size]) - Tools.RAINBOW: - do_action([cell_mouse_position, last_cell_mouse_position]) - paint_canvas.update() - - elif Input.is_mouse_button_pressed(BUTTON_RIGHT): - paint_canvas.update() - if _current_action == null: - _current_action = get_action() - - match brush_mode: - Tools.PAINT: - do_action([cell_mouse_position, last_cell_mouse_position, Color.transparent]) - Tools.BRUSH: - do_action([cell_mouse_position, last_cell_mouse_position, Color.transparent, - selected_brush_prefab, find_node("BrushSize").value]) - else: - if _current_action and _current_action.can_commit(): - commit_action() - paint_canvas.update() - - -func update_text_info(): - var text = "" - - var cell_color_text = cell_color - cell_color_text = Color(0, 0, 0, 0) - - text += \ - str("FPS %s\t" + \ - "Mouse Position %s\t" + \ - "Canvas Mouse Position %s \t" + \ - "Canvas Position %s\t\n" + \ - "Cell Position %s \t" + \ - "Cell Color %s\t") % [ - str(Engine.get_frames_per_second()), - str(mouse_position), - str(canvas_mouse_position), - str(canvas_position), - str(cell_mouse_position), - str(cell_color_text), - ] - - find_node("DebugTextDisplay").display_text(text) - - -func _on_Save_pressed(): - get_node("SaveFileDialog").show() - - - -#--------------------------------------- -# Actions -#--------------------------------------- - - -func do_action(data: Array): - if _current_action == null: - #print("clear redo") - _redo_history.clear() - _current_action.do_action(paint_canvas, data) - - -func commit_action(): - if not _current_action: - return - - #print("commit action") - var commit_data = _current_action.commit_action(paint_canvas) - var action = get_action() - action.action_data = _current_action.action_data.duplicate(true) - _actions_history.push_back(action) - _redo_history.clear() - - match brush_mode: - Tools.CUT: - _cut_pos = _current_action.mouse_start_pos - _cut_size = _current_action.mouse_end_pos - _current_action.mouse_start_pos - _selection_cells = _current_action.action_data.redo.cells.duplicate() - _selection_colors = _current_action.action_data.redo.colors.duplicate() - set_brush(Tools.PASTECUT) - _: - _current_action = null - - -func redo_action(): - if _redo_history.empty(): - print("nothing to redo") - return - var action = _redo_history.pop_back() - if not action: - return - _actions_history.append(action) - action.redo_action(paint_canvas) - paint_canvas.update() - #print("redo action") - - -func undo_action(): - var action = _actions_history.pop_back() - if not action: - return - _redo_history.append(action) - action.undo_action(paint_canvas) - update() - paint_canvas.update() - #print("undo action") - - -func get_action(): - match brush_mode: - Tools.PAINT: - return GEPencil.new() - Tools.BRUSH: - return GEBrush.new() - Tools.LINE: - return GELine.new() - Tools.RAINBOW: - return GERainbow.new() - Tools.BUCKET: - return GEBucket.new() - Tools.RECT: - return GERect.new() - Tools.DARKEN: - return GEDarken.new() - Tools.BRIGHTEN: - return GEBrighten.new() - Tools.CUT: - return GECut.new() - Tools.PASTECUT: - return GEPasteCut.new() - _: - #print("no tool!") - return null - - -############################################ -# Brushes -############################################ - - -func set_selected_color(color): - selected_color = color - - -func set_brush(new_mode): - if brush_mode == new_mode: - return - _previous_tool = brush_mode - brush_mode = new_mode - - _current_action = get_action() - - match _previous_tool: - Tools.CUT: - paint_canvas.clear_preview_layer() - Tools.PASTECUT: - _selection_cells.clear() - _selection_colors.clear() - Tools.BUCKET: - _current_action = null - #print("Selected: ", Tools.keys()[brush_mode]) - - -func change_color(new_color): - if new_color.a == 0: - return - selected_color = new_color - find_node("ColorPicker").color = selected_color - - -func _on_ColorPicker_color_changed(color): - selected_color = color - - -func _on_PaintTool_pressed(): - set_brush(Tools.PAINT) - - -func _on_BucketTool_pressed(): - set_brush(Tools.BUCKET) - - -func _on_RainbowTool_pressed(): - set_brush(Tools.RAINBOW) - - -func _on_BrushTool_pressed(): - set_brush(Tools.BRUSH) - - -func _on_LineTool_pressed(): - set_brush(Tools.LINE) - - -func _on_RectTool_pressed(): - set_brush(Tools.RECT) - - -func _on_DarkenTool_pressed(): - set_brush(Tools.DARKEN) - - -func _on_BrightenTool_pressed(): - set_brush(Tools.BRIGHTEN) - - -func _on_ColorPickerTool_pressed(): - set_brush(Tools.COLORPICKER) - - -func _on_CutTool_pressed(): - set_brush(Tools.CUT) - - -func _on_Editor_visibility_changed(): - pause_mode = not visible - - - -############################################ -# Layer -############################################ - -func highlight_layer(layer_name: String): - for button in layer_buttons.get_children(): - if paint_canvas.find_layer_by_name(button.name).locked: - button.get("custom_styles/panel").set("bg_color", locked_layer_highlight) - elif button.name == layer_name: - button.get("custom_styles/panel").set("bg_color", current_layer_highlight) - else: - button.get("custom_styles/panel").set("bg_color", other_layer_highlight) - - -func toggle_layer_visibility(button, layer_name: String): - #print("toggling: ", layer_name) - paint_canvas.toggle_layer_visibility(layer_name) - - -func select_layer(layer_name: String): - #print("select layer: ", layer_name) - paint_canvas.select_layer(layer_name) - highlight_layer(layer_name) - - -func lock_layer(button, layer_name: String): - paint_canvas.toggle_lock_layer(layer_name) - highlight_layer(paint_canvas.get_active_layer().name) - - -func add_new_layer(): - var new_layer_button = layer_buttons.get_child(0).duplicate() - new_layer_button.set("custom_styles/panel", layer_buttons.get_child(0).get("custom_styles/panel").duplicate()) - layer_buttons.add_child_below_node( - layer_buttons.get_child(layer_buttons.get_child_count() - 1), new_layer_button, true) - _total_added_layers += 1 - new_layer_button.find_node("Select").text = "Layer " + str(_total_added_layers) - _layer_button_ref[new_layer_button.name] = new_layer_button - _connect_layer_buttons() - - var layer: GELayer = paint_canvas.add_new_layer(new_layer_button.name) - - highlight_layer(paint_canvas.get_active_layer().name) - #print("added layer: ", layer.name) - return layer - - -func remove_active_layer(): - if layer_buttons.get_child_count() <= 1: - return - var layer_name = paint_canvas.active_layer.name - paint_canvas.remove_layer(layer_name) - layer_buttons.remove_child(_layer_button_ref[layer_name]) - _layer_button_ref[layer_name].queue_free() - _layer_button_ref.erase(layer_name) - - highlight_layer(paint_canvas.get_active_layer().name) - - -func duplicate_active_layer(): - var new_layer_button = layer_buttons.get_child(0).duplicate() - new_layer_button.set("custom_styles/panel", layer_buttons.get_child(0).get("custom_styles/panel").duplicate()) - layer_buttons.add_child_below_node( - layer_buttons.get_child(layer_buttons.get_child_count() - 1), new_layer_button, true) - - _total_added_layers += 1 # for keeping track... - new_layer_button.find_node("Select").text = "Layer " + str(_total_added_layers) - - var new_layer = paint_canvas.duplicate_layer(paint_canvas.active_layer.name, new_layer_button.name) - new_layer.update_texture() - _layer_button_ref[new_layer.name] = new_layer_button - - new_layer_button.find_node("Select").connect("pressed", self, "select_layer", [new_layer_button.name]) - new_layer_button.find_node("Visible").connect("pressed", self, "toggle_layer_visibility", - [new_layer_button.find_node("Visible"), new_layer_button.name]) - new_layer_button.find_node("Up").connect("pressed", self, "move_down", [new_layer_button]) - new_layer_button.find_node("Down").connect("pressed", self, "move_up", [new_layer_button]) - new_layer_button.find_node("Lock").connect("pressed", self, "lock_layer", [new_layer_button, new_layer_button.name]) - - # update highlight - highlight_layer(paint_canvas.get_active_layer().name) - #print("added layer: ", new_layer.name, " (total:", layer_buttons.get_child_count(), ")") - - -func move_up(layer_btn): - var new_idx = min(layer_btn.get_index() + 1, layer_buttons.get_child_count()) - #print("move_up: ", layer_btn.name, " from ", layer_btn.get_index(), " to ", new_idx) - layer_buttons.move_child(layer_btn, new_idx) - paint_canvas.move_layer_back(layer_btn.name) - - -func move_down(layer_btn): - var new_idx = max(layer_btn.get_index() - 1, 0) - #print("move_down: ", layer_btn.name, " from ", layer_btn.get_index(), " to ", new_idx) - layer_buttons.move_child(layer_btn, new_idx) - paint_canvas.move_layer_forward(layer_btn.name) - - -func _connect_layer_buttons(): - for layer_btn in layer_buttons.get_children(): - if layer_btn.find_node("Select").is_connected("pressed", self, "select_layer"): - continue - layer_btn.find_node("Select").connect("pressed", self, "select_layer", [layer_btn.name]) - layer_btn.find_node("Visible").connect("pressed", self, "toggle_layer_visibility", - [layer_btn.find_node("Visible"), layer_btn.name]) - layer_btn.find_node("Up").connect("pressed", self, "move_down", [layer_btn]) - layer_btn.find_node("Down").connect("pressed", self, "move_up", [layer_btn]) - layer_btn.find_node("Lock").connect("pressed", self, "lock_layer", - [layer_btn, layer_btn.name]) - - -func _on_Button_pressed(): - add_new_layer() - - -func _on_PaintCanvasContainer_mouse_entered(): - if mouse_on_top == true: - return - mouse_on_top = true - paint_canvas.tool_layer.clear() - paint_canvas.update() - paint_canvas.tool_layer.update_texture() - - -func _on_PaintCanvasContainer_mouse_exited(): - if mouse_on_top == false: - return - mouse_on_top = false - paint_canvas.tool_layer.clear() - paint_canvas.update() - paint_canvas.tool_layer.update_texture() - - -func _on_ColorPicker_popup_closed(): - find_node("Colors").add_color_prefab(find_node("ColorPicker").color) - - -############################################ -# MISC -############################################ - -func is_position_in_canvas(pos): - if Rect2(paint_canvas_container_node.rect_global_position, - paint_canvas_container_node.rect_global_position + paint_canvas_container_node.rect_size).has_point(pos): - return true - return false - - -func is_mouse_in_canvas() -> bool: - if is_position_in_canvas(get_global_mouse_position()): - return true #mouse_on_top # check if mouse is inside canvas - else: - return false - - -func is_any_menu_open() -> bool: - return $ChangeCanvasSize.visible or \ - $ChangeGridSizeDialog.visible or \ - $Settings.visible or \ - $LoadFileDialog.visible or \ - $SaveFileDialog.visible or \ - find_node("Navbar").is_any_menu_open() - - - -func _on_LockAlpha_pressed(): - var checked = find_node("LockAlpha").pressed - paint_canvas.active_layer.toggle_alpha_locked() - for i in range(find_node("Layer").get_popup().get_item_count()): - if find_node("Layer").get_popup().get_item_text(i) == "Toggle Alpha Locked": - find_node("Layer").get_popup().set_item_checked(i, not find_node("Layer").get_popup().is_item_checked(i)) - - -func _on_BrushRect_pressed(): - if brush_mode != Tools.BRUSH: - set_brush(Tools.BRUSH) - selected_brush_prefab = BrushPrefabs.Type.RECT - - -func _on_BrushCircle_pressed(): - if brush_mode != Tools.BRUSH: - set_brush(Tools.BRUSH) - selected_brush_prefab = BrushPrefabs.Type.CIRCLE - - -func _on_BrushVLine_pressed(): - if brush_mode != Tools.BRUSH: - set_brush(Tools.BRUSH) - selected_brush_prefab = BrushPrefabs.Type.V_LINE - - -func _on_BrushHLine_pressed(): - if brush_mode != Tools.BRUSH: - set_brush(Tools.BRUSH) - selected_brush_prefab = BrushPrefabs.Type.H_LINE - - -func _on_BrushSize_value_changed(value: float): - find_node("BrushSizeLabel").text = str(int(value)) - - -func _on_XSymmetry_pressed(): - paint_canvas.symmetry_x = not paint_canvas.symmetry_x - - -func _on_YSymmetry_pressed(): - paint_canvas.symmetry_y = not paint_canvas.symmetry_y diff --git a/modules/paint/Editor.tscn b/modules/paint/Editor.tscn deleted file mode 100644 index e69e445d9..000000000 --- a/modules/paint/Editor.tscn +++ /dev/null @@ -1,1265 +0,0 @@ -[gd_scene load_steps=56 format=2] - -[ext_resource path="res://addons/Godoxel/Editor.gd" type="Script" id=1] -[ext_resource path="res://addons/Godoxel/dialogs/LoadFileDialog.gd" type="Script" id=2] -[ext_resource path="res://addons/Godoxel/Canvas.gd" type="Script" id=3] -[ext_resource path="res://addons/Godoxel/VisualGrid.tscn" type="PackedScene" id=4] -[ext_resource path="res://addons/Godoxel/CanvasOutline.gd" type="Script" id=5] -[ext_resource path="res://addons/Godoxel/Navbar.gd" type="Script" id=6] -[ext_resource path="res://addons/Godoxel/MenuButtonExtended.gd" type="Script" id=7] -[ext_resource path="res://addons/Godoxel/Colors.gd" type="Script" id=8] -[ext_resource path="res://addons/Godoxel/SaveFileDialog.gd" type="Script" id=9] -[ext_resource path="res://addons/Godoxel/Settings.tscn" type="PackedScene" id=10] -[ext_resource path="res://addons/Godoxel/DebugTextDisplay.gd" type="Script" id=11] -[ext_resource path="res://addons/Godoxel/LayerButton.tscn" type="PackedScene" id=12] -[ext_resource path="res://addons/Godoxel/assets/grid.png" type="Texture" id=13] -[ext_resource path="res://addons/Godoxel/dialogs/ConfirmationDialog.gd" type="Script" id=14] -[ext_resource path="res://addons/Godoxel/dialogs/ChangeGridSizeDialog.gd" type="Script" id=15] -[ext_resource path="res://addons/Godoxel/assets/BrushVLine.png" type="Texture" id=16] -[ext_resource path="res://addons/Godoxel/assets/BrushRect.png" type="Texture" id=17] -[ext_resource path="res://addons/Godoxel/assets/BrushCircle.png" type="Texture" id=18] -[ext_resource path="res://addons/Godoxel/assets/BrushHLine.png" type="Texture" id=19] -[ext_resource path="res://addons/Godoxel/assets/BrushRect_Hovered.png" type="Texture" id=20] -[ext_resource path="res://addons/Godoxel/assets/BrushCircle_Hovered.png" type="Texture" id=21] -[ext_resource path="res://addons/Godoxel/assets/BrushVLine_Hovered.png" type="Texture" id=22] -[ext_resource path="res://addons/Godoxel/assets/BrushHLine_Hovered.png" type="Texture" id=23] - -[sub_resource type="StyleBoxFlat" id=7] -bg_color = Color( 0.2, 0.2, 0.2, 1 ) - -[sub_resource type="StyleBoxFlat" id=33] -bg_color = Color( 0.397716, 0.0538159, 0.114134, 1 ) - -[sub_resource type="StyleBoxFlat" id=34] -bg_color = Color( 0.989919, 0.990908, 0.315986, 1 ) - -[sub_resource type="StyleBoxFlat" id=35] -bg_color = Color( 0.563746, 0.536825, 0.218219, 1 ) - -[sub_resource type="StyleBoxFlat" id=36] -bg_color = Color( 0.336323, 0.0659741, 0.163289, 1 ) - -[sub_resource type="StyleBoxFlat" id=37] -bg_color = Color( 0.240192, 0.37346, 0.330661, 1 ) - -[sub_resource type="StyleBoxFlat" id=38] -bg_color = Color( 0.369256, 0.97379, 0.216537, 1 ) - -[sub_resource type="StyleBoxFlat" id=39] -bg_color = Color( 0.755049, 0.491349, 0.826652, 1 ) - -[sub_resource type="StyleBoxFlat" id=40] -bg_color = Color( 0.848742, 0.0115273, 0.122094, 1 ) - -[sub_resource type="StyleBoxFlat" id=41] -bg_color = Color( 0.920589, 0.44931, 0.150271, 1 ) - -[sub_resource type="StyleBoxFlat" id=42] -bg_color = Color( 0.325517, 0.694568, 0.703849, 1 ) - -[sub_resource type="StyleBoxFlat" id=43] -bg_color = Color( 0.926427, 0.334865, 0.471709, 1 ) - -[sub_resource type="StyleBoxFlat" id=44] -bg_color = Color( 0.00867083, 0.188914, 0.300704, 1 ) - -[sub_resource type="StyleBoxFlat" id=45] -bg_color = Color( 0.501144, 0.687167, 0.52919, 1 ) - -[sub_resource type="StyleBoxFlat" id=46] -bg_color = Color( 0.953225, 0.374313, 0.443307, 1 ) - -[sub_resource type="StyleBoxFlat" id=47] -bg_color = Color( 0.0121565, 0.599621, 0.868357, 1 ) - -[sub_resource type="StyleBoxFlat" id=48] -bg_color = Color( 0.245633, 0.583044, 0.20955, 1 ) - -[sub_resource type="StyleBoxFlat" id=49] -bg_color = Color( 0.510868, 0.721501, 0.544154, 1 ) - -[sub_resource type="StyleBoxFlat" id=50] -bg_color = Color( 0.786819, 0.162435, 0.309762, 1 ) - -[sub_resource type="StyleBoxFlat" id=51] -bg_color = Color( 0.772837, 0.467272, 0.0682784, 1 ) - -[sub_resource type="StyleBoxFlat" id=52] -bg_color = Color( 0.753402, 0.362869, 0.343818, 1 ) - -[sub_resource type="StyleBoxFlat" id=53] -bg_color = Color( 0.0699588, 0.589297, 0.290648, 1 ) - -[sub_resource type="StyleBoxFlat" id=54] -bg_color = Color( 0.443224, 0.249702, 0.838284, 1 ) - -[sub_resource type="StyleBoxFlat" id=55] -bg_color = Color( 0.660357, 0.11075, 0.876227, 1 ) - -[sub_resource type="StyleBoxFlat" id=56] -bg_color = Color( 0.296861, 0.400053, 0.915836, 1 ) - -[sub_resource type="Shader" id=1] -code = "shader_type canvas_item; - -uniform float pixel_size : hint_range(0.01, 1.0); - - -void fragment() { - vec4 color = texture(TEXTURE, UV); - - float light = 0.8; - float dark = 0.4; - - float val = dark; - - if ( int(UV.y * 8.0 * pixel_size) % 2 == 1 ) { - if ( int(UV.x * 8.0 * pixel_size) % 2 == 1 ) { - val = dark; - } - else { - val = light; - } - } - else { - if ( int(UV.x * 8.0 * pixel_size) % 2 == 1 ) { - val = light; - } - else { - val = dark; - } - } - - color.rgb = vec3(val, val, val); - - COLOR = color; -}" - -[sub_resource type="ShaderMaterial" id=2] -shader = SubResource( 1 ) -shader_param/pixel_size = 0.125 - -[sub_resource type="Image" id=57] -data = { -"data": PoolByteArray( 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0 ), -"format": "RGBA8", -"height": 64, -"mipmaps": false, -"width": 64 -} - -[sub_resource type="ImageTexture" id=58] -flags = 0 -flags = 0 -image = SubResource( 57 ) -size = Vector2( 64, 64 ) - -[sub_resource type="Image" id=59] -data = { -"data": PoolByteArray( 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0 ), -"format": "RGBA8", -"height": 64, -"mipmaps": false, -"width": 64 -} - -[sub_resource type="ImageTexture" id=60] -flags = 0 -flags = 0 -image = SubResource( 59 ) -size = Vector2( 64, 64 ) - -[sub_resource type="StyleBoxFlat" id=32] -bg_color = Color( 0.156863, 0.156863, 0.156863, 1 ) -border_width_top = 2 -border_color = Color( 0.0901961, 0.0901961, 0.0901961, 1 ) - -[node name="Editor" type="Control"] -anchor_right = 1.0 -anchor_bottom = 1.0 -rect_clip_content = true -size_flags_horizontal = 3 -size_flags_vertical = 3 -script = ExtResource( 1 ) -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="Panel" type="Panel" parent="."] -anchor_right = 1.0 -anchor_bottom = 1.0 -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="NoBCViewportsnotworking26181" type="VBoxContainer" parent="Panel"] -anchor_right = 1.0 -anchor_bottom = 1.0 -__meta__ = { -"_edit_lock_": true, -"_editor_description_": "https://github.com/godotengine/godot/issues/26181" -} - -[node name="Navbar" type="HBoxContainer" parent="Panel/NoBCViewportsnotworking26181"] -margin_right = 1024.0 -margin_bottom = 20.0 -size_flags_horizontal = 3 -script = ExtResource( 6 ) -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="Buttons" type="HBoxContainer" parent="Panel/NoBCViewportsnotworking26181/Navbar"] -margin_right = 430.0 -margin_bottom = 20.0 -custom_constants/separation = 20 -__meta__ = { -"_edit_use_anchors_": true -} - -[node name="File" type="MenuButton" parent="Panel/NoBCViewportsnotworking26181/Navbar/Buttons"] -margin_right = 35.0 -margin_bottom = 20.0 -size_flags_horizontal = 3 -size_flags_vertical = 3 -text = "File" -flat = false -items = [ "New", null, 0, false, false, 0, 0, null, "", false, "Save", null, 0, false, false, 1, 0, null, "", false, "Load", null, 0, false, false, 2, 0, null, "", false ] -switch_on_hover = true -script = ExtResource( 7 ) - -[node name="Edit" type="MenuButton" parent="Panel/NoBCViewportsnotworking26181/Navbar/Buttons"] -margin_left = 55.0 -margin_right = 91.0 -margin_bottom = 20.0 -size_flags_horizontal = 3 -size_flags_vertical = 3 -disabled = true -text = "Edit" -flat = false -items = [ "Undo", null, 0, false, false, 0, 0, null, "", false, "Redo", null, 0, false, false, 1, 0, null, "", false, "Cut", null, 0, false, false, 2, 0, null, "", false, "Copy", null, 0, false, false, 3, 0, null, "", false, "Paste", null, 0, false, false, 4, 0, null, "", false ] -switch_on_hover = true -script = ExtResource( 7 ) - -[node name="Canvas" type="MenuButton" parent="Panel/NoBCViewportsnotworking26181/Navbar/Buttons"] -margin_left = 111.0 -margin_right = 167.0 -margin_bottom = 20.0 -size_flags_horizontal = 3 -size_flags_vertical = 3 -text = "Canvas" -flat = false -items = [ "Change Size", null, 0, false, false, 0, 0, null, "", false, "Crop To Content", null, 0, false, true, 1, 0, null, "", false ] -switch_on_hover = true -script = ExtResource( 7 ) - -[node name="Layer" type="MenuButton" parent="Panel/NoBCViewportsnotworking26181/Navbar/Buttons"] -margin_left = 187.0 -margin_right = 233.0 -margin_bottom = 20.0 -size_flags_horizontal = 3 -size_flags_vertical = 3 -text = "Layer" -flat = false -items = [ "Add Layer", null, 0, false, false, 0, 0, null, "", false, "Delete Layer", null, 0, false, false, 1, 0, null, "", false, "Duplicate Layer", null, 0, false, false, 2, 0, null, "", false, "Clear Layer", null, 0, false, false, 3, 0, null, "", false, "", null, 0, false, false, 4, 0, null, "", true, "Toggle Alpha Locked", null, 1, false, false, 5, 0, null, "", false ] -switch_on_hover = true -script = ExtResource( 7 ) - -[node name="Grid" type="MenuButton" parent="Panel/NoBCViewportsnotworking26181/Navbar/Buttons"] -margin_left = 253.0 -margin_right = 292.0 -margin_bottom = 20.0 -size_flags_horizontal = 3 -size_flags_vertical = 3 -text = "Grid" -flat = false -items = [ "Toggle Grid", null, 0, false, false, 0, 0, null, "", false, "Change Grid Size", null, 0, false, false, 1, 0, null, "", false ] -switch_on_hover = true -script = ExtResource( 7 ) - -[node name="Magic" type="MenuButton" parent="Panel/NoBCViewportsnotworking26181/Navbar/Buttons"] -margin_left = 312.0 -margin_right = 361.0 -margin_bottom = 20.0 -size_flags_horizontal = 3 -size_flags_vertical = 3 -text = "Magic" -flat = false -items = [ "ChangeSingleColor", null, 0, false, false, 0, 0, null, "", false, "ChangeColorRange", null, 0, false, false, 1, 0, null, "", false, "HSV Noise", null, 0, false, false, 2, 0, null, "", false, "HSV Color Modulation", null, 0, false, false, 3, 0, null, "", false ] -switch_on_hover = true -script = ExtResource( 7 ) - -[node name="Editor" type="MenuButton" parent="Panel/NoBCViewportsnotworking26181/Navbar/Buttons"] -margin_left = 381.0 -margin_right = 430.0 -margin_bottom = 20.0 -size_flags_horizontal = 3 -size_flags_vertical = 3 -text = "Editor" -flat = false -items = [ "Settings", null, 0, false, false, 0, 0, null, "", false ] -switch_on_hover = true -script = ExtResource( 7 ) -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="Control" type="Control" parent="Panel/NoBCViewportsnotworking26181/Navbar"] -margin_left = 434.0 -margin_right = 907.0 -margin_bottom = 20.0 -size_flags_horizontal = 3 - -[node name="Label" type="Label" parent="Panel/NoBCViewportsnotworking26181/Navbar"] -modulate = Color( 1, 1, 1, 0.184314 ) -margin_left = 911.0 -margin_top = 3.0 -margin_right = 1024.0 -margin_bottom = 17.0 -text = "Undo (Z) Redo (Y)" -align = 1 -valign = 1 -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="Control" type="HBoxContainer" parent="Panel/NoBCViewportsnotworking26181"] -margin_top = 24.0 -margin_right = 1024.0 -margin_bottom = 556.0 -size_flags_horizontal = 3 -size_flags_vertical = 3 - -[node name="LeftPanel" type="PanelContainer" parent="Panel/NoBCViewportsnotworking26181/Control"] -margin_right = 157.0 -margin_bottom = 532.0 -size_flags_horizontal = 3 -size_flags_vertical = 3 -custom_styles/panel = SubResource( 7 ) -__meta__ = { -"_editor_description_": "" -} - -[node name="MarginContainer" type="MarginContainer" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel"] -margin_right = 157.0 -margin_bottom = 532.0 -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="VBoxContainer" type="VBoxContainer" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer"] -margin_right = 157.0 -margin_bottom = 532.0 -custom_constants/separation = 12 -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="ScrollContainer" type="ScrollContainer" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer"] -margin_right = 157.0 -margin_bottom = 144.0 -rect_min_size = Vector2( 0, 144 ) -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="Colors" type="GridContainer" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer"] -margin_right = 145.0 -margin_bottom = 170.0 -rect_min_size = Vector2( 0, 144 ) -size_flags_horizontal = 3 -size_flags_vertical = 3 -columns = 4 -script = ExtResource( 8 ) - -[node name="Button1" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] -margin_right = 33.0 -margin_bottom = 25.0 -rect_min_size = Vector2( 25, 25 ) -size_flags_horizontal = 3 -size_flags_vertical = 3 -custom_styles/normal = SubResource( 33 ) - -[node name="Button2" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] -margin_left = 37.0 -margin_right = 70.0 -margin_bottom = 25.0 -rect_min_size = Vector2( 25, 25 ) -size_flags_horizontal = 3 -size_flags_vertical = 3 -custom_styles/normal = SubResource( 34 ) - -[node name="Button3" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] -margin_left = 74.0 -margin_right = 107.0 -margin_bottom = 25.0 -rect_min_size = Vector2( 25, 25 ) -size_flags_horizontal = 3 -size_flags_vertical = 3 -custom_styles/normal = SubResource( 35 ) - -[node name="Button4" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] -margin_left = 111.0 -margin_right = 144.0 -margin_bottom = 25.0 -rect_min_size = Vector2( 25, 25 ) -size_flags_horizontal = 3 -size_flags_vertical = 3 -custom_styles/normal = SubResource( 36 ) - -[node name="Button5" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] -margin_top = 29.0 -margin_right = 33.0 -margin_bottom = 54.0 -rect_min_size = Vector2( 25, 25 ) -size_flags_horizontal = 3 -size_flags_vertical = 3 -custom_styles/normal = SubResource( 37 ) - -[node name="Button6" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] -margin_left = 37.0 -margin_top = 29.0 -margin_right = 70.0 -margin_bottom = 54.0 -rect_min_size = Vector2( 25, 25 ) -size_flags_horizontal = 3 -size_flags_vertical = 3 -custom_styles/normal = SubResource( 38 ) - -[node name="Button7" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] -margin_left = 74.0 -margin_top = 29.0 -margin_right = 107.0 -margin_bottom = 54.0 -rect_min_size = Vector2( 25, 25 ) -size_flags_horizontal = 3 -size_flags_vertical = 3 -custom_styles/normal = SubResource( 39 ) - -[node name="Button8" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] -margin_left = 111.0 -margin_top = 29.0 -margin_right = 144.0 -margin_bottom = 54.0 -rect_min_size = Vector2( 25, 25 ) -size_flags_horizontal = 3 -size_flags_vertical = 3 -custom_styles/normal = SubResource( 40 ) - -[node name="Button9" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] -margin_top = 58.0 -margin_right = 33.0 -margin_bottom = 83.0 -rect_min_size = Vector2( 25, 25 ) -size_flags_horizontal = 3 -size_flags_vertical = 3 -custom_styles/normal = SubResource( 41 ) - -[node name="Button10" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] -margin_left = 37.0 -margin_top = 58.0 -margin_right = 70.0 -margin_bottom = 83.0 -rect_min_size = Vector2( 25, 25 ) -size_flags_horizontal = 3 -size_flags_vertical = 3 -custom_styles/normal = SubResource( 42 ) - -[node name="Button11" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] -margin_left = 74.0 -margin_top = 58.0 -margin_right = 107.0 -margin_bottom = 83.0 -rect_min_size = Vector2( 25, 25 ) -size_flags_horizontal = 3 -size_flags_vertical = 3 -custom_styles/normal = SubResource( 43 ) - -[node name="Button12" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] -margin_left = 111.0 -margin_top = 58.0 -margin_right = 144.0 -margin_bottom = 83.0 -rect_min_size = Vector2( 25, 25 ) -size_flags_horizontal = 3 -size_flags_vertical = 3 -custom_styles/normal = SubResource( 44 ) - -[node name="Button13" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] -margin_top = 87.0 -margin_right = 33.0 -margin_bottom = 112.0 -rect_min_size = Vector2( 25, 25 ) -size_flags_horizontal = 3 -size_flags_vertical = 3 -custom_styles/normal = SubResource( 45 ) - -[node name="Button14" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] -margin_left = 37.0 -margin_top = 87.0 -margin_right = 70.0 -margin_bottom = 112.0 -rect_min_size = Vector2( 25, 25 ) -size_flags_horizontal = 3 -size_flags_vertical = 3 -custom_styles/normal = SubResource( 46 ) - -[node name="Button15" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] -margin_left = 74.0 -margin_top = 87.0 -margin_right = 107.0 -margin_bottom = 112.0 -rect_min_size = Vector2( 25, 25 ) -size_flags_horizontal = 3 -size_flags_vertical = 3 -custom_styles/normal = SubResource( 47 ) - -[node name="Button16" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] -margin_left = 111.0 -margin_top = 87.0 -margin_right = 144.0 -margin_bottom = 112.0 -rect_min_size = Vector2( 25, 25 ) -size_flags_horizontal = 3 -size_flags_vertical = 3 -custom_styles/normal = SubResource( 48 ) - -[node name="Button17" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] -margin_top = 116.0 -margin_right = 33.0 -margin_bottom = 141.0 -rect_min_size = Vector2( 25, 25 ) -size_flags_horizontal = 3 -size_flags_vertical = 3 -custom_styles/normal = SubResource( 49 ) - -[node name="Button18" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] -margin_left = 37.0 -margin_top = 116.0 -margin_right = 70.0 -margin_bottom = 141.0 -rect_min_size = Vector2( 25, 25 ) -size_flags_horizontal = 3 -size_flags_vertical = 3 -custom_styles/normal = SubResource( 50 ) - -[node name="Button19" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] -margin_left = 74.0 -margin_top = 116.0 -margin_right = 107.0 -margin_bottom = 141.0 -rect_min_size = Vector2( 25, 25 ) -size_flags_horizontal = 3 -size_flags_vertical = 3 -custom_styles/normal = SubResource( 51 ) - -[node name="Button20" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] -margin_left = 111.0 -margin_top = 116.0 -margin_right = 144.0 -margin_bottom = 141.0 -rect_min_size = Vector2( 25, 25 ) -size_flags_horizontal = 3 -size_flags_vertical = 3 -custom_styles/normal = SubResource( 52 ) - -[node name="Button21" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] -margin_top = 145.0 -margin_right = 33.0 -margin_bottom = 170.0 -rect_min_size = Vector2( 25, 25 ) -size_flags_horizontal = 3 -size_flags_vertical = 3 -custom_styles/normal = SubResource( 53 ) - -[node name="Button22" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] -margin_left = 37.0 -margin_top = 145.0 -margin_right = 70.0 -margin_bottom = 170.0 -rect_min_size = Vector2( 25, 25 ) -size_flags_horizontal = 3 -size_flags_vertical = 3 -custom_styles/normal = SubResource( 54 ) - -[node name="Button23" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] -margin_left = 74.0 -margin_top = 145.0 -margin_right = 107.0 -margin_bottom = 170.0 -rect_min_size = Vector2( 25, 25 ) -size_flags_horizontal = 3 -size_flags_vertical = 3 -custom_styles/normal = SubResource( 55 ) - -[node name="Button24" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] -margin_left = 111.0 -margin_top = 145.0 -margin_right = 144.0 -margin_bottom = 170.0 -rect_min_size = Vector2( 25, 25 ) -size_flags_horizontal = 3 -size_flags_vertical = 3 -custom_styles/normal = SubResource( 56 ) - -[node name="VBoxContainer" type="VBoxContainer" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer"] -margin_top = 156.0 -margin_right = 157.0 -margin_bottom = 196.0 - -[node name="LockAlpha" type="CheckButton" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/VBoxContainer"] -margin_right = 157.0 -margin_bottom = 40.0 -text = "Lock Alpha" -align = 2 - -[node name="BrushSelection" type="GridContainer" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer"] -margin_top = 208.0 -margin_right = 157.0 -margin_bottom = 233.0 -columns = 4 - -[node name="BrushRect" type="TextureButton" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/BrushSelection"] -margin_right = 25.0 -margin_bottom = 25.0 -rect_min_size = Vector2( 25, 25 ) -texture_normal = ExtResource( 17 ) -texture_hover = ExtResource( 20 ) - -[node name="BrushCircle" type="TextureButton" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/BrushSelection"] -margin_left = 29.0 -margin_right = 54.0 -margin_bottom = 25.0 -rect_min_size = Vector2( 25, 25 ) -texture_normal = ExtResource( 18 ) -texture_hover = ExtResource( 21 ) - -[node name="BrushVLine" type="TextureButton" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/BrushSelection"] -margin_left = 58.0 -margin_right = 83.0 -margin_bottom = 25.0 -rect_min_size = Vector2( 25, 25 ) -texture_normal = ExtResource( 16 ) -texture_hover = ExtResource( 22 ) - -[node name="BrushHLine" type="TextureButton" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/BrushSelection"] -margin_left = 87.0 -margin_right = 112.0 -margin_bottom = 25.0 -rect_min_size = Vector2( 25, 25 ) -texture_normal = ExtResource( 19 ) -texture_hover = ExtResource( 23 ) - -[node name="VSplitContainer" type="VBoxContainer" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer"] -margin_top = 245.0 -margin_right = 157.0 -margin_bottom = 279.0 -size_flags_horizontal = 3 - -[node name="BrushLabel" type="Label" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/VSplitContainer"] -margin_right = 157.0 -margin_bottom = 14.0 -text = "Brush Size" - -[node name="HBoxContainer" type="HBoxContainer" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/VSplitContainer"] -margin_top = 18.0 -margin_right = 157.0 -margin_bottom = 34.0 - -[node name="BrushSizeLabel" type="Label" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/VSplitContainer/HBoxContainer"] -margin_top = 1.0 -margin_right = 30.0 -margin_bottom = 15.0 -rect_min_size = Vector2( 30, 0 ) -text = "1" - -[node name="BrushSize" type="HSlider" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/VSplitContainer/HBoxContainer"] -margin_left = 34.0 -margin_right = 157.0 -margin_bottom = 16.0 -size_flags_horizontal = 3 -size_flags_vertical = 2 -min_value = 1.0 -value = 1.0 - -[node name="XSymmetry" type="CheckButton" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer"] -margin_top = 291.0 -margin_right = 157.0 -margin_bottom = 331.0 -text = "X Symmetry" - -[node name="YSymmetry" type="CheckButton" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer"] -margin_top = 343.0 -margin_right = 157.0 -margin_bottom = 383.0 -text = "Y Symmetry" - -[node name="PaintCanvasContainer" type="Control" parent="Panel/NoBCViewportsnotworking26181/Control"] -margin_left = 161.0 -margin_right = 897.0 -margin_bottom = 532.0 -rect_clip_content = true -focus_mode = 1 -mouse_filter = 1 -size_flags_horizontal = 3 -size_flags_vertical = 3 -size_flags_stretch_ratio = 6.0 -__meta__ = { -"_edit_use_anchors_": true -} - -[node name="Canvas" type="Control" parent="Panel/NoBCViewportsnotworking26181/Control/PaintCanvasContainer"] -anchor_left = 0.5 -anchor_top = 0.5 -anchor_right = 0.5 -anchor_bottom = 0.5 -margin_left = -124.252 -margin_top = -118.205 -margin_right = 131.748 -margin_bottom = 137.795 -mouse_filter = 1 -size_flags_horizontal = 3 -size_flags_vertical = 3 -script = ExtResource( 3 ) -__meta__ = { -"_edit_group_": true, -"_edit_use_anchors_": false -} -pixel_size = 4 -canvas_width = 64 -canvas_height = 64 -grid_size = 1 -big_grid_size = 8 - -[node name="CanvasBackground" type="TextureRect" parent="Panel/NoBCViewportsnotworking26181/Control/PaintCanvasContainer/Canvas"] -show_behind_parent = true -material = SubResource( 2 ) -anchor_right = 1.0 -anchor_bottom = 1.0 -texture = ExtResource( 13 ) -expand = true -stretch_mode = 2 -__meta__ = { -"_edit_lock_": true -} - -[node name="CanvasLayers" type="Control" parent="Panel/NoBCViewportsnotworking26181/Control/PaintCanvasContainer/Canvas"] -anchor_right = 1.0 -anchor_bottom = 1.0 -mouse_filter = 2 -__meta__ = { -"_edit_lock_": true, -"_edit_use_anchors_": false -} - -[node name="PreviewLayer" type="TextureRect" parent="Panel/NoBCViewportsnotworking26181/Control/PaintCanvasContainer/Canvas"] -anchor_right = 1.0 -anchor_bottom = 1.0 -mouse_filter = 2 -texture = SubResource( 58 ) -expand = true -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="ToolPreviewLayer" type="TextureRect" parent="Panel/NoBCViewportsnotworking26181/Control/PaintCanvasContainer/Canvas"] -anchor_right = 1.0 -anchor_bottom = 1.0 -mouse_filter = 2 -texture = SubResource( 60 ) -expand = true -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="Grid" parent="Panel/NoBCViewportsnotworking26181/Control/PaintCanvasContainer/Canvas" instance=ExtResource( 4 )] -mouse_filter = 2 -color = Color( 1, 1, 1, 0.415686 ) -size = 4 - -[node name="CanvasOutline" type="Control" parent="Panel/NoBCViewportsnotworking26181/Control/PaintCanvasContainer/Canvas"] -anchor_right = 1.0 -anchor_bottom = 1.0 -mouse_filter = 2 -script = ExtResource( 5 ) -__meta__ = { -"_edit_lock_": true, -"_edit_use_anchors_": false -} -color = Color( 0, 1, 0, 1 ) - -[node name="RightPanel" type="PanelContainer" parent="Panel/NoBCViewportsnotworking26181/Control"] -margin_left = 901.0 -margin_right = 1024.0 -margin_bottom = 532.0 -size_flags_horizontal = 3 -size_flags_vertical = 3 -custom_styles/panel = SubResource( 7 ) - -[node name="ScrollContainer" type="ScrollContainer" parent="Panel/NoBCViewportsnotworking26181/Control/RightPanel"] -margin_right = 123.0 -margin_bottom = 532.0 -size_flags_horizontal = 3 -size_flags_vertical = 3 -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="ToolMenu" type="VBoxContainer" parent="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer"] -margin_right = 123.0 -margin_bottom = 532.0 -size_flags_horizontal = 3 -size_flags_vertical = 3 - -[node name="Tools" type="VBoxContainer" parent="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu"] -margin_right = 123.0 -margin_bottom = 236.0 -size_flags_horizontal = 3 - -[node name="PaintTool" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools"] -margin_right = 123.0 -margin_bottom = 20.0 -size_flags_horizontal = 3 -size_flags_vertical = 3 -text = "Pencil (Q)" - -[node name="BrushTool" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools"] -visible = false -margin_top = 24.0 -margin_right = 132.0 -margin_bottom = 44.0 -size_flags_horizontal = 3 -size_flags_vertical = 3 -text = "Brush" - -[node name="MultiTool" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools"] -visible = false -margin_top = 24.0 -margin_right = 132.0 -margin_bottom = 44.0 -size_flags_horizontal = 3 -size_flags_vertical = 3 -text = "Polygon" -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="BucketTool" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools"] -margin_top = 24.0 -margin_right = 123.0 -margin_bottom = 44.0 -size_flags_horizontal = 3 -size_flags_vertical = 3 -text = "Bucket Fill (F)" -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="RainbowTool" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools"] -margin_top = 48.0 -margin_right = 123.0 -margin_bottom = 68.0 -size_flags_horizontal = 3 -size_flags_vertical = 3 -text = "Rainbow (R)" -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="LineTool" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools"] -margin_top = 72.0 -margin_right = 123.0 -margin_bottom = 92.0 -size_flags_horizontal = 3 -size_flags_vertical = 3 -text = "Line (L)" -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="RectTool" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools"] -margin_top = 96.0 -margin_right = 123.0 -margin_bottom = 116.0 -size_flags_horizontal = 3 -size_flags_vertical = 3 -text = "Rectangle" -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="DarkenTool" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools"] -margin_top = 120.0 -margin_right = 123.0 -margin_bottom = 140.0 -size_flags_horizontal = 3 -size_flags_vertical = 3 -text = "Darken (D)" -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="BrightenTool" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools"] -margin_top = 144.0 -margin_right = 123.0 -margin_bottom = 164.0 -size_flags_horizontal = 3 -size_flags_vertical = 3 -text = "Brighten (B)" -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="ColorPickerTool" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools"] -margin_top = 168.0 -margin_right = 123.0 -margin_bottom = 188.0 -size_flags_horizontal = 3 -size_flags_vertical = 3 -text = "Color Picker (P)" -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="CutTool" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools"] -margin_top = 192.0 -margin_right = 123.0 -margin_bottom = 212.0 -size_flags_horizontal = 3 -size_flags_vertical = 3 -text = "Cut Section (C)" -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="ColorPicker" type="ColorPickerButton" parent="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools"] -margin_top = 216.0 -margin_right = 123.0 -margin_bottom = 236.0 -size_flags_horizontal = 3 -size_flags_vertical = 3 -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="Control" type="ScrollContainer" parent="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu"] -margin_top = 240.0 -margin_right = 123.0 -margin_bottom = 532.0 -size_flags_vertical = 3 - -[node name="VBoxContainer" type="VBoxContainer" parent="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Control"] -margin_right = 123.0 -margin_bottom = 292.0 -size_flags_horizontal = 3 -size_flags_vertical = 3 - -[node name="LayerButtons" type="VBoxContainer" parent="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Control/VBoxContainer"] -margin_right = 123.0 -margin_bottom = 263.0 -size_flags_horizontal = 3 -size_flags_vertical = 3 -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="Layer1" parent="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Control/VBoxContainer/LayerButtons" instance=ExtResource( 12 )] -anchor_right = 0.0 -anchor_bottom = 0.0 -margin_right = 123.0 -margin_bottom = 32.0 - -[node name="Button" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Control/VBoxContainer"] -margin_top = 267.0 -margin_right = 123.0 -margin_bottom = 292.0 -rect_min_size = Vector2( 0, 25 ) -size_flags_horizontal = 3 -text = "+" -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="BottomPanel" type="Panel" parent="Panel/NoBCViewportsnotworking26181"] -margin_top = 560.0 -margin_right = 1024.0 -margin_bottom = 600.0 -rect_min_size = Vector2( 0, 40 ) -size_flags_horizontal = 3 -custom_styles/panel = SubResource( 32 ) -__meta__ = { -"_edit_group_": true, -"_edit_use_anchors_": true -} - -[node name="DebugTextDisplay" type="RichTextLabel" parent="Panel/NoBCViewportsnotworking26181/BottomPanel"] -anchor_right = 1.0 -anchor_bottom = 1.0 -text = "FPS 58 Mouse Position (1122.090332, 370.304382) Canvas Mouse Position (717.342346, 198.509415) Canvas Position (404.747986, 171.794968) -Cell Position (0, 0) Cell Color 0,0,0,0 " -scroll_active = false -script = ExtResource( 11 ) -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="SaveFileDialog" type="FileDialog" parent="."] -anchor_left = 0.5 -anchor_top = 0.5 -anchor_right = 0.5 -anchor_bottom = 0.5 -margin_left = -340.0 -margin_top = -165.0 -margin_right = 340.0 -margin_bottom = 165.0 -mouse_filter = 1 -filters = PoolStringArray( "*.png ; PNG Images" ) -show_hidden_files = true -script = ExtResource( 9 ) - -[node name="LoadFileDialog" type="FileDialog" parent="."] -anchor_left = 0.5 -anchor_top = 0.5 -anchor_right = 0.5 -anchor_bottom = 0.5 -margin_left = -340.0 -margin_top = -165.0 -margin_right = 340.0 -margin_bottom = 165.0 -mouse_filter = 1 -window_title = "Open a File" -mode = 0 -filters = PoolStringArray( "*.png ; PNG Images" ) -show_hidden_files = true -script = ExtResource( 2 ) - -[node name="Settings" parent="." instance=ExtResource( 10 )] -visible = false -anchor_left = 0.5 -anchor_top = 0.5 -anchor_right = 0.5 -anchor_bottom = 0.5 -margin_left = -150.0 -margin_top = -50.0 -margin_right = 150.0 -margin_bottom = 50.0 -mouse_filter = 1 - -[node name="ChangeCanvasSize" type="ConfirmationDialog" parent="."] -anchor_left = 0.5 -anchor_top = 0.5 -anchor_right = 0.5 -anchor_bottom = 0.5 -margin_left = -162.0 -margin_top = -69.0 -margin_right = 162.0 -margin_bottom = 69.0 -script = ExtResource( 14 ) -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="VBoxContainer" type="VBoxContainer" parent="ChangeCanvasSize"] -anchor_left = 0.104938 -anchor_top = 0.108696 -anchor_right = 0.891975 -anchor_bottom = 0.695652 -margin_left = -25.9999 -margin_top = -7.00005 -margin_right = 27.0001 -margin_bottom = 6.00002 -__meta__ = { -"_edit_use_anchors_": true -} - -[node name="Label" type="Label" parent="ChangeCanvasSize/VBoxContainer"] -margin_top = 7.0 -margin_right = 308.0 -margin_bottom = 21.0 -size_flags_vertical = 6 -text = "Change canvas size?" -align = 1 - -[node name="HBoxContainer" type="HBoxContainer" parent="ChangeCanvasSize/VBoxContainer"] -margin_top = 32.0 -margin_right = 308.0 -margin_bottom = 61.0 -size_flags_horizontal = 3 -size_flags_vertical = 3 - -[node name="Label" type="Label" parent="ChangeCanvasSize/VBoxContainer/HBoxContainer"] -margin_top = 7.0 -margin_right = 152.0 -margin_bottom = 21.0 -size_flags_horizontal = 3 -size_flags_vertical = 6 -text = "Width (X)" - -[node name="Width" type="SpinBox" parent="ChangeCanvasSize/VBoxContainer/HBoxContainer"] -margin_left = 156.0 -margin_right = 308.0 -margin_bottom = 29.0 -size_flags_horizontal = 3 -size_flags_vertical = 3 -min_value = 1.0 -max_value = 2500.0 -value = 64.0 -align = 1 -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="HBoxContainer2" type="HBoxContainer" parent="ChangeCanvasSize/VBoxContainer"] -margin_top = 65.0 -margin_right = 308.0 -margin_bottom = 94.0 -size_flags_horizontal = 3 -size_flags_vertical = 3 - -[node name="Label" type="Label" parent="ChangeCanvasSize/VBoxContainer/HBoxContainer2"] -margin_top = 7.0 -margin_right = 152.0 -margin_bottom = 21.0 -size_flags_horizontal = 3 -size_flags_vertical = 6 -text = "Height (Y)" - -[node name="Height" type="SpinBox" parent="ChangeCanvasSize/VBoxContainer/HBoxContainer2"] -margin_left = 156.0 -margin_right = 308.0 -margin_bottom = 29.0 -size_flags_horizontal = 3 -size_flags_vertical = 3 -min_value = 1.0 -max_value = 2500.0 -value = 64.0 -align = 1 -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="ChangeGridSizeDialog" type="AcceptDialog" parent="."] -anchor_left = 0.5 -anchor_top = 0.5 -anchor_right = 0.5 -anchor_bottom = 0.5 -margin_left = -127.0 -margin_top = -74.0 -margin_right = 128.0 -margin_bottom = 73.0 -window_title = "Change Grid Size" -resizable = true -script = ExtResource( 15 ) -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="VBoxContainer" type="VBoxContainer" parent="ChangeGridSizeDialog"] -anchor_left = 0.0313726 -anchor_top = 0.0816327 -anchor_right = 0.968627 -anchor_bottom = 0.727891 -margin_left = -1.23978e-05 -margin_top = -4.00001 -margin_right = 0.00012207 -margin_bottom = 4.00002 -__meta__ = { -"_edit_use_anchors_": true -} - -[node name="Label" type="Label" parent="ChangeGridSizeDialog/VBoxContainer"] -margin_right = 239.0 -margin_bottom = 31.0 -size_flags_horizontal = 3 -size_flags_vertical = 3 -text = "Change Grid Size" -align = 1 - -[node name="HBoxContainer" type="HBoxContainer" parent="ChangeGridSizeDialog/VBoxContainer"] -margin_top = 35.0 -margin_right = 239.0 -margin_bottom = 67.0 -size_flags_horizontal = 3 -size_flags_vertical = 3 - -[node name="Label" type="Label" parent="ChangeGridSizeDialog/VBoxContainer/HBoxContainer"] -margin_top = 9.0 -margin_right = 117.0 -margin_bottom = 23.0 -size_flags_horizontal = 3 -size_flags_vertical = 6 -text = "Grid 1" - -[node name="GridValue" type="SpinBox" parent="ChangeGridSizeDialog/VBoxContainer/HBoxContainer"] -margin_left = 121.0 -margin_top = 4.0 -margin_right = 239.0 -margin_bottom = 28.0 -size_flags_horizontal = 3 -size_flags_vertical = 6 -max_value = 2500.0 -value = 1.0 - -[node name="HBoxContainer2" type="HBoxContainer" parent="ChangeGridSizeDialog/VBoxContainer"] -margin_top = 71.0 -margin_right = 239.0 -margin_bottom = 103.0 -size_flags_horizontal = 3 -size_flags_vertical = 3 - -[node name="Label" type="Label" parent="ChangeGridSizeDialog/VBoxContainer/HBoxContainer2"] -margin_top = 9.0 -margin_right = 117.0 -margin_bottom = 23.0 -size_flags_horizontal = 3 -size_flags_vertical = 6 -text = "Grid 2" - -[node name="BigGridValue" type="SpinBox" parent="ChangeGridSizeDialog/VBoxContainer/HBoxContainer2"] -margin_left = 121.0 -margin_top = 4.0 -margin_right = 239.0 -margin_bottom = 28.0 -size_flags_horizontal = 3 -size_flags_vertical = 6 -max_value = 2500.0 -value = 8.0 - -[connection signal="pressed" from="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/VBoxContainer/LockAlpha" to="." method="_on_LockAlpha_pressed"] -[connection signal="pressed" from="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/BrushSelection/BrushRect" to="." method="_on_BrushRect_pressed"] -[connection signal="pressed" from="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/BrushSelection/BrushCircle" to="." method="_on_BrushCircle_pressed"] -[connection signal="pressed" from="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/BrushSelection/BrushVLine" to="." method="_on_BrushVLine_pressed"] -[connection signal="pressed" from="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/BrushSelection/BrushHLine" to="." method="_on_BrushHLine_pressed"] -[connection signal="value_changed" from="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/VSplitContainer/HBoxContainer/BrushSize" to="." method="_on_BrushSize_value_changed"] -[connection signal="pressed" from="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/XSymmetry" to="." method="_on_XSymmetry_pressed"] -[connection signal="pressed" from="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/YSymmetry" to="." method="_on_YSymmetry_pressed"] -[connection signal="mouse_entered" from="Panel/NoBCViewportsnotworking26181/Control/PaintCanvasContainer" to="." method="_on_PaintCanvasContainer_mouse_entered"] -[connection signal="mouse_exited" from="Panel/NoBCViewportsnotworking26181/Control/PaintCanvasContainer" to="." method="_on_PaintCanvasContainer_mouse_exited"] -[connection signal="pressed" from="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools/PaintTool" to="." method="_on_PaintTool_pressed"] -[connection signal="pressed" from="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools/BrushTool" to="." method="_on_BrushTool_pressed"] -[connection signal="pressed" from="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools/MultiTool" to="." method="_on_MultiTool_pressed"] -[connection signal="pressed" from="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools/BucketTool" to="." method="_on_BucketTool_pressed"] -[connection signal="pressed" from="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools/RainbowTool" to="." method="_on_RainbowTool_pressed"] -[connection signal="pressed" from="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools/LineTool" to="." method="_on_LineTool_pressed"] -[connection signal="pressed" from="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools/RectTool" to="." method="_on_RectTool_pressed"] -[connection signal="pressed" from="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools/DarkenTool" to="." method="_on_DarkenTool_pressed"] -[connection signal="pressed" from="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools/BrightenTool" to="." method="_on_BrightenTool_pressed"] -[connection signal="pressed" from="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools/ColorPickerTool" to="." method="_on_ColorPickerTool_pressed"] -[connection signal="pressed" from="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools/CutTool" to="." method="_on_CutTool_pressed"] -[connection signal="color_changed" from="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools/ColorPicker" to="." method="_on_ColorPicker_color_changed"] -[connection signal="popup_closed" from="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools/ColorPicker" to="." method="_on_ColorPicker_popup_closed"] -[connection signal="pressed" from="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Control/VBoxContainer/Button" to="." method="_on_Button_pressed"] -[connection signal="about_to_show" from="SaveFileDialog" to="SaveFileDialog" method="_on_SaveFileDialog_about_to_show"] -[connection signal="confirmed" from="SaveFileDialog" to="SaveFileDialog" method="_on_SaveFileDialog_confirmed"] -[connection signal="file_selected" from="SaveFileDialog" to="SaveFileDialog" method="_on_SaveFileDialog_file_selected"] -[connection signal="visibility_changed" from="SaveFileDialog" to="SaveFileDialog" method="_on_SaveFileDialog_visibility_changed"] -[connection signal="about_to_show" from="LoadFileDialog" to="LoadFileDialog" method="_on_LoadFileDialog_about_to_show"] -[connection signal="confirmed" from="LoadFileDialog" to="LoadFileDialog" method="_on_LoadFileDialog_confirmed"] -[connection signal="file_selected" from="LoadFileDialog" to="LoadFileDialog" method="_on_LoadFileDialog_file_selected"] -[connection signal="visibility_changed" from="LoadFileDialog" to="LoadFileDialog" method="_on_LoadFileDialog_visibility_changed"] -[connection signal="confirmed" from="ChangeCanvasSize" to="ChangeCanvasSize" method="_on_ConfirmationDialog_confirmed"] -[connection signal="visibility_changed" from="ChangeCanvasSize" to="ChangeCanvasSize" method="_on_ChangeCanvasSize_visibility_changed"] -[connection signal="confirmed" from="ChangeGridSizeDialog" to="ChangeGridSizeDialog" method="_on_ChangeGridSizeDialog_confirmed"] -[connection signal="visibility_changed" from="ChangeGridSizeDialog" to="ChangeGridSizeDialog" method="_on_ChangeGridSizeDialog_visibility_changed"] -[connection signal="value_changed" from="ChangeGridSizeDialog/VBoxContainer/HBoxContainer/GridValue" to="ChangeGridSizeDialog" method="_on_GridValue_value_changed"] -[connection signal="value_changed" from="ChangeGridSizeDialog/VBoxContainer/HBoxContainer2/BigGridValue" to="ChangeGridSizeDialog" method="_on_BigGridValue_value_changed"] diff --git a/modules/paint/Layer.gd b/modules/paint/Layer.gd deleted file mode 100644 index 1200f3b46..000000000 --- a/modules/paint/Layer.gd +++ /dev/null @@ -1,98 +0,0 @@ -extends Reference -class_name GELayer - - -var name -var layer_width -var layer_height -var visible = true setget set_visible -var locked = false -var alpha_locked = false - -var texture: ImageTexture -var image: Image -var texture_rect_ref - - -func _init(): - texture = ImageTexture.new() - - -func create(texture_rect_ref, width: int, height: int): - self.texture_rect_ref = texture_rect_ref - - layer_width = width - layer_height = height - - image = Image.new() - image.create(width, height, false, Image.FORMAT_RGBA8) - image.fill(Color.transparent) - update_texture() - - -func resize(width: int, height: int): - var pixel_colors = [] - var prev_width = layer_width - var prev_height = layer_height - - image.lock() - for y in range(prev_height): - for x in range(prev_width): - pixel_colors.append(image.get_pixel(x, y)) - image.unlock() - - layer_width = width - layer_height = height - - image.create(width, height, false, Image.FORMAT_RGBA8) - - image.lock() - for x in range(prev_width): - for y in range(prev_height): - if x >= width or y >= height: - continue - image.set_pixel(x, y, pixel_colors[GEUtils.to_1D(x, y, prev_width)]) - image.unlock() - - update_texture() - - -func set_pixel(x, y, color): - image.lock() - image.set_pixel(x, y, color) - image.unlock() - - -func get_pixel(x: int, y: int): - if x < 0 or y < 0 or x >= image.get_width() or y >= image.get_height(): - return null - image.lock() - var pixel = image.get_pixel(x, y) - image.unlock() - return pixel - - -func clear(): - image.fill(Color.transparent) - update_texture() - - -func update_texture(): - texture.create_from_image(image, 0) - texture_rect_ref.texture = texture - texture_rect_ref.margin_right = 0 - texture_rect_ref.margin_bottom = 0 - - -func set_visible(vis: bool): - visible = vis - texture_rect_ref.visible = visible - - -func toggle_lock(): - locked = not locked - - -func toggle_alpha_locked(): - alpha_locked = not alpha_locked - diff --git a/modules/paint/MenuButtonExtended.gd b/modules/paint/MenuButtonExtended.gd deleted file mode 100644 index dd442f6e7..000000000 --- a/modules/paint/MenuButtonExtended.gd +++ /dev/null @@ -1,13 +0,0 @@ -tool -extends MenuButton - -var popup = get_popup() -signal item_pressed - -func _ready(): - popup.connect("id_pressed", self, "id_pressed") - -func id_pressed(id): - emit_signal("item_pressed", name, popup.get_item_text(id), id) - - diff --git a/modules/paint/Navbar.gd b/modules/paint/Navbar.gd deleted file mode 100644 index 5752c3f01..000000000 --- a/modules/paint/Navbar.gd +++ /dev/null @@ -1,106 +0,0 @@ -tool -extends Control - -var editor -var paint_canvas - -func _ready(): - editor = owner - paint_canvas = editor.find_node("PaintCanvas") - - for i in get_node("Buttons").get_children(): - i.connect("item_pressed", self, "button_pressed") - - -func button_pressed(button_name, button_item, id): -# print("pressed: ", button_name) -# print("pressed item is: '%s'" % button_item) - - match button_name: - "File": - handle_file_menu(button_item, id) - "Edit": - handle_edit_menu(button_item, id) - "Canvas": - handle_canvas_menu(button_item, id) - "Layer": - handle_layer_menu(button_item, id) - "Grid": - handle_grid_menu(button_item, id) - "Magic": - handle_magic_menu(button_item, id) - "Editor": - handle_editor_menu(button_item, id) - - -func handle_file_menu(pressed_item: String, id): - match pressed_item: - "Save": - owner.get_node("SaveFileDialog").show() - "Load": - owner.get_node("LoadFileDialog").show() - "New": - owner.get_node("ConfirmationDialog").show() - - -func handle_edit_menu(pressed_item: String, id): - match pressed_item: - "Add Layer": - editor.add_new_layer() - - -func handle_canvas_menu(pressed_item: String, id): - match pressed_item: - "Change Size": - owner.get_node("ChangeCanvasSize").show() - "Crop To Content": - owner.paint_canvas.crop_to_content() - - -func handle_layer_menu(pressed_item: String, id): - match pressed_item: - "Add Layer": - editor.add_new_layer() - "Delete Layer": - editor.remove_active_layer() - "Duplicate Layer": - editor.duplicate_active_layer() - "Clear Layer": - owner.paint_canvas.clear_active_layer() - "Toggle Alpha Locked": - owner.paint_canvas.active_layer.toggle_alpha_locked() - $Buttons/Layer.get_popup().set_item_checked(id, not $Buttons/Layer.get_popup().is_item_checked(id)) - owner.find_node("LockAlpha").pressed = $Buttons/Layer.get_popup().is_item_checked(id) - - -func handle_grid_menu(pressed_item: String, id): - match pressed_item: - "Change Grid Size": - owner.get_node("ChangeGridSizeDialog").show() - "Toggle Grid": - owner.paint_canvas.toggle_grid() - - -func handle_magic_menu(pressed_item: String, id): - match pressed_item: - "Add Layer": - editor.add_new_layer() - - -func handle_editor_menu(pressed_item: String, id): - match pressed_item: - "Settings": - owner.get_node("Settings").show() - "Toggle Grid": - var grids_node = owner.find_node("Grids") - grids_node.visible = !grids_node.visible - "Reset Canvas Position": - owner.paint_canvas_node.rect_position = Vector2(0, 0) - - -func is_any_menu_open() -> bool: - for child in $Buttons.get_children(): - if child.get_popup().visible: - return true - return false - diff --git a/modules/paint/PaintCanvasContainer.gd b/modules/paint/PaintCanvasContainer.gd deleted file mode 100644 index 34ca40012..000000000 --- a/modules/paint/PaintCanvasContainer.gd +++ /dev/null @@ -1,2 +0,0 @@ -tool -extends Control diff --git a/modules/paint/SaveFileDialog.gd b/modules/paint/SaveFileDialog.gd deleted file mode 100644 index 7517f21f4..000000000 --- a/modules/paint/SaveFileDialog.gd +++ /dev/null @@ -1,72 +0,0 @@ -tool -extends FileDialog - -#var canvas - -var file_path = "" - - -#func _enter_tree(): - #canvas = get_parent().find_node("Canvas") - #canvas = get_parent().paint_canvas - - -func _ready(): - # warning-ignore:return_value_discarded - get_line_edit().connect("text_entered", self, "_on_LineEdit_text_entered") - invalidate() - clear_filters() - add_filter("*.png ; PNG Images") - - -func _on_SaveFileDialog_file_selected(path): - #print("selected file: ", path) - file_path = path - save_file() - - -# warning-ignore:unused_argument -func _on_LineEdit_text_entered(text): - return -# print("text entered: ", text) - - -func _on_SaveFileDialog_confirmed(): - return -# print("confirmed: ", current_path) - - -func save_file(): - var image = Image.new() - var canvas = get_parent().paint_canvas - image.create(canvas.canvas_width, canvas.canvas_height, true, Image.FORMAT_RGBA8) - image.lock() - - for layer in canvas.layers: - var idx = 0 - if not layer.visible: - continue - for x in range(layer.layer_width): - for y in range(layer.layer_height): - var color = layer.get_pixel(x, y) - var image_color = image.get_pixel(x, y) - - if color.a != 0: - image.set_pixel(x, y, image_color.blend(color)) - else: - image.set_pixel(x, y, color) - image.unlock() - - var dir = Directory.new() - if dir.file_exists(file_path): - dir.remove(file_path) - - image.save_png(file_path) - - -func _on_SaveFileDialog_about_to_show(): - invalidate() - - -func _on_SaveFileDialog_visibility_changed(): - invalidate() diff --git a/modules/paint/SelectionBox.gd b/modules/paint/SelectionBox.gd deleted file mode 100644 index 7ddfd2abf..000000000 --- a/modules/paint/SelectionBox.gd +++ /dev/null @@ -1,24 +0,0 @@ -tool -extends Control - -export var outline_size = 3 - -func _ready(): - pass - -func _process(delta): - update() - -func _draw(): - if not rect_size == Vector2(): - draw_outline_box(rect_size, Color.gray, outline_size) - -func draw_outline_box(size, color, width): - #Top line - draw_line(Vector2(0 + 1, 0), Vector2(size.x, 0), color, width) - #Left line - draw_line(Vector2(0 + 1, 0), Vector2(0, size.y), color, width) - #Bottom line - draw_line(Vector2(0 + 1, size.y), Vector2(size.x, size.y), color, width) - #Right line - draw_line(Vector2(size.x, 0), Vector2(size.x, size.y), color, width) diff --git a/modules/paint/Settings.gd b/modules/paint/Settings.gd deleted file mode 100644 index 865758579..000000000 --- a/modules/paint/Settings.gd +++ /dev/null @@ -1,24 +0,0 @@ -tool -extends Control - -var editor -var canvas_outline -var start_time -var end_time - - -func _enter_tree(): - canvas_outline = get_parent().find_node("CanvasOutline") - editor = get_parent() - - -func _on_ColorPickerButton_color_changed(color): - canvas_outline.color = color - - -func _on_CheckButton_toggled(button_pressed): - canvas_outline.visible = button_pressed - - -func _on_Ok_pressed(): - hide() diff --git a/modules/paint/Settings.tscn b/modules/paint/Settings.tscn deleted file mode 100644 index f2d9c245e..000000000 --- a/modules/paint/Settings.tscn +++ /dev/null @@ -1,64 +0,0 @@ -[gd_scene load_steps=2 format=2] - -[ext_resource path="res://addons/Godoxel/Settings.gd" type="Script" id=1] - - -[node name="Settings" type="WindowDialog"] -visible = true -margin_top = 20.0 -margin_right = 300.0 -margin_bottom = 120.0 -window_title = "Settings" -script = ExtResource( 1 ) - -[node name="Ok" type="Button" parent="."] -margin_left = 210.0 -margin_top = 70.0 -margin_right = 290.0 -margin_bottom = 90.0 -text = "Ok" - -[node name="CanvasOutlineToggle" type="Control" parent="."] -margin_left = 10.0 -margin_top = 10.0 -margin_right = 290.0 -margin_bottom = 30.0 -__meta__ = { -"_edit_group_": true -} - -[node name="Label" type="Label" parent="CanvasOutlineToggle"] -margin_right = 130.0 -margin_bottom = 20.0 -text = "Canvas Outline:" -valign = 1 - -[node name="CheckButton" type="CheckButton" parent="CanvasOutlineToggle"] -margin_left = 210.0 -margin_top = -10.0 -margin_right = 286.0 -margin_bottom = 30.0 -pressed = true - -[node name="CanvasOutlineColor" type="Control" parent="."] -margin_left = 10.0 -margin_top = 40.0 -margin_right = 290.0 -margin_bottom = 60.0 -__meta__ = { -"_edit_group_": true -} - -[node name="Label" type="Label" parent="CanvasOutlineColor"] -margin_right = 130.0 -margin_bottom = 20.0 -text = "Canvas Outline Color:" -valign = 1 - -[node name="ColorPickerButton" type="ColorPickerButton" parent="CanvasOutlineColor"] -margin_left = 170.0 -margin_right = 280.0 -margin_bottom = 20.0 -[connection signal="pressed" from="Ok" to="." method="_on_Ok_pressed"] -[connection signal="toggled" from="CanvasOutlineToggle/CheckButton" to="." method="_on_CheckButton_toggled"] -[connection signal="color_changed" from="CanvasOutlineColor/ColorPickerButton" to="." method="_on_ColorPickerButton_color_changed"] diff --git a/modules/paint/TextInfo.gd b/modules/paint/TextInfo.gd deleted file mode 100644 index e9368e1f1..000000000 --- a/modules/paint/TextInfo.gd +++ /dev/null @@ -1,39 +0,0 @@ -tool -extends Control - -var size = 240 - -#TODO: To make reading the text easier, the text info with the longest text should have it's length applied to all the -#the other text infos - -func add_text_info(text_name, custom_node = null): - var last_text_info_child = null - var child_count = get_child_count() - if not child_count <= 0: - last_text_info_child = get_children()[get_children().size() - 1] - var label = Label.new() - label.name = text_name - label.rect_size = Vector2(size, 14) - if not last_text_info_child == null: - var x = last_text_info_child.rect_position.x - var y = last_text_info_child.rect_position.y - var temp_size = size - if child_count == 4: - x = 0 - y = 20 - temp_size = 0 - label.rect_position = Vector2(x + temp_size, y) - if not custom_node == null: - label.add_child(custom_node) - add_child(label) - -func update_text_info(text_name, text_value = null, node = null, node_target_value = null, node_value = null): - var text_label = self.get_node(text_name) - if text_label == null: - return - if not node == null: - get_node(text_name).get_node(node).set(node_target_value, node_value) - if text_value == null: - text_label.text = "%s: %s" % [text_name, null] - else: - text_label.text = "%s: %s" % [text_name, String(text_value)] diff --git a/modules/paint/Util.gd b/modules/paint/Util.gd deleted file mode 100644 index 9840120c9..000000000 --- a/modules/paint/Util.gd +++ /dev/null @@ -1,94 +0,0 @@ -tool -extends Node -class_name GEUtils - - -static func get_pixels_in_line(from: Vector2, to: Vector2): - var dx = to[0] - from[0] - var dy = to[1] - from[1] - var nx = abs(dx) - var ny = abs(dy) - var signX = sign(dx) - var signY = sign(dy) - var p = from - var points : Array = [p] - - var ix = 0 - var iy = 0 - - while ix < nx || iy < ny: - if (1 + (ix << 1)) * ny < (1 + (iy << 1)) * nx: - p[0] += signX - ix +=1 - else: - p[1] += signY - iy += 1 - points.append(p) - return points - - -static func to_1D_v(p, w) -> int: - return p.x + p.y * w - - -static func to_1D(x, y, w) -> int: - return x + y * w - - -static func to_2D(idx, w) -> Vector2: - var p = Vector2() - p.x = int(idx) % int(w) - p.y = int(idx / w) - return p - - - -static func color_from_array(color_array): - var r = color_array[0] - var g = color_array[1] - var b = color_array[2] - var a = color_array[3] - return Color(r, g, b, a) - -static func random_color(): - return Color(randf(), randf(), randf()) - -static func random_color_alt(): - var rand = randi() % 6 - - match rand: - #red - 0: - return Color.red - #blue - 1: - return Color.blue - #green - 2: - return Color.green - #orange - 3: - return Color.orange - #yellow - 4: - return Color.yellow - #purple - 5: - return Color.purple - -static func get_line_string(file, number): - return file.get_as_text().split("\n")[number - 1].strip_edges() - -static func printv(variable): - var stack = get_stack()[get_stack().size() - 1] - var line = stack.line - var source = stack.source - var file = File.new() - file.open(source, File.READ) - var line_string = get_line_string(file, line) - file.close() - var left_p = line_string.find("(") - var left_p_string = line_string.right(left_p + 1) - var right_p = left_p_string.find(")") - var variable_name = left_p_string.left(right_p) - print("%s: %s" % [variable_name, variable]) diff --git a/modules/paint/ViewportContainer.gd b/modules/paint/ViewportContainer.gd deleted file mode 100644 index 5ff1df6e9..000000000 --- a/modules/paint/ViewportContainer.gd +++ /dev/null @@ -1,6 +0,0 @@ -extends ViewportContainer -tool - -func _ready(): - get_child(0).size = rect_size - diff --git a/modules/paint/actions/Brighten.gd b/modules/paint/actions/Brighten.gd deleted file mode 100644 index faf7f8161..000000000 --- a/modules/paint/actions/Brighten.gd +++ /dev/null @@ -1,53 +0,0 @@ -extends GEAction -class_name GEBrighten - - -const brighten_color = 0.1 - - -func do_action(canvas, data: Array): - .do_action(canvas, data) - - var pixels = GEUtils.get_pixels_in_line(data[0], data[1]) - for pixel in pixels: - if canvas.get_pixel_v(pixel) == null: - continue - - if canvas.is_alpha_locked() and canvas.get_pixel_v(pixel) == Color.transparent: - continue - - if pixel in action_data.undo.cells: - var brightened_color = canvas.get_pixel_v(pixel).lightened(0.1) - canvas.set_pixel_v(pixel, brightened_color) - - action_data.redo.cells.append(pixel) - action_data.redo.colors.append(brightened_color) - continue - - action_data.undo.colors.append(canvas.get_pixel_v(pixel)) - action_data.undo.cells.append(pixel) - var brightened_color = canvas.get_pixel_v(pixel).lightened(0.1) - canvas.set_pixel_v(pixel, brightened_color) - - action_data.redo.cells.append(pixel) - action_data.redo.colors.append(brightened_color) - - -func commit_action(canvas): - var cells = action_data.redo.cells - var colors = action_data.redo.colors - return [] - - -func undo_action(canvas): - var cells = action_data.undo.cells - var colors = action_data.undo.colors - for idx in range(cells.size()): - canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx]) - - -func redo_action(canvas): - var cells = action_data.redo.cells - var colors = action_data.redo.colors - for idx in range(cells.size()): - canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx]) diff --git a/modules/paint/actions/Brush.gd b/modules/paint/actions/Brush.gd deleted file mode 100644 index edeccaf8e..000000000 --- a/modules/paint/actions/Brush.gd +++ /dev/null @@ -1,47 +0,0 @@ -extends GEAction -class_name GEBrush - - -func do_action(canvas: GECanvas, data: Array): - .do_action(canvas, data) - - for pixel in GEUtils.get_pixels_in_line(data[0], data[1]): - for off in BrushPrefabs.get_brush(data[3], data[4]): - var p = pixel + off - - if p in action_data.undo.cells or canvas.get_pixel_v(p) == null: - continue - - if canvas.is_alpha_locked() and canvas.get_pixel_v(p) == Color.transparent: - continue - - action_data.undo.colors.append(canvas.get_pixel_v(p)) - action_data.undo.cells.append(p) - - canvas.set_pixel_v(p, data[2]) - - action_data.redo.cells.append(p) - action_data.redo.colors.append(data[2]) - - -func commit_action(canvas): - var cells = action_data.redo.cells - var colors = action_data.redo.colors - return [] - - -func undo_action(canvas): - var cells = action_data.undo.cells - var colors = action_data.undo.colors - for idx in range(cells.size()): - canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx]) - - -func redo_action(canvas): - var cells = action_data.redo.cells - var colors = action_data.redo.colors - for idx in range(cells.size()): - canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx]) - - - diff --git a/modules/paint/actions/Bucket.gd b/modules/paint/actions/Bucket.gd deleted file mode 100644 index 8ff2f90ae..000000000 --- a/modules/paint/actions/Bucket.gd +++ /dev/null @@ -1,49 +0,0 @@ -extends GEAction -class_name GEBucket - - - -func do_action(canvas, data: Array): - .do_action(canvas, data) - - if canvas.get_pixel_v(data[0]) == data[2]: - return - var pixels = canvas.select_same_color(data[0].x, data[0].y) - - for pixel in pixels: - if pixel in action_data.undo.cells: - continue - - if canvas.is_alpha_locked() and canvas.get_pixel_v(pixel) == Color.transparent: - continue - - action_data.undo.colors.append(canvas.get_pixel_v(pixel)) - action_data.undo.cells.append(pixel) - - canvas.set_pixel_v(pixel, data[2]) - - action_data.redo.cells.append(pixel) - action_data.redo.colors.append(data[2]) - - -func commit_action(canvas): - var cells = action_data.preview.cells - var colors = action_data.preview.colors - return [] - - -func undo_action(canvas): - var cells = action_data.undo.cells - var colors = action_data.undo.colors - for idx in range(cells.size()): - canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx]) - - -func redo_action(canvas): - var cells = action_data.redo.cells - var colors = action_data.redo.colors - for idx in range(cells.size()): - canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx]) - - - diff --git a/modules/paint/actions/Darken.gd b/modules/paint/actions/Darken.gd deleted file mode 100644 index 3832a17d5..000000000 --- a/modules/paint/actions/Darken.gd +++ /dev/null @@ -1,55 +0,0 @@ -extends GEAction -class_name GEDarken - -const dark_factor = 0.1 - - -func do_action(canvas, data: Array): - .do_action(canvas, data) - - var pixels = GEUtils.get_pixels_in_line(data[0], data[1]) - for pixel in pixels: - if canvas.get_pixel_v(pixel) == null: - continue - - if canvas.is_alpha_locked() and canvas.get_pixel_v(pixel) == Color.transparent: - continue - - if pixel in action_data.undo.cells: - var darkened_color = canvas.get_pixel_v(pixel).darkened(dark_factor) - canvas.set_pixel_v(pixel, darkened_color) - - action_data.redo.cells.append(pixel) - action_data.redo.colors.append(darkened_color) - continue - - action_data.undo.colors.append(canvas.get_pixel_v(pixel)) - action_data.undo.cells.append(pixel) - var darkened_color = canvas.get_pixel_v(pixel).darkened(dark_factor) - canvas.set_pixel_v(pixel, darkened_color) - - action_data.redo.cells.append(pixel) - action_data.redo.colors.append(darkened_color) - - -func commit_action(canvas): - var cells = action_data.redo.cells - var colors = action_data.redo.colors - return [] - - -func undo_action(canvas): - var cells = action_data.undo.cells - var colors = action_data.undo.colors - for idx in range(cells.size()): - canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx]) - - -func redo_action(canvas): - var cells = action_data.redo.cells - var colors = action_data.redo.colors - for idx in range(cells.size()): - canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx]) - - - diff --git a/modules/paint/actions/Line.gd b/modules/paint/actions/Line.gd deleted file mode 100644 index 6f17316f8..000000000 --- a/modules/paint/actions/Line.gd +++ /dev/null @@ -1,59 +0,0 @@ -extends GEAction -class_name GELine - - -var mouse_start_pos = null - -func do_action(canvas, data: Array): - .do_action(canvas, data) - - if mouse_start_pos == null: - mouse_start_pos = data[0] - - action_data.preview.cells.clear() - action_data.preview.colors.clear() - canvas.clear_preview_layer() - - var pixels = GEUtils.get_pixels_in_line(data[0], mouse_start_pos) - for pixel in pixels: - if canvas.is_alpha_locked() and canvas.get_pixel_v(pixel) == Color.transparent: - continue - - canvas.set_preview_pixel_v(pixel, data[2]) - action_data.preview.cells.append(pixel) - action_data.preview.colors.append(data[2]) - - -func commit_action(canvas): - canvas.clear_preview_layer() - var cells = action_data.preview.cells - var colors = action_data.preview.colors - for idx in range(cells.size()): - if canvas.get_pixel_v(cells[idx]) == null: - continue - action_data.undo.cells.append(cells[idx]) - action_data.undo.colors.append(canvas.get_pixel_v(cells[idx])) - - canvas.set_pixel_v(cells[idx], colors[idx]) - - action_data.redo.cells.append(cells[idx]) - action_data.redo.colors.append(colors[idx]) - mouse_start_pos = null - return [] - - -func undo_action(canvas): - var cells = action_data.undo.cells - var colors = action_data.undo.colors - for idx in range(cells.size()): - canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx]) - - -func redo_action(canvas): - var cells = action_data.redo.cells - var colors = action_data.redo.colors - for idx in range(cells.size()): - canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx]) - - - diff --git a/modules/paint/actions/MultiLine.gd b/modules/paint/actions/MultiLine.gd deleted file mode 100644 index b3850ffa1..000000000 --- a/modules/paint/actions/MultiLine.gd +++ /dev/null @@ -1,44 +0,0 @@ -extends GEAction -class_name GEMultiLine - - -func can_commit() -> bool: - return false - - -func update_action(canvas, data: Array): - .update_action(canvas, data) - - var pixels = GEUtils.get_pixels_in_line(data[0], data[1]) - for pixel in pixels: - if pixel in action_data.undo.cells or canvas.get_pixel_v(pixel) == null or canvas.is_alpha_locked(): - continue - action_data.undo.colors.append(canvas.get_pixel_v(pixel)) - action_data.undo.cells.append(pixel) - canvas.set_pixel_v(pixel, data[2]) - - action_data.redo.cells.append(pixel) - action_data.redo.colors.append(data[2]) - - -func commit_action(canvas): - var cells = action_data.redo.cells - var colors = action_data.redo.colors - return [] - - -func undo_action(canvas): - var cells = action_data.undo.cells - var colors = action_data.undo.colors - for idx in range(cells.size()): - canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx]) - - -func redo_action(canvas): - var cells = action_data.redo.cells - var colors = action_data.redo.colors - for idx in range(cells.size()): - canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx]) - - - diff --git a/modules/paint/actions/PasteCut.gd b/modules/paint/actions/PasteCut.gd deleted file mode 100644 index 5ffaa8eb3..000000000 --- a/modules/paint/actions/PasteCut.gd +++ /dev/null @@ -1,59 +0,0 @@ -extends GEAction -class_name GEPasteCut - - -#data[2] = selection_pos -#data[3] = selection_color -#data[4] = cut pos -#data[5] = cut size -func do_action(canvas, data: Array): - .do_action(canvas, data) - - for pixel_pos in GEUtils.get_pixels_in_line(data[0], data[1]): - for idx in range(data[2].size()): - var pixel = data[2][idx] - var color = data[3][idx] - pixel -= data[4] + data[5] / 2 - pixel += pixel_pos - - if canvas.get_pixel_v(pixel) == null: - continue - - if canvas.is_alpha_locked() and canvas.get_pixel_v(pixel) == Color.transparent: - continue - - var found = action_data.redo.cells.find(pixel) - if found == -1: - action_data.redo.cells.append(pixel) - action_data.redo.colors.append(color) - else: - action_data.redo.colors[found] = color - - found = action_data.undo.cells.find(pixel) - if found == -1: - action_data.undo.colors.append(canvas.get_pixel_v(pixel)) - action_data.undo.cells.append(pixel) - - canvas.set_pixel_v(pixel, color) - - -func commit_action(canvas): - canvas.clear_preview_layer() - return [] - - -func undo_action(canvas): - var cells = action_data.undo.cells - var colors = action_data.undo.colors - for idx in range(cells.size()): - canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx]) - - -func redo_action(canvas): - var cells = action_data.redo.cells - var colors = action_data.redo.colors - for idx in range(cells.size()): - canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx]) - - - diff --git a/modules/paint/actions/Pencil.gd b/modules/paint/actions/Pencil.gd deleted file mode 100644 index 906236fef..000000000 --- a/modules/paint/actions/Pencil.gd +++ /dev/null @@ -1,43 +0,0 @@ -extends GEAction -class_name GEPencil - - -func do_action(canvas, data: Array): - .do_action(canvas, data) - - var pixels = GEUtils.get_pixels_in_line(data[0], data[1]) - for pixel in pixels: - for p in get_points(canvas, pixel): - _set_pixel(canvas, p, data[2]) - - -func _set_pixel(canvas, pixel, color): - action_data.undo.colors.append(canvas.get_pixel_v(pixel)) - action_data.undo.cells.append(pixel) - canvas.set_pixel_v(pixel, color) - - action_data.redo.cells.append(pixel) - action_data.redo.colors.append(color) - - -func commit_action(canvas): - var cells = action_data.redo.cells - var colors = action_data.redo.colors - return [] - - -func undo_action(canvas): - var cells = action_data.undo.cells - var colors = action_data.undo.colors - for idx in range(cells.size()): - canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx]) - - -func redo_action(canvas): - var cells = action_data.redo.cells - var colors = action_data.redo.colors - for idx in range(cells.size()): - canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx]) - - - diff --git a/modules/paint/actions/Rainbow.gd b/modules/paint/actions/Rainbow.gd deleted file mode 100644 index 618bdd17a..000000000 --- a/modules/paint/actions/Rainbow.gd +++ /dev/null @@ -1,58 +0,0 @@ -extends GEAction -class_name GERainbow - - -func do_action(canvas, data: Array): - .do_action(canvas, data) - - var pixels = GEUtils.get_pixels_in_line(data[0], data[1]) - for pixel in pixels: - if canvas.get_pixel_v(pixel) == null: - continue - - if canvas.is_alpha_locked() and canvas.get_pixel_v(pixel) == Color.transparent: - continue - - if pixel in action_data.undo.cells: - var color = GEUtils.random_color() - canvas.set_pixel_v(pixel, color) - - var idx = action_data.redo.cells.find(pixel) - action_data.redo.cells.remove(idx) - action_data.redo.colors.remove(idx) - - action_data.redo.cells.append(pixel) - action_data.redo.colors.append(color) - continue - - action_data.undo.colors.append(canvas.get_pixel_v(pixel)) - action_data.undo.cells.append(pixel) - - var color = GEUtils.random_color() - canvas.set_pixel_v(pixel, color) - - action_data.redo.cells.append(pixel) - action_data.redo.colors.append(color) - - -func commit_action(canvas): - var cells = action_data.redo.cells - var colors = action_data.redo.colors - return [] - - -func undo_action(canvas): - var cells = action_data.undo.cells - var colors = action_data.undo.colors - for idx in range(cells.size()): - canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx]) - - -func redo_action(canvas): - var cells = action_data.redo.cells - var colors = action_data.redo.colors - for idx in range(cells.size()): - canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx]) - - - diff --git a/modules/paint/actions/brighten_action.cpp b/modules/paint/actions/brighten_action.cpp new file mode 100644 index 000000000..1930d2865 --- /dev/null +++ b/modules/paint/actions/brighten_action.cpp @@ -0,0 +1,87 @@ +/* +Copyright (c) 2019 Flairieve +Copyright (c) 2020-2022 cobrapitz +Copyright (c) 2022 Péter Magyar + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "brighten_action.h" + +void BrightenAction::do_action(PaintCanvas *canvas, Array data) { + /* + .do_action(canvas, data) + + var pixels = GEUtils.get_pixels_in_line(data[0], data[1]) + for pixel in pixels: + if canvas.get_pixel_v(pixel) == null: + continue + + if canvas.is_alpha_locked() and canvas.get_pixel_v(pixel) == Color.transparent: + continue + + if pixel in action_data.undo.cells: + var brightened_color = canvas.get_pixel_v(pixel).lightened(0.1) + canvas.set_pixel_v(pixel, brightened_color) + + action_data.redo.cells.append(pixel) + action_data.redo.colors.append(brightened_color) + continue + + action_data.undo.colors.append(canvas.get_pixel_v(pixel)) + action_data.undo.cells.append(pixel) + var brightened_color = canvas.get_pixel_v(pixel).lightened(0.1) + canvas.set_pixel_v(pixel, brightened_color) + + action_data.redo.cells.append(pixel) + action_data.redo.colors.append(brightened_color) + */ +} +void BrightenAction::commit_action(PaintCanvas *canvas) { + /* + var cells = action_data.redo.cells + var colors = action_data.redo.colors + */ +} + +void BrightenAction::undo_action(PaintCanvas *canvas) { + /* + var cells = action_data.undo.cells + var colors = action_data.undo.colors + for idx in range(cells.size()): + canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx]) + */ +} +void BrightenAction::redo_action(PaintCanvas *canvas) { + /* + var cells = action_data.redo.cells + var colors = action_data.redo.colors + for idx in range(cells.size()): + canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx]) + */ +} + +BrightenAction::BrightenAction() { +} + +BrightenAction::~BrightenAction() { +} + +void BrightenAction::_bind_methods() { +} diff --git a/modules/paint/actions/brighten_action.h b/modules/paint/actions/brighten_action.h new file mode 100644 index 000000000..d06cb2002 --- /dev/null +++ b/modules/paint/actions/brighten_action.h @@ -0,0 +1,51 @@ +#ifndef BRIGHTEN_ACTION_H +#define BRIGHTEN_ACTION_H + +/* +Copyright (c) 2019 Flairieve +Copyright (c) 2020-2022 cobrapitz +Copyright (c) 2022 Péter Magyar + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "paint_action.h" + +class PaintCanvas; + +class BrightenAction : public PaintAction { + GDCLASS(BrightenAction, PaintAction); + +public: + void do_action(PaintCanvas *canvas, Array data); + void commit_action(PaintCanvas *canvas); + + void undo_action(PaintCanvas *canvas); + void redo_action(PaintCanvas *canvas); + + BrightenAction(); + ~BrightenAction(); + + //const brighten_color = 0.1 + +protected: + static void _bind_methods(); +}; + +#endif diff --git a/modules/paint/actions/brush_action.cpp b/modules/paint/actions/brush_action.cpp new file mode 100644 index 000000000..75fbb1d4e --- /dev/null +++ b/modules/paint/actions/brush_action.cpp @@ -0,0 +1,81 @@ +/* +Copyright (c) 2019 Flairieve +Copyright (c) 2020-2022 cobrapitz +Copyright (c) 2022 Péter Magyar + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "brush_action.h" + +void BrushAction::do_action(PaintCanvas *canvas, Array data) { + /* + .do_action(canvas, data) + + for pixel in GEUtils.get_pixels_in_line(data[0], data[1]): + for off in BrushPrefabs.get_brush(data[3], data[4]): + var p = pixel + off + + if p in action_data.undo.cells or canvas.get_pixel_v(p) == null: + continue + + if canvas.is_alpha_locked() and canvas.get_pixel_v(p) == Color.transparent: + continue + + action_data.undo.colors.append(canvas.get_pixel_v(p)) + action_data.undo.cells.append(p) + + canvas.set_pixel_v(p, data[2]) + + action_data.redo.cells.append(p) + action_data.redo.colors.append(data[2]) + */ +} +void BrushAction::commit_action(PaintCanvas *canvas) { + /* + var cells = action_data.redo.cells + var colors = action_data.redo.colors + */ +} + +void BrushAction::undo_action(PaintCanvas *canvas) { + /* + var cells = action_data.undo.cells + var colors = action_data.undo.colors + for idx in range(cells.size()): + canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx]) + */ +} +void BrushAction::redo_action(PaintCanvas *canvas) { + /* + var cells = action_data.redo.cells + var colors = action_data.redo.colors + for idx in range(cells.size()): + canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx]) + */ +} + +BrushAction::BrushAction() { +} + +BrushAction::~BrushAction() { +} + +void BrushAction::_bind_methods() { +} diff --git a/modules/paint/paint_image_layer.cpp b/modules/paint/actions/brush_action.h similarity index 72% rename from modules/paint/paint_image_layer.cpp rename to modules/paint/actions/brush_action.h index 8ea0954b5..b2e4f6895 100644 --- a/modules/paint/paint_image_layer.cpp +++ b/modules/paint/actions/brush_action.h @@ -1,3 +1,6 @@ +#ifndef BRUSH_ACTION_H +#define BRUSH_ACTION_H + /* Copyright (c) 2019 Flairieve Copyright (c) 2020-2022 cobrapitz @@ -22,13 +25,25 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#include "paint_image_layer.h" +#include "paint_action.h" -PaintImageLayer::PaintImageLayer() { -} +class PaintCanvas; -PaintImageLayer::~PaintImageLayer() { -} +class BrushAction : public PaintAction { + GDCLASS(BrushAction, PaintAction); -void PaintImageLayer::_bind_methods() { -} +public: + void do_action(PaintCanvas *canvas, Array data); + void commit_action(PaintCanvas *canvas); + + void undo_action(PaintCanvas *canvas); + void redo_action(PaintCanvas *canvas); + + BrushAction(); + ~BrushAction(); + +protected: + static void _bind_methods(); +}; + +#endif diff --git a/modules/paint/actions/bucket_action.cpp b/modules/paint/actions/bucket_action.cpp new file mode 100644 index 000000000..253a4a4e9 --- /dev/null +++ b/modules/paint/actions/bucket_action.cpp @@ -0,0 +1,82 @@ +/* +Copyright (c) 2019 Flairieve +Copyright (c) 2020-2022 cobrapitz +Copyright (c) 2022 Péter Magyar + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "bucket_action.h" + +void BucketAction::do_action(PaintCanvas *canvas, Array data) { + /* + .do_action(canvas, data) + + if canvas.get_pixel_v(data[0]) == data[2]: + return + var pixels = canvas.select_same_color(data[0].x, data[0].y) + + for pixel in pixels: + if pixel in action_data.undo.cells: + continue + + if canvas.is_alpha_locked() and canvas.get_pixel_v(pixel) == Color.transparent: + continue + + action_data.undo.colors.append(canvas.get_pixel_v(pixel)) + action_data.undo.cells.append(pixel) + + canvas.set_pixel_v(pixel, data[2]) + + action_data.redo.cells.append(pixel) + action_data.redo.colors.append(data[2]) + */ +} +void BucketAction::commit_action(PaintCanvas *canvas) { + /* + var cells = action_data.preview.cells + var colors = action_data.preview.colors + */ +} + +void BucketAction::undo_action(PaintCanvas *canvas) { + /* + var cells = action_data.undo.cells + var colors = action_data.undo.colors + for idx in range(cells.size()): + canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx]) + */ +} +void BucketAction::redo_action(PaintCanvas *canvas) { + /* + var cells = action_data.redo.cells + var colors = action_data.redo.colors + for idx in range(cells.size()): + canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx]) + */ +} + +BucketAction::BucketAction() { +} + +BucketAction::~BucketAction() { +} + +void BucketAction::_bind_methods() { +} diff --git a/modules/paint/paint_save_file_dialog.cpp b/modules/paint/actions/bucket_action.h similarity index 71% rename from modules/paint/paint_save_file_dialog.cpp rename to modules/paint/actions/bucket_action.h index d1cc69544..472e589ba 100644 --- a/modules/paint/paint_save_file_dialog.cpp +++ b/modules/paint/actions/bucket_action.h @@ -1,3 +1,6 @@ +#ifndef BUCKET_ACTION_H +#define BUCKET_ACTION_H + /* Copyright (c) 2019 Flairieve Copyright (c) 2020-2022 cobrapitz @@ -22,13 +25,25 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#include "paint_save_file_dialog.h" +#include "paint_action.h" -PaintSaveFileDialog::PaintSaveFileDialog() { -} +class PaintCanvas; -PaintSaveFileDialog::~PaintSaveFileDialog() { -} +class BucketAction : public PaintAction { + GDCLASS(BucketAction, PaintAction); -void PaintSaveFileDialog::_bind_methods() { -} +public: + void do_action(PaintCanvas *canvas, Array data); + void commit_action(PaintCanvas *canvas); + + void undo_action(PaintCanvas *canvas); + void redo_action(PaintCanvas *canvas); + + BucketAction(); + ~BucketAction(); + +protected: + static void _bind_methods(); +}; + +#endif diff --git a/modules/paint/actions/Cut.gd b/modules/paint/actions/cut_action.cpp similarity index 51% rename from modules/paint/actions/Cut.gd rename to modules/paint/actions/cut_action.cpp index 4f608153f..d098579f1 100644 --- a/modules/paint/actions/Cut.gd +++ b/modules/paint/actions/cut_action.cpp @@ -1,45 +1,65 @@ -extends GEAction -class_name GECut +/* +Copyright (c) 2019 Flairieve +Copyright (c) 2020-2022 cobrapitz +Copyright (c) 2022 Péter Magyar -const selection_color = Color(0.8, 0.8, 0.8, 0.5) -var mouse_start_pos = null -var mouse_end_pos = null +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. -func can_commit() -> bool: - return false #ugly way of handling a cut +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ +#include "cut_action.h" -func do_action(canvas, data: Array): +bool CutAction::can_commit() { + return false; //ugly way of handling a cut +} + +void CutAction::do_action(PaintCanvas *canvas, Array data) { + /* .do_action(canvas, data) - + if mouse_start_pos == null: mouse_start_pos = data[0] mouse_end_pos = data[0] - + action_data.preview.cells.clear() action_data.preview.colors.clear() canvas.clear_preview_layer() - + var p = mouse_start_pos var s = mouse_end_pos - mouse_start_pos - + var pixels = GEUtils.get_pixels_in_line(p, p + Vector2(s.x, 0)) pixels += GEUtils.get_pixels_in_line(p, p + Vector2(0, s.y)) pixels += GEUtils.get_pixels_in_line(p + s, p + s + Vector2(0, -s.y)) pixels += GEUtils.get_pixels_in_line(p + s, p + s + Vector2(-s.x, 0)) - + for pixel in pixels: canvas.set_preview_pixel_v(pixel, selection_color) action_data.preview.cells.append(pixel) action_data.preview.colors.append(selection_color) - - -func commit_action(canvas): + */ +} +void CutAction::commit_action(PaintCanvas *canvas) { + /* canvas.clear_preview_layer() var p = mouse_start_pos var s = mouse_end_pos - mouse_start_pos - + for x in range(abs(s.x)+1): for y in range(abs(s.y)+1): var px = x @@ -48,35 +68,45 @@ func commit_action(canvas): px *= -1 if s.y < 0: py *= -1 - + var pos = p + Vector2(px, py) var color = canvas.get_pixel(pos.x, pos.y) - + if color == null or color.a == 0.0: continue - + action_data.redo.cells.append(pos) action_data.redo.colors.append(canvas.get_pixel_v(pos)) - + canvas.set_pixel_v(pos, Color.transparent) - + action_data.undo.cells.append(pos) action_data.undo.colors.append(Color.transparent) - return [] + */ +} - -func undo_action(canvas): +void CutAction::undo_action(PaintCanvas *canvas) { + /* var cells = action_data.undo.cells var colors = action_data.undo.colors for idx in range(cells.size()): canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx]) - - -func redo_action(canvas): + */ +} +void CutAction::redo_action(PaintCanvas *canvas) { + /* var cells = action_data.redo.cells var colors = action_data.redo.colors for idx in range(cells.size()): canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx]) + */ +} +CutAction::CutAction() { +} +CutAction::~CutAction() { +} +void CutAction::_bind_methods() { +} diff --git a/modules/paint/actions/cut_action.h b/modules/paint/actions/cut_action.h new file mode 100644 index 000000000..264f69841 --- /dev/null +++ b/modules/paint/actions/cut_action.h @@ -0,0 +1,55 @@ +#ifndef CUT_ACTION_H +#define CUT_ACTION_H + +/* +Copyright (c) 2019 Flairieve +Copyright (c) 2020-2022 cobrapitz +Copyright (c) 2022 Péter Magyar + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "paint_action.h" + +class PaintCanvas; + +class CutAction : public PaintAction { + GDCLASS(CutAction, PaintAction); + +public: + bool can_commit(); + + void do_action(PaintCanvas *canvas, Array data); + void commit_action(PaintCanvas *canvas); + + void undo_action(PaintCanvas *canvas); + void redo_action(PaintCanvas *canvas); + + CutAction(); + ~CutAction(); + + //const selection_color = Color(0.8, 0.8, 0.8, 0.5) + //var mouse_start_pos = null + //var mouse_end_pos = null + +protected: + static void _bind_methods(); +}; + +#endif diff --git a/modules/paint/actions/darken_action.cpp b/modules/paint/actions/darken_action.cpp new file mode 100644 index 000000000..785341a91 --- /dev/null +++ b/modules/paint/actions/darken_action.cpp @@ -0,0 +1,87 @@ +/* +Copyright (c) 2019 Flairieve +Copyright (c) 2020-2022 cobrapitz +Copyright (c) 2022 Péter Magyar + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "darken_action.h" + +void DarkenAction::do_action(PaintCanvas *canvas, Array data) { + /* + .do_action(canvas, data) + + var pixels = GEUtils.get_pixels_in_line(data[0], data[1]) + for pixel in pixels: + if canvas.get_pixel_v(pixel) == null: + continue + + if canvas.is_alpha_locked() and canvas.get_pixel_v(pixel) == Color.transparent: + continue + + if pixel in action_data.undo.cells: + var darkened_color = canvas.get_pixel_v(pixel).darkened(dark_factor) + canvas.set_pixel_v(pixel, darkened_color) + + action_data.redo.cells.append(pixel) + action_data.redo.colors.append(darkened_color) + continue + + action_data.undo.colors.append(canvas.get_pixel_v(pixel)) + action_data.undo.cells.append(pixel) + var darkened_color = canvas.get_pixel_v(pixel).darkened(dark_factor) + canvas.set_pixel_v(pixel, darkened_color) + + action_data.redo.cells.append(pixel) + action_data.redo.colors.append(darkened_color) + */ +} +void DarkenAction::commit_action(PaintCanvas *canvas) { + /* + var cells = action_data.redo.cells + var colors = action_data.redo.colors + */ +} + +void DarkenAction::undo_action(PaintCanvas *canvas) { + /* + var cells = action_data.undo.cells + var colors = action_data.undo.colors + for idx in range(cells.size()): + canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx]) + */ +} +void DarkenAction::redo_action(PaintCanvas *canvas) { + /* + var cells = action_data.redo.cells + var colors = action_data.redo.colors + for idx in range(cells.size()): + canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx]) + */ +} + +DarkenAction::DarkenAction() { +} + +DarkenAction::~DarkenAction() { +} + +void DarkenAction::_bind_methods() { +} diff --git a/modules/paint/actions/darken_action.h b/modules/paint/actions/darken_action.h new file mode 100644 index 000000000..a5957d8e7 --- /dev/null +++ b/modules/paint/actions/darken_action.h @@ -0,0 +1,51 @@ +#ifndef DARKEN_ACTION_H +#define DARKEN_ACTION_H + +/* +Copyright (c) 2019 Flairieve +Copyright (c) 2020-2022 cobrapitz +Copyright (c) 2022 Péter Magyar + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "paint_action.h" + +class PaintCanvas; + +class DarkenAction : public PaintAction { + GDCLASS(DarkenAction, PaintAction); + +public: + void do_action(PaintCanvas *canvas, Array data); + void commit_action(PaintCanvas *canvas); + + void undo_action(PaintCanvas *canvas); + void redo_action(PaintCanvas *canvas); + + DarkenAction(); + ~DarkenAction(); + + //const dark_factor = 0.1 + +protected: + static void _bind_methods(); +}; + +#endif diff --git a/modules/paint/actions/line_action.cpp b/modules/paint/actions/line_action.cpp new file mode 100644 index 000000000..286057ac1 --- /dev/null +++ b/modules/paint/actions/line_action.cpp @@ -0,0 +1,91 @@ +/* +Copyright (c) 2019 Flairieve +Copyright (c) 2020-2022 cobrapitz +Copyright (c) 2022 Péter Magyar + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "line_action.h" + +void LineAction::do_action(PaintCanvas *canvas, Array data) { + /* + .do_action(canvas, data) + + if mouse_start_pos == null: + mouse_start_pos = data[0] + + action_data.preview.cells.clear() + action_data.preview.colors.clear() + canvas.clear_preview_layer() + + var pixels = GEUtils.get_pixels_in_line(data[0], mouse_start_pos) + for pixel in pixels: + if canvas.is_alpha_locked() and canvas.get_pixel_v(pixel) == Color.transparent: + continue + + canvas.set_preview_pixel_v(pixel, data[2]) + action_data.preview.cells.append(pixel) + action_data.preview.colors.append(data[2]) + */ +} +void LineAction::commit_action(PaintCanvas *canvas) { + /* + canvas.clear_preview_layer() + var cells = action_data.preview.cells + var colors = action_data.preview.colors + for idx in range(cells.size()): + if canvas.get_pixel_v(cells[idx]) == null: + continue + action_data.undo.cells.append(cells[idx]) + action_data.undo.colors.append(canvas.get_pixel_v(cells[idx])) + + canvas.set_pixel_v(cells[idx], colors[idx]) + + action_data.redo.cells.append(cells[idx]) + action_data.redo.colors.append(colors[idx]) + mouse_start_pos = null + */ +} + +void LineAction::undo_action(PaintCanvas *canvas) { + /* + var cells = action_data.undo.cells + var colors = action_data.undo.colors + for idx in range(cells.size()): + canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx]) + */ +} +void LineAction::redo_action(PaintCanvas *canvas) { + /* + var cells = action_data.redo.cells + var colors = action_data.redo.colors + for idx in range(cells.size()): + canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx]) + */ +} + +LineAction::LineAction() { +} + +LineAction::~LineAction() { +} + +void LineAction::_bind_methods() { +} diff --git a/modules/paint/actions/line_action.h b/modules/paint/actions/line_action.h new file mode 100644 index 000000000..7033a99b6 --- /dev/null +++ b/modules/paint/actions/line_action.h @@ -0,0 +1,51 @@ +#ifndef LINE_ACTION_H +#define LINE_ACTION_H + +/* +Copyright (c) 2019 Flairieve +Copyright (c) 2020-2022 cobrapitz +Copyright (c) 2022 Péter Magyar + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "paint_action.h" + +class PaintCanvas; + +class LineAction : public PaintAction { + GDCLASS(LineAction, PaintAction); + +public: + void do_action(PaintCanvas *canvas, Array data); + void commit_action(PaintCanvas *canvas); + + void undo_action(PaintCanvas *canvas); + void redo_action(PaintCanvas *canvas); + + LineAction(); + ~LineAction(); + + //var mouse_start_pos = null + +protected: + static void _bind_methods(); +}; + +#endif diff --git a/modules/paint/actions/multiline_action.cpp b/modules/paint/actions/multiline_action.cpp new file mode 100644 index 000000000..e0248e9c6 --- /dev/null +++ b/modules/paint/actions/multiline_action.cpp @@ -0,0 +1,78 @@ +/* +Copyright (c) 2019 Flairieve +Copyright (c) 2020-2022 cobrapitz +Copyright (c) 2022 Péter Magyar + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "multiline_action.h" + +bool MultiLineAction::can_commit() { + return false; +} + +void MultiLineAction::do_action(PaintCanvas *canvas, Array data) { + /* + .do_action(canvas, data) + + var pixels = GEUtils.get_pixels_in_line(data[0], data[1]) + for pixel in pixels: + if pixel in action_data.undo.cells or canvas.get_pixel_v(pixel) == null or canvas.is_alpha_locked(): + continue + action_data.undo.colors.append(canvas.get_pixel_v(pixel)) + action_data.undo.cells.append(pixel) + canvas.set_pixel_v(pixel, data[2]) + + action_data.redo.cells.append(pixel) + action_data.redo.colors.append(data[2]) + */ +} +void MultiLineAction::commit_action(PaintCanvas *canvas) { + /* + var cells = action_data.redo.cells + var colors = action_data.redo.colors + */ +} + +void MultiLineAction::undo_action(PaintCanvas *canvas) { + /* + var cells = action_data.undo.cells + var colors = action_data.undo.colors + for idx in range(cells.size()): + canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx]) + */ +} +void MultiLineAction::redo_action(PaintCanvas *canvas) { + /* + var cells = action_data.redo.cells + var colors = action_data.redo.colors + for idx in range(cells.size()): + canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx]) + */ +} + +MultiLineAction::MultiLineAction() { +} + +MultiLineAction::~MultiLineAction() { +} + +void MultiLineAction::_bind_methods() { +} diff --git a/modules/paint/actions/multiline_action.h b/modules/paint/actions/multiline_action.h new file mode 100644 index 000000000..3eeffc234 --- /dev/null +++ b/modules/paint/actions/multiline_action.h @@ -0,0 +1,51 @@ +#ifndef MULTI_LINE_ACTION_H +#define MULTI_LINE_ACTION_H + +/* +Copyright (c) 2019 Flairieve +Copyright (c) 2020-2022 cobrapitz +Copyright (c) 2022 Péter Magyar + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "paint_action.h" + +class PaintCanvas; + +class MultiLineAction : public PaintAction { + GDCLASS(MultiLineAction, PaintAction); + +public: + bool can_commit(); + + void do_action(PaintCanvas *canvas, Array data); + void commit_action(PaintCanvas *canvas); + + void undo_action(PaintCanvas *canvas); + void redo_action(PaintCanvas *canvas); + + MultiLineAction(); + ~MultiLineAction(); + +protected: + static void _bind_methods(); +}; + +#endif diff --git a/modules/paint/actions/Action.gd b/modules/paint/actions/paint_action.cpp similarity index 57% rename from modules/paint/actions/Action.gd rename to modules/paint/actions/paint_action.cpp index 97292c207..6badcc031 100644 --- a/modules/paint/actions/Action.gd +++ b/modules/paint/actions/paint_action.cpp @@ -1,91 +1,115 @@ -extends Node -class_name GEAction +/* +Copyright (c) 2019 Flairieve +Copyright (c) 2020-2022 cobrapitz +Copyright (c) 2022 Péter Magyar +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: -var action_data = {} +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ -func _init(): - action_data["redo"] = {} - action_data["undo"] = {} - action_data["preview"] = {} +#include "paint_action.h" - -func do_action(canvas, data: Array): +void PaintAction::do_action(PaintCanvas *canvas, Array data) { + /* if not "cells" in action_data.redo: action_data.redo["cells"] = [] action_data.redo["colors"] = [] - + if not "cells" in action_data.undo: action_data.undo["cells"] = [] action_data.undo["colors"] = [] - + if not "cells" in action_data.preview: action_data.preview["cells"] = [] action_data.preview["colors"] = [] - + if not "layer" in action_data: action_data["layer"] = canvas.active_layer - - -func commit_action(canvas): + */ +} +void PaintAction::commit_action(PaintCanvas *canvas) { + /* print("NO IMPL commit_action ") return [] + */ +} - -func undo_action(canvas): +void PaintAction::undo_action(PaintCanvas *canvas) { + /* print("NO IMPL undo_action ") - - -func redo_action(canvas): + */ +} +void PaintAction::redo_action(PaintCanvas *canvas) { + /* print("NO IMPL redo_action ") - - -func can_commit() -> bool: + */ +} +bool PaintAction::can_commit() { + /* return not action_data.redo.empty() + */ +} - -func get_x_sym_points(canvas_width, pixel): +Array PaintAction::get_x_sym_points(int canvas_width, Vector2i pixel) { + /* var p = int(canvas_width - pixel.x) var all_points = [pixel, Vector2(p-1, pixel.y)] - + var points :Array = [] for point in all_points: if point in points: continue points.append(point) return points - - -func get_y_sym_points(canvas_height, pixel): + */ +} +Array PaintAction::get_y_sym_points(int canvas_height, Vector2i pixel) { + /* var p = int(canvas_height - pixel.y) var all_points = [pixel, Vector2(pixel.x, p-1)] - + var points :Array = [] for point in all_points: if point in points: continue points.append(point) return points - - -func get_xy_sym_points(canvas_width, canvas_height, pixel): + */ +} +Array PaintAction::get_xy_sym_points(int canvas_width, int canvas_height, Vector2i pixel) { + /* var all_points = [] var xpoints = get_x_sym_points(canvas_width, pixel) - + all_points += get_y_sym_points(canvas_height, xpoints[0]) all_points += get_y_sym_points(canvas_height, xpoints[1]) - + var points :Array = [] for point in all_points: if point in points: continue points.append(point) - + return points - - -func get_points(canvas, pixel): + */ +} +Array PaintAction::get_points(PaintCanvas *canvas, Vector2i pixel) { + /* var points = [] if canvas.symmetry_x and canvas.symmetry_y: var sym_points = get_xy_sym_points(canvas.canvas_width, canvas.canvas_height, pixel) @@ -117,7 +141,23 @@ func get_points(canvas, pixel): if canvas.is_alpha_locked() and canvas.get_pixel_v(pixel) == Color.transparent: return [] points.append(pixel) - + return points + */ +} +PaintAction::PaintAction() { + /* + action_data["redo"] = {} + action_data["undo"] = {} + action_data["preview"] = {} + + */ +} + +PaintAction::~PaintAction() { +} + +void PaintAction::_bind_methods() { +} diff --git a/modules/paint/actions/paint_action.h b/modules/paint/actions/paint_action.h new file mode 100644 index 000000000..3b74bcd3a --- /dev/null +++ b/modules/paint/actions/paint_action.h @@ -0,0 +1,64 @@ +#ifndef PAINT_ACTIONS_H +#define PAINT_ACTIONS_H + +/* +Copyright (c) 2019 Flairieve +Copyright (c) 2020-2022 cobrapitz +Copyright (c) 2022 Péter Magyar + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "core/reference.h" + +#include "core/pool_vector.h" +#include "core/variant.h" +#include "core/array.h" +#include "core/math/vector2i.h" + +class PaintCanvas; + +//extends Node (this should probably not be a node) +//class_name GEAction +class PaintAction : public Reference { + GDCLASS(PaintAction, Reference); + +public: + virtual void do_action(PaintCanvas *canvas, Array data); + virtual void commit_action(PaintCanvas *canvas); + + virtual void undo_action(PaintCanvas *canvas); + virtual void redo_action(PaintCanvas *canvas); + virtual bool can_commit(); + + virtual Array get_x_sym_points(int canvas_width, Vector2i pixel); + virtual Array get_y_sym_points(int canvas_height, Vector2i pixel); + virtual Array get_xy_sym_points(int canvas_width, int canvas_height, Vector2i pixel); + virtual Array get_points(PaintCanvas *canvas, Vector2i pixel); + + PaintAction(); + ~PaintAction(); + + //var action_data = {} + +protected: + static void _bind_methods(); +}; + +#endif diff --git a/modules/paint/actions/paste_cut_action.cpp b/modules/paint/actions/paste_cut_action.cpp new file mode 100644 index 000000000..c04468a05 --- /dev/null +++ b/modules/paint/actions/paste_cut_action.cpp @@ -0,0 +1,93 @@ +/* +Copyright (c) 2019 Flairieve +Copyright (c) 2020-2022 cobrapitz +Copyright (c) 2022 Péter Magyar + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "paste_cut_action.h" + +//data[2] = selection_pos +//data[3] = selection_color +//data[4] = cut pos +//data[5] = cut size +void PasteCutAction::do_action(PaintCanvas *canvas, Array data) { + /* + .do_action(canvas, data) + + for pixel_pos in GEUtils.get_pixels_in_line(data[0], data[1]): + for idx in range(data[2].size()): + var pixel = data[2][idx] + var color = data[3][idx] + pixel -= data[4] + data[5] / 2 + pixel += pixel_pos + + if canvas.get_pixel_v(pixel) == null: + continue + + if canvas.is_alpha_locked() and canvas.get_pixel_v(pixel) == Color.transparent: + continue + + var found = action_data.redo.cells.find(pixel) + if found == -1: + action_data.redo.cells.append(pixel) + action_data.redo.colors.append(color) + else: + action_data.redo.colors[found] = color + + found = action_data.undo.cells.find(pixel) + if found == -1: + action_data.undo.colors.append(canvas.get_pixel_v(pixel)) + action_data.undo.cells.append(pixel) + + canvas.set_pixel_v(pixel, color) + */ +} +void PasteCutAction::commit_action(PaintCanvas *canvas) { + /* + canvas.clear_preview_layer() + */ +} + +void PasteCutAction::undo_action(PaintCanvas *canvas) { + /* + var cells = action_data.undo.cells + var colors = action_data.undo.colors + for idx in range(cells.size()): + canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx]) + */ +} +void PasteCutAction::redo_action(PaintCanvas *canvas) { + /* + var cells = action_data.redo.cells + var colors = action_data.redo.colors + for idx in range(cells.size()): + canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx]) + */ +} + +PasteCutAction::PasteCutAction() { +} + +PasteCutAction::~PasteCutAction() { +} + +void PasteCutAction::_bind_methods() { +} diff --git a/modules/paint/actions/paste_cut_action.h b/modules/paint/actions/paste_cut_action.h new file mode 100644 index 000000000..f9f294623 --- /dev/null +++ b/modules/paint/actions/paste_cut_action.h @@ -0,0 +1,49 @@ +#ifndef PASTE_CUT_ACTION_H +#define PASTE_CUT_ACTION_H + +/* +Copyright (c) 2019 Flairieve +Copyright (c) 2020-2022 cobrapitz +Copyright (c) 2022 Péter Magyar + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "paint_action.h" + +class PaintCanvas; + +class PasteCutAction : public PaintAction { + GDCLASS(PasteCutAction, PaintAction); + +public: + void do_action(PaintCanvas *canvas, Array data); + void commit_action(PaintCanvas *canvas); + + void undo_action(PaintCanvas *canvas); + void redo_action(PaintCanvas *canvas); + + PasteCutAction(); + ~PasteCutAction(); + +protected: + static void _bind_methods(); +}; + +#endif diff --git a/modules/paint/actions/pencil_action.cpp b/modules/paint/actions/pencil_action.cpp new file mode 100644 index 000000000..10194c07f --- /dev/null +++ b/modules/paint/actions/pencil_action.cpp @@ -0,0 +1,80 @@ +/* +Copyright (c) 2019 Flairieve +Copyright (c) 2020-2022 cobrapitz +Copyright (c) 2022 Péter Magyar + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "pencil_action.h" + +void PencilAction::do_action(PaintCanvas *canvas, Array data) { + /* + .do_action(canvas, data) + + var pixels = GEUtils.get_pixels_in_line(data[0], data[1]) + for pixel in pixels: + for p in get_points(canvas, pixel): + _set_pixel(canvas, p, data[2]) + */ +} +void PencilAction::commit_action(PaintCanvas *canvas) { + /* + var cells = action_data.redo.cells + var colors = action_data.redo.colors + return [] + */ +} + +void PencilAction::undo_action(PaintCanvas *canvas) { + /* + var cells = action_data.undo.cells + var colors = action_data.undo.colors + for idx in range(cells.size()): + canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx]) + */ +} +void PencilAction::redo_action(PaintCanvas *canvas) { + /* + var cells = action_data.redo.cells + var colors = action_data.redo.colors + for idx in range(cells.size()): + canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx]) + */ +} + +void PencilAction::_set_pixel(PaintCanvas *canvas, Vector2i pixel, Color color) { + /* + action_data.undo.colors.append(canvas.get_pixel_v(pixel)) + action_data.undo.cells.append(pixel) + canvas.set_pixel_v(pixel, color) + + action_data.redo.cells.append(pixel) + action_data.redo.colors.append(color) + */ +} + +PencilAction::PencilAction() { +} + +PencilAction::~PencilAction() { +} + +void PencilAction::_bind_methods() { +} diff --git a/modules/paint/actions/pencil_action.h b/modules/paint/actions/pencil_action.h new file mode 100644 index 000000000..88d433ce3 --- /dev/null +++ b/modules/paint/actions/pencil_action.h @@ -0,0 +1,51 @@ +#ifndef PENCIL_ACTION_H +#define PENCIL_ACTION_H + +/* +Copyright (c) 2019 Flairieve +Copyright (c) 2020-2022 cobrapitz +Copyright (c) 2022 Péter Magyar + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "paint_action.h" + +class PaintCanvas; + +class PencilAction : public PaintAction { + GDCLASS(PencilAction, PaintAction); + +public: + void do_action(PaintCanvas *canvas, Array data); + void commit_action(PaintCanvas *canvas); + + void undo_action(PaintCanvas *canvas); + void redo_action(PaintCanvas *canvas); + + void _set_pixel(PaintCanvas *canvas, Vector2i pixel, Color color); + + PencilAction(); + ~PencilAction(); + +protected: + static void _bind_methods(); +}; + +#endif diff --git a/modules/paint/actions/rainbow_action.cpp b/modules/paint/actions/rainbow_action.cpp new file mode 100644 index 000000000..28cf72dff --- /dev/null +++ b/modules/paint/actions/rainbow_action.cpp @@ -0,0 +1,94 @@ +/* +Copyright (c) 2019 Flairieve +Copyright (c) 2020-2022 cobrapitz +Copyright (c) 2022 Péter Magyar + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "rainbow_action.h" + +void RainbowAction::do_action(PaintCanvas *canvas, Array data) { + /* + .do_action(canvas, data) + + var pixels = GEUtils.get_pixels_in_line(data[0], data[1]) + for pixel in pixels: + if canvas.get_pixel_v(pixel) == null: + continue + + if canvas.is_alpha_locked() and canvas.get_pixel_v(pixel) == Color.transparent: + continue + + if pixel in action_data.undo.cells: + var color = GEUtils.random_color() + canvas.set_pixel_v(pixel, color) + + var idx = action_data.redo.cells.find(pixel) + action_data.redo.cells.remove(idx) + action_data.redo.colors.remove(idx) + + action_data.redo.cells.append(pixel) + action_data.redo.colors.append(color) + continue + + action_data.undo.colors.append(canvas.get_pixel_v(pixel)) + action_data.undo.cells.append(pixel) + + var color = GEUtils.random_color() + canvas.set_pixel_v(pixel, color) + + action_data.redo.cells.append(pixel) + action_data.redo.colors.append(color) + */ +} +void RainbowAction::commit_action(PaintCanvas *canvas) { + /* + var cells = action_data.undo.cells + var colors = action_data.undo.colors + for idx in range(cells.size()): + canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx]) + */ +} + +void RainbowAction::undo_action(PaintCanvas *canvas) { + /* + var cells = action_data.undo.cells + var colors = action_data.undo.colors + for idx in range(cells.size()): + canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx]) + */ +} +void RainbowAction::redo_action(PaintCanvas *canvas) { + /* + var cells = action_data.redo.cells + var colors = action_data.redo.colors + for idx in range(cells.size()): + canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx]) + */ +} + +RainbowAction::RainbowAction() { +} + +RainbowAction::~RainbowAction() { +} + +void RainbowAction::_bind_methods() { +} diff --git a/modules/paint/actions/rainbow_action.h b/modules/paint/actions/rainbow_action.h new file mode 100644 index 000000000..5a70f525d --- /dev/null +++ b/modules/paint/actions/rainbow_action.h @@ -0,0 +1,49 @@ +#ifndef RAINBOW_ACTION_H +#define RAINBOW_ACTION_H + +/* +Copyright (c) 2019 Flairieve +Copyright (c) 2020-2022 cobrapitz +Copyright (c) 2022 Péter Magyar + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "paint_action.h" + +class PaintCanvas; + +class RainbowAction : public PaintAction { + GDCLASS(RainbowAction, PaintAction); + +public: + void do_action(PaintCanvas *canvas, Array data); + void commit_action(PaintCanvas *canvas); + + void undo_action(PaintCanvas *canvas); + void redo_action(PaintCanvas *canvas); + + RainbowAction(); + ~RainbowAction(); + +protected: + static void _bind_methods(); +}; + +#endif diff --git a/modules/paint/actions/Rect.gd b/modules/paint/actions/rect_action.cpp similarity index 52% rename from modules/paint/actions/Rect.gd rename to modules/paint/actions/rect_action.cpp index 770e28bc0..be8a36f87 100644 --- a/modules/paint/actions/Rect.gd +++ b/modules/paint/actions/rect_action.cpp @@ -1,69 +1,101 @@ -extends GEAction -class_name GERect +/* +Copyright (c) 2019 Flairieve +Copyright (c) 2020-2022 cobrapitz +Copyright (c) 2022 Péter Magyar +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: -var mouse_start_pos = null +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. -func do_action(canvas, data: Array): +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "rect_action.h" + +void RectAction::do_action(PaintCanvas *canvas, Array data) { + /* .do_action(canvas, data) - + if mouse_start_pos == null: mouse_start_pos = data[0] #print("init:", mouse_start_pos) - - + + action_data.undo.cells.clear() action_data.undo.colors.clear() action_data.preview.cells.clear() action_data.preview.colors.clear() canvas.clear_preview_layer() - + var p = mouse_start_pos var s = data[0] - mouse_start_pos var pixels = GEUtils.get_pixels_in_line(p, p + Vector2(s.x, 0)) pixels += GEUtils.get_pixels_in_line(p, p + Vector2(0, s.y)) pixels += GEUtils.get_pixels_in_line(p + s, p + s + Vector2(0, -s.y)) pixels += GEUtils.get_pixels_in_line(p + s, p + s + Vector2(-s.x, 0)) - + for pixel in pixels: if canvas.get_pixel_v(pixel) == null: continue - + if canvas.is_alpha_locked() and canvas.get_pixel_v(pixel) == Color.transparent: continue - + canvas.set_preview_pixel_v(pixel, data[2]) action_data.undo.cells.append(pixel) action_data.undo.colors.append(canvas.get_pixel_v(pixel)) action_data.preview.cells.append(pixel) action_data.preview.colors.append(data[2]) - - -func commit_action(canvas): + */ +} +void RectAction::commit_action(PaintCanvas *canvas) { + /* canvas.clear_preview_layer() var cells = action_data.preview.cells var colors = action_data.preview.colors for idx in range(cells.size()): canvas.set_pixel_v(cells[idx], colors[idx]) - + action_data.redo.cells.append(cells[idx]) action_data.redo.colors.append(colors[idx]) mouse_start_pos = null - return [] + */ +} - -func undo_action(canvas): +void RectAction::undo_action(PaintCanvas *canvas) { + /* var cells = action_data.undo.cells var colors = action_data.undo.colors for idx in range(cells.size()): canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx]) - - -func redo_action(canvas): + */ +} +void RectAction::redo_action(PaintCanvas *canvas) { + /* var cells = action_data.redo.cells var colors = action_data.redo.colors for idx in range(cells.size()): canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx]) + */ +} +RectAction::RectAction() { +} +RectAction::~RectAction() { +} +void RectAction::_bind_methods() { +} diff --git a/modules/paint/actions/rect_action.h b/modules/paint/actions/rect_action.h new file mode 100644 index 000000000..ecfc01efa --- /dev/null +++ b/modules/paint/actions/rect_action.h @@ -0,0 +1,51 @@ +#ifndef RECT_ACTION_H +#define RECT_ACTION_H + +/* +Copyright (c) 2019 Flairieve +Copyright (c) 2020-2022 cobrapitz +Copyright (c) 2022 Péter Magyar + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "paint_action.h" + +class PaintCanvas; + +class RectAction : public PaintAction { + GDCLASS(RectAction, PaintAction); + +public: + void do_action(PaintCanvas *canvas, Array data); + void commit_action(PaintCanvas *canvas); + + void undo_action(PaintCanvas *canvas); + void redo_action(PaintCanvas *canvas); + + RectAction(); + ~RectAction(); + + //var mouse_start_pos = null + +protected: + static void _bind_methods(); +}; + +#endif diff --git a/modules/paint/assets/BrushCircle.png.import b/modules/paint/assets/BrushCircle.png.import deleted file mode 100644 index 6c0c6979f..000000000 --- a/modules/paint/assets/BrushCircle.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/BrushCircle.png-dd250909fee7964ffc38f7e4fcfe9c07.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://addons/Godoxel/assets/BrushCircle.png" -dest_files=[ "res://.import/BrushCircle.png-dd250909fee7964ffc38f7e4fcfe9c07.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 diff --git a/modules/paint/assets/BrushCircle_Hovered.png.import b/modules/paint/assets/BrushCircle_Hovered.png.import deleted file mode 100644 index 262712baf..000000000 --- a/modules/paint/assets/BrushCircle_Hovered.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/BrushCircle_Hovered.png-ae1a4d835af51e8a293b71d6a241b71c.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://addons/Godoxel/assets/BrushCircle_Hovered.png" -dest_files=[ "res://.import/BrushCircle_Hovered.png-ae1a4d835af51e8a293b71d6a241b71c.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 diff --git a/modules/paint/assets/BrushHLine.png.import b/modules/paint/assets/BrushHLine.png.import deleted file mode 100644 index dc4eaf137..000000000 --- a/modules/paint/assets/BrushHLine.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/BrushHLine.png-9182ec8ac804af16d356bf911782e299.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://addons/Godoxel/assets/BrushHLine.png" -dest_files=[ "res://.import/BrushHLine.png-9182ec8ac804af16d356bf911782e299.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 diff --git a/modules/paint/assets/BrushHLine_Hovered.png.import b/modules/paint/assets/BrushHLine_Hovered.png.import deleted file mode 100644 index a5a460b56..000000000 --- a/modules/paint/assets/BrushHLine_Hovered.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/BrushHLine_Hovered.png-e51d5f3c1628c510a225057f3ed60d5a.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://addons/Godoxel/assets/BrushHLine_Hovered.png" -dest_files=[ "res://.import/BrushHLine_Hovered.png-e51d5f3c1628c510a225057f3ed60d5a.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 diff --git a/modules/paint/assets/BrushRect.png.import b/modules/paint/assets/BrushRect.png.import deleted file mode 100644 index 73e3317d6..000000000 --- a/modules/paint/assets/BrushRect.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/BrushRect.png-2b2d0ae4889c1fbc5c7bee7ae5515663.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://addons/Godoxel/assets/BrushRect.png" -dest_files=[ "res://.import/BrushRect.png-2b2d0ae4889c1fbc5c7bee7ae5515663.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 diff --git a/modules/paint/assets/BrushRect_Hovered.png.import b/modules/paint/assets/BrushRect_Hovered.png.import deleted file mode 100644 index df4596ca4..000000000 --- a/modules/paint/assets/BrushRect_Hovered.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/BrushRect_Hovered.png-b09066b673d6082ce887a03a19f17977.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://addons/Godoxel/assets/BrushRect_Hovered.png" -dest_files=[ "res://.import/BrushRect_Hovered.png-b09066b673d6082ce887a03a19f17977.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 diff --git a/modules/paint/assets/BrushVLine.png.import b/modules/paint/assets/BrushVLine.png.import deleted file mode 100644 index 6eaf85a11..000000000 --- a/modules/paint/assets/BrushVLine.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/BrushVLine.png-022220d888fe2fe2f8a081bcca62b4b2.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://addons/Godoxel/assets/BrushVLine.png" -dest_files=[ "res://.import/BrushVLine.png-022220d888fe2fe2f8a081bcca62b4b2.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 diff --git a/modules/paint/assets/BrushVLine_Hovered.png.import b/modules/paint/assets/BrushVLine_Hovered.png.import deleted file mode 100644 index d1ec26166..000000000 --- a/modules/paint/assets/BrushVLine_Hovered.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/BrushVLine_Hovered.png-104e29757699756f1b44bd32a622df2c.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://addons/Godoxel/assets/BrushVLine_Hovered.png" -dest_files=[ "res://.import/BrushVLine_Hovered.png-104e29757699756f1b44bd32a622df2c.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 diff --git a/modules/paint/assets/Godoxel_Preview.png.import b/modules/paint/assets/Godoxel_Preview.png.import deleted file mode 100644 index 53fe20819..000000000 --- a/modules/paint/assets/Godoxel_Preview.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/Godoxel_Preview.png-e30103581d3fc0ed2a2c92cdf72b5c70.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://addons/Godoxel/assets/Godoxel_Preview.png" -dest_files=[ "res://.import/Godoxel_Preview.png-e30103581d3fc0ed2a2c92cdf72b5c70.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 diff --git a/modules/paint/assets/arrow_down.png.import b/modules/paint/assets/arrow_down.png.import deleted file mode 100644 index b9e87b6e6..000000000 --- a/modules/paint/assets/arrow_down.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/arrow_down.png-d2bd93428c0bc172a28a43c55aac576e.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://addons/Godoxel/assets/arrow_down.png" -dest_files=[ "res://.import/arrow_down.png-d2bd93428c0bc172a28a43c55aac576e.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 diff --git a/modules/paint/assets/arrow_up.png.import b/modules/paint/assets/arrow_up.png.import deleted file mode 100644 index 4ea01b43b..000000000 --- a/modules/paint/assets/arrow_up.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/arrow_up.png-2598e148d1b795a628ce80a4fd5cf401.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://addons/Godoxel/assets/arrow_up.png" -dest_files=[ "res://.import/arrow_up.png-2598e148d1b795a628ce80a4fd5cf401.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 diff --git a/modules/paint/assets/bitstream_vera_sans_font_6016/COPYRIGHT.TXT b/modules/paint/assets/bitstream_vera_sans_font_6016/COPYRIGHT.TXT deleted file mode 100644 index e651be1c4..000000000 --- a/modules/paint/assets/bitstream_vera_sans_font_6016/COPYRIGHT.TXT +++ /dev/null @@ -1,124 +0,0 @@ -Bitstream Vera Fonts Copyright - -The fonts have a generous copyright, allowing derivative works (as -long as "Bitstream" or "Vera" are not in the names), and full -redistribution (so long as they are not *sold* by themselves). They -can be be bundled, redistributed and sold with any software. - -The fonts are distributed under the following copyright: - -Copyright -========= - -Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream -Vera is a trademark of Bitstream, Inc. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of the fonts accompanying this license ("Fonts") and associated -documentation files (the "Font Software"), to reproduce and distribute -the Font Software, including without limitation the rights to use, -copy, merge, publish, distribute, and/or sell copies of the Font -Software, and to permit persons to whom the Font Software is furnished -to do so, subject to the following conditions: - -The above copyright and trademark notices and this permission notice -shall be included in all copies of one or more of the Font Software -typefaces. - -The Font Software may be modified, altered, or added to, and in -particular the designs of glyphs or characters in the Fonts may be -modified and additional glyphs or characters may be added to the -Fonts, only if the fonts are renamed to names not containing either -the words "Bitstream" or the word "Vera". - -This License becomes null and void to the extent applicable to Fonts -or Font Software that has been modified and is distributed under the -"Bitstream Vera" names. - -The Font Software may be sold as part of a larger software package but -no copy of one or more of the Font Software typefaces may be sold by -itself. - -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL -BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR -OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, -OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR -OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT -SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. - -Except as contained in this notice, the names of Gnome, the Gnome -Foundation, and Bitstream Inc., shall not be used in advertising or -otherwise to promote the sale, use or other dealings in this Font -Software without prior written authorization from the Gnome Foundation -or Bitstream Inc., respectively. For further information, contact: -fonts at gnome dot org. - -Copyright FAQ -============= - - 1. I don't understand the resale restriction... What gives? - - Bitstream is giving away these fonts, but wishes to ensure its - competitors can't just drop the fonts as is into a font sale system - and sell them as is. It seems fair that if Bitstream can't make money - from the Bitstream Vera fonts, their competitors should not be able to - do so either. You can sell the fonts as part of any software package, - however. - - 2. I want to package these fonts separately for distribution and - sale as part of a larger software package or system. Can I do so? - - Yes. A RPM or Debian package is a "larger software package" to begin - with, and you aren't selling them independently by themselves. - See 1. above. - - 3. Are derivative works allowed? - Yes! - - 4. Can I change or add to the font(s)? - Yes, but you must change the name(s) of the font(s). - - 5. Under what terms are derivative works allowed? - - You must change the name(s) of the fonts. This is to ensure the - quality of the fonts, both to protect Bitstream and Gnome. We want to - ensure that if an application has opened a font specifically of these - names, it gets what it expects (though of course, using fontconfig, - substitutions could still could have occurred during font - opening). You must include the Bitstream copyright. Additional - copyrights can be added, as per copyright law. Happy Font Hacking! - - 6. If I have improvements for Bitstream Vera, is it possible they might get - adopted in future versions? - - Yes. The contract between the Gnome Foundation and Bitstream has - provisions for working with Bitstream to ensure quality additions to - the Bitstream Vera font family. Please contact us if you have such - additions. Note, that in general, we will want such additions for the - entire family, not just a single font, and that you'll have to keep - both Gnome and Jim Lyles, Vera's designer, happy! To make sense to add - glyphs to the font, they must be stylistically in keeping with Vera's - design. Vera cannot become a "ransom note" font. Jim Lyles will be - providing a document describing the design elements used in Vera, as a - guide and aid for people interested in contributing to Vera. - - 7. I want to sell a software package that uses these fonts: Can I do so? - - Sure. Bundle the fonts with your software and sell your software - with the fonts. That is the intent of the copyright. - - 8. If applications have built the names "Bitstream Vera" into them, - can I override this somehow to use fonts of my choosing? - - This depends on exact details of the software. Most open source - systems and software (e.g., Gnome, KDE, etc.) are now converting to - use fontconfig (see www.fontconfig.org) to handle font configuration, - selection and substitution; it has provisions for overriding font - names and subsituting alternatives. An example is provided by the - supplied local.conf file, which chooses the family Bitstream Vera for - "sans", "serif" and "monospace". Other software (e.g., the XFree86 - core server) has other mechanisms for font substitution. - diff --git a/modules/paint/assets/bitstream_vera_sans_font_6016/README.TXT b/modules/paint/assets/bitstream_vera_sans_font_6016/README.TXT deleted file mode 100644 index 0f71795a7..000000000 --- a/modules/paint/assets/bitstream_vera_sans_font_6016/README.TXT +++ /dev/null @@ -1,11 +0,0 @@ -Contained herin is the Bitstream Vera font family. - -The Copyright information is found in the COPYRIGHT.TXT file (along -with being incoporated into the fonts themselves). - -The releases notes are found in the file "RELEASENOTES.TXT". - -We hope you enjoy Vera! - - Bitstream, Inc. - The Gnome Project diff --git a/modules/paint/assets/bitstream_vera_sans_font_6016/RELEASENOTES.TXT b/modules/paint/assets/bitstream_vera_sans_font_6016/RELEASENOTES.TXT deleted file mode 100644 index 270bc0d40..000000000 --- a/modules/paint/assets/bitstream_vera_sans_font_6016/RELEASENOTES.TXT +++ /dev/null @@ -1,162 +0,0 @@ -Bitstream Vera Fonts - April 16, 2003 -===================================== - -The version number of these fonts is 1.10 to distinguish them from the -beta test fonts. - -Note that the Vera copyright is incorporated in the fonts themselves. -The License field in the fonts contains the copyright license as it -appears below. The TrueType copyright field is not large enough to -contain the full license, so the license is incorporated (as you might -think if you thought about it) into the license field, which -unfortunately can be obscure to find. (In pfaedit, see: Element->Font -Info->TTFNames->License). - -Our apologies for it taking longer to complete the fonts than planned. -Beta testers requested a tighter line spacing (less leading) and Jim -Lyles redesigned Vera's accents to bring its line spacing to more -typical of other fonts. This took additional time and effort. Our -thanks to Jim for this effort above and beyond the call of duty. - -There are four monospace and sans faces (normal, oblique, bold, bold -oblique) and two serif faces (normal and bold). Fontconfig/Xft2 (see -www.fontconfig.org) can artificially oblique the serif faces for you: -this loses hinting and distorts the faces slightly, but is visibly -different than normal and bold, and reasonably pleasing. - -On systems with fontconfig 2.0 or 2.1 installed, making your sans, -serif and monospace fonts default to these fonts is very easy. Just -drop the file local.conf into your /etc/fonts directory. This will -make the Bitstream fonts your default fonts for all applications using -fontconfig (if sans, serif, or monospace names are used, as they often -are as default values in many desktops). The XML in local.conf may -need modification to enable subpixel decimation, if appropriate, -however, the commented out phrase does so for XFree86 4.3, in the case -that the server does not have sufficient information to identify the -use of a flat panel. Fontconfig 2.2 adds Vera to the list of font -families and will, by default use it as the default sans, serif and -monospace fonts. - -During the testing of the final Vera fonts, we learned that screen -fonts in general are only typically hinted to work correctly at -integer pixel sizes. Vera is coded internally for integer sizes only. -We need to investigate further to see if there are commonly used fonts -that are hinted to be rounded but are not rounded to integer sizes due -to oversights in their coding. - -Most fonts work best at 8 pixels and below if anti-aliased only, as -the amount of work required to hint well at smaller and smaller sizes -becomes astronomical. GASP tables are typically used to control -whether hinting is used or not, but Freetype/Xft does not currently -support GASP tables (which are present in Vera). - -To mitigate this problem, both for Vera and other fonts, there will be -(very shortly) a new fontconfig 2.2 release that will, by default not -apply hints if the size is below 8 pixels. if you should have a font -that in fact has been hinted more agressively, you can use fontconfig -to note this exception. We believe this should improve many hinted -fonts in addition to Vera, though implemeting GASP support is likely -the right long term solution. - -Font rendering in Gnome or KDE is the combination of algorithms in -Xft2 and Freetype, along with hinting in the fonts themselves. It is -vital to have sufficient information to disentangle problems that you -may observe. - -Note that having your font rendering system set up correctly is vital -to proper judgement of problems of the fonts: - - * Freetype may or may not be configured to in ways that may - implement execution of possibly patented (in some parts of the world) - TrueType hinting algorithms, particularly at small sizes. Best - results are obtained while using these algorithms. - - * The freetype autohinter (used when the possibly patented - algorithms are not used) continues to improve with each release. If - you are using the autohinter, please ensure you are using an up to - date version of freetype before reporting problems. - - * Please identify what version of freetype you are using in any - bug reports, and how your freetype is configured. - - * Make sure you are not using the freetype version included in - XFree86 4.3, as it has bugs that significantly degrade most fonts, - including Vera. if you build XFree86 4.3 from source yourself, you may - have installed this broken version without intending it (as I - did). Vera was verified with the recently released Freetype 2.1.4. On - many systems, 'ldd" can be used to see which freetype shared library - is actually being used. - - * Xft/X Render does not (yet) implement gamma correction. This - causes significant problems rendering white text on a black background - (causing partial pixels to be insufficiently shaded) if the gamma of - your monitor has not been compensated for, and minor problems with - black text on a while background. The program "xgamma" can be used to - set a gamma correction value in the X server's color pallette. Most - monitors have a gamma near 2. - - * Note that the Vera family uses minimal delta hinting. Your - results on other systems when not used anti-aliased may not be - entirely satisfying. We are primarily interested in reports of - problems on open source systems implementing Xft2/fontconfig/freetype - (which implements antialiasing and hinting adjustements, and - sophisticated subpixel decimation on flatpanels). Also, the - algorithms used by Xft2 adjust the hints to integer widths and the - results are crisper on open source systems than on Windows or - MacIntosh. - - * Your fontconfig may (probably does) predate the release of - fontconfig 2.2, and you may see artifacts not present when the font is - used at very small sizes with hinting enabled. "vc-list -V" can be - used to see what version you have installed. - -We believe and hope that these fonts will resolve the problems -reported during beta test. The largest change is the reduction of -leading (interline spacing), which had annoyed a number of people, and -reduced Vera's utility for some applcations. The Vera monospace font -should also now make '0' and 'O' and '1' and 'l' more clearly -distinguishable. - -The version of these fonts is version 1.10. Fontconfig should be -choosing the new version of the fonts if both the released fonts and -beta test fonts are installed (though please discard them: they have -names of form tt20[1-12]gn.ttf). Note that older versions of -fontconfig sometimes did not rebuild their cache correctly when new -fonts are installed: please upgrade to fontconfig 2.2. "fc-cache -f" -can be used to force rebuilding fontconfig's cache files. - -If you note problems, please send them to fonts at gnome dot org, with -exactly which face and size and unicode point you observe the problem -at. The xfd utility from XFree86 CVS may be useful for this (e.g. "xfd --fa sans"). A possibly more useful program to examine fonts at a -variety of sizes is the "waterfall" program found in Keith Packard's -CVS. - - $ cvs -d :pserver:anoncvs@keithp.com:/local/src/CVS login - Logging in to :pserver:anoncvs@keithp.com:2401/local/src/CVS - CVS password: - $ cvs -d :pserver:anoncvs@keithp.com:/local/src/CVS co waterfall - $ cd waterfall - $ xmkmf -a - $ make - # make install - # make install.man - -Again, please make sure you are running an up-to-date freetype, and -that you are only examining integer sizes. - -Reporting Problems -================== - -Please send problem reports to fonts at gnome org, with the following -information: - - 1. Version of Freetype, Xft2 and fontconfig - 2. Whether TT hinting is being used, or the autohinter - 3. Application being used - 4. Character/Unicode code point that has problems (if applicable) - 5. Version of which operating system - 6. Please include a screenshot, when possible. - -Please check the fonts list archives before reporting problems to cut -down on duplication. diff --git a/modules/paint/assets/bitstream_vera_sans_font_6016/Vera.ttf b/modules/paint/assets/bitstream_vera_sans_font_6016/Vera.ttf deleted file mode 100644 index 58cd6b5e61eff273e920942e28041f8ddcf1e1b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65932 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

B-* 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

1$W7r@e0!HPu@g0mkJPQ3hhEb-G4zU50u9!$ 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 W_YF69v_ymE68(IXMraZLEdC#Jb*K;k diff --git a/modules/paint/assets/bitstream_vera_sans_font_6016/VeraBd.ttf b/modules/paint/assets/bitstream_vera_sans_font_6016/VeraBd.ttf deleted file mode 100644 index 51d6111d722981a86766cc99c53f1956e5c0a229..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58716 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 V!o5>kzlbDRJjU5v3Ujx#{eMf40U-bY diff --git a/modules/paint/assets/bitstream_vera_sans_font_6016/all-free-download.com.url b/modules/paint/assets/bitstream_vera_sans_font_6016/all-free-download.com.url deleted file mode 100644 index be505ef8a..000000000 --- a/modules/paint/assets/bitstream_vera_sans_font_6016/all-free-download.com.url +++ /dev/null @@ -1,8 +0,0 @@ -[InternetShortcut] -URL=http://www.all-free-download.com/ -IDList= -HotKey=0 -IconFile=C:\WINDOWS\system32\SHELL32.dll -IconIndex=23 -[{000214A0-0000-0000-C000-000000000046}] -Prop3=19,2 diff --git a/modules/paint/assets/grid.png.import b/modules/paint/assets/grid.png.import deleted file mode 100644 index eac50ac3c..000000000 --- a/modules/paint/assets/grid.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/grid.png-e3d637acacdb891e09f422df261dbd1e.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://addons/Godoxel/assets/grid.png" -dest_files=[ "res://.import/grid.png-e3d637acacdb891e09f422df261dbd1e.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 diff --git a/modules/paint/assets/lock_layer.png.import b/modules/paint/assets/lock_layer.png.import deleted file mode 100644 index 5fd8060be..000000000 --- a/modules/paint/assets/lock_layer.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/lock_layer.png-076954b389746de9e13c853ed5d9ba59.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://addons/Godoxel/assets/lock_layer.png" -dest_files=[ "res://.import/lock_layer.png-076954b389746de9e13c853ed5d9ba59.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 diff --git a/modules/paint/assets/lock_layer_1.png.import b/modules/paint/assets/lock_layer_1.png.import deleted file mode 100644 index e3cb23a8b..000000000 --- a/modules/paint/assets/lock_layer_1.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/lock_layer_1.png-4848d5f2cd0f48c68b880712b6b38776.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://addons/Godoxel/assets/lock_layer_1.png" -dest_files=[ "res://.import/lock_layer_1.png-4848d5f2cd0f48c68b880712b6b38776.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 diff --git a/modules/paint/assets/minidotta.png.import b/modules/paint/assets/minidotta.png.import deleted file mode 100644 index 462757ffa..000000000 --- a/modules/paint/assets/minidotta.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/minidotta.png-adac81df344972ef82e2499656aa288e.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://addons/Godoxel/assets/minidotta.png" -dest_files=[ "res://.import/minidotta.png-adac81df344972ef82e2499656aa288e.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 diff --git a/modules/paint/assets/minidotta_invis.png.import b/modules/paint/assets/minidotta_invis.png.import deleted file mode 100644 index 607a755cc..000000000 --- a/modules/paint/assets/minidotta_invis.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/minidotta_invis.png-5232a113bb226997ae55212b2aa90bd4.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://addons/Godoxel/assets/minidotta_invis.png" -dest_files=[ "res://.import/minidotta_invis.png-5232a113bb226997ae55212b2aa90bd4.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 diff --git a/modules/paint/assets/unlock_layer.png.import b/modules/paint/assets/unlock_layer.png.import deleted file mode 100644 index 17d2172da..000000000 --- a/modules/paint/assets/unlock_layer.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/unlock_layer.png-ae7c97a04fb889522c7c466fdc9dd8f6.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://addons/Godoxel/assets/unlock_layer.png" -dest_files=[ "res://.import/unlock_layer.png-ae7c97a04fb889522c7c466fdc9dd8f6.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=true -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=true -svg/scale=1.0 diff --git a/modules/paint/dialogs/paint_save_file_dialog.cpp b/modules/paint/dialogs/paint_save_file_dialog.cpp new file mode 100644 index 000000000..f5178b25b --- /dev/null +++ b/modules/paint/dialogs/paint_save_file_dialog.cpp @@ -0,0 +1,91 @@ +/* +Copyright (c) 2019 Flairieve +Copyright (c) 2020-2022 cobrapitz +Copyright (c) 2022 Péter Magyar + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "paint_save_file_dialog.h" + +void PaintSaveFileDialog::_ready() { + /* + # warning-ignore:return_value_discarded + get_line_edit().connect("text_entered", self, "_on_LineEdit_text_entered") + invalidate() + clear_filters() + add_filter("*.png ; PNG Images") + */ +} +void PaintSaveFileDialog::_on_SaveFileDialog_file_selected(String path) { + /* + #print("selected file: ", path) + file_path = path + save_file() + */ +} +void PaintSaveFileDialog::save_file() { + /* + var image = Image.new() + var canvas = get_parent().paint_canvas + image.create(canvas.canvas_width, canvas.canvas_height, true, Image.FORMAT_RGBA8) + image.lock() + + for layer in canvas.layers: + var idx = 0 + if not layer.visible: + continue + for x in range(layer.layer_width): + for y in range(layer.layer_height): + var color = layer.get_pixel(x, y) + var image_color = image.get_pixel(x, y) + + if color.a != 0: + image.set_pixel(x, y, image_color.blend(color)) + else: + image.set_pixel(x, y, color) + image.unlock() + + var dir = Directory.new() + if dir.file_exists(file_path): + dir.remove(file_path) + + image.save_png(file_path) + */ +} +void PaintSaveFileDialog::_on_SaveFileDialog_about_to_show() { + /* + invalidate() + */ +} +void PaintSaveFileDialog::_on_SaveFileDialog_visibility_changed() { + /* + invalidate() + */ +} + +PaintSaveFileDialog::PaintSaveFileDialog() { + //var file_path = "" +} + +PaintSaveFileDialog::~PaintSaveFileDialog() { +} + +void PaintSaveFileDialog::_bind_methods() { +} diff --git a/modules/paint/paint_save_file_dialog.h b/modules/paint/dialogs/paint_save_file_dialog.h similarity index 79% rename from modules/paint/paint_save_file_dialog.h rename to modules/paint/dialogs/paint_save_file_dialog.h index 410537ba3..cf83d8fb6 100644 --- a/modules/paint/paint_save_file_dialog.h +++ b/modules/paint/dialogs/paint_save_file_dialog.h @@ -25,17 +25,25 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#include "scene/gui/control.h" +#include "scene/gui/file_dialog.h" -class PaintSaveFileDialog : public Control { - GDCLASS(PaintSaveFileDialog, Control); +class PaintSaveFileDialog : public FileDialog { + GDCLASS(PaintSaveFileDialog, FileDialog); public: + void _ready(); + void _on_SaveFileDialog_file_selected(String path); + void save_file(); + void _on_SaveFileDialog_about_to_show(); + void _on_SaveFileDialog_visibility_changed(); + PaintSaveFileDialog(); ~PaintSaveFileDialog(); protected: static void _bind_methods(); + + //var file_path = "" }; #endif diff --git a/modules/paint/paint_canvas.cpp b/modules/paint/paint_canvas.cpp index e86e649d9..3dff03818 100644 --- a/modules/paint/paint_canvas.cpp +++ b/modules/paint/paint_canvas.cpp @@ -24,7 +24,494 @@ SOFTWARE. #include "paint_canvas.h" +void PaintCanvas::_enter_tree() { + /* + #------------------------------- + # Set nodes + #------------------------------- + canvas = find_node("Canvas") + grid = find_node("Grid") + big_grid = find_node("BigGrid") + canvas_layers = find_node("CanvasLayers") + + #------------------------------- + # setup layers and canvas + #------------------------------- + connect("mouse_entered", self, "_on_mouse_entered") + connect("mouse_exited", self, "_on_mouse_exited") + + #------------------------------- + # setup layers and canvas + #------------------------------- + #canvas_size = Vector2(int(rect_size.x / grid_size), int(rect_size.y / grid_size)) + #pixel_size = canvas_size + + active_layer = add_new_layer("Layer1") + preview_layer = add_new_layer("Preview") + tool_layer = add_new_layer("Tool") + + set_process(true) + */ +} +void PaintCanvas::_process(float delta) { + /* + if not is_visible_in_tree(): + return + var mouse_position = get_local_mouse_position() + var rect = Rect2(Vector2(0, 0), rect_size) + mouse_in_region = rect.has_point(mouse_position) + */ +} +void PaintCanvas::_draw() { + /* + for layer in layers: + layer.update_texture() + + preview_layer.update_texture() + tool_layer.update_texture() + */ +} + +void PaintCanvas::resize(int width, int height) { + /* + if width < 0: + width = 1 + if height < 0: + height = 1 + + set_canvas_width(width) + set_canvas_height(height) + + preview_layer.resize(width, height) + tool_layer.resize(width, height) + for layer in layers: + layer.resize(width, height) + */ +} +void PaintCanvas::set_pixel_size(int size) { + /* + pixel_size = size + set_grid_size(grid_size) + set_big_grid_size(big_grid_size) + set_canvas_width(canvas_width) + set_canvas_height(canvas_height) + */ +} +void PaintCanvas::set_grid_size(int size) { + /* + grid_size = size + if not find_node("Grid"): + return + find_node("Grid").size = size * pixel_size + */ +} +void PaintCanvas::set_big_grid_size(int size) { + /* + big_grid_size = size + if not find_node("BigGrid"): + return + find_node("BigGrid").size = size * pixel_size + */ +} +void PaintCanvas::set_canvas_width(int val) { + /* + canvas_width = val + rect_size.x = canvas_width * pixel_size + */ +} +void PaintCanvas::set_canvas_height(int val) { + /* + canvas_height = val + rect_size.y = canvas_height * pixel_size + */ +} +void PaintCanvas::toggle_alpha_locked(String layer_name) { + /* + var layer = find_layer_by_name(layer_name) + layer.toggle_alpha_locked() + */ +} +bool PaintCanvas::is_alpha_locked() { + /* + return active_layer.alpha_locked + */ +} +Rect2 PaintCanvas::get_content_margin() { + /* + var rect = Rect2(999999, 999999, -999999, -999999) + + preview_layer.image.get_used_rect() + for layer in layers: + + var r = layer.image.get_used_rect() + + if r.position.x < rect.position.x: + rect.position.x = r.position.x + if r.position.y < rect.position.y: + rect.position.y = r.position.y + if r.size.x > rect.size.x: + rect.size.x = r.size.x + if r.size.y > rect.size.y: + rect.size.y = r.size.y + + return rect + */ +} +void PaintCanvas::crop_to_content() { + /* + var rect = get_content_margin() + + #print(rect) + + for layer in layers: + layer.image + +# set_canvas_width(rect.size.x) +# set_canvas_height(rect.size.x) + +# preview_layer.resize(width, height) +# tool_layer.resize(width, height) +# for layer in layers: +# layer.resize(width, height) + */ +} +Node *PaintCanvas::get_active_layer() { + /* + return active_layer + */ +} +Node *PaintCanvas::get_preview_layer() { + /* + return preview_layer + */ +} +void PaintCanvas::clear_active_layer() { + /* + active_layer.clear() + */ +} +void PaintCanvas::clear_preview_layer() { + /* + preview_layer.clear() + */ +} + +void PaintCanvas::clear_layer(String layer_name) { + /* + for layer in layers: + if layer.name == layer_name: + layer.clear() + break + */ +} +Node *PaintCanvas::remove_layer(String layer_name) { + /* + # change current layer if the active layer is removed + var del_layer = find_layer_by_name(layer_name) + del_layer.clear() + if del_layer == active_layer: + for layer in layers: + if layer == preview_layer or layer == active_layer or layer == tool_layer: + continue + active_layer = layer + break + layers.erase(del_layer) + return active_layer + */ +} +Node *PaintCanvas::add_new_layer(String layer_name) { + /* + for layer in layers: + if layer.name == layer_name: + return + var layer = GELayer.new() + layer.name = layer_name + + if layer_name == "Preview": + layer.create($PreviewLayer, canvas_width, canvas_height) + elif layer_name == "Tool": + layer.create($ToolPreviewLayer, canvas_width, canvas_height) + else: + var texture_rect = TextureRect.new() + texture_rect.name = layer_name + canvas_layers.add_child(texture_rect, true) + texture_rect.expand = true + texture_rect.anchor_right = 1 + texture_rect.anchor_bottom = 1 + texture_rect.margin_right = 0 + texture_rect.margin_bottom = 0 + texture_rect.mouse_filter = Control.MOUSE_FILTER_IGNORE + layer.create(texture_rect, canvas_width, canvas_height) + layers.append(layer) + + return layer + */ +} +Node *PaintCanvas::duplicate_layer(String layer_name, String new_layer_name) { + /* + for layer in layers: + if layer.name == new_layer_name: + return + + var dup_layer :GELayer = find_layer_by_name(layer_name) + var layer :GELayer = add_new_layer(new_layer_name) + layer.image.copy_from(dup_layer.image) + return layer + */ +} +void PaintCanvas::toggle_layer_visibility(String layer_name) { + /* + for layer in layers: + if layer.name == layer_name: + layer.visible = not layer.visible + */ +} +Node *PaintCanvas::find_layer_by_name(String layer_name) { + /* + for layer in layers: + if layer.name == layer_name: + return layer + return null + */ +} +void PaintCanvas::toggle_lock_layer(String layer_name) { + /* + find_layer_by_name(layer_name).toggle_lock() + */ +} +bool PaintCanvas::is_active_layer_locked() { + /* + return active_layer.locked + */ +} +void PaintCanvas::move_layer_forward(String layer_name) { + /* + var layer = find_layer_by_name(layer_name).texture_rect_ref + var new_idx = max(layer.get_index() - 1, 0) + canvas_layers.move_child(layer, new_idx) + */ +} +void PaintCanvas::move_layer_back(String layer_name) { + /* + var layer = find_layer_by_name(layer_name).texture_rect_ref + canvas_layers.move_child(layer, layer.get_index() + 1) + */ +} + +void PaintCanvas::select_layer(String layer_name) { + /* + active_layer = find_layer_by_name(layer_name) + */ +} +void PaintCanvas::_on_mouse_entered() { + /* + mouse_on_top = true + */ +} +void PaintCanvas::_on_mouse_exited() { + /* + mouse_on_top = false + */ +} +bool PaintCanvas::is_inside_canvas(int x, int y) { + /* + if x < 0 or y < 0: + return false + if x >= canvas_width or y >= canvas_height: + return false + return true + */ +} + +//Note: Arrays are always passed by reference. To get a copy of an array which +// can be modified independently of the original array, use duplicate. +// (https://docs.godotengine.org/en/stable/classes/class_array.html) +void PaintCanvas::set_pixel_arr(Array pixels, Color color) { + /* + for pixel in pixels: + _set_pixel(active_layer, pixel.x, pixel.y, color) + */ +} +void PaintCanvas::set_pixel_v(Vector2 pos, Color color) { + /* + set_pixel(pos.x, pos.y, color) + */ +} +void PaintCanvas::set_pixel(int x, int y, Color color) { + /* + _set_pixel(active_layer, x, y, color) + */ +} +void PaintCanvas::_set_pixel_v(PaintCanvasLayer *layer, Vector2 v, Color color) { + /* + _set_pixel(layer, v.x, v.y, color) + */ +} +void PaintCanvas::_set_pixel(PaintCanvasLayer *layer, int x, int y, Color color) { + /* + if not is_inside_canvas(x, y): + return + layer.set_pixel(x, y, color) + */ +} +Color PaintCanvas::get_pixel_v(Vector2 pos) { + /* + return get_pixel(pos.x, pos.y) + */ +} +Color PaintCanvas::get_pixel(int x, int y) { + /* + if active_layer: + return active_layer.get_pixel(x, y) + return null + */ +} +void PaintCanvas::set_preview_pixel_v(Vector2 pos, Color color) { + /* + set_preview_pixel(pos.x, pos.y, color) + */ +} + +void PaintCanvas::set_preview_pixel(int x, int y, Color color) { + /* + if not is_inside_canvas(x, y): + return + preview_layer.set_pixel(x, y, color) + */ +} +Color PaintCanvas::get_preview_pixel_v(Vector2 pos) { + /* + return get_preview_pixel(pos.x, pos.y) + */ +} + +Color PaintCanvas::get_preview_pixel(int x, int y) { + /* + if not preview_layer: + return null + return preview_layer.get_pixel(x, y) + */ +} +void PaintCanvas::toggle_grid() { + /* +$Grid.visible = not $Grid.visible + */ +} +void PaintCanvas::show_grid() { + /* +$Grid.show() + */ +} +void PaintCanvas::hide_grid() { + /* + $Grid.hide() + */ +} + +Array PaintCanvas::select_color(int x, int y) { + /* + print("???") + var same_color_pixels = [] + var color = get_pixel(x, y) + for x in range(active_layer.layer_width): + for y in range(active_layer.layer_height): + var pixel_color = active_layer.get_pixel(x, y) + if pixel_color == color: + same_color_pixels.append(color) + return same_color_pixels + */ +} +Array PaintCanvas::select_same_color(int x, int y) { + /* + return get_neighbouring_pixels(x, y) + */ +} + +// returns array of Vector2 +// yoinked from +// https://www.geeksforgeeks.org/flood-fill-algorithm-implement-fill-paint/ +Array PaintCanvas::get_neighbouring_pixels(int pos_x, int pos_y) { + /* + var pixels = [] + + var to_check_queue = [] + var checked_queue = [] + + to_check_queue.append(GEUtils.to_1D(pos_x, pos_y, canvas_width)) + + var color = get_pixel(pos_x, pos_y) + + while not to_check_queue.empty(): + var idx = to_check_queue.pop_front() + var p = GEUtils.to_2D(idx, canvas_width) + + if idx in checked_queue: + continue + + checked_queue.append(idx) + + if get_pixel(p.x, p.y) != color: + continue + + # add to result + pixels.append(p) + + # check neighbours + var x = p.x - 1 + var y = p.y + if is_inside_canvas(x, y): + idx = GEUtils.to_1D(x, y, canvas_width) + to_check_queue.append(idx) + + x = p.x + 1 + if is_inside_canvas(x, y): + idx = GEUtils.to_1D(x, y, canvas_width) + to_check_queue.append(idx) + + x = p.x + y = p.y - 1 + if is_inside_canvas(x, y): + idx = GEUtils.to_1D(x, y, canvas_width) + to_check_queue.append(idx) + + y = p.y + 1 + if is_inside_canvas(x, y): + idx = GEUtils.to_1D(x, y, canvas_width) + to_check_queue.append(idx) + + return pixels + */ +} + PaintCanvas::PaintCanvas() { + /* + +export var pixel_size: int = 16 setget set_pixel_size +export(int, 1, 2500) var canvas_width = 48 setget set_canvas_width # == pixels +export(int, 1, 2500) var canvas_height = 28 setget set_canvas_height # == pixels +export var grid_size = 16 setget set_grid_size +export var big_grid_size = 10 setget set_big_grid_size +export var can_draw = true + +var mouse_in_region +var mouse_on_top + +var layers : Array = [] # Key: layer_name, val: GELayer +var active_layer: GELayer +var preview_layer: GELayer +var tool_layer: GELayer +var canvas_layers: Control + +var canvas +var grid +var big_grid +var selected_pixels = [] + +var symmetry_x = false +var symmetry_y = false + + + */ } PaintCanvas::~PaintCanvas() { diff --git a/modules/paint/paint_canvas.h b/modules/paint/paint_canvas.h index 11bc0758d..c8d325580 100644 --- a/modules/paint/paint_canvas.h +++ b/modules/paint/paint_canvas.h @@ -27,15 +27,102 @@ SOFTWARE. #include "scene/gui/control.h" +class PaintCanvasLayer; + +//class_name GECanvas class PaintCanvas : public Control { GDCLASS(PaintCanvas, Control); public: + void _enter_tree(); + void _process(float delta); + void _draw(); + + void resize(int width, int height); + + void set_pixel_size(int size); + void set_grid_size(int size); + void set_big_grid_size(int size); + void set_canvas_width(int val); + void set_canvas_height(int val); + + void toggle_alpha_locked(String layer_name); + bool is_alpha_locked(); + + Rect2 get_content_margin(); + void crop_to_content(); + + Node *get_active_layer(); + Node *get_preview_layer(); + void clear_active_layer(); + void clear_preview_layer(); + void clear_layer(String layer_name); + Node *remove_layer(String layer_name); + Node *add_new_layer(String layer_name); + Node *duplicate_layer(String layer_name, String new_layer_name); + void toggle_layer_visibility(String layer_name); + Node *find_layer_by_name(String layer_name); + void toggle_lock_layer(String layer_name); + bool is_active_layer_locked(); + void move_layer_forward(String layer_name); + void move_layer_back(String layer_name); + void select_layer(String layer_name); + + void _on_mouse_entered(); + void _on_mouse_exited(); + + bool is_inside_canvas(int x, int y); + void set_pixel_arr(Array pixels, Color color); + void set_pixel_v(Vector2 pos, Color color); + void set_pixel(int x, int y, Color color); + void _set_pixel_v(PaintCanvasLayer *layer, Vector2 v, Color color); + void _set_pixel(PaintCanvasLayer *layer, int x, int y, Color color); + Color get_pixel_v(Vector2 pos); + Color get_pixel(int x, int y); + void set_preview_pixel_v(Vector2 pos, Color color); + void set_preview_pixel(int x, int y, Color color); + Color get_preview_pixel_v(Vector2 pos); + Color get_preview_pixel(int x, int y); + + void toggle_grid(); + void show_grid(); + void hide_grid(); + + Array select_color(int x, int y); + Array select_same_color(int x, int y); + Array get_neighbouring_pixels(int pos_x, int pos_y); + PaintCanvas(); ~PaintCanvas(); protected: static void _bind_methods(); + + /* + export var pixel_size: int = 16 setget set_pixel_size + export(int, 1, 2500) var canvas_width = 48 setget set_canvas_width # == pixels + export(int, 1, 2500) var canvas_height = 28 setget set_canvas_height # == pixels + export var grid_size = 16 setget set_grid_size + export var big_grid_size = 10 setget set_big_grid_size + export var can_draw = true + + var mouse_in_region + var mouse_on_top + + var layers : Array = [] # Key: layer_name, val: GELayer + var active_layer: GELayer + var preview_layer: GELayer + var tool_layer: GELayer + var canvas_layers: Control + + var canvas + var grid + var big_grid + var selected_pixels = [] + + var symmetry_x = false + var symmetry_y = false + */ }; #endif diff --git a/modules/paint/paint_canvas_layer.cpp b/modules/paint/paint_canvas_layer.cpp new file mode 100644 index 000000000..0ff356409 --- /dev/null +++ b/modules/paint/paint_canvas_layer.cpp @@ -0,0 +1,141 @@ +/* +Copyright (c) 2019 Flairieve +Copyright (c) 2020-2022 cobrapitz +Copyright (c) 2022 Péter Magyar + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "paint_canvas_layer.h" + +void PaintCanvasLayer::_init() { + /* + texture = ImageTexture.new() + */ +} +void PaintCanvasLayer::create(Node *texture_rect_ref, int width, int height) { + /* + self.texture_rect_ref = texture_rect_ref + + layer_width = width + layer_height = height + + image = Image.new() + image.create(width, height, false, Image.FORMAT_RGBA8) + image.fill(Color.transparent) + update_texture() + */ +} + +void PaintCanvasLayer::resize(int width, int height) { + /* + var pixel_colors = [] + var prev_width = layer_width + var prev_height = layer_height + + image.lock() + for y in range(prev_height): + for x in range(prev_width): + pixel_colors.append(image.get_pixel(x, y)) + image.unlock() + + layer_width = width + layer_height = height + + image.create(width, height, false, Image.FORMAT_RGBA8) + + image.lock() + for x in range(prev_width): + for y in range(prev_height): + if x >= width or y >= height: + continue + image.set_pixel(x, y, pixel_colors[GEUtils.to_1D(x, y, prev_width)]) + image.unlock() + + update_texture() + */ +} +void PaintCanvasLayer::set_pixel(int x, int y, Color color) { + /* + image.lock() + image.set_pixel(x, y, color) + image.unlock() + */ +} +Color PaintCanvasLayer::get_pixel(int x, int y) { + /* + if x < 0 or y < 0 or x >= image.get_width() or y >= image.get_height(): + return null + image.lock() + var pixel = image.get_pixel(x, y) + image.unlock() + return pixel + */ +} +void PaintCanvasLayer::clear() { + /* + image.fill(Color.transparent) + update_texture() + */ +} +void PaintCanvasLayer::update_texture() { + /* + texture.create_from_image(image, 0) + texture_rect_ref.texture = texture + texture_rect_ref.margin_right = 0 + texture_rect_ref.margin_bottom = 0 + */ +} +void PaintCanvasLayer::set_visible(bool vis) { + /* + visible = vis + texture_rect_ref.visible = visible + */ +} +void PaintCanvasLayer::toggle_lock() { + /* + locked = not locked + */ +} +void PaintCanvasLayer::toggle_alpha_locked() { + /* + alpha_locked = not alpha_locked + */ +} + +PaintCanvasLayer::PaintCanvasLayer() { + /* + var name + var layer_width + var layer_height + var visible = true setget set_visible + var locked = false + var alpha_locked = false + + var texture: ImageTexture + var image: Image + var texture_rect_ref + */ +} + +PaintCanvasLayer::~PaintCanvasLayer() { +} + +void PaintCanvasLayer::_bind_methods() { +} diff --git a/modules/paint/paint_canvas_layer.h b/modules/paint/paint_canvas_layer.h new file mode 100644 index 000000000..178078b8a --- /dev/null +++ b/modules/paint/paint_canvas_layer.h @@ -0,0 +1,69 @@ +#ifndef PAINT_CANVAS_LAYER_H +#define PAINT_CANVAS_LAYER_H + +/* +Copyright (c) 2019 Flairieve +Copyright (c) 2020-2022 cobrapitz +Copyright (c) 2022 Péter Magyar + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "core/reference.h" + +class Node; + +//class_name GELayer +class PaintCanvasLayer : public Reference { + GDCLASS(PaintCanvasLayer, Reference); + +public: + void _init(); + void create(Node *texture_rect_ref, int width, int height); + + void resize(int width, int height); + void set_pixel(int x, int y, Color color); + Color get_pixel(int x, int y); + void clear(); + void update_texture(); + void set_visible(bool vis); + void toggle_lock(); + void toggle_alpha_locked(); + + PaintCanvasLayer(); + ~PaintCanvasLayer(); + +protected: + static void _bind_methods(); + + /* + var name + var layer_width + var layer_height + var visible = true setget set_visible + var locked = false + var alpha_locked = false + + var texture: ImageTexture + var image: Image + var texture_rect_ref + */ +}; + +#endif diff --git a/modules/paint/paint_color_grid.cpp b/modules/paint/paint_color_grid.cpp index 32e351baf..355bec0a2 100644 --- a/modules/paint/paint_color_grid.cpp +++ b/modules/paint/paint_color_grid.cpp @@ -24,6 +24,36 @@ SOFTWARE. #include "paint_color_grid.h" +void PaintColorGrid::_enter_tree() { + /* + for child in get_children(): + child.set("custom_styles/normal", StyleBoxFlat.new()) + child.get("custom_styles/normal").set("bg_color", Color(randf(), randf(), randf())) + for child in get_children(): + if child.is_connected("pressed", self, "change_color_to"): + return + child.connect("pressed", self, "change_color_to", [child.get("custom_styles/normal").bg_color]) + */ +} +void PaintColorGrid::change_color_to(Color color) { + /* + emit_signal("color_change_request", color) + */ +} +void PaintColorGrid::add_color_prefab(Color color) { + /* + var dup = get_child(0).duplicate() + add_child(dup) + move_child(dup, 0) + dup.set("custom_styles/normal", StyleBoxFlat.new()) + dup.get("custom_styles/normal").set("bg_color", color) + for child in get_children(): + if child.is_connected("pressed", self, "change_color_to"): + return + child.connect("pressed", self, "change_color_to", [child.get("custom_styles/normal").bg_color]) + */ +} + PaintColorGrid::PaintColorGrid() { } @@ -31,4 +61,5 @@ PaintColorGrid::~PaintColorGrid() { } void PaintColorGrid::_bind_methods() { + //signal color_change_request } diff --git a/modules/paint/paint_color_grid.h b/modules/paint/paint_color_grid.h index 40fbb56ab..a60b8eebe 100644 --- a/modules/paint/paint_color_grid.h +++ b/modules/paint/paint_color_grid.h @@ -25,12 +25,16 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#include "scene/gui/control.h" +#include "scene/gui/grid_container.h" -class PaintColorGrid : public Control { - GDCLASS(PaintColorGrid, Control); +class PaintColorGrid : public GridContainer { + GDCLASS(PaintColorGrid, GridContainer); public: + void _enter_tree(); + void change_color_to(Color color); + void add_color_prefab(Color color); + PaintColorGrid(); ~PaintColorGrid(); diff --git a/modules/paint/LayerButton.tscn b/modules/paint/paint_layer_button.cpp similarity index 69% rename from modules/paint/LayerButton.tscn rename to modules/paint/paint_layer_button.cpp index 9252482d6..485af0db1 100644 --- a/modules/paint/LayerButton.tscn +++ b/modules/paint/paint_layer_button.cpp @@ -1,3 +1,31 @@ +/* +Copyright (c) 2019 Flairieve +Copyright (c) 2020-2022 cobrapitz +Copyright (c) 2022 Péter Magyar + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "paint_layer_button.h" + +PaintLayerButton::PaintLayerButton() { + /* [gd_scene load_steps=11 format=2] [ext_resource path="res://addons/Godoxel/assets/minidotta_invis.png" type="Texture" id=1] @@ -108,3 +136,13 @@ texture_normal = ExtResource( 3 ) texture_pressed = ExtResource( 2 ) expand = true stretch_mode = 3 + + + */ +} + +PaintLayerButton::~PaintLayerButton() { +} + +void PaintLayerButton::_bind_methods() { +} diff --git a/modules/paint/paint_image_layer.h b/modules/paint/paint_layer_button.h similarity index 83% rename from modules/paint/paint_image_layer.h rename to modules/paint/paint_layer_button.h index 010a409ad..161623ed0 100644 --- a/modules/paint/paint_image_layer.h +++ b/modules/paint/paint_layer_button.h @@ -1,5 +1,5 @@ -#ifndef PAINT_IMAGE_LAYER_H -#define PAINT_IMAGE_LAYER_H +#ifndef PAINT_LAYER_BUTTON_H +#define PAINT_LAYER_BUTTON_H /* Copyright (c) 2019 Flairieve @@ -25,14 +25,14 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#include "scene/gui/control.h" +#include "scene/gui/panel_container.h" -class PaintImageLayer : public Control { - GDCLASS(PaintImageLayer, Control); +class PaintLayerButton : public PanelContainer { + GDCLASS(PaintLayerButton, PanelContainer); public: - PaintImageLayer(); - ~PaintImageLayer(); + PaintLayerButton(); + ~PaintLayerButton(); protected: static void _bind_methods(); diff --git a/modules/paint/paint_navbar.cpp b/modules/paint/paint_navbar.cpp index 0d47b6e0f..d4be88d5c 100644 --- a/modules/paint/paint_navbar.cpp +++ b/modules/paint/paint_navbar.cpp @@ -24,6 +24,135 @@ SOFTWARE. #include "paint_navbar.h" +/* +tool +extends MenuButton + +var popup = get_popup() +signal item_pressed + +func _ready(): + popup.connect("id_pressed", self, "id_pressed") + +func id_pressed(id): + emit_signal("item_pressed", name, popup.get_item_text(id), id) + +*/ + +void PaintNavbar::_ready() { + /* + editor = owner + paint_canvas = editor.find_node("PaintCanvas") + + for i in get_node("Buttons").get_children(): + i.connect("item_pressed", self, "button_pressed") + */ +} +void PaintNavbar::button_pressed(String button_name, Node *button_item, int id) { + /* +# print("pressed: ", button_name) +# print("pressed item is: '%s'" % button_item) + + match button_name: + "File": + handle_file_menu(button_item, id) + "Edit": + handle_edit_menu(button_item, id) + "Canvas": + handle_canvas_menu(button_item, id) + "Layer": + handle_layer_menu(button_item, id) + "Grid": + handle_grid_menu(button_item, id) + "Magic": + handle_magic_menu(button_item, id) + "Editor": + handle_editor_menu(button_item, id) + */ +} + +void PaintNavbar::handle_file_menu(String pressed_item, int id) { + /* + match pressed_item: + "Save": + owner.get_node("SaveFileDialog").show() + "Load": + owner.get_node("LoadFileDialog").show() + "New": + owner.get_node("ConfirmationDialog").show() + */ +} +void PaintNavbar::handle_edit_menu(String pressed_item, int id) { + /* + match pressed_item: + "Add Layer": + editor.add_new_layer() + */ +} +void PaintNavbar::handle_canvas_menu(String pressed_item, int id) { + /* + match pressed_item: + "Change Size": + owner.get_node("ChangeCanvasSize").show() + "Crop To Content": + owner.paint_canvas.crop_to_content() + */ +} +void PaintNavbar::handle_layer_menu(String pressed_item, int id) { + /* + match pressed_item: + "Add Layer": + editor.add_new_layer() + "Delete Layer": + editor.remove_active_layer() + "Duplicate Layer": + editor.duplicate_active_layer() + "Clear Layer": + owner.paint_canvas.clear_active_layer() + "Toggle Alpha Locked": + owner.paint_canvas.active_layer.toggle_alpha_locked() + $Buttons/Layer.get_popup().set_item_checked(id, not $Buttons/Layer.get_popup().is_item_checked(id)) + owner.find_node("LockAlpha").pressed = $Buttons/Layer.get_popup().is_item_checked(id) + */ +} +void PaintNavbar::handle_grid_menu(String pressed_item, int id) { + /* + match pressed_item: + "Change Grid Size": + owner.get_node("ChangeGridSizeDialog").show() + "Toggle Grid": + owner.paint_canvas.toggle_grid() + */ +} + +void PaintNavbar::handle_magic_menu(String pressed_item, int id) { + /* + match pressed_item: + "Add Layer": + editor.add_new_layer() + */ +} +void PaintNavbar::handle_editor_menu(String pressed_item, int id) { + /* + match pressed_item: + "Settings": + owner.get_node("Settings").show() + "Toggle Grid": + var grids_node = owner.find_node("Grids") + grids_node.visible = !grids_node.visible + "Reset Canvas Position": + owner.paint_canvas_node.rect_position = Vector2(0, 0) + */ +} +bool PaintNavbar::is_any_menu_open() { + /* + for child in $Buttons.get_children(): + if child.get_popup().visible: + return true + return false + */ +} + PaintNavbar::PaintNavbar() { } diff --git a/modules/paint/paint_navbar.h b/modules/paint/paint_navbar.h index 5e2fa9d1d..0547cfdd2 100644 --- a/modules/paint/paint_navbar.h +++ b/modules/paint/paint_navbar.h @@ -31,11 +31,29 @@ class PaintNavbar : public Control { GDCLASS(PaintNavbar, Control); public: + void _ready(); + void button_pressed(String button_name, Node *button_item, int id); + + void handle_file_menu(String pressed_item, int id); + void handle_edit_menu(String pressed_item, int id); + void handle_canvas_menu(String pressed_item, int id); + void handle_layer_menu(String pressed_item, int id); + void handle_grid_menu(String pressed_item, int id); + + void handle_magic_menu(String pressed_item, int id); + void handle_editor_menu(String pressed_item, int id); + bool is_any_menu_open(); + PaintNavbar(); ~PaintNavbar(); protected: static void _bind_methods(); + + /* + var editor + var paint_canvas + */ }; #endif diff --git a/modules/paint/paint_selection_box.cpp b/modules/paint/paint_selection_box.cpp index 58a2d81c2..848e25d58 100644 --- a/modules/paint/paint_selection_box.cpp +++ b/modules/paint/paint_selection_box.cpp @@ -24,7 +24,32 @@ SOFTWARE. #include "paint_selection_box.h" +void PaintSelectionBox::_process(float delta) { + /* + update() + */ +} +void PaintSelectionBox::_draw() { + /* +if not rect_size == Vector2(): + draw_outline_box(rect_size, Color.gray, outline_size) + */ +} +void PaintSelectionBox::draw_outline_box(Vector2 size, Color color, int width) { + /* + #Top line + draw_line(Vector2(0 + 1, 0), Vector2(size.x, 0), color, width) + #Left line + draw_line(Vector2(0 + 1, 0), Vector2(0, size.y), color, width) + #Bottom line + draw_line(Vector2(0 + 1, size.y), Vector2(size.x, size.y), color, width) + #Right line + draw_line(Vector2(size.x, 0), Vector2(size.x, size.y), color, width) + */ +} + PaintSelectionBox::PaintSelectionBox() { + ////export var outline_size = 3 } PaintSelectionBox::~PaintSelectionBox() { diff --git a/modules/paint/paint_selection_box.h b/modules/paint/paint_selection_box.h index ed0c21a1a..e49b72f09 100644 --- a/modules/paint/paint_selection_box.h +++ b/modules/paint/paint_selection_box.h @@ -31,11 +31,17 @@ class PaintSelectionBox : public Control { GDCLASS(PaintSelectionBox, Control); public: + void _process(float delta); + void _draw(); + void draw_outline_box(Vector2 size, Color color, int width); + PaintSelectionBox(); ~PaintSelectionBox(); protected: static void _bind_methods(); + + //export var outline_size = 3 }; #endif diff --git a/modules/paint/paint_settings.cpp b/modules/paint/paint_settings.cpp new file mode 100644 index 000000000..169ea6170 --- /dev/null +++ b/modules/paint/paint_settings.cpp @@ -0,0 +1,125 @@ +/* +Copyright (c) 2019 Flairieve +Copyright (c) 2020-2022 cobrapitz +Copyright (c) 2022 Péter Magyar + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "paint_settings.h" + +void PaintTextInfo::_enter_tree() { + /* + canvas_outline = get_parent().find_node("CanvasOutline") + editor = get_parent() + */ +} +void PaintTextInfo::_on_ColorPickerButton_color_changed(Color color) { + /* + canvas_outline.color = color + */ +} +void PaintTextInfo::_on_CheckButton_toggled(bool button_pressed) { + /* + canvas_outline.visible = button_pressed + */ +} +void PaintTextInfo::_on_Ok_pressed() { + /* + hide() + */ +} + +PaintTextInfo::PaintTextInfo() { + /* + +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://addons/Godoxel/Settings.gd" type="Script" id=1] + + +[node name="Settings" type="WindowDialog"] +visible = true +margin_top = 20.0 +margin_right = 300.0 +margin_bottom = 120.0 +window_title = "Settings" +script = ExtResource( 1 ) + +[node name="Ok" type="Button" parent="."] +margin_left = 210.0 +margin_top = 70.0 +margin_right = 290.0 +margin_bottom = 90.0 +text = "Ok" + +[node name="CanvasOutlineToggle" type="Control" parent="."] +margin_left = 10.0 +margin_top = 10.0 +margin_right = 290.0 +margin_bottom = 30.0 +__meta__ = { +"_edit_group_": true +} + +[node name="Label" type="Label" parent="CanvasOutlineToggle"] +margin_right = 130.0 +margin_bottom = 20.0 +text = "Canvas Outline:" +valign = 1 + +[node name="CheckButton" type="CheckButton" parent="CanvasOutlineToggle"] +margin_left = 210.0 +margin_top = -10.0 +margin_right = 286.0 +margin_bottom = 30.0 +pressed = true + +[node name="CanvasOutlineColor" type="Control" parent="."] +margin_left = 10.0 +margin_top = 40.0 +margin_right = 290.0 +margin_bottom = 60.0 +__meta__ = { +"_edit_group_": true +} + +[node name="Label" type="Label" parent="CanvasOutlineColor"] +margin_right = 130.0 +margin_bottom = 20.0 +text = "Canvas Outline Color:" +valign = 1 + +[node name="ColorPickerButton" type="ColorPickerButton" parent="CanvasOutlineColor"] +margin_left = 170.0 +margin_right = 280.0 +margin_bottom = 20.0 +[connection signal="pressed" from="Ok" to="." method="_on_Ok_pressed"] +[connection signal="toggled" from="CanvasOutlineToggle/CheckButton" to="." method="_on_CheckButton_toggled"] +[connection signal="color_changed" from="CanvasOutlineColor/ColorPickerButton" to="." method="_on_ColorPickerButton_color_changed"] + + + */ +} + +PaintTextInfo::~PaintTextInfo() { +} + +void PaintTextInfo::_bind_methods() { +} diff --git a/modules/paint/paint_settings.h b/modules/paint/paint_settings.h new file mode 100644 index 000000000..9c6c1dc1f --- /dev/null +++ b/modules/paint/paint_settings.h @@ -0,0 +1,55 @@ +#ifndef PAINT_SETTINGS_H +#define PAINT_SETTINGS_H + +/* +Copyright (c) 2019 Flairieve +Copyright (c) 2020-2022 cobrapitz +Copyright (c) 2022 Péter Magyar + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "scene/gui/control.h" + +class PaintTextInfo : public Control { + GDCLASS(PaintTextInfo, Control); + +public: + void _enter_tree(); + void _on_ColorPickerButton_color_changed(Color color); + void _on_CheckButton_toggled(bool button_pressed); + void _on_Ok_pressed(); + + PaintTextInfo(); + ~PaintTextInfo(); + +protected: + static void _bind_methods(); + + /* + + var editor + var canvas_outline + var start_time + var end_time + + */ +}; + +#endif diff --git a/modules/paint/paint_text_info.cpp b/modules/paint/paint_text_info.cpp index adf258e17..8f5d1d295 100644 --- a/modules/paint/paint_text_info.cpp +++ b/modules/paint/paint_text_info.cpp @@ -24,7 +24,48 @@ SOFTWARE. #include "paint_text_info.h" +//TODO: To make reading the text easier, the text info with the longest text should have it's length applied to all the +//the other text infos + +void PaintTextInfo::add_text_info(String text_name, Node *custom_node) { + /* + var last_text_info_child = null + var child_count = get_child_count() + if not child_count <= 0: + last_text_info_child = get_children()[get_children().size() - 1] + var label = Label.new() + label.name = text_name + label.rect_size = Vector2(size, 14) + if not last_text_info_child == null: + var x = last_text_info_child.rect_position.x + var y = last_text_info_child.rect_position.y + var temp_size = size + if child_count == 4: + x = 0 + y = 20 + temp_size = 0 + label.rect_position = Vector2(x + temp_size, y) + if not custom_node == null: + label.add_child(custom_node) + add_child(label) + */ +} +void PaintTextInfo::update_text_info(String text_name, Node *text_value, Node *node, Node *node_target_value, Node *node_value) { + /* + var text_label = self.get_node(text_name) + if text_label == null: + return + if not node == null: + get_node(text_name).get_node(node).set(node_target_value, node_value) + if text_value == null: + text_label.text = "%s: %s" % [text_name, null] + else: + text_label.text = "%s: %s" % [text_name, String(text_value)] + */ +} + PaintTextInfo::PaintTextInfo() { + //var size = 240 } PaintTextInfo::~PaintTextInfo() { diff --git a/modules/paint/paint_text_info.h b/modules/paint/paint_text_info.h index cc70f9171..50bf85c46 100644 --- a/modules/paint/paint_text_info.h +++ b/modules/paint/paint_text_info.h @@ -31,11 +31,16 @@ class PaintTextInfo : public Control { GDCLASS(PaintTextInfo, Control); public: + void add_text_info(String text_name, Node *custom_node = nullptr); + void update_text_info(String text_name, Node *text_value = nullptr, Node *node = nullptr, Node *node_target_value = nullptr, Node *node_value = nullptr); + PaintTextInfo(); ~PaintTextInfo(); protected: static void _bind_methods(); + + //var size = 240 }; #endif diff --git a/modules/paint/paint_utilities.cpp b/modules/paint/paint_utilities.cpp index a632c4b1b..4c53e6910 100644 --- a/modules/paint/paint_utilities.cpp +++ b/modules/paint/paint_utilities.cpp @@ -24,6 +24,114 @@ SOFTWARE. #include "paint_utilities.h" +Array PaintUtilities::PaintUtilities::get_pixels_in_line(Vector2 from, Vector2 to) { + /* + var dx = to[0] - from[0] + var dy = to[1] - from[1] + var nx = abs(dx) + var ny = abs(dy) + var signX = sign(dx) + var signY = sign(dy) + var p = from + var points : Array = [p] + + var ix = 0 + var iy = 0 + + while ix < nx || iy < ny: + if (1 + (ix << 1)) * ny < (1 + (iy << 1)) * nx: + p[0] += signX + ix +=1 + else: + p[1] += signY + iy += 1 + points.append(p) + return points + */ +} + +int to_1D_v(Vector2 p, float w) { + /* + return p.x + p.y * w + */ +} +int PaintUtilities::to_1D(float x, float y, float w) { + /* + return x + y * w + */ +} +Vector2 PaintUtilities::to_2D(int idx, float w) { + /* + var p = Vector2() + p.x = int(idx) % int(w) + p.y = int(idx / w) + return p + */ +} + +Color PaintUtilities::color_from_array(PoolRealArray color_array) { + /* + var r = color_array[0] + var g = color_array[1] + var b = color_array[2] + var a = color_array[3] + return Color(r, g, b, a) + */ +} +Color PaintUtilities::random_color() { + /* + return Color(randf(), randf(), randf()) + */ +} +Color PaintUtilities::random_color_alt() { + /* + var rand = randi() % 6 + + match rand: + #red + 0: + return Color.red + #blue + 1: + return Color.blue + #green + 2: + return Color.green + #orange + 3: + return Color.orange + #yellow + 4: + return Color.yellow + #purple + 5: + return Color.purple + */ +} + +String PaintUtilities::get_line_string(String file, int number) { + /* + return file.get_as_text().split("\n")[number - 1].strip_edges() + */ +} + +void PaintUtilities::printv(Variant variable) { + /* + var stack = get_stack()[get_stack().size() - 1] + var line = stack.line + var source = stack.source + var file = File.new() + file.open(source, File.READ) + var line_string = get_line_string(file, line) + file.close() + var left_p = line_string.find("(") + var left_p_string = line_string.right(left_p + 1) + var right_p = left_p_string.find(")") + var variable_name = left_p_string.left(right_p) + print("%s: %s" % [variable_name, variable]) + */ +} + PaintUtilities::PaintUtilities() { } diff --git a/modules/paint/paint_utilities.h b/modules/paint/paint_utilities.h index 6c68c66f6..5b3dea177 100644 --- a/modules/paint/paint_utilities.h +++ b/modules/paint/paint_utilities.h @@ -25,12 +25,30 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#include "scene/gui/control.h" +#include "core/object.h" -class PaintUtilities : public Control { - GDCLASS(PaintUtilities, Control); +#include "core/pool_vector.h" +#include "core/variant.h" + +//class_name GEUtils +class PaintUtilities : public Object { + GDCLASS(PaintUtilities, Object); public: + static Array get_pixels_in_line(Vector2 from, Vector2 to); + + static int to_1D_v(Vector2 p, float w); + static int to_1D(float x, float y, float w); + static Vector2 to_2D(int idx, float w); + + static Color color_from_array(PoolRealArray color_array); + static Color random_color(); + static Color random_color_alt(); + + static String get_line_string(String file, int number); + + static void printv(Variant variable); + PaintUtilities(); ~PaintUtilities(); diff --git a/modules/paint/paint_window.cpp b/modules/paint/paint_window.cpp index 36d6bbd29..55e3438a6 100644 --- a/modules/paint/paint_window.cpp +++ b/modules/paint/paint_window.cpp @@ -24,7 +24,2135 @@ SOFTWARE. #include "paint_window.h" +void PaintWindow::_input(Ref event) { + /* + if is_any_menu_open(): + return + if not is_visible_in_tree(): + return + if paint_canvas_container_node == null or paint_canvas == null: + return + + if event is InputEventKey and event.is_pressed() and not event.is_echo(): + _handle_shortcuts(event.scancode) + + if is_mouse_in_canvas() and paint_canvas.mouse_on_top: + _handle_zoom(event) + + if paint_canvas.is_active_layer_locked(): + return + + if brush_mode == Tools.CUT: + if event is InputEventMouseButton: + if event.button_index == BUTTON_LEFT: + if not event.pressed: + commit_action() + + if (paint_canvas.mouse_in_region and paint_canvas.mouse_on_top): + if event is InputEventMouseButton: + match brush_mode: + Tools.BUCKET: + if event.button_index == BUTTON_LEFT: + if event.pressed: + if _current_action == null: + _current_action = get_action() + do_action([cell_mouse_position, last_cell_mouse_position, selected_color]) + + Tools.COLORPICKER: + if event.button_index == BUTTON_LEFT: + if event.pressed: + if paint_canvas.get_pixel(cell_mouse_position.x, cell_mouse_position.y).a == 0: + return + selected_color = paint_canvas.get_pixel(cell_mouse_position.x, cell_mouse_position.y) + _picked_color = true + find_node("Colors").add_color_prefab(selected_color) + elif _picked_color: + set_brush(_previous_tool) + elif event.button_index == BUTTON_RIGHT: + if event.pressed: + set_brush(_previous_tool) + + Tools.PASTECUT: + if event.button_index == BUTTON_RIGHT: + if event.pressed: + commit_action() + set_brush(Tools.PAINT) + */ +} +void PaintWindow::_process(float delta) { + /* + if not is_visible_in_tree(): + return + if paint_canvas_container_node == null or paint_canvas == null: + return + if is_any_menu_open(): + return + + if is_mouse_in_canvas(): + _handle_scroll() + + #Update commonly used variables + var grid_size = paint_canvas.pixel_size + mouse_position = get_global_mouse_position() #paint_canvas.get_local_mouse_position() + canvas_position = paint_canvas.rect_global_position + canvas_mouse_position = Vector2(mouse_position.x - canvas_position.x, mouse_position.y - canvas_position.y) + + if is_mouse_in_canvas() && paint_canvas.mouse_on_top: + cell_mouse_position = Vector2( + floor(canvas_mouse_position.x / grid_size), + floor(canvas_mouse_position.y / grid_size)) + cell_color = paint_canvas.get_pixel(cell_mouse_position.x, cell_mouse_position.y) + + update_text_info() + +# if not is_mouse_in_canvas(): +# paint_canvas.tool_layer.clear() +# paint_canvas.update() +# paint_canvas.tool_layer.update_texture() +# else: + if is_mouse_in_canvas() && paint_canvas.mouse_on_top: + if not paint_canvas.is_active_layer_locked(): + if is_position_in_canvas(get_global_mouse_position()) or \ + is_position_in_canvas(_last_mouse_pos_canvas_area): + brush_process() + else: + print(cell_mouse_position, " not in ", paint_canvas_container_node.rect_size) + print("not in canvas") + + _draw_tool_brush() + + #Update last variables with the current variables + last_mouse_position = mouse_position + last_canvas_position = canvas_position + last_canvas_mouse_position = canvas_mouse_position + last_cell_mouse_position = cell_mouse_position + last_cell_color = cell_color + _last_mouse_pos_canvas_area = get_global_mouse_position() #paint_canvas_container_node.get_local_mouse_position() + */ +} + +void PaintWindow::_handle_shortcuts(int scancode) { + /* + match scancode: + K_UNDO: + undo_action() + + K_REDO: + redo_action() + + K_PENCIL: + set_brush(Tools.PAINT) + + K_BRUSH: + set_brush(Tools.BRUSH) + + K_BUCKET: + set_brush(Tools.BUCKET) + + K_RAINBOW: + set_brush(Tools.RAINBOW) + + K_LINE: + set_brush(Tools.LINE) + + K_DARK: + set_brush(Tools.DARKEN) + + K_BRIGHT: + set_brush(Tools.BRIGHTEN) + + K_CUT: + set_brush(Tools.CUT) + + K_PICK: + set_brush(Tools.COLORPICKER) + */ +} +void PaintWindow::_draw_tool_brush() { + /* + paint_canvas.tool_layer.clear() + + match brush_mode: + Tools.PASTECUT: + for idx in range(_selection_cells.size()): + var pixel = _selection_cells[idx] +# if pixel.x < 0 or pixel.y < 0: +# print(pixel) + var color = _selection_colors[idx] + pixel -= _cut_pos + _cut_size / 2 + pixel += cell_mouse_position + paint_canvas._set_pixel_v(paint_canvas.tool_layer, pixel, color) + Tools.BRUSH: + var pixels = BrushPrefabs.get_brush(selected_brush_prefab, find_node("BrushSize").value) + for pixel in pixels: + + paint_canvas._set_pixel(paint_canvas.tool_layer, + cell_mouse_position.x + pixel.x, cell_mouse_position.y + pixel.y, selected_color) + + Tools.RAINBOW: + paint_canvas._set_pixel(paint_canvas.tool_layer, + cell_mouse_position.x, cell_mouse_position.y, Color(0.46875, 0.446777, 0.446777, 0.196078)) + + Tools.COLORPICKER: + paint_canvas._set_pixel(paint_canvas.tool_layer, + cell_mouse_position.x, cell_mouse_position.y, Color(0.866667, 0.847059, 0.847059, 0.196078)) + _: + paint_canvas._set_pixel(paint_canvas.tool_layer, + cell_mouse_position.x, cell_mouse_position.y, selected_color) + + paint_canvas.update() + #TODO add here brush prefab drawing + paint_canvas.tool_layer.update_texture() + */ +} + +void PaintWindow::_handle_scroll() { + /* + if Input.is_mouse_button_pressed(BUTTON_MIDDLE): + if _middle_mouse_pressed_start_pos == null: + _middle_mouse_pressed_start_pos = paint_canvas.rect_position + _middle_mouse_pressed_pos = get_global_mouse_position() + + paint_canvas.rect_position = _middle_mouse_pressed_start_pos + paint_canvas.rect_position += get_global_mouse_position() - _middle_mouse_pressed_pos + + elif _middle_mouse_pressed_start_pos != null: + _middle_mouse_pressed_start_pos = null + */ +} + +void PaintWindow::_handle_zoom(Ref event) { + /* + if not event is InputEventMouseButton: + return + if event.is_pressed(): + if event.button_index == BUTTON_WHEEL_UP: + var px = min(paint_canvas.pixel_size * 2, max_zoom_in) + if px == paint_canvas.pixel_size: + return + paint_canvas.set_pixel_size(px) + find_node("CanvasBackground").material.set_shader_param( + "pixel_size", 8 * pow(0.5, big_grid_pixels)/paint_canvas.pixel_size) + paint_canvas.rect_position -= paint_canvas.get_local_mouse_position() + paint_canvas.rect_position.x = clamp(paint_canvas.rect_position.x, -paint_canvas.rect_size.x * 0.8, rect_size.x) + paint_canvas.rect_position.y = clamp(paint_canvas.rect_position.y, -paint_canvas.rect_size.y * 0.8, rect_size.y) + elif event.button_index == BUTTON_WHEEL_DOWN: + var px = max(paint_canvas.pixel_size / 2.0, max_zoom_out) + if px == paint_canvas.pixel_size: + return + paint_canvas.set_pixel_size(px) + find_node("CanvasBackground").material.set_shader_param( + # 4 2 1 + "pixel_size", 8 * pow(0.5, big_grid_pixels)/paint_canvas.pixel_size) + paint_canvas.rect_position += paint_canvas.get_local_mouse_position() / 2 + paint_canvas.rect_position.x = clamp(paint_canvas.rect_position.x, -paint_canvas.rect_size.x * 0.8, rect_size.x) + paint_canvas.rect_position.y = clamp(paint_canvas.rect_position.y, -paint_canvas.rect_size.y * 0.8, rect_size.y) + */ +} + +void PaintWindow::_handle_cut() { + /* + if Input.is_mouse_button_pressed(BUTTON_RIGHT): + paint_canvas.clear_preview_layer() + set_brush(_previous_tool) + return + + if Input.is_mouse_button_pressed(BUTTON_LEFT): + for pixel_pos in GEUtils.get_pixels_in_line(cell_mouse_position, last_cell_mouse_position): + for idx in range(_selection_cells.size()): + var pixel = _selection_cells[idx] + var color = _selection_colors[idx] + pixel -= _cut_pos + _cut_size / 2 + pixel += pixel_pos + paint_canvas.set_pixel_v(pixel, color) + else: + if _last_preview_draw_cell_pos == cell_mouse_position: + return + paint_canvas.clear_preview_layer() + for idx in range(_selection_cells.size()): + var pixel = _selection_cells[idx] + var color = _selection_colors[idx] + pixel -= _cut_pos + _cut_size / 2 + pixel += cell_mouse_position + paint_canvas.set_preview_pixel_v(pixel, color) + _last_preview_draw_cell_pos = cell_mouse_position + */ +} +void PaintWindow::brush_process() { + /* + if Input.is_mouse_button_pressed(BUTTON_LEFT): + if _current_action == null: + _current_action = get_action() + if brush_mode == Tools.COLORPICKER: + _current_action = null + + match brush_mode: + Tools.PAINT: + do_action([cell_mouse_position, last_cell_mouse_position, selected_color]) + Tools.BRUSH: + do_action([cell_mouse_position, last_cell_mouse_position, selected_color, + selected_brush_prefab, find_node("BrushSize").value]) + Tools.LINE: + do_action([cell_mouse_position, last_cell_mouse_position, selected_color]) + Tools.RECT: + do_action([cell_mouse_position, last_cell_mouse_position, selected_color]) + Tools.DARKEN: + do_action([cell_mouse_position, last_cell_mouse_position, selected_color]) + Tools.BRIGHTEN: + do_action([cell_mouse_position, last_cell_mouse_position, selected_color]) + Tools.COLORPICKER: + pass + Tools.CUT: + do_action([cell_mouse_position, last_cell_mouse_position, selected_color]) + Tools.PASTECUT: + do_action([cell_mouse_position, last_cell_mouse_position, + _selection_cells, _selection_colors, + _cut_pos, _cut_size]) + Tools.RAINBOW: + do_action([cell_mouse_position, last_cell_mouse_position]) + paint_canvas.update() + + elif Input.is_mouse_button_pressed(BUTTON_RIGHT): + paint_canvas.update() + if _current_action == null: + _current_action = get_action() + + match brush_mode: + Tools.PAINT: + do_action([cell_mouse_position, last_cell_mouse_position, Color.transparent]) + Tools.BRUSH: + do_action([cell_mouse_position, last_cell_mouse_position, Color.transparent, + selected_brush_prefab, find_node("BrushSize").value]) + else: + if _current_action and _current_action.can_commit(): + commit_action() + paint_canvas.update() + */ +} +void PaintWindow::update_text_info() { + /* + var text = "" + + var cell_color_text = cell_color + cell_color_text = Color(0, 0, 0, 0) + + text += \ + str("FPS %s\t" + \ + "Mouse Position %s\t" + \ + "Canvas Mouse Position %s \t" + \ + "Canvas Position %s\t\n" + \ + "Cell Position %s \t" + \ + "Cell Color %s\t") % [ + str(Engine.get_frames_per_second()), + str(mouse_position), + str(canvas_mouse_position), + str(canvas_position), + str(cell_mouse_position), + str(cell_color_text), + ] + + find_node("DebugTextDisplay").display_text(text) + */ +} + +void PaintWindow::_on_Save_pressed() { + /* + get_node("SaveFileDialog").show() + */ +} + +void PaintWindow::do_action(Array data) { + /* + if _current_action == null: + #print("clear redo") + _redo_history.clear() + _current_action.do_action(paint_canvas, data) + */ +} +void PaintWindow::commit_action() { + /* + if not _current_action: + return + + #print("commit action") + var commit_data = _current_action.commit_action(paint_canvas) + var action = get_action() + action.action_data = _current_action.action_data.duplicate(true) + _actions_history.push_back(action) + _redo_history.clear() + + match brush_mode: + Tools.CUT: + _cut_pos = _current_action.mouse_start_pos + _cut_size = _current_action.mouse_end_pos - _current_action.mouse_start_pos + _selection_cells = _current_action.action_data.redo.cells.duplicate() + _selection_colors = _current_action.action_data.redo.colors.duplicate() + set_brush(Tools.PASTECUT) + _: + _current_action = null + */ +} +void PaintWindow::redo_action() { + /* + if _redo_history.empty(): + print("nothing to redo") + return + var action = _redo_history.pop_back() + if not action: + return + _actions_history.append(action) + action.redo_action(paint_canvas) + paint_canvas.update() + #print("redo action") + */ +} +void PaintWindow::undo_action() { + /* + var action = _actions_history.pop_back() + if not action: + return + _redo_history.append(action) + action.undo_action(paint_canvas) + update() + paint_canvas.update() + #print("undo action") + */ +} + +Ref PaintWindow::get_action() { + /* + match brush_mode: + Tools.PAINT: + return GEPencil.new() + Tools.BRUSH: + return GEBrush.new() + Tools.LINE: + return GELine.new() + Tools.RAINBOW: + return GERainbow.new() + Tools.BUCKET: + return GEBucket.new() + Tools.RECT: + return GERect.new() + Tools.DARKEN: + return GEDarken.new() + Tools.BRIGHTEN: + return GEBrighten.new() + Tools.CUT: + return GECut.new() + Tools.PASTECUT: + return GEPasteCut.new() + _: + #print("no tool!") + return null + */ +} + +void PaintWindow::set_selected_color(Color color) { + /* + selected_color = color + */ +} +void PaintWindow::set_brush(PaintWindow::Tools new_mode) { + /* + if brush_mode == new_mode: + return + _previous_tool = brush_mode + brush_mode = new_mode + + _current_action = get_action() + + match _previous_tool: + Tools.CUT: + paint_canvas.clear_preview_layer() + Tools.PASTECUT: + _selection_cells.clear() + _selection_colors.clear() + Tools.BUCKET: + _current_action = null + #print("Selected: ", Tools.keys()[brush_mode]) + */ +} + +void PaintWindow::change_color(Color new_color) { + /* + if new_color.a == 0: + return + selected_color = new_color + find_node("ColorPicker").color = selected_color + */ +} + +void PaintWindow::_on_ColorPicker_color_changed(Color color) { + /* + selected_color = color + */ +} +void PaintWindow::_on_PaintTool_pressed() { + /* + set_brush(Tools.PAINT) + */ +} +void PaintWindow::_on_BucketTool_pressed() { + /* + set_brush(Tools.BUCKET) + */ +} +void PaintWindow::_on_RainbowTool_pressed() { + /* + set_brush(Tools.RAINBOW) + */ +} +void PaintWindow::_on_BrushTool_pressed() { + /* + set_brush(Tools.BRUSH) + */ +} +void PaintWindow::_on_LineTool_pressed() { + /* + set_brush(Tools.LINE) + */ +} +void PaintWindow::_on_RectTool_pressed() { + /* + set_brush(Tools.RECT) + */ +} +void PaintWindow::_on_DarkenTool_pressed() { + /* + set_brush(Tools.DARKEN) + */ +} +void PaintWindow::_on_BrightenTool_pressed() { + /* + set_brush(Tools.BRIGHTEN) + */ +} +void PaintWindow::_on_ColorPickerTool_pressed() { + /* + set_brush(Tools.COLORPICKER) + */ +} +void PaintWindow::_on_CutTool_pressed() { + /* + set_brush(Tools.CUT) + */ +} +void PaintWindow::_on_Editor_visibility_changed() { + /* + pause_mode = not visible + */ +} + +void PaintWindow::highlight_layer(String layer_name) { + /* + for button in layer_buttons.get_children(): + if paint_canvas.find_layer_by_name(button.name).locked: + button.get("custom_styles/panel").set("bg_color", locked_layer_highlight) + elif button.name == layer_name: + button.get("custom_styles/panel").set("bg_color", current_layer_highlight) + else: + button.get("custom_styles/panel").set("bg_color", other_layer_highlight) + */ +} +void PaintWindow::toggle_layer_visibility(Node *button, String layer_name) { + /* + #print("toggling: ", layer_name) + paint_canvas.toggle_layer_visibility(layer_name) + */ +} +void PaintWindow::select_layer(String layer_name) { + /* + #print("select layer: ", layer_name) + paint_canvas.select_layer(layer_name) + highlight_layer(layer_name) + */ +} +void PaintWindow::lock_layer(Node *button, String layer_name) { + /* + paint_canvas.toggle_lock_layer(layer_name) + highlight_layer(paint_canvas.get_active_layer().name) + */ +} + +Ref PaintWindow::add_new_layer() { + /* + var new_layer_button = layer_buttons.get_child(0).duplicate() + new_layer_button.set("custom_styles/panel", layer_buttons.get_child(0).get("custom_styles/panel").duplicate()) + layer_buttons.add_child_below_node( + layer_buttons.get_child(layer_buttons.get_child_count() - 1), new_layer_button, true) + _total_added_layers += 1 + new_layer_button.find_node("Select").text = "Layer " + str(_total_added_layers) + _layer_button_ref[new_layer_button.name] = new_layer_button + _connect_layer_buttons() + + var layer: GELayer = paint_canvas.add_new_layer(new_layer_button.name) + + highlight_layer(paint_canvas.get_active_layer().name) + #print("added layer: ", layer.name) + return layer + */ +} +void PaintWindow::remove_active_layer() { + /* + if layer_buttons.get_child_count() <= 1: + return + var layer_name = paint_canvas.active_layer.name + paint_canvas.remove_layer(layer_name) + layer_buttons.remove_child(_layer_button_ref[layer_name]) + _layer_button_ref[layer_name].queue_free() + _layer_button_ref.erase(layer_name) + + highlight_layer(paint_canvas.get_active_layer().name) + */ +} +void PaintWindow::duplicate_active_layer() { + /* + var new_layer_button = layer_buttons.get_child(0).duplicate() + new_layer_button.set("custom_styles/panel", layer_buttons.get_child(0).get("custom_styles/panel").duplicate()) + layer_buttons.add_child_below_node( + layer_buttons.get_child(layer_buttons.get_child_count() - 1), new_layer_button, true) + + _total_added_layers += 1 # for keeping track... + new_layer_button.find_node("Select").text = "Layer " + str(_total_added_layers) + + var new_layer = paint_canvas.duplicate_layer(paint_canvas.active_layer.name, new_layer_button.name) + new_layer.update_texture() + _layer_button_ref[new_layer.name] = new_layer_button + + new_layer_button.find_node("Select").connect("pressed", self, "select_layer", [new_layer_button.name]) + new_layer_button.find_node("Visible").connect("pressed", self, "toggle_layer_visibility", + [new_layer_button.find_node("Visible"), new_layer_button.name]) + new_layer_button.find_node("Up").connect("pressed", self, "move_down", [new_layer_button]) + new_layer_button.find_node("Down").connect("pressed", self, "move_up", [new_layer_button]) + new_layer_button.find_node("Lock").connect("pressed", self, "lock_layer", [new_layer_button, new_layer_button.name]) + + # update highlight + highlight_layer(paint_canvas.get_active_layer().name) + #print("added layer: ", new_layer.name, " (total:", layer_buttons.get_child_count(), ")") + */ +} + +void PaintWindow::move_up(Node *layer_btn) { + /* + var new_idx = min(layer_btn.get_index() + 1, layer_buttons.get_child_count()) + #print("move_up: ", layer_btn.name, " from ", layer_btn.get_index(), " to ", new_idx) + layer_buttons.move_child(layer_btn, new_idx) + paint_canvas.move_layer_back(layer_btn.name) + */ +} +void PaintWindow::move_down(Node *layer_btn) { + /* + var new_idx = max(layer_btn.get_index() - 1, 0) + #print("move_down: ", layer_btn.name, " from ", layer_btn.get_index(), " to ", new_idx) + layer_buttons.move_child(layer_btn, new_idx) + paint_canvas.move_layer_forward(layer_btn.name) + */ +} + +void PaintWindow::_connect_layer_buttons() { + /* + for layer_btn in layer_buttons.get_children(): + if layer_btn.find_node("Select").is_connected("pressed", self, "select_layer"): + continue + layer_btn.find_node("Select").connect("pressed", self, "select_layer", [layer_btn.name]) + layer_btn.find_node("Visible").connect("pressed", self, "toggle_layer_visibility", + [layer_btn.find_node("Visible"), layer_btn.name]) + layer_btn.find_node("Up").connect("pressed", self, "move_down", [layer_btn]) + layer_btn.find_node("Down").connect("pressed", self, "move_up", [layer_btn]) + layer_btn.find_node("Lock").connect("pressed", self, "lock_layer", + [layer_btn, layer_btn.name]) + */ +} + +void PaintWindow::_on_Button_pressed() { + /* + add_new_layer() + */ +} +void PaintWindow::_on_PaintCanvasContainer_mouse_entered() { + /* + if mouse_on_top == true: + return + mouse_on_top = true + paint_canvas.tool_layer.clear() + paint_canvas.update() + paint_canvas.tool_layer.update_texture() + */ +} +void PaintWindow::_on_PaintCanvasContainer_mouse_exited() { + /* + if mouse_on_top == false: + return + mouse_on_top = false + paint_canvas.tool_layer.clear() + paint_canvas.update() + paint_canvas.tool_layer.update_texture() + */ +} +void PaintWindow::_on_ColorPicker_popup_closed() { + /* + find_node("Colors").add_color_prefab(find_node("ColorPicker").color) + */ +} + +bool PaintWindow::is_position_in_canvas(Vector2 pos) { + /* + if Rect2(paint_canvas_container_node.rect_global_position, + paint_canvas_container_node.rect_global_position + paint_canvas_container_node.rect_size).has_point(pos): + return true + return false + */ +} + +bool PaintWindow::is_mouse_in_canvas() { + /* + if is_position_in_canvas(get_global_mouse_position()): + return true #mouse_on_top # check if mouse is inside canvas + else: + return false + */ +} + +bool PaintWindow::is_any_menu_open() { + /* + return $ChangeCanvasSize.visible or \ + $ChangeGridSizeDialog.visible or \ + $Settings.visible or \ + $LoadFileDialog.visible or \ + $SaveFileDialog.visible or \ + find_node("Navbar").is_any_menu_open() + */ +} + +void PaintWindow::_on_LockAlpha_pressed() { + /* + var checked = find_node("LockAlpha").pressed + paint_canvas.active_layer.toggle_alpha_locked() + for i in range(find_node("Layer").get_popup().get_item_count()): + if find_node("Layer").get_popup().get_item_text(i) == "Toggle Alpha Locked": + find_node("Layer").get_popup().set_item_checked(i, not find_node("Layer").get_popup().is_item_checked(i)) + */ +} +void PaintWindow::_on_BrushRect_pressed() { + /* + if brush_mode != Tools.BRUSH: + set_brush(Tools.BRUSH) + selected_brush_prefab = BrushPrefabs.Type.RECT + */ +} +void PaintWindow::_on_BrushCircle_pressed() { + /* + if brush_mode != Tools.BRUSH: + set_brush(Tools.BRUSH) + selected_brush_prefab = BrushPrefabs.Type.CIRCLE + */ +} +void PaintWindow::_on_BrushVLine_pressed() { + /* + if brush_mode != Tools.BRUSH: + set_brush(Tools.BRUSH) + selected_brush_prefab = BrushPrefabs.Type.V_LINE + */ +} +void PaintWindow::_on_BrushHLine_pressed() { + /* + if brush_mode != Tools.BRUSH: + set_brush(Tools.BRUSH) + selected_brush_prefab = BrushPrefabs.Type.H_LINE + */ +} +void PaintWindow::_on_BrushSize_value_changed(float value) { + /* + find_node("BrushSizeLabel").text = str(int(value)) + */ +} +void PaintWindow::_on_XSymmetry_pressed() { + /* + paint_canvas.symmetry_x = not paint_canvas.symmetry_x + */ +} +void PaintWindow::_on_YSymmetry_pressed() { + /* + paint_canvas.symmetry_y = not paint_canvas.symmetry_y + */ +} + PaintWindow::PaintWindow() { + /* + + var layer_buttons: Control + var paint_canvas_container_node + var paint_canvas: GECanvas + var canvas_background: TextureRect + var grids_node + var colors_grid + var selected_color = Color(1, 1, 1, 1) setget set_selected_color + var util = preload("res://addons/Godoxel/Util.gd") + var textinfo + var allow_drawing = true + + var mouse_in_region = false + var mouse_on_top = false + + + var _middle_mouse_pressed_pos = null + var _middle_mouse_pressed_start_pos = null + var _left_mouse_pressed_start_pos = Vector2() + var _previous_tool + var brush_mode + + var _layer_button_ref = {} + + var _total_added_layers = 1 + + var selected_brush_prefab = 0 + var _last_drawn_pixel = Vector2.ZERO + var _last_preview_draw_cell_pos = Vector2.ZERO + + var _selection_cells = [] + var _selection_colors = [] + + var _cut_pos = Vector2.ZERO + var _cut_size = Vector2.ZERO + + var _actions_history = [] # for undo + var _redo_history = [] + var _current_action + + var _last_mouse_pos_canvas_area = Vector2.ZERO + + var _picked_color = false + + var mouse_position = Vector2() + var canvas_position = Vector2() + var canvas_mouse_position = Vector2() + var cell_mouse_position = Vector2() + var cell_color = Color() + + var last_mouse_position = Vector2() + var last_canvas_position = Vector2() + var last_canvas_mouse_position = Vector2() + var last_cell_mouse_position = Vector2() + var last_cell_color = Color() + + const current_layer_highlight = Color(0.354706, 0.497302, 0.769531) + const other_layer_highlight = Color(0.180392, 0.176471, 0.176471) + const locked_layer_highlight = Color(0.098039, 0.094118, 0.094118) + + var big_grid_pixels = 4 # 1 grid-box is big_grid_pixels big + + + + #-------------------- + #Setup nodes + #-------------------- + + paint_canvas_container_node = find_node("PaintCanvasContainer") + textinfo = find_node("DebugTextDisplay") + selected_color = find_node("ColorPicker").color + colors_grid = find_node("Colors") + paint_canvas = paint_canvas_container_node.find_node("Canvas") + layer_buttons = find_node("LayerButtons") + canvas_background = find_node("CanvasBackground") + + set_process(true) + + #-------------------- + #connect nodes + #-------------------- + if not colors_grid.is_connected("color_change_request", self, "change_color"): + colors_grid.connect("color_change_request", self, "change_color") + + if not is_connected("visibility_changed", self, "_on_Editor_visibility_changed"): + connect("visibility_changed", self, "_on_Editor_visibility_changed") + + find_node("CanvasBackground").material.set_shader_param( + "pixel_size", 8 * pow(0.5, big_grid_pixels)/paint_canvas.pixel_size) + + # ready + + set_brush(Tools.PAINT) + _layer_button_ref[layer_buttons.get_child(0).name] = layer_buttons.get_child(0) #ugly + _connect_layer_buttons() + highlight_layer(paint_canvas.get_active_layer().name) + + find_node("BrushSizeLabel").text = str(int(find_node("BrushSize").value)) + + paint_canvas.update() + + */ + + /* + + [gd_scene load_steps=56 format=2] + + [ext_resource path="res://addons/Godoxel/Editor.gd" type="Script" id=1] + [ext_resource path="res://addons/Godoxel/dialogs/LoadFileDialog.gd" type="Script" id=2] + [ext_resource path="res://addons/Godoxel/Canvas.gd" type="Script" id=3] + [ext_resource path="res://addons/Godoxel/VisualGrid.tscn" type="PackedScene" id=4] + [ext_resource path="res://addons/Godoxel/CanvasOutline.gd" type="Script" id=5] + [ext_resource path="res://addons/Godoxel/Navbar.gd" type="Script" id=6] + [ext_resource path="res://addons/Godoxel/MenuButtonExtended.gd" type="Script" id=7] + [ext_resource path="res://addons/Godoxel/Colors.gd" type="Script" id=8] + [ext_resource path="res://addons/Godoxel/SaveFileDialog.gd" type="Script" id=9] + [ext_resource path="res://addons/Godoxel/Settings.tscn" type="PackedScene" id=10] + [ext_resource path="res://addons/Godoxel/DebugTextDisplay.gd" type="Script" id=11] + [ext_resource path="res://addons/Godoxel/LayerButton.tscn" type="PackedScene" id=12] + [ext_resource path="res://addons/Godoxel/assets/grid.png" type="Texture" id=13] + [ext_resource path="res://addons/Godoxel/dialogs/ConfirmationDialog.gd" type="Script" id=14] + [ext_resource path="res://addons/Godoxel/dialogs/ChangeGridSizeDialog.gd" type="Script" id=15] + [ext_resource path="res://addons/Godoxel/assets/BrushVLine.png" type="Texture" id=16] + [ext_resource path="res://addons/Godoxel/assets/BrushRect.png" type="Texture" id=17] + [ext_resource path="res://addons/Godoxel/assets/BrushCircle.png" type="Texture" id=18] + [ext_resource path="res://addons/Godoxel/assets/BrushHLine.png" type="Texture" id=19] + [ext_resource path="res://addons/Godoxel/assets/BrushRect_Hovered.png" type="Texture" id=20] + [ext_resource path="res://addons/Godoxel/assets/BrushCircle_Hovered.png" type="Texture" id=21] + [ext_resource path="res://addons/Godoxel/assets/BrushVLine_Hovered.png" type="Texture" id=22] + [ext_resource path="res://addons/Godoxel/assets/BrushHLine_Hovered.png" type="Texture" id=23] + + [sub_resource type="StyleBoxFlat" id=7] + bg_color = Color( 0.2, 0.2, 0.2, 1 ) + + [sub_resource type="StyleBoxFlat" id=33] + bg_color = Color( 0.397716, 0.0538159, 0.114134, 1 ) + + [sub_resource type="StyleBoxFlat" id=34] + bg_color = Color( 0.989919, 0.990908, 0.315986, 1 ) + + [sub_resource type="StyleBoxFlat" id=35] + bg_color = Color( 0.563746, 0.536825, 0.218219, 1 ) + + [sub_resource type="StyleBoxFlat" id=36] + bg_color = Color( 0.336323, 0.0659741, 0.163289, 1 ) + + [sub_resource type="StyleBoxFlat" id=37] + bg_color = Color( 0.240192, 0.37346, 0.330661, 1 ) + + [sub_resource type="StyleBoxFlat" id=38] + bg_color = Color( 0.369256, 0.97379, 0.216537, 1 ) + + [sub_resource type="StyleBoxFlat" id=39] + bg_color = Color( 0.755049, 0.491349, 0.826652, 1 ) + + [sub_resource type="StyleBoxFlat" id=40] + bg_color = Color( 0.848742, 0.0115273, 0.122094, 1 ) + + [sub_resource type="StyleBoxFlat" id=41] + bg_color = Color( 0.920589, 0.44931, 0.150271, 1 ) + + [sub_resource type="StyleBoxFlat" id=42] + bg_color = Color( 0.325517, 0.694568, 0.703849, 1 ) + + [sub_resource type="StyleBoxFlat" id=43] + bg_color = Color( 0.926427, 0.334865, 0.471709, 1 ) + + [sub_resource type="StyleBoxFlat" id=44] + bg_color = Color( 0.00867083, 0.188914, 0.300704, 1 ) + + [sub_resource type="StyleBoxFlat" id=45] + bg_color = Color( 0.501144, 0.687167, 0.52919, 1 ) + + [sub_resource type="StyleBoxFlat" id=46] + bg_color = Color( 0.953225, 0.374313, 0.443307, 1 ) + + [sub_resource type="StyleBoxFlat" id=47] + bg_color = Color( 0.0121565, 0.599621, 0.868357, 1 ) + + [sub_resource type="StyleBoxFlat" id=48] + bg_color = Color( 0.245633, 0.583044, 0.20955, 1 ) + + [sub_resource type="StyleBoxFlat" id=49] + bg_color = Color( 0.510868, 0.721501, 0.544154, 1 ) + + [sub_resource type="StyleBoxFlat" id=50] + bg_color = Color( 0.786819, 0.162435, 0.309762, 1 ) + + [sub_resource type="StyleBoxFlat" id=51] + bg_color = Color( 0.772837, 0.467272, 0.0682784, 1 ) + + [sub_resource type="StyleBoxFlat" id=52] + bg_color = Color( 0.753402, 0.362869, 0.343818, 1 ) + + [sub_resource type="StyleBoxFlat" id=53] + bg_color = Color( 0.0699588, 0.589297, 0.290648, 1 ) + + [sub_resource type="StyleBoxFlat" id=54] + bg_color = Color( 0.443224, 0.249702, 0.838284, 1 ) + + [sub_resource type="StyleBoxFlat" id=55] + bg_color = Color( 0.660357, 0.11075, 0.876227, 1 ) + + [sub_resource type="StyleBoxFlat" id=56] + bg_color = Color( 0.296861, 0.400053, 0.915836, 1 ) + + [sub_resource type="Shader" id=1] + code = "shader_type canvas_item; + + uniform float pixel_size : hint_range(0.01, 1.0); + + + void fragment() { + vec4 color = texture(TEXTURE, UV); + + float light = 0.8; + float dark = 0.4; + + float val = dark; + + if ( int(UV.y * 8.0 * pixel_size) % 2 == 1 ) { + if ( int(UV.x * 8.0 * pixel_size) % 2 == 1 ) { + val = dark; + } + else { + val = light; + } + } + else { + if ( int(UV.x * 8.0 * pixel_size) % 2 == 1 ) { + val = light; + } + else { + val = dark; + } + } + + color.rgb = vec3(val, val, val); + + COLOR = color; + }" + + [sub_resource type="ShaderMaterial" id=2] + shader = SubResource( 1 ) + shader_param/pixel_size = 0.125 + + [sub_resource type="Image" id=57] + data = { + "data": PoolByteArray( 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0 ), + "format": "RGBA8", + "height": 64, + "mipmaps": false, + "width": 64 + } + + [sub_resource type="ImageTexture" id=58] + flags = 0 + flags = 0 + image = SubResource( 57 ) + size = Vector2( 64, 64 ) + + [sub_resource type="Image" id=59] + data = { + "data": PoolByteArray( 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0 ), + "format": "RGBA8", + "height": 64, + "mipmaps": false, + "width": 64 + } + + [sub_resource type="ImageTexture" id=60] + flags = 0 + flags = 0 + image = SubResource( 59 ) + size = Vector2( 64, 64 ) + + [sub_resource type="StyleBoxFlat" id=32] + bg_color = Color( 0.156863, 0.156863, 0.156863, 1 ) + border_width_top = 2 + border_color = Color( 0.0901961, 0.0901961, 0.0901961, 1 ) + + [node name="Editor" type="Control"] + anchor_right = 1.0 + anchor_bottom = 1.0 + rect_clip_content = true + size_flags_horizontal = 3 + size_flags_vertical = 3 + script = ExtResource( 1 ) + __meta__ = { + "_edit_use_anchors_": false + } + + [node name="Panel" type="Panel" parent="."] + anchor_right = 1.0 + anchor_bottom = 1.0 + __meta__ = { + "_edit_use_anchors_": false + } + + [node name="NoBCViewportsnotworking26181" type="VBoxContainer" parent="Panel"] + anchor_right = 1.0 + anchor_bottom = 1.0 + __meta__ = { + "_edit_lock_": true, + "_editor_description_": "https://github.com/godotengine/godot/issues/26181" + } + + [node name="Navbar" type="HBoxContainer" parent="Panel/NoBCViewportsnotworking26181"] + margin_right = 1024.0 + margin_bottom = 20.0 + size_flags_horizontal = 3 + script = ExtResource( 6 ) + __meta__ = { + "_edit_use_anchors_": false + } + + [node name="Buttons" type="HBoxContainer" parent="Panel/NoBCViewportsnotworking26181/Navbar"] + margin_right = 430.0 + margin_bottom = 20.0 + custom_constants/separation = 20 + __meta__ = { + "_edit_use_anchors_": true + } + + [node name="File" type="MenuButton" parent="Panel/NoBCViewportsnotworking26181/Navbar/Buttons"] + margin_right = 35.0 + margin_bottom = 20.0 + size_flags_horizontal = 3 + size_flags_vertical = 3 + text = "File" + flat = false + items = [ "New", null, 0, false, false, 0, 0, null, "", false, "Save", null, 0, false, false, 1, 0, null, "", false, "Load", null, 0, false, false, 2, 0, null, "", false ] + switch_on_hover = true + script = ExtResource( 7 ) + + [node name="Edit" type="MenuButton" parent="Panel/NoBCViewportsnotworking26181/Navbar/Buttons"] + margin_left = 55.0 + margin_right = 91.0 + margin_bottom = 20.0 + size_flags_horizontal = 3 + size_flags_vertical = 3 + disabled = true + text = "Edit" + flat = false + items = [ "Undo", null, 0, false, false, 0, 0, null, "", false, "Redo", null, 0, false, false, 1, 0, null, "", false, "Cut", null, 0, false, false, 2, 0, null, "", false, "Copy", null, 0, false, false, 3, 0, null, "", false, "Paste", null, 0, false, false, 4, 0, null, "", false ] + switch_on_hover = true + script = ExtResource( 7 ) + + [node name="Canvas" type="MenuButton" parent="Panel/NoBCViewportsnotworking26181/Navbar/Buttons"] + margin_left = 111.0 + margin_right = 167.0 + margin_bottom = 20.0 + size_flags_horizontal = 3 + size_flags_vertical = 3 + text = "Canvas" + flat = false + items = [ "Change Size", null, 0, false, false, 0, 0, null, "", false, "Crop To Content", null, 0, false, true, 1, 0, null, "", false ] + switch_on_hover = true + script = ExtResource( 7 ) + + [node name="Layer" type="MenuButton" parent="Panel/NoBCViewportsnotworking26181/Navbar/Buttons"] + margin_left = 187.0 + margin_right = 233.0 + margin_bottom = 20.0 + size_flags_horizontal = 3 + size_flags_vertical = 3 + text = "Layer" + flat = false + items = [ "Add Layer", null, 0, false, false, 0, 0, null, "", false, "Delete Layer", null, 0, false, false, 1, 0, null, "", false, "Duplicate Layer", null, 0, false, false, 2, 0, null, "", false, "Clear Layer", null, 0, false, false, 3, 0, null, "", false, "", null, 0, false, false, 4, 0, null, "", true, "Toggle Alpha Locked", null, 1, false, false, 5, 0, null, "", false ] + switch_on_hover = true + script = ExtResource( 7 ) + + [node name="Grid" type="MenuButton" parent="Panel/NoBCViewportsnotworking26181/Navbar/Buttons"] + margin_left = 253.0 + margin_right = 292.0 + margin_bottom = 20.0 + size_flags_horizontal = 3 + size_flags_vertical = 3 + text = "Grid" + flat = false + items = [ "Toggle Grid", null, 0, false, false, 0, 0, null, "", false, "Change Grid Size", null, 0, false, false, 1, 0, null, "", false ] + switch_on_hover = true + script = ExtResource( 7 ) + + [node name="Magic" type="MenuButton" parent="Panel/NoBCViewportsnotworking26181/Navbar/Buttons"] + margin_left = 312.0 + margin_right = 361.0 + margin_bottom = 20.0 + size_flags_horizontal = 3 + size_flags_vertical = 3 + text = "Magic" + flat = false + items = [ "ChangeSingleColor", null, 0, false, false, 0, 0, null, "", false, "ChangeColorRange", null, 0, false, false, 1, 0, null, "", false, "HSV Noise", null, 0, false, false, 2, 0, null, "", false, "HSV Color Modulation", null, 0, false, false, 3, 0, null, "", false ] + switch_on_hover = true + script = ExtResource( 7 ) + + [node name="Editor" type="MenuButton" parent="Panel/NoBCViewportsnotworking26181/Navbar/Buttons"] + margin_left = 381.0 + margin_right = 430.0 + margin_bottom = 20.0 + size_flags_horizontal = 3 + size_flags_vertical = 3 + text = "Editor" + flat = false + items = [ "Settings", null, 0, false, false, 0, 0, null, "", false ] + switch_on_hover = true + script = ExtResource( 7 ) + __meta__ = { + "_edit_use_anchors_": false + } + + [node name="Control" type="Control" parent="Panel/NoBCViewportsnotworking26181/Navbar"] + margin_left = 434.0 + margin_right = 907.0 + margin_bottom = 20.0 + size_flags_horizontal = 3 + + [node name="Label" type="Label" parent="Panel/NoBCViewportsnotworking26181/Navbar"] + modulate = Color( 1, 1, 1, 0.184314 ) + margin_left = 911.0 + margin_top = 3.0 + margin_right = 1024.0 + margin_bottom = 17.0 + text = "Undo (Z) Redo (Y)" + align = 1 + valign = 1 + __meta__ = { + "_edit_use_anchors_": false + } + + [node name="Control" type="HBoxContainer" parent="Panel/NoBCViewportsnotworking26181"] + margin_top = 24.0 + margin_right = 1024.0 + margin_bottom = 556.0 + size_flags_horizontal = 3 + size_flags_vertical = 3 + + [node name="LeftPanel" type="PanelContainer" parent="Panel/NoBCViewportsnotworking26181/Control"] + margin_right = 157.0 + margin_bottom = 532.0 + size_flags_horizontal = 3 + size_flags_vertical = 3 + custom_styles/panel = SubResource( 7 ) + __meta__ = { + "_editor_description_": "" + } + + [node name="MarginContainer" type="MarginContainer" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel"] + margin_right = 157.0 + margin_bottom = 532.0 + __meta__ = { + "_edit_use_anchors_": false + } + + [node name="VBoxContainer" type="VBoxContainer" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer"] + margin_right = 157.0 + margin_bottom = 532.0 + custom_constants/separation = 12 + __meta__ = { + "_edit_use_anchors_": false + } + + [node name="ScrollContainer" type="ScrollContainer" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer"] + margin_right = 157.0 + margin_bottom = 144.0 + rect_min_size = Vector2( 0, 144 ) + __meta__ = { + "_edit_use_anchors_": false + } + + [node name="Colors" type="GridContainer" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer"] + margin_right = 145.0 + margin_bottom = 170.0 + rect_min_size = Vector2( 0, 144 ) + size_flags_horizontal = 3 + size_flags_vertical = 3 + columns = 4 + script = ExtResource( 8 ) + + [node name="Button1" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] + margin_right = 33.0 + margin_bottom = 25.0 + rect_min_size = Vector2( 25, 25 ) + size_flags_horizontal = 3 + size_flags_vertical = 3 + custom_styles/normal = SubResource( 33 ) + + [node name="Button2" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] + margin_left = 37.0 + margin_right = 70.0 + margin_bottom = 25.0 + rect_min_size = Vector2( 25, 25 ) + size_flags_horizontal = 3 + size_flags_vertical = 3 + custom_styles/normal = SubResource( 34 ) + + [node name="Button3" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] + margin_left = 74.0 + margin_right = 107.0 + margin_bottom = 25.0 + rect_min_size = Vector2( 25, 25 ) + size_flags_horizontal = 3 + size_flags_vertical = 3 + custom_styles/normal = SubResource( 35 ) + + [node name="Button4" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] + margin_left = 111.0 + margin_right = 144.0 + margin_bottom = 25.0 + rect_min_size = Vector2( 25, 25 ) + size_flags_horizontal = 3 + size_flags_vertical = 3 + custom_styles/normal = SubResource( 36 ) + + [node name="Button5" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] + margin_top = 29.0 + margin_right = 33.0 + margin_bottom = 54.0 + rect_min_size = Vector2( 25, 25 ) + size_flags_horizontal = 3 + size_flags_vertical = 3 + custom_styles/normal = SubResource( 37 ) + + [node name="Button6" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] + margin_left = 37.0 + margin_top = 29.0 + margin_right = 70.0 + margin_bottom = 54.0 + rect_min_size = Vector2( 25, 25 ) + size_flags_horizontal = 3 + size_flags_vertical = 3 + custom_styles/normal = SubResource( 38 ) + + [node name="Button7" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] + margin_left = 74.0 + margin_top = 29.0 + margin_right = 107.0 + margin_bottom = 54.0 + rect_min_size = Vector2( 25, 25 ) + size_flags_horizontal = 3 + size_flags_vertical = 3 + custom_styles/normal = SubResource( 39 ) + + [node name="Button8" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] + margin_left = 111.0 + margin_top = 29.0 + margin_right = 144.0 + margin_bottom = 54.0 + rect_min_size = Vector2( 25, 25 ) + size_flags_horizontal = 3 + size_flags_vertical = 3 + custom_styles/normal = SubResource( 40 ) + + [node name="Button9" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] + margin_top = 58.0 + margin_right = 33.0 + margin_bottom = 83.0 + rect_min_size = Vector2( 25, 25 ) + size_flags_horizontal = 3 + size_flags_vertical = 3 + custom_styles/normal = SubResource( 41 ) + + [node name="Button10" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] + margin_left = 37.0 + margin_top = 58.0 + margin_right = 70.0 + margin_bottom = 83.0 + rect_min_size = Vector2( 25, 25 ) + size_flags_horizontal = 3 + size_flags_vertical = 3 + custom_styles/normal = SubResource( 42 ) + + [node name="Button11" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] + margin_left = 74.0 + margin_top = 58.0 + margin_right = 107.0 + margin_bottom = 83.0 + rect_min_size = Vector2( 25, 25 ) + size_flags_horizontal = 3 + size_flags_vertical = 3 + custom_styles/normal = SubResource( 43 ) + + [node name="Button12" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] + margin_left = 111.0 + margin_top = 58.0 + margin_right = 144.0 + margin_bottom = 83.0 + rect_min_size = Vector2( 25, 25 ) + size_flags_horizontal = 3 + size_flags_vertical = 3 + custom_styles/normal = SubResource( 44 ) + + [node name="Button13" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] + margin_top = 87.0 + margin_right = 33.0 + margin_bottom = 112.0 + rect_min_size = Vector2( 25, 25 ) + size_flags_horizontal = 3 + size_flags_vertical = 3 + custom_styles/normal = SubResource( 45 ) + + [node name="Button14" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] + margin_left = 37.0 + margin_top = 87.0 + margin_right = 70.0 + margin_bottom = 112.0 + rect_min_size = Vector2( 25, 25 ) + size_flags_horizontal = 3 + size_flags_vertical = 3 + custom_styles/normal = SubResource( 46 ) + + [node name="Button15" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] + margin_left = 74.0 + margin_top = 87.0 + margin_right = 107.0 + margin_bottom = 112.0 + rect_min_size = Vector2( 25, 25 ) + size_flags_horizontal = 3 + size_flags_vertical = 3 + custom_styles/normal = SubResource( 47 ) + + [node name="Button16" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] + margin_left = 111.0 + margin_top = 87.0 + margin_right = 144.0 + margin_bottom = 112.0 + rect_min_size = Vector2( 25, 25 ) + size_flags_horizontal = 3 + size_flags_vertical = 3 + custom_styles/normal = SubResource( 48 ) + + [node name="Button17" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] + margin_top = 116.0 + margin_right = 33.0 + margin_bottom = 141.0 + rect_min_size = Vector2( 25, 25 ) + size_flags_horizontal = 3 + size_flags_vertical = 3 + custom_styles/normal = SubResource( 49 ) + + [node name="Button18" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] + margin_left = 37.0 + margin_top = 116.0 + margin_right = 70.0 + margin_bottom = 141.0 + rect_min_size = Vector2( 25, 25 ) + size_flags_horizontal = 3 + size_flags_vertical = 3 + custom_styles/normal = SubResource( 50 ) + + [node name="Button19" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] + margin_left = 74.0 + margin_top = 116.0 + margin_right = 107.0 + margin_bottom = 141.0 + rect_min_size = Vector2( 25, 25 ) + size_flags_horizontal = 3 + size_flags_vertical = 3 + custom_styles/normal = SubResource( 51 ) + + [node name="Button20" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] + margin_left = 111.0 + margin_top = 116.0 + margin_right = 144.0 + margin_bottom = 141.0 + rect_min_size = Vector2( 25, 25 ) + size_flags_horizontal = 3 + size_flags_vertical = 3 + custom_styles/normal = SubResource( 52 ) + + [node name="Button21" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] + margin_top = 145.0 + margin_right = 33.0 + margin_bottom = 170.0 + rect_min_size = Vector2( 25, 25 ) + size_flags_horizontal = 3 + size_flags_vertical = 3 + custom_styles/normal = SubResource( 53 ) + + [node name="Button22" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] + margin_left = 37.0 + margin_top = 145.0 + margin_right = 70.0 + margin_bottom = 170.0 + rect_min_size = Vector2( 25, 25 ) + size_flags_horizontal = 3 + size_flags_vertical = 3 + custom_styles/normal = SubResource( 54 ) + + [node name="Button23" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] + margin_left = 74.0 + margin_top = 145.0 + margin_right = 107.0 + margin_bottom = 170.0 + rect_min_size = Vector2( 25, 25 ) + size_flags_horizontal = 3 + size_flags_vertical = 3 + custom_styles/normal = SubResource( 55 ) + + [node name="Button24" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/ScrollContainer/Colors"] + margin_left = 111.0 + margin_top = 145.0 + margin_right = 144.0 + margin_bottom = 170.0 + rect_min_size = Vector2( 25, 25 ) + size_flags_horizontal = 3 + size_flags_vertical = 3 + custom_styles/normal = SubResource( 56 ) + + [node name="VBoxContainer" type="VBoxContainer" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer"] + margin_top = 156.0 + margin_right = 157.0 + margin_bottom = 196.0 + + [node name="LockAlpha" type="CheckButton" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/VBoxContainer"] + margin_right = 157.0 + margin_bottom = 40.0 + text = "Lock Alpha" + align = 2 + + [node name="BrushSelection" type="GridContainer" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer"] + margin_top = 208.0 + margin_right = 157.0 + margin_bottom = 233.0 + columns = 4 + + [node name="BrushRect" type="TextureButton" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/BrushSelection"] + margin_right = 25.0 + margin_bottom = 25.0 + rect_min_size = Vector2( 25, 25 ) + texture_normal = ExtResource( 17 ) + texture_hover = ExtResource( 20 ) + + [node name="BrushCircle" type="TextureButton" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/BrushSelection"] + margin_left = 29.0 + margin_right = 54.0 + margin_bottom = 25.0 + rect_min_size = Vector2( 25, 25 ) + texture_normal = ExtResource( 18 ) + texture_hover = ExtResource( 21 ) + + [node name="BrushVLine" type="TextureButton" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/BrushSelection"] + margin_left = 58.0 + margin_right = 83.0 + margin_bottom = 25.0 + rect_min_size = Vector2( 25, 25 ) + texture_normal = ExtResource( 16 ) + texture_hover = ExtResource( 22 ) + + [node name="BrushHLine" type="TextureButton" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/BrushSelection"] + margin_left = 87.0 + margin_right = 112.0 + margin_bottom = 25.0 + rect_min_size = Vector2( 25, 25 ) + texture_normal = ExtResource( 19 ) + texture_hover = ExtResource( 23 ) + + [node name="VSplitContainer" type="VBoxContainer" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer"] + margin_top = 245.0 + margin_right = 157.0 + margin_bottom = 279.0 + size_flags_horizontal = 3 + + [node name="BrushLabel" type="Label" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/VSplitContainer"] + margin_right = 157.0 + margin_bottom = 14.0 + text = "Brush Size" + + [node name="HBoxContainer" type="HBoxContainer" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/VSplitContainer"] + margin_top = 18.0 + margin_right = 157.0 + margin_bottom = 34.0 + + [node name="BrushSizeLabel" type="Label" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/VSplitContainer/HBoxContainer"] + margin_top = 1.0 + margin_right = 30.0 + margin_bottom = 15.0 + rect_min_size = Vector2( 30, 0 ) + text = "1" + + [node name="BrushSize" type="HSlider" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/VSplitContainer/HBoxContainer"] + margin_left = 34.0 + margin_right = 157.0 + margin_bottom = 16.0 + size_flags_horizontal = 3 + size_flags_vertical = 2 + min_value = 1.0 + value = 1.0 + + [node name="XSymmetry" type="CheckButton" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer"] + margin_top = 291.0 + margin_right = 157.0 + margin_bottom = 331.0 + text = "X Symmetry" + + [node name="YSymmetry" type="CheckButton" parent="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer"] + margin_top = 343.0 + margin_right = 157.0 + margin_bottom = 383.0 + text = "Y Symmetry" + + [node name="PaintCanvasContainer" type="Control" parent="Panel/NoBCViewportsnotworking26181/Control"] + margin_left = 161.0 + margin_right = 897.0 + margin_bottom = 532.0 + rect_clip_content = true + focus_mode = 1 + mouse_filter = 1 + size_flags_horizontal = 3 + size_flags_vertical = 3 + size_flags_stretch_ratio = 6.0 + __meta__ = { + "_edit_use_anchors_": true + } + + [node name="Canvas" type="Control" parent="Panel/NoBCViewportsnotworking26181/Control/PaintCanvasContainer"] + anchor_left = 0.5 + anchor_top = 0.5 + anchor_right = 0.5 + anchor_bottom = 0.5 + margin_left = -124.252 + margin_top = -118.205 + margin_right = 131.748 + margin_bottom = 137.795 + mouse_filter = 1 + size_flags_horizontal = 3 + size_flags_vertical = 3 + script = ExtResource( 3 ) + __meta__ = { + "_edit_group_": true, + "_edit_use_anchors_": false + } + pixel_size = 4 + canvas_width = 64 + canvas_height = 64 + grid_size = 1 + big_grid_size = 8 + + [node name="CanvasBackground" type="TextureRect" parent="Panel/NoBCViewportsnotworking26181/Control/PaintCanvasContainer/Canvas"] + show_behind_parent = true + material = SubResource( 2 ) + anchor_right = 1.0 + anchor_bottom = 1.0 + texture = ExtResource( 13 ) + expand = true + stretch_mode = 2 + __meta__ = { + "_edit_lock_": true + } + + [node name="CanvasLayers" type="Control" parent="Panel/NoBCViewportsnotworking26181/Control/PaintCanvasContainer/Canvas"] + anchor_right = 1.0 + anchor_bottom = 1.0 + mouse_filter = 2 + __meta__ = { + "_edit_lock_": true, + "_edit_use_anchors_": false + } + + [node name="PreviewLayer" type="TextureRect" parent="Panel/NoBCViewportsnotworking26181/Control/PaintCanvasContainer/Canvas"] + anchor_right = 1.0 + anchor_bottom = 1.0 + mouse_filter = 2 + texture = SubResource( 58 ) + expand = true + __meta__ = { + "_edit_use_anchors_": false + } + + [node name="ToolPreviewLayer" type="TextureRect" parent="Panel/NoBCViewportsnotworking26181/Control/PaintCanvasContainer/Canvas"] + anchor_right = 1.0 + anchor_bottom = 1.0 + mouse_filter = 2 + texture = SubResource( 60 ) + expand = true + __meta__ = { + "_edit_use_anchors_": false + } + + [node name="Grid" parent="Panel/NoBCViewportsnotworking26181/Control/PaintCanvasContainer/Canvas" instance=ExtResource( 4 )] + mouse_filter = 2 + color = Color( 1, 1, 1, 0.415686 ) + size = 4 + + [node name="CanvasOutline" type="Control" parent="Panel/NoBCViewportsnotworking26181/Control/PaintCanvasContainer/Canvas"] + anchor_right = 1.0 + anchor_bottom = 1.0 + mouse_filter = 2 + script = ExtResource( 5 ) + __meta__ = { + "_edit_lock_": true, + "_edit_use_anchors_": false + } + color = Color( 0, 1, 0, 1 ) + + [node name="RightPanel" type="PanelContainer" parent="Panel/NoBCViewportsnotworking26181/Control"] + margin_left = 901.0 + margin_right = 1024.0 + margin_bottom = 532.0 + size_flags_horizontal = 3 + size_flags_vertical = 3 + custom_styles/panel = SubResource( 7 ) + + [node name="ScrollContainer" type="ScrollContainer" parent="Panel/NoBCViewportsnotworking26181/Control/RightPanel"] + margin_right = 123.0 + margin_bottom = 532.0 + size_flags_horizontal = 3 + size_flags_vertical = 3 + __meta__ = { + "_edit_use_anchors_": false + } + + [node name="ToolMenu" type="VBoxContainer" parent="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer"] + margin_right = 123.0 + margin_bottom = 532.0 + size_flags_horizontal = 3 + size_flags_vertical = 3 + + [node name="Tools" type="VBoxContainer" parent="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu"] + margin_right = 123.0 + margin_bottom = 236.0 + size_flags_horizontal = 3 + + [node name="PaintTool" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools"] + margin_right = 123.0 + margin_bottom = 20.0 + size_flags_horizontal = 3 + size_flags_vertical = 3 + text = "Pencil (Q)" + + [node name="BrushTool" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools"] + visible = false + margin_top = 24.0 + margin_right = 132.0 + margin_bottom = 44.0 + size_flags_horizontal = 3 + size_flags_vertical = 3 + text = "Brush" + + [node name="MultiTool" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools"] + visible = false + margin_top = 24.0 + margin_right = 132.0 + margin_bottom = 44.0 + size_flags_horizontal = 3 + size_flags_vertical = 3 + text = "Polygon" + __meta__ = { + "_edit_use_anchors_": false + } + + [node name="BucketTool" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools"] + margin_top = 24.0 + margin_right = 123.0 + margin_bottom = 44.0 + size_flags_horizontal = 3 + size_flags_vertical = 3 + text = "Bucket Fill (F)" + __meta__ = { + "_edit_use_anchors_": false + } + + [node name="RainbowTool" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools"] + margin_top = 48.0 + margin_right = 123.0 + margin_bottom = 68.0 + size_flags_horizontal = 3 + size_flags_vertical = 3 + text = "Rainbow (R)" + __meta__ = { + "_edit_use_anchors_": false + } + + [node name="LineTool" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools"] + margin_top = 72.0 + margin_right = 123.0 + margin_bottom = 92.0 + size_flags_horizontal = 3 + size_flags_vertical = 3 + text = "Line (L)" + __meta__ = { + "_edit_use_anchors_": false + } + + [node name="RectTool" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools"] + margin_top = 96.0 + margin_right = 123.0 + margin_bottom = 116.0 + size_flags_horizontal = 3 + size_flags_vertical = 3 + text = "Rectangle" + __meta__ = { + "_edit_use_anchors_": false + } + + [node name="DarkenTool" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools"] + margin_top = 120.0 + margin_right = 123.0 + margin_bottom = 140.0 + size_flags_horizontal = 3 + size_flags_vertical = 3 + text = "Darken (D)" + __meta__ = { + "_edit_use_anchors_": false + } + + [node name="BrightenTool" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools"] + margin_top = 144.0 + margin_right = 123.0 + margin_bottom = 164.0 + size_flags_horizontal = 3 + size_flags_vertical = 3 + text = "Brighten (B)" + __meta__ = { + "_edit_use_anchors_": false + } + + [node name="ColorPickerTool" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools"] + margin_top = 168.0 + margin_right = 123.0 + margin_bottom = 188.0 + size_flags_horizontal = 3 + size_flags_vertical = 3 + text = "Color Picker (P)" + __meta__ = { + "_edit_use_anchors_": false + } + + [node name="CutTool" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools"] + margin_top = 192.0 + margin_right = 123.0 + margin_bottom = 212.0 + size_flags_horizontal = 3 + size_flags_vertical = 3 + text = "Cut Section (C)" + __meta__ = { + "_edit_use_anchors_": false + } + + [node name="ColorPicker" type="ColorPickerButton" parent="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools"] + margin_top = 216.0 + margin_right = 123.0 + margin_bottom = 236.0 + size_flags_horizontal = 3 + size_flags_vertical = 3 + __meta__ = { + "_edit_use_anchors_": false + } + + [node name="Control" type="ScrollContainer" parent="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu"] + margin_top = 240.0 + margin_right = 123.0 + margin_bottom = 532.0 + size_flags_vertical = 3 + + [node name="VBoxContainer" type="VBoxContainer" parent="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Control"] + margin_right = 123.0 + margin_bottom = 292.0 + size_flags_horizontal = 3 + size_flags_vertical = 3 + + [node name="LayerButtons" type="VBoxContainer" parent="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Control/VBoxContainer"] + margin_right = 123.0 + margin_bottom = 263.0 + size_flags_horizontal = 3 + size_flags_vertical = 3 + __meta__ = { + "_edit_use_anchors_": false + } + + [node name="Layer1" parent="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Control/VBoxContainer/LayerButtons" instance=ExtResource( 12 )] + anchor_right = 0.0 + anchor_bottom = 0.0 + margin_right = 123.0 + margin_bottom = 32.0 + + [node name="Button" type="Button" parent="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Control/VBoxContainer"] + margin_top = 267.0 + margin_right = 123.0 + margin_bottom = 292.0 + rect_min_size = Vector2( 0, 25 ) + size_flags_horizontal = 3 + text = "+" + __meta__ = { + "_edit_use_anchors_": false + } + + [node name="BottomPanel" type="Panel" parent="Panel/NoBCViewportsnotworking26181"] + margin_top = 560.0 + margin_right = 1024.0 + margin_bottom = 600.0 + rect_min_size = Vector2( 0, 40 ) + size_flags_horizontal = 3 + custom_styles/panel = SubResource( 32 ) + __meta__ = { + "_edit_group_": true, + "_edit_use_anchors_": true + } + + [node name="DebugTextDisplay" type="RichTextLabel" parent="Panel/NoBCViewportsnotworking26181/BottomPanel"] + anchor_right = 1.0 + anchor_bottom = 1.0 + text = "FPS 58 Mouse Position (1122.090332, 370.304382) Canvas Mouse Position (717.342346, 198.509415) Canvas Position (404.747986, 171.794968) + Cell Position (0, 0) Cell Color 0,0,0,0 " + scroll_active = false + script = ExtResource( 11 ) + __meta__ = { + "_edit_use_anchors_": false + } + + [node name="SaveFileDialog" type="FileDialog" parent="."] + anchor_left = 0.5 + anchor_top = 0.5 + anchor_right = 0.5 + anchor_bottom = 0.5 + margin_left = -340.0 + margin_top = -165.0 + margin_right = 340.0 + margin_bottom = 165.0 + mouse_filter = 1 + filters = PoolStringArray( "*.png ; PNG Images" ) + show_hidden_files = true + script = ExtResource( 9 ) + + [node name="LoadFileDialog" type="FileDialog" parent="."] + anchor_left = 0.5 + anchor_top = 0.5 + anchor_right = 0.5 + anchor_bottom = 0.5 + margin_left = -340.0 + margin_top = -165.0 + margin_right = 340.0 + margin_bottom = 165.0 + mouse_filter = 1 + window_title = "Open a File" + mode = 0 + filters = PoolStringArray( "*.png ; PNG Images" ) + show_hidden_files = true + script = ExtResource( 2 ) + + [node name="Settings" parent="." instance=ExtResource( 10 )] + visible = false + anchor_left = 0.5 + anchor_top = 0.5 + anchor_right = 0.5 + anchor_bottom = 0.5 + margin_left = -150.0 + margin_top = -50.0 + margin_right = 150.0 + margin_bottom = 50.0 + mouse_filter = 1 + + [node name="ChangeCanvasSize" type="ConfirmationDialog" parent="."] + anchor_left = 0.5 + anchor_top = 0.5 + anchor_right = 0.5 + anchor_bottom = 0.5 + margin_left = -162.0 + margin_top = -69.0 + margin_right = 162.0 + margin_bottom = 69.0 + script = ExtResource( 14 ) + __meta__ = { + "_edit_use_anchors_": false + } + + [node name="VBoxContainer" type="VBoxContainer" parent="ChangeCanvasSize"] + anchor_left = 0.104938 + anchor_top = 0.108696 + anchor_right = 0.891975 + anchor_bottom = 0.695652 + margin_left = -25.9999 + margin_top = -7.00005 + margin_right = 27.0001 + margin_bottom = 6.00002 + __meta__ = { + "_edit_use_anchors_": true + } + + [node name="Label" type="Label" parent="ChangeCanvasSize/VBoxContainer"] + margin_top = 7.0 + margin_right = 308.0 + margin_bottom = 21.0 + size_flags_vertical = 6 + text = "Change canvas size?" + align = 1 + + [node name="HBoxContainer" type="HBoxContainer" parent="ChangeCanvasSize/VBoxContainer"] + margin_top = 32.0 + margin_right = 308.0 + margin_bottom = 61.0 + size_flags_horizontal = 3 + size_flags_vertical = 3 + + [node name="Label" type="Label" parent="ChangeCanvasSize/VBoxContainer/HBoxContainer"] + margin_top = 7.0 + margin_right = 152.0 + margin_bottom = 21.0 + size_flags_horizontal = 3 + size_flags_vertical = 6 + text = "Width (X)" + + [node name="Width" type="SpinBox" parent="ChangeCanvasSize/VBoxContainer/HBoxContainer"] + margin_left = 156.0 + margin_right = 308.0 + margin_bottom = 29.0 + size_flags_horizontal = 3 + size_flags_vertical = 3 + min_value = 1.0 + max_value = 2500.0 + value = 64.0 + align = 1 + __meta__ = { + "_edit_use_anchors_": false + } + + [node name="HBoxContainer2" type="HBoxContainer" parent="ChangeCanvasSize/VBoxContainer"] + margin_top = 65.0 + margin_right = 308.0 + margin_bottom = 94.0 + size_flags_horizontal = 3 + size_flags_vertical = 3 + + [node name="Label" type="Label" parent="ChangeCanvasSize/VBoxContainer/HBoxContainer2"] + margin_top = 7.0 + margin_right = 152.0 + margin_bottom = 21.0 + size_flags_horizontal = 3 + size_flags_vertical = 6 + text = "Height (Y)" + + [node name="Height" type="SpinBox" parent="ChangeCanvasSize/VBoxContainer/HBoxContainer2"] + margin_left = 156.0 + margin_right = 308.0 + margin_bottom = 29.0 + size_flags_horizontal = 3 + size_flags_vertical = 3 + min_value = 1.0 + max_value = 2500.0 + value = 64.0 + align = 1 + __meta__ = { + "_edit_use_anchors_": false + } + + [node name="ChangeGridSizeDialog" type="AcceptDialog" parent="."] + anchor_left = 0.5 + anchor_top = 0.5 + anchor_right = 0.5 + anchor_bottom = 0.5 + margin_left = -127.0 + margin_top = -74.0 + margin_right = 128.0 + margin_bottom = 73.0 + window_title = "Change Grid Size" + resizable = true + script = ExtResource( 15 ) + __meta__ = { + "_edit_use_anchors_": false + } + + [node name="VBoxContainer" type="VBoxContainer" parent="ChangeGridSizeDialog"] + anchor_left = 0.0313726 + anchor_top = 0.0816327 + anchor_right = 0.968627 + anchor_bottom = 0.727891 + margin_left = -1.23978e-05 + margin_top = -4.00001 + margin_right = 0.00012207 + margin_bottom = 4.00002 + __meta__ = { + "_edit_use_anchors_": true + } + + [node name="Label" type="Label" parent="ChangeGridSizeDialog/VBoxContainer"] + margin_right = 239.0 + margin_bottom = 31.0 + size_flags_horizontal = 3 + size_flags_vertical = 3 + text = "Change Grid Size" + align = 1 + + [node name="HBoxContainer" type="HBoxContainer" parent="ChangeGridSizeDialog/VBoxContainer"] + margin_top = 35.0 + margin_right = 239.0 + margin_bottom = 67.0 + size_flags_horizontal = 3 + size_flags_vertical = 3 + + [node name="Label" type="Label" parent="ChangeGridSizeDialog/VBoxContainer/HBoxContainer"] + margin_top = 9.0 + margin_right = 117.0 + margin_bottom = 23.0 + size_flags_horizontal = 3 + size_flags_vertical = 6 + text = "Grid 1" + + [node name="GridValue" type="SpinBox" parent="ChangeGridSizeDialog/VBoxContainer/HBoxContainer"] + margin_left = 121.0 + margin_top = 4.0 + margin_right = 239.0 + margin_bottom = 28.0 + size_flags_horizontal = 3 + size_flags_vertical = 6 + max_value = 2500.0 + value = 1.0 + + [node name="HBoxContainer2" type="HBoxContainer" parent="ChangeGridSizeDialog/VBoxContainer"] + margin_top = 71.0 + margin_right = 239.0 + margin_bottom = 103.0 + size_flags_horizontal = 3 + size_flags_vertical = 3 + + [node name="Label" type="Label" parent="ChangeGridSizeDialog/VBoxContainer/HBoxContainer2"] + margin_top = 9.0 + margin_right = 117.0 + margin_bottom = 23.0 + size_flags_horizontal = 3 + size_flags_vertical = 6 + text = "Grid 2" + + [node name="BigGridValue" type="SpinBox" parent="ChangeGridSizeDialog/VBoxContainer/HBoxContainer2"] + margin_left = 121.0 + margin_top = 4.0 + margin_right = 239.0 + margin_bottom = 28.0 + size_flags_horizontal = 3 + size_flags_vertical = 6 + max_value = 2500.0 + value = 8.0 + + [connection signal="pressed" from="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/VBoxContainer/LockAlpha" to="." method="_on_LockAlpha_pressed"] + [connection signal="pressed" from="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/BrushSelection/BrushRect" to="." method="_on_BrushRect_pressed"] + [connection signal="pressed" from="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/BrushSelection/BrushCircle" to="." method="_on_BrushCircle_pressed"] + [connection signal="pressed" from="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/BrushSelection/BrushVLine" to="." method="_on_BrushVLine_pressed"] + [connection signal="pressed" from="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/BrushSelection/BrushHLine" to="." method="_on_BrushHLine_pressed"] + [connection signal="value_changed" from="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/VSplitContainer/HBoxContainer/BrushSize" to="." method="_on_BrushSize_value_changed"] + [connection signal="pressed" from="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/XSymmetry" to="." method="_on_XSymmetry_pressed"] + [connection signal="pressed" from="Panel/NoBCViewportsnotworking26181/Control/LeftPanel/MarginContainer/VBoxContainer/YSymmetry" to="." method="_on_YSymmetry_pressed"] + [connection signal="mouse_entered" from="Panel/NoBCViewportsnotworking26181/Control/PaintCanvasContainer" to="." method="_on_PaintCanvasContainer_mouse_entered"] + [connection signal="mouse_exited" from="Panel/NoBCViewportsnotworking26181/Control/PaintCanvasContainer" to="." method="_on_PaintCanvasContainer_mouse_exited"] + [connection signal="pressed" from="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools/PaintTool" to="." method="_on_PaintTool_pressed"] + [connection signal="pressed" from="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools/BrushTool" to="." method="_on_BrushTool_pressed"] + [connection signal="pressed" from="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools/MultiTool" to="." method="_on_MultiTool_pressed"] + [connection signal="pressed" from="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools/BucketTool" to="." method="_on_BucketTool_pressed"] + [connection signal="pressed" from="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools/RainbowTool" to="." method="_on_RainbowTool_pressed"] + [connection signal="pressed" from="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools/LineTool" to="." method="_on_LineTool_pressed"] + [connection signal="pressed" from="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools/RectTool" to="." method="_on_RectTool_pressed"] + [connection signal="pressed" from="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools/DarkenTool" to="." method="_on_DarkenTool_pressed"] + [connection signal="pressed" from="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools/BrightenTool" to="." method="_on_BrightenTool_pressed"] + [connection signal="pressed" from="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools/ColorPickerTool" to="." method="_on_ColorPickerTool_pressed"] + [connection signal="pressed" from="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools/CutTool" to="." method="_on_CutTool_pressed"] + [connection signal="color_changed" from="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools/ColorPicker" to="." method="_on_ColorPicker_color_changed"] + [connection signal="popup_closed" from="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Tools/ColorPicker" to="." method="_on_ColorPicker_popup_closed"] + [connection signal="pressed" from="Panel/NoBCViewportsnotworking26181/Control/RightPanel/ScrollContainer/ToolMenu/Control/VBoxContainer/Button" to="." method="_on_Button_pressed"] + [connection signal="about_to_show" from="SaveFileDialog" to="SaveFileDialog" method="_on_SaveFileDialog_about_to_show"] + [connection signal="confirmed" from="SaveFileDialog" to="SaveFileDialog" method="_on_SaveFileDialog_confirmed"] + [connection signal="file_selected" from="SaveFileDialog" to="SaveFileDialog" method="_on_SaveFileDialog_file_selected"] + [connection signal="visibility_changed" from="SaveFileDialog" to="SaveFileDialog" method="_on_SaveFileDialog_visibility_changed"] + [connection signal="about_to_show" from="LoadFileDialog" to="LoadFileDialog" method="_on_LoadFileDialog_about_to_show"] + [connection signal="confirmed" from="LoadFileDialog" to="LoadFileDialog" method="_on_LoadFileDialog_confirmed"] + [connection signal="file_selected" from="LoadFileDialog" to="LoadFileDialog" method="_on_LoadFileDialog_file_selected"] + [connection signal="visibility_changed" from="LoadFileDialog" to="LoadFileDialog" method="_on_LoadFileDialog_visibility_changed"] + [connection signal="confirmed" from="ChangeCanvasSize" to="ChangeCanvasSize" method="_on_ConfirmationDialog_confirmed"] + [connection signal="visibility_changed" from="ChangeCanvasSize" to="ChangeCanvasSize" method="_on_ChangeCanvasSize_visibility_changed"] + [connection signal="confirmed" from="ChangeGridSizeDialog" to="ChangeGridSizeDialog" method="_on_ChangeGridSizeDialog_confirmed"] + [connection signal="visibility_changed" from="ChangeGridSizeDialog" to="ChangeGridSizeDialog" method="_on_ChangeGridSizeDialog_visibility_changed"] + [connection signal="value_changed" from="ChangeGridSizeDialog/VBoxContainer/HBoxContainer/GridValue" to="ChangeGridSizeDialog" method="_on_GridValue_value_changed"] + [connection signal="value_changed" from="ChangeGridSizeDialog/VBoxContainer/HBoxContainer2/BigGridValue" to="ChangeGridSizeDialog" method="_on_BigGridValue_value_changed"] + + + */ } PaintWindow::~PaintWindow() { diff --git a/modules/paint/paint_window.h b/modules/paint/paint_window.h index fc3b026ba..4e1aa5712 100644 --- a/modules/paint/paint_window.h +++ b/modules/paint/paint_window.h @@ -27,15 +27,192 @@ SOFTWARE. #include "scene/gui/control.h" +#include "core/os/keyboard.h" +#include "core/reference.h" + +class PaintAction; +class PaintCanvasLayer; +class InputEvent; + class PaintWindow : public Control { GDCLASS(PaintWindow, Control); public: + enum Tools { + PAINT = 0, + BRUSH, + BUCKET, + RAINBOW, + LINE, + RECT, + DARKEN, + BRIGHTEN, + COLORPICKER, + CUT, + PASTECUT, + }; + + enum KeyboardShortcuts { + K_UNDO = KEY_Z, + K_REDO = KEY_Y, + K_PENCIL = KEY_Q, + K_BRUSH = KEY_W, + K_BUCKET = KEY_F, + K_RAINBOW = KEY_R, + K_LINE = KEY_L, + K_DARK = KEY_D, + K_BRIGHT = KEY_B, + K_CUT = KEY_C, + K_PICK = KEY_P, + }; + + enum { + max_zoom_out = 1, + max_zoom_in = 50, + }; + + void _input(Ref event); + void _process(float delta); + + void _handle_shortcuts(int scancode); + void _draw_tool_brush(); + + void _handle_scroll(); + + void _handle_zoom(Ref event); + + void _handle_cut(); + void brush_process(); + void update_text_info(); + + void _on_Save_pressed(); + + void do_action(Array data); + void commit_action(); + void redo_action(); + void undo_action(); + + Ref get_action(); + + void set_selected_color(Color color); + void set_brush(Tools new_mode); + + void change_color(Color new_color); + + void _on_ColorPicker_color_changed(Color color); + void _on_PaintTool_pressed(); + void _on_BucketTool_pressed(); + void _on_RainbowTool_pressed(); + void _on_BrushTool_pressed(); + void _on_LineTool_pressed(); + void _on_RectTool_pressed(); + void _on_DarkenTool_pressed(); + void _on_BrightenTool_pressed(); + void _on_ColorPickerTool_pressed(); + void _on_CutTool_pressed(); + void _on_Editor_visibility_changed(); + + void highlight_layer(String layer_name); + void toggle_layer_visibility(Node *button, String layer_name); + void select_layer(String layer_name); + void lock_layer(Node *button, String layer_name); + + Ref add_new_layer(); + void remove_active_layer(); + void duplicate_active_layer(); + + void move_up(Node *layer_btn); + void move_down(Node *layer_btn); + + void _connect_layer_buttons(); + + void _on_Button_pressed(); + void _on_PaintCanvasContainer_mouse_entered(); + void _on_PaintCanvasContainer_mouse_exited(); + void _on_ColorPicker_popup_closed(); + + bool is_position_in_canvas(Vector2 pos); + + bool is_mouse_in_canvas(); + + bool is_any_menu_open(); + + void _on_LockAlpha_pressed(); + void _on_BrushRect_pressed(); + void _on_BrushCircle_pressed(); + void _on_BrushVLine_pressed(); + void _on_BrushHLine_pressed(); + void _on_BrushSize_value_changed(float value); + void _on_XSymmetry_pressed(); + void _on_YSymmetry_pressed(); + PaintWindow(); ~PaintWindow(); protected: static void _bind_methods(); + /* + + var layer_buttons: Control + var paint_canvas_container_node + var paint_canvas: GECanvas + var canvas_background: TextureRect + var grids_node + var colors_grid + var selected_color = Color(1, 1, 1, 1) setget set_selected_color + var util = preload("res://addons/Godoxel/Util.gd") + var textinfo + var allow_drawing = true + + var mouse_in_region = false + var mouse_on_top = false + + var _middle_mouse_pressed_pos = null + var _middle_mouse_pressed_start_pos = null + var _left_mouse_pressed_start_pos = Vector2() + var _previous_tool + var brush_mode + + var _layer_button_ref = {} + + var _total_added_layers = 1 + + var selected_brush_prefab = 0 + var _last_drawn_pixel = Vector2.ZERO + var _last_preview_draw_cell_pos = Vector2.ZERO + + var _selection_cells = [] + var _selection_colors = [] + + var _cut_pos = Vector2.ZERO + var _cut_size = Vector2.ZERO + + var _actions_history = [] # for undo + var _redo_history = [] + var _current_action + + var _last_mouse_pos_canvas_area = Vector2.ZERO + + var _picked_color = false + + var mouse_position = Vector2() + var canvas_position = Vector2() + var canvas_mouse_position = Vector2() + var cell_mouse_position = Vector2() + var cell_color = Color() + + var last_mouse_position = Vector2() + var last_canvas_position = Vector2() + var last_canvas_mouse_position = Vector2() + var last_cell_mouse_position = Vector2() + var last_cell_color = Color() + + const current_layer_highlight = Color(0.354706, 0.497302, 0.769531) + const other_layer_highlight = Color(0.180392, 0.176471, 0.176471) + const locked_layer_highlight = Color(0.098039, 0.094118, 0.094118) + + var big_grid_pixels = 4 // 1 grid-box is big_grid_pixels big + */ }; #endif diff --git a/modules/paint/plugin.cfg b/modules/paint/plugin.cfg deleted file mode 100644 index 526cfb3b1..000000000 --- a/modules/paint/plugin.cfg +++ /dev/null @@ -1,7 +0,0 @@ -[plugin] - -name="Godoxel - Pixel Image Editor" -description="" -author="" -version="" -script="plugin.gd" diff --git a/modules/paint/plugin.gd b/modules/paint/plugin.gd deleted file mode 100644 index 3c0d93d13..000000000 --- a/modules/paint/plugin.gd +++ /dev/null @@ -1,37 +0,0 @@ -tool -extends EditorPlugin - -var editor_scene = load("res://addons/Godoxel/Editor.tscn").instance() - -func _enter_tree(): - editor_scene.name = "Editor" - if get_editor_interface().get_editor_viewport().has_node("Editor"): - var n = get_editor_interface().get_editor_viewport().get_node("Editor") - n.name = "EditorDel" - n.queue_free() - get_editor_interface().get_editor_viewport().add_child(editor_scene, true) - editor_scene.owner = get_editor_interface().get_editor_viewport() - make_visible(false) - - -func _exit_tree(): - if editor_scene: - editor_scene.queue_free() - - -func has_main_screen(): - return true - - -func make_visible(visible): - if editor_scene: - editor_scene.visible = visible - - -func get_plugin_name(): - return "Paint" - - -func get_plugin_icon(): - # Must return some kind of Texture for the icon. - return get_editor_interface().get_base_control().get_icon("CanvasModulate", "EditorIcons")