object GridUnit {
	section object {
		BlockTypes, PieceUnit
	}
	section module {
 
	}
	section data {
		int rax = 0
		int rbx = 0
		int rcx = 0
		int rdx = 0
		int rsi = 0
		int rdi = 0
		int r8 = 0
		int r9 = 0
		int r10 = 0
		int r11 = 0
		ptr grid = null
		ptr grid_clear = null
		ptr grid_flash = null
		ptr grid_original = null
		int score = 0
		int lines = 0
		int speed = 0
		int line_count = 0
		int game_over = 0
		int drop_timer = 0
		int lines_per_speed = 0
		int clearing_active = 0
		int GridSet_col = 0
		int GridSet_row = 0
		int GridSet_val = 0
		int GridClearAll_i = 0
		int ClearBlock_col = 0
		int ClearBlock_row = 0
		int ClearBlock_original = 0
		int ClearBlock_idx = 0
		int ProcessGravity_c = 0
		int ProcessGravity_r = 0
		int ProcessGravity_val = 0
		int ProcessFlash_c = 0
		int ProcessFlash_r = 0
		int ProcessFlash_idx = 0
		int ProcessFlash_cv = 0
		int UpdateGame_matched = 0
		int GridIndex_col = 0
		int GridIndex_row = 0
		int __funcret_GridIndex = 0
		int GridInBounds_col = 0
		int GridInBounds_row = 0
		int __funcret_GridInBounds = 0
		int GridGet_col = 0
		int GridGet_row = 0
		int __funcret_GridGet = 0
		int GridGetClear_col = 0
		int GridGetClear_row = 0
		int __funcret_GridGetClear = 0
		int GridGetFlash_col = 0
		int GridGetFlash_row = 0
		int __funcret_GridGetFlash = 0
		int GridGetOriginal_col = 0
		int GridGetOriginal_row = 0
		int __funcret_GridGetOriginal = 0
		int __funcret_CanMoveLeft = 0
		int __funcret_CanMoveRight = 0
		int __funcret_CanMoveDown = 0
		int CanRotate_nx2 = 0
		int CanRotate_ny2 = 0
		int CanRotate_nx3 = 0
		int CanRotate_ny3 = 0
		int __funcret_CanRotate = 0
		int __funcret_CheckGameOver = 0
		int CheckHorizontal_r = 0
		int CheckHorizontal_c = 0
		int CheckHorizontal_cur = 0
		int CheckHorizontal_found = 0
		int __funcret_CheckHorizontal = 0
		int CheckVertical_r = 0
		int CheckVertical_c = 0
		int CheckVertical_cur = 0
		int CheckVertical_found = 0
		int __funcret_CheckVertical = 0
		int CheckDiagonal_r = 0
		int CheckDiagonal_c = 0
		int CheckDiagonal_cur = 0
		int CheckDiagonal_found = 0
		int __funcret_CheckDiagonal = 0
		int CheckAndClearMatches_found = 0
		int __funcret_CheckAndClearMatches = 0
		int __funcret_IsClearing = 0
	}
	section code {
	function PROC_UNIT_INIT:
		alloc grid, 8, 136
		alloc grid_clear, 8, 136
		alloc grid_flash, 8, 136
		alloc grid_original, 8, 136
		ret
	function PROC_GridSet:
		mov GridSet_col, rbx
		mov GridSet_row, rcx
		mov GridSet_val, rdx
		mov rbx, GridSet_col
		mov rcx, GridSet_row
		push GridSet_col
		push GridSet_row
		push GridSet_val
		call FUNC_GridInBounds
		pop GridSet_val
		pop GridSet_row
		pop GridSet_col
		mov rbx, rax
		cmp rbx, 1
		je CMP_TRUE_2
		mov rcx, 0
		jmp CMP_END_3
	CMP_TRUE_2:
		mov rcx, 1
	CMP_END_3:
		cmp rcx, 0
		je ELSE_0
		push rbx
		push rcx
		mov rbx, GridSet_col
		mov rcx, GridSet_row
		push GridSet_col
		push GridSet_row
		push GridSet_val
		call FUNC_GridIndex
		pop GridSet_val
		pop GridSet_row
		pop GridSet_col
		pop rcx
		pop rbx
		mov rdx, rax
		cmp rdx, 0
		jl IDX_OOB_5
		cmp rdx, 135
		jg IDX_OOB_5
		jmp IDX_OK_4
	IDX_OOB_5:
		exit 1
	IDX_OK_4:
		mov rsi, rdx
		store GridSet_val, grid, rsi, 8
	ELSE_0:
	PROC_END_GridSet:
		ret
	function PROC_GridClearAll:
		mov GridClearAll_i, 0
	FOR_6:
		cmp GridClearAll_i, 135
		jg ENDFOR_7
		cmp GridClearAll_i, 0
		jl IDX_OOB_10
		cmp GridClearAll_i, 135
		jg IDX_OOB_10
		jmp IDX_OK_9
	IDX_OOB_10:
		exit 1
	IDX_OK_9:
		mov rbx, GridClearAll_i
		store 0, grid, rbx, 8
		cmp GridClearAll_i, 0
		jl IDX_OOB_12
		cmp GridClearAll_i, 135
		jg IDX_OOB_12
		jmp IDX_OK_11
	IDX_OOB_12:
		exit 1
	IDX_OK_11:
		mov rbx, GridClearAll_i
		store 0, grid_clear, rbx, 8
		cmp GridClearAll_i, 0
		jl IDX_OOB_14
		cmp GridClearAll_i, 135
		jg IDX_OOB_14
		jmp IDX_OK_13
	IDX_OOB_14:
		exit 1
	IDX_OK_13:
		mov rbx, GridClearAll_i
		store 0, grid_flash, rbx, 8
		cmp GridClearAll_i, 0
		jl IDX_OOB_16
		cmp GridClearAll_i, 135
		jg IDX_OOB_16
		jmp IDX_OK_15
	IDX_OOB_16:
		exit 1
	IDX_OK_15:
		mov rbx, GridClearAll_i
		store 0, grid_original, rbx, 8
	FOR_CONTINUE_8:
		add GridClearAll_i, 1
		jmp FOR_6
	ENDFOR_7:
		mov clearing_active, 0
	PROC_END_GridClearAll:
		ret
	function PROC_ClearBlock:
		mov ClearBlock_col, rbx
		mov ClearBlock_row, rcx
		mov ClearBlock_original, rdx
		mov rbx, ClearBlock_col
		mov rcx, ClearBlock_row
		push ClearBlock_col
		push ClearBlock_row
		push ClearBlock_original
		push ClearBlock_idx
		call FUNC_GridInBounds
		pop ClearBlock_idx
		pop ClearBlock_original
		pop ClearBlock_row
		pop ClearBlock_col
		mov rbx, rax
		cmp rbx, 1
		jne ELSE_17
		push rbx
		push rcx
		mov rbx, ClearBlock_col
		mov rcx, ClearBlock_row
		push ClearBlock_col
		push ClearBlock_row
		push ClearBlock_original
		push ClearBlock_idx
		call FUNC_GridIndex
		pop ClearBlock_idx
		pop ClearBlock_original
		pop ClearBlock_row
		pop ClearBlock_col
		pop rcx
		pop rbx
		mov rdx, rax
		mov ClearBlock_idx, rdx
		cmp ClearBlock_idx, 0
		jl IDX_OOB_22
		cmp ClearBlock_idx, 135
		jg IDX_OOB_22
		jmp IDX_OK_21
	IDX_OOB_22:
		exit 1
	IDX_OK_21:
		mov rsi, ClearBlock_idx
		store ClearBlock_original, grid_original, rsi, 8
		cmp ClearBlock_idx, 0
		jl IDX_OOB_24
		cmp ClearBlock_idx, 135
		jg IDX_OOB_24
		jmp IDX_OK_23
	IDX_OOB_24:
		exit 1
	IDX_OK_23:
		mov rsi, ClearBlock_idx
		store 10, grid, rsi, 8
		cmp ClearBlock_idx, 0
		jl IDX_OOB_26
		cmp ClearBlock_idx, 135
		jg IDX_OOB_26
		jmp IDX_OK_25
	IDX_OOB_26:
		exit 1
	IDX_OK_25:
		mov rsi, ClearBlock_idx
		store 1, grid_clear, rsi, 8
		cmp ClearBlock_idx, 0
		jl IDX_OOB_28
		cmp ClearBlock_idx, 135
		jg IDX_OOB_28
		jmp IDX_OK_27
	IDX_OOB_28:
		exit 1
	IDX_OK_27:
		mov rsi, ClearBlock_idx
		store 0, grid_flash, rsi, 8
		mov clearing_active, 1
	ELSE_17:
	PROC_END_ClearBlock:
		ret
	function PROC_PlacePiece:
		mov rbx, PieceUnit.piece_y
		cmp rbx, 0
		jg ELSE_29
		mov game_over, 1
		jmp PROC_END_PlacePiece
	ELSE_29:
		mov rdx, PieceUnit.piece_x1
		mov rsi, PieceUnit.piece_y1
		mov rdi, PieceUnit.piece_c1
		mov r8, rdx
		push rbx
		push rcx
		push rdx
		mov rbx, r8
		mov rcx, rsi
		mov rdx, rdi
		call PROC_GridSet
		pop rdx
		pop rcx
		pop rbx
		mov r9, PieceUnit.piece_x2
		mov r10, PieceUnit.piece_y2
		mov r11, PieceUnit.piece_c2
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, r9
		mov rcx, r10
		mov rdx, r11
		call PROC_GridSet
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov r9, PieceUnit.piece_x3
		mov r10, PieceUnit.piece_y3
		mov r11, PieceUnit.piece_c3
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, r9
		mov rcx, r10
		mov rdx, r11
		call PROC_GridSet
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		call PieceUnit.PROC_PieceSpawn
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
	PROC_END_PlacePiece:
		ret
	function PROC_AddLine:
		add lines, 1
		add score, 6
		add line_count, 1
		cmp line_count, lines_per_speed
		jl ELSE_33
		mov line_count, 0
		sub speed, 4
		cmp speed, 6
		jge ELSE_37
		mov speed, 6
	ELSE_37:
	ELSE_33:
	PROC_END_AddLine:
		ret
	function PROC_ProcessGravity:
		mov ProcessGravity_c, 0
	FOR_41:
		cmp ProcessGravity_c, 7
		jg ENDFOR_42
		mov ProcessGravity_r, 15
	FOR_44:
		cmp ProcessGravity_r, 0
		jl ENDFOR_45
		mov rbx, ProcessGravity_c
		mov rcx, ProcessGravity_r
		push ProcessGravity_c
		push ProcessGravity_r
		push ProcessGravity_val
		call FUNC_GridGet
		pop ProcessGravity_val
		pop ProcessGravity_r
		pop ProcessGravity_c
		mov rbx, rax
		mov ProcessGravity_val, rbx
		cmp ProcessGravity_val, 0
		je AND_ZERO_53
		cmp ProcessGravity_val, 10
		je AND_ZERO_53
		mov rsi, 1
		jmp AND_END_54
	AND_ZERO_53:
		mov rsi, 0
	AND_END_54:
		mov rdi, ProcessGravity_r
		add rdi, 1
		push rbx
		push rcx
		push rdx
		push rsi
		mov rbx, ProcessGravity_c
		mov rcx, rdi
		push ProcessGravity_c
		push ProcessGravity_r
		push ProcessGravity_val
		call FUNC_GridGet
		pop ProcessGravity_val
		pop ProcessGravity_r
		pop ProcessGravity_c
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov r8, rax
		cmp r8, 0
		jne ELSE_47
		cmp rsi, 0
		je ELSE_47
		mov r9, ProcessGravity_r
		add r9, 1
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, ProcessGravity_c
		mov rcx, r9
		mov rdx, ProcessGravity_val
		push ProcessGravity_c
		push ProcessGravity_r
		push ProcessGravity_val
		call PROC_GridSet
		pop ProcessGravity_val
		pop ProcessGravity_r
		pop ProcessGravity_c
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, ProcessGravity_c
		mov rcx, ProcessGravity_r
		mov rdx, 0
		push ProcessGravity_c
		push ProcessGravity_r
		push ProcessGravity_val
		call PROC_GridSet
		pop ProcessGravity_val
		pop ProcessGravity_r
		pop ProcessGravity_c
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
	ELSE_47:
	FOR_CONTINUE_46:
		sub ProcessGravity_r, 1
		jmp FOR_44
	ENDFOR_45:
	FOR_CONTINUE_43:
		add ProcessGravity_c, 1
		jmp FOR_41
	ENDFOR_42:
	PROC_END_ProcessGravity:
		ret
	function PROC_ProcessFlash:
		mov clearing_active, 0
		mov ProcessFlash_r, 0
	FOR_59:
		cmp ProcessFlash_r, 16
		jg ENDFOR_60
		mov ProcessFlash_c, 0
	FOR_62:
		cmp ProcessFlash_c, 7
		jg ENDFOR_63
		mov rbx, ProcessFlash_c
		mov rcx, ProcessFlash_r
		push ProcessFlash_c
		push ProcessFlash_r
		push ProcessFlash_idx
		push ProcessFlash_cv
		call FUNC_GridGet
		pop ProcessFlash_cv
		pop ProcessFlash_idx
		pop ProcessFlash_r
		pop ProcessFlash_c
		mov rbx, rax
		cmp rbx, 10
		jne ELSE_65
		push rbx
		push rcx
		mov rbx, ProcessFlash_c
		mov rcx, ProcessFlash_r
		push ProcessFlash_c
		push ProcessFlash_r
		push ProcessFlash_idx
		push ProcessFlash_cv
		call FUNC_GridIndex
		pop ProcessFlash_cv
		pop ProcessFlash_idx
		pop ProcessFlash_r
		pop ProcessFlash_c
		pop rcx
		pop rbx
		mov rdx, rax
		mov ProcessFlash_idx, rdx
		mov rsi, ProcessFlash_idx
		load rdi, grid_clear, rsi, 8
		mov ProcessFlash_cv, rdi
		add ProcessFlash_cv, 1
		cmp ProcessFlash_idx, 0
		jl IDX_OOB_70
		cmp ProcessFlash_idx, 135
		jg IDX_OOB_70
		jmp IDX_OK_69
	IDX_OOB_70:
		exit 1
	IDX_OK_69:
		mov r8, ProcessFlash_idx
		store ProcessFlash_cv, grid_clear, r8, 8
		mov r8, ProcessFlash_idx
		load r9, grid_flash, r8, 8
		add r9, 1
		cmp ProcessFlash_idx, 0
		jl IDX_OOB_72
		cmp ProcessFlash_idx, 135
		jg IDX_OOB_72
		jmp IDX_OK_71
	IDX_OOB_72:
		exit 1
	IDX_OK_71:
		mov r8, ProcessFlash_idx
		store r9, grid_flash, r8, 8
		cmp ProcessFlash_cv, 50
		jle ELSE_73
		cmp ProcessFlash_idx, 0
		jl IDX_OOB_78
		cmp ProcessFlash_idx, 135
		jg IDX_OOB_78
		jmp IDX_OK_77
	IDX_OOB_78:
		exit 1
	IDX_OK_77:
		mov r9, ProcessFlash_idx
		store 0, grid, r9, 8
		cmp ProcessFlash_idx, 0
		jl IDX_OOB_80
		cmp ProcessFlash_idx, 135
		jg IDX_OOB_80
		jmp IDX_OK_79
	IDX_OOB_80:
		exit 1
	IDX_OK_79:
		mov r9, ProcessFlash_idx
		store 0, grid_clear, r9, 8
		cmp ProcessFlash_idx, 0
		jl IDX_OOB_82
		cmp ProcessFlash_idx, 135
		jg IDX_OOB_82
		jmp IDX_OK_81
	IDX_OOB_82:
		exit 1
	IDX_OK_81:
		mov r9, ProcessFlash_idx
		store 0, grid_flash, r9, 8
		cmp ProcessFlash_idx, 0
		jl IDX_OOB_84
		cmp ProcessFlash_idx, 135
		jg IDX_OOB_84
		jmp IDX_OK_83
	IDX_OOB_84:
		exit 1
	IDX_OK_83:
		mov r9, ProcessFlash_idx
		store 0, grid_original, r9, 8
		jmp ENDIF_74
	ELSE_73:
		mov clearing_active, 1
	ENDIF_74:
	ELSE_65:
	FOR_CONTINUE_64:
		add ProcessFlash_c, 1
		jmp FOR_62
	ENDFOR_63:
	FOR_CONTINUE_61:
		add ProcessFlash_r, 1
		jmp FOR_59
	ENDFOR_60:
	PROC_END_ProcessFlash:
		ret
	function PROC_DropPiece:
		call FUNC_CanMoveDown
		mov rbx, rax
		cmp rbx, 1
		jne ELSE_85
		push rbx
		push rcx
		call PieceUnit.PROC_PieceMoveDown
		pop rcx
		pop rbx
		jmp ENDIF_86
	ELSE_85:
		push rbx
		push rcx
		call PROC_PlacePiece
		pop rcx
		pop rbx
	ENDIF_86:
	PROC_END_DropPiece:
		ret
	function PROC_HardDrop:
	WHILE_89:
		call FUNC_CanMoveDown
		mov rbx, rax
		cmp rbx, 1
		jne ENDWHILE_90
		push rbx
		push rcx
		call PieceUnit.PROC_PieceMoveDown
		pop rcx
		pop rbx
		jmp WHILE_89
	ENDWHILE_90:
		push rbx
		push rcx
		call PROC_PlacePiece
		pop rcx
		pop rbx
	PROC_END_HardDrop:
		ret
	function PROC_ResetGame:
		call PROC_GridClearAll
		mov score, 0
		mov lines, 0
		mov speed, 80
		mov line_count, 0
		mov lines_per_speed, 10
		mov game_over, 0
		mov drop_timer, 0
		call PieceUnit.PROC_PieceInit
	PROC_END_ResetGame:
		ret
	function PROC_UpdateGame:
		cmp game_over, 1
		jne ELSE_93
		jmp PROC_END_UpdateGame
	ELSE_93:
		push rbx
		push UpdateGame_matched
		call PROC_ProcessFlash
		pop UpdateGame_matched
		pop rbx
		push rbx
		push UpdateGame_matched
		call FUNC_IsClearing
		pop UpdateGame_matched
		pop rbx
		mov rcx, rax
		cmp rcx, 0
		jne ELSE_97
		push rbx
		push rcx
		push rdx
		push UpdateGame_matched
		call PROC_ProcessGravity
		pop UpdateGame_matched
		pop rdx
		pop rcx
		pop rbx
		push rbx
		push rcx
		push rdx
		push UpdateGame_matched
		call FUNC_CheckAndClearMatches
		pop UpdateGame_matched
		pop rdx
		pop rcx
		pop rbx
		mov rsi, rax
		mov UpdateGame_matched, rsi
		cmp UpdateGame_matched, 0
		jne ELSE_101
		mov r8, drop_timer
		add r8, 1
		mov drop_timer, r8
		cmp drop_timer, speed
		jl ELSE_105
		mov drop_timer, 0
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		push UpdateGame_matched
		call PROC_DropPiece
		pop UpdateGame_matched
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
	ELSE_105:
	ELSE_101:
	ELSE_97:
	PROC_END_UpdateGame:
		ret
	function FUNC_GridIndex:
		mov GridIndex_col, rbx
		mov GridIndex_row, rcx
		mov __funcret_GridIndex, GridIndex_row
		mul __funcret_GridIndex, 8
		add __funcret_GridIndex, GridIndex_col
	FUNC_END_GridIndex:
		mov rax, __funcret_GridIndex
		ret
	function FUNC_GridInBounds:
		mov GridInBounds_col, rbx
		mov GridInBounds_row, rcx
		cmp GridInBounds_col, 0
		jl AND_ZERO_115
		cmp GridInBounds_col, 8
		jge AND_ZERO_115
		mov rdx, 1
		jmp AND_END_116
	AND_ZERO_115:
		mov rdx, 0
	AND_END_116:
		cmp GridInBounds_row, 0
		jl AND_ZERO_119
		cmp rdx, 0
		je AND_ZERO_119
		mov rdi, 1
		jmp AND_END_120
	AND_ZERO_119:
		mov rdi, 0
	AND_END_120:
		cmp GridInBounds_row, 17
		jge ELSE_109
		cmp rdi, 0
		je ELSE_109
		mov __funcret_GridInBounds, 1
		jmp ENDIF_110
	ELSE_109:
		mov __funcret_GridInBounds, 0
	ENDIF_110:
	FUNC_END_GridInBounds:
		mov rax, __funcret_GridInBounds
		ret
	function FUNC_GridGet:
		mov GridGet_col, rbx
		mov GridGet_row, rcx
		mov rbx, GridGet_col
		mov rcx, GridGet_row
		push GridGet_col
		push GridGet_row
		call FUNC_GridInBounds
		pop GridGet_row
		pop GridGet_col
		mov rbx, rax
		cmp rbx, 1
		jne ELSE_125
		push rbx
		push rcx
		mov rbx, GridGet_col
		mov rcx, GridGet_row
		push GridGet_col
		push GridGet_row
		call FUNC_GridIndex
		pop GridGet_row
		pop GridGet_col
		pop rcx
		pop rbx
		mov rdx, rax
		mov rsi, rdx
		load rdi, grid, rsi, 8
		mov __funcret_GridGet, rdi
		jmp ENDIF_126
	ELSE_125:
		mov __funcret_GridGet, 0
		sub __funcret_GridGet, 1
	ENDIF_126:
	FUNC_END_GridGet:
		mov rax, __funcret_GridGet
		ret
	function FUNC_GridGetClear:
		mov GridGetClear_col, rbx
		mov GridGetClear_row, rcx
		mov rbx, GridGetClear_col
		mov rcx, GridGetClear_row
		push GridGetClear_col
		push GridGetClear_row
		call FUNC_GridInBounds
		pop GridGetClear_row
		pop GridGetClear_col
		mov rbx, rax
		cmp rbx, 1
		jne ELSE_129
		push rbx
		push rcx
		mov rbx, GridGetClear_col
		mov rcx, GridGetClear_row
		push GridGetClear_col
		push GridGetClear_row
		call FUNC_GridIndex
		pop GridGetClear_row
		pop GridGetClear_col
		pop rcx
		pop rbx
		mov rdx, rax
		mov rsi, rdx
		load rdi, grid_clear, rsi, 8
		mov __funcret_GridGetClear, rdi
		jmp ENDIF_130
	ELSE_129:
		mov __funcret_GridGetClear, 0
	ENDIF_130:
	FUNC_END_GridGetClear:
		mov rax, __funcret_GridGetClear
		ret
	function FUNC_GridGetFlash:
		mov GridGetFlash_col, rbx
		mov GridGetFlash_row, rcx
		mov rbx, GridGetFlash_col
		mov rcx, GridGetFlash_row
		push GridGetFlash_col
		push GridGetFlash_row
		call FUNC_GridInBounds
		pop GridGetFlash_row
		pop GridGetFlash_col
		mov rbx, rax
		cmp rbx, 1
		jne ELSE_133
		push rbx
		push rcx
		mov rbx, GridGetFlash_col
		mov rcx, GridGetFlash_row
		push GridGetFlash_col
		push GridGetFlash_row
		call FUNC_GridIndex
		pop GridGetFlash_row
		pop GridGetFlash_col
		pop rcx
		pop rbx
		mov rdx, rax
		mov rsi, rdx
		load rdi, grid_flash, rsi, 8
		mov __funcret_GridGetFlash, rdi
		jmp ENDIF_134
	ELSE_133:
		mov __funcret_GridGetFlash, 0
	ENDIF_134:
	FUNC_END_GridGetFlash:
		mov rax, __funcret_GridGetFlash
		ret
	function FUNC_GridGetOriginal:
		mov GridGetOriginal_col, rbx
		mov GridGetOriginal_row, rcx
		mov rbx, GridGetOriginal_col
		mov rcx, GridGetOriginal_row
		push GridGetOriginal_col
		push GridGetOriginal_row
		call FUNC_GridInBounds
		pop GridGetOriginal_row
		pop GridGetOriginal_col
		mov rbx, rax
		cmp rbx, 1
		jne ELSE_137
		push rbx
		push rcx
		mov rbx, GridGetOriginal_col
		mov rcx, GridGetOriginal_row
		push GridGetOriginal_col
		push GridGetOriginal_row
		call FUNC_GridIndex
		pop GridGetOriginal_row
		pop GridGetOriginal_col
		pop rcx
		pop rbx
		mov rdx, rax
		mov rsi, rdx
		load rdi, grid_original, rsi, 8
		mov __funcret_GridGetOriginal, rdi
		jmp ENDIF_138
	ELSE_137:
		mov __funcret_GridGetOriginal, 0
	ENDIF_138:
	FUNC_END_GridGetOriginal:
		mov rax, __funcret_GridGetOriginal
		ret
	function FUNC_CanMoveLeft:
		mov __funcret_CanMoveLeft, 1
		mov rbx, PieceUnit.piece_x1
		cmp rbx, 0
		jle OR_ONE_147
		mov rdx, PieceUnit.piece_x2
		cmp rdx, 0
		jle OR_ONE_147
		mov rdi, 0
		jmp OR_END_148
	OR_ONE_147:
		mov rdi, 1
	OR_END_148:
		mov r8, PieceUnit.piece_x3
		cmp r8, 0
		jg ELSE_141
		cmp rdi, 0
		jne OR_ONE_151
	OR_ONE_151:
		mov __funcret_CanMoveLeft, 0
		jmp FUNC_END_CanMoveLeft
	ELSE_141:
		mov r9, PieceUnit.piece_x1
		sub r9, 1
		mov r10, PieceUnit.piece_y1
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, r9
		mov rcx, r10
		call FUNC_GridGet
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		cmp rax, 0
		je ELSE_153
		mov __funcret_CanMoveLeft, 0
		jmp ENDIF_154
	ELSE_153:
		mov r9, PieceUnit.piece_x2
		sub r9, 1
		mov r10, PieceUnit.piece_y2
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, r9
		mov rcx, r10
		call FUNC_GridGet
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		cmp rax, 0
		je ELSE_157
		mov __funcret_CanMoveLeft, 0
		jmp ENDIF_158
	ELSE_157:
		mov r9, PieceUnit.piece_x3
		sub r9, 1
		mov r10, PieceUnit.piece_y3
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, r9
		mov rcx, r10
		call FUNC_GridGet
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		cmp rax, 0
		je ELSE_161
		mov __funcret_CanMoveLeft, 0
	ELSE_161:
	ENDIF_158:
	ENDIF_154:
	FUNC_END_CanMoveLeft:
		mov rax, __funcret_CanMoveLeft
		ret
	function FUNC_CanMoveRight:
		mov __funcret_CanMoveRight, 1
		mov rbx, PieceUnit.piece_x1
		cmp rbx, 7
		jge OR_ONE_171
		mov rdx, PieceUnit.piece_x2
		cmp rdx, 7
		jge OR_ONE_171
		mov rdi, 0
		jmp OR_END_172
	OR_ONE_171:
		mov rdi, 1
	OR_END_172:
		mov r8, PieceUnit.piece_x3
		cmp r8, 7
		jl ELSE_165
		cmp rdi, 0
		jne OR_ONE_175
	OR_ONE_175:
		mov __funcret_CanMoveRight, 0
		jmp FUNC_END_CanMoveRight
	ELSE_165:
		mov r9, PieceUnit.piece_x1
		add r9, 1
		mov r10, PieceUnit.piece_y1
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, r9
		mov rcx, r10
		call FUNC_GridGet
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		cmp rax, 0
		je ELSE_177
		mov __funcret_CanMoveRight, 0
		jmp ENDIF_178
	ELSE_177:
		mov r9, PieceUnit.piece_x2
		add r9, 1
		mov r10, PieceUnit.piece_y2
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, r9
		mov rcx, r10
		call FUNC_GridGet
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		cmp rax, 0
		je ELSE_181
		mov __funcret_CanMoveRight, 0
		jmp ENDIF_182
	ELSE_181:
		mov r9, PieceUnit.piece_x3
		add r9, 1
		mov r10, PieceUnit.piece_y3
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, r9
		mov rcx, r10
		call FUNC_GridGet
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		cmp rax, 0
		je ELSE_185
		mov __funcret_CanMoveRight, 0
	ELSE_185:
	ENDIF_182:
	ENDIF_178:
	FUNC_END_CanMoveRight:
		mov rax, __funcret_CanMoveRight
		ret
	function FUNC_CanMoveDown:
		mov __funcret_CanMoveDown, 1
		mov rbx, PieceUnit.piece_y1
		mov rcx, rbx
		add rcx, 1
		cmp rcx, 16
		jg OR_ONE_195
		mov rsi, PieceUnit.piece_y2
		mov rdi, rsi
		add rdi, 1
		cmp rdi, 16
		jg OR_ONE_195
		mov r9, 0
		jmp OR_END_196
	OR_ONE_195:
		mov r9, 1
	OR_END_196:
		mov r10, PieceUnit.piece_y3
		add r10, 1
		cmp r10, 16
		jle ELSE_189
		cmp r9, 0
		jne OR_ONE_199
	OR_ONE_199:
		mov __funcret_CanMoveDown, 0
		jmp FUNC_END_CanMoveDown
	ELSE_189:
		mov r9, PieceUnit.piece_x1
		mov r10, PieceUnit.piece_y1
		add r10, 1
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, r9
		mov rcx, r10
		call FUNC_GridGet
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		cmp rax, 0
		je ELSE_201
		mov __funcret_CanMoveDown, 0
		jmp FUNC_END_CanMoveDown
	ELSE_201:
		mov r9, PieceUnit.piece_x2
		mov r10, PieceUnit.piece_y2
		add r10, 1
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, r9
		mov rcx, r10
		call FUNC_GridGet
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		cmp rax, 0
		je ELSE_205
		mov __funcret_CanMoveDown, 0
		jmp FUNC_END_CanMoveDown
	ELSE_205:
		mov r9, PieceUnit.piece_x3
		mov r10, PieceUnit.piece_y3
		add r10, 1
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, r9
		mov rcx, r10
		call FUNC_GridGet
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		cmp rax, 0
		je ELSE_209
		mov __funcret_CanMoveDown, 0
	ELSE_209:
	FUNC_END_CanMoveDown:
		mov rax, __funcret_CanMoveDown
		ret
	function FUNC_CanRotate:
		mov __funcret_CanRotate, 1
		mov rbx, PieceUnit.piece_shape
		cmp rbx, 0
		jne ELSE_213
		mov rdx, PieceUnit.piece_x
		mov rsi, rdx
		add rsi, 1
		mov CanRotate_nx2, rsi
		mov rdi, PieceUnit.piece_y
		mov CanRotate_ny2, rdi
		mov r8, PieceUnit.piece_x
		mov r9, r8
		add r9, 2
		mov CanRotate_nx3, r9
		mov r9, PieceUnit.piece_y
		mov CanRotate_ny3, r9
		cmp CanRotate_nx3, 8
		jl ELSE_217
		mov __funcret_CanRotate, 0
		jmp FUNC_END_CanRotate
	ELSE_217:
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, CanRotate_nx2
		mov rcx, CanRotate_ny2
		push CanRotate_nx2
		push CanRotate_ny2
		push CanRotate_nx3
		push CanRotate_ny3
		call FUNC_GridGet
		pop CanRotate_ny3
		pop CanRotate_nx3
		pop CanRotate_ny2
		pop CanRotate_nx2
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov r9, rax
		cmp r9, 0
		je ELSE_221
		mov __funcret_CanRotate, 0
		jmp ENDIF_222
	ELSE_221:
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, CanRotate_nx3
		mov rcx, CanRotate_ny3
		push CanRotate_nx2
		push CanRotate_ny2
		push CanRotate_nx3
		push CanRotate_ny3
		call FUNC_GridGet
		pop CanRotate_ny3
		pop CanRotate_nx3
		pop CanRotate_ny2
		pop CanRotate_nx2
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov r9, rax
		cmp r9, 0
		je ELSE_225
		mov __funcret_CanRotate, 0
	ELSE_225:
	ENDIF_222:
		jmp ENDIF_214
	ELSE_213:
		mov r9, PieceUnit.piece_x
		mov CanRotate_nx2, r9
		mov r9, PieceUnit.piece_y
		add r9, 1
		mov CanRotate_ny2, r9
		mov r9, PieceUnit.piece_x
		mov CanRotate_nx3, r9
		mov r9, PieceUnit.piece_y
		add r9, 2
		mov CanRotate_ny3, r9
		cmp CanRotate_ny3, 17
		jl ELSE_229
		mov __funcret_CanRotate, 0
		jmp FUNC_END_CanRotate
	ELSE_229:
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, CanRotate_nx2
		mov rcx, CanRotate_ny2
		push CanRotate_nx2
		push CanRotate_ny2
		push CanRotate_nx3
		push CanRotate_ny3
		call FUNC_GridGet
		pop CanRotate_ny3
		pop CanRotate_nx3
		pop CanRotate_ny2
		pop CanRotate_nx2
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		cmp rax, 0
		je ELSE_233
		mov __funcret_CanRotate, 0
		jmp ENDIF_234
	ELSE_233:
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, CanRotate_nx3
		mov rcx, CanRotate_ny3
		push CanRotate_nx2
		push CanRotate_ny2
		push CanRotate_nx3
		push CanRotate_ny3
		call FUNC_GridGet
		pop CanRotate_ny3
		pop CanRotate_nx3
		pop CanRotate_ny2
		pop CanRotate_nx2
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		cmp rax, 0
		je ELSE_237
		mov __funcret_CanRotate, 0
	ELSE_237:
	ENDIF_234:
	ENDIF_214:
	FUNC_END_CanRotate:
		mov rax, __funcret_CanRotate
		ret
	function FUNC_CheckGameOver:
		mov rbx, PieceUnit.piece_x1
		mov rcx, PieceUnit.piece_y1
		call FUNC_GridGet
		cmp rax, 0
		je ELSE_241
		mov __funcret_CheckGameOver, 1
		jmp ENDIF_242
	ELSE_241:
		mov __funcret_CheckGameOver, 0
	ENDIF_242:
	FUNC_END_CheckGameOver:
		mov rax, __funcret_CheckGameOver
		ret
	function FUNC_CheckHorizontal:
		mov CheckHorizontal_found, 0
		mov CheckHorizontal_r, 0
	FOR_245:
		cmp CheckHorizontal_r, 16
		jg ENDFOR_246
		mov CheckHorizontal_c, 0
	FOR_248:
		cmp CheckHorizontal_c, 5
		jg ENDFOR_249
		mov rbx, CheckHorizontal_c
		mov rcx, CheckHorizontal_r
		push CheckHorizontal_r
		push CheckHorizontal_c
		push CheckHorizontal_cur
		push CheckHorizontal_found
		call FUNC_GridGet
		pop CheckHorizontal_found
		pop CheckHorizontal_cur
		pop CheckHorizontal_c
		pop CheckHorizontal_r
		mov rbx, rax
		mov CheckHorizontal_cur, rbx
		cmp CheckHorizontal_cur, 0
		je ELSE_251
		cmp CheckHorizontal_cur, 10
		je ELSE_251
		mov rdi, CheckHorizontal_c
		add rdi, 1
		push rbx
		push rcx
		push rdx
		push rsi
		mov rbx, rdi
		mov rcx, CheckHorizontal_r
		push CheckHorizontal_r
		push CheckHorizontal_c
		push CheckHorizontal_cur
		push CheckHorizontal_found
		call FUNC_GridGet
		pop CheckHorizontal_found
		pop CheckHorizontal_cur
		pop CheckHorizontal_c
		pop CheckHorizontal_r
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov r8, rax
		cmp r8, CheckHorizontal_cur
		je CMP_TRUE_261
		mov r9, 0
		jmp CMP_END_262
	CMP_TRUE_261:
		mov r9, 1
	CMP_END_262:
		mov r10, CheckHorizontal_c
		add r10, 2
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		push r9
		mov rbx, r10
		mov rcx, CheckHorizontal_r
		push CheckHorizontal_r
		push CheckHorizontal_c
		push CheckHorizontal_cur
		push CheckHorizontal_found
		call FUNC_GridGet
		pop CheckHorizontal_found
		pop CheckHorizontal_cur
		pop CheckHorizontal_c
		pop CheckHorizontal_r
		pop r9
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		cmp rax, CheckHorizontal_cur
		jne ELSE_259
		cmp r9, 0
		je ELSE_259
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, CheckHorizontal_c
		mov rcx, CheckHorizontal_r
		mov rdx, CheckHorizontal_cur
		push CheckHorizontal_r
		push CheckHorizontal_c
		push CheckHorizontal_cur
		push CheckHorizontal_found
		call PROC_ClearBlock
		pop CheckHorizontal_found
		pop CheckHorizontal_cur
		pop CheckHorizontal_c
		pop CheckHorizontal_r
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov r9, CheckHorizontal_c
		add r9, 1
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, r9
		mov rcx, CheckHorizontal_r
		mov rdx, CheckHorizontal_cur
		push CheckHorizontal_r
		push CheckHorizontal_c
		push CheckHorizontal_cur
		push CheckHorizontal_found
		call PROC_ClearBlock
		pop CheckHorizontal_found
		pop CheckHorizontal_cur
		pop CheckHorizontal_c
		pop CheckHorizontal_r
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov r9, CheckHorizontal_c
		add r9, 2
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, r9
		mov rcx, CheckHorizontal_r
		mov rdx, CheckHorizontal_cur
		push CheckHorizontal_r
		push CheckHorizontal_c
		push CheckHorizontal_cur
		push CheckHorizontal_found
		call PROC_ClearBlock
		pop CheckHorizontal_found
		pop CheckHorizontal_cur
		pop CheckHorizontal_c
		pop CheckHorizontal_r
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		push CheckHorizontal_r
		push CheckHorizontal_c
		push CheckHorizontal_cur
		push CheckHorizontal_found
		call PROC_AddLine
		pop CheckHorizontal_found
		pop CheckHorizontal_cur
		pop CheckHorizontal_c
		pop CheckHorizontal_r
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov CheckHorizontal_found, 1
	ELSE_259:
	ELSE_251:
	FOR_CONTINUE_250:
		add CheckHorizontal_c, 1
		jmp FOR_248
	ENDFOR_249:
	FOR_CONTINUE_247:
		add CheckHorizontal_r, 1
		jmp FOR_245
	ENDFOR_246:
		mov __funcret_CheckHorizontal, CheckHorizontal_found
	FUNC_END_CheckHorizontal:
		mov rax, __funcret_CheckHorizontal
		ret
	function FUNC_CheckVertical:
		mov CheckVertical_found, 0
		mov CheckVertical_c, 0
	FOR_267:
		cmp CheckVertical_c, 7
		jg ENDFOR_268
		mov CheckVertical_r, 0
	FOR_270:
		cmp CheckVertical_r, 14
		jg ENDFOR_271
		mov rbx, CheckVertical_c
		mov rcx, CheckVertical_r
		push CheckVertical_r
		push CheckVertical_c
		push CheckVertical_cur
		push CheckVertical_found
		call FUNC_GridGet
		pop CheckVertical_found
		pop CheckVertical_cur
		pop CheckVertical_c
		pop CheckVertical_r
		mov rbx, rax
		mov CheckVertical_cur, rbx
		cmp CheckVertical_cur, 0
		je ELSE_273
		cmp CheckVertical_cur, 10
		je ELSE_273
		mov rdi, CheckVertical_r
		add rdi, 1
		push rbx
		push rcx
		push rdx
		push rsi
		mov rbx, CheckVertical_c
		mov rcx, rdi
		push CheckVertical_r
		push CheckVertical_c
		push CheckVertical_cur
		push CheckVertical_found
		call FUNC_GridGet
		pop CheckVertical_found
		pop CheckVertical_cur
		pop CheckVertical_c
		pop CheckVertical_r
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov r8, rax
		cmp r8, CheckVertical_cur
		je CMP_TRUE_283
		mov r9, 0
		jmp CMP_END_284
	CMP_TRUE_283:
		mov r9, 1
	CMP_END_284:
		mov r10, CheckVertical_r
		add r10, 2
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		push r9
		mov rbx, CheckVertical_c
		mov rcx, r10
		push CheckVertical_r
		push CheckVertical_c
		push CheckVertical_cur
		push CheckVertical_found
		call FUNC_GridGet
		pop CheckVertical_found
		pop CheckVertical_cur
		pop CheckVertical_c
		pop CheckVertical_r
		pop r9
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		cmp rax, CheckVertical_cur
		jne ELSE_281
		cmp r9, 0
		je ELSE_281
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, CheckVertical_c
		mov rcx, CheckVertical_r
		mov rdx, CheckVertical_cur
		push CheckVertical_r
		push CheckVertical_c
		push CheckVertical_cur
		push CheckVertical_found
		call PROC_ClearBlock
		pop CheckVertical_found
		pop CheckVertical_cur
		pop CheckVertical_c
		pop CheckVertical_r
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov r9, CheckVertical_r
		add r9, 1
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, CheckVertical_c
		mov rcx, r9
		mov rdx, CheckVertical_cur
		push CheckVertical_r
		push CheckVertical_c
		push CheckVertical_cur
		push CheckVertical_found
		call PROC_ClearBlock
		pop CheckVertical_found
		pop CheckVertical_cur
		pop CheckVertical_c
		pop CheckVertical_r
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov r9, CheckVertical_r
		add r9, 2
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, CheckVertical_c
		mov rcx, r9
		mov rdx, CheckVertical_cur
		push CheckVertical_r
		push CheckVertical_c
		push CheckVertical_cur
		push CheckVertical_found
		call PROC_ClearBlock
		pop CheckVertical_found
		pop CheckVertical_cur
		pop CheckVertical_c
		pop CheckVertical_r
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		push CheckVertical_r
		push CheckVertical_c
		push CheckVertical_cur
		push CheckVertical_found
		call PROC_AddLine
		pop CheckVertical_found
		pop CheckVertical_cur
		pop CheckVertical_c
		pop CheckVertical_r
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov CheckVertical_found, 1
	ELSE_281:
	ELSE_273:
	FOR_CONTINUE_272:
		add CheckVertical_r, 1
		jmp FOR_270
	ENDFOR_271:
	FOR_CONTINUE_269:
		add CheckVertical_c, 1
		jmp FOR_267
	ENDFOR_268:
		mov __funcret_CheckVertical, CheckVertical_found
	FUNC_END_CheckVertical:
		mov rax, __funcret_CheckVertical
		ret
	function FUNC_CheckDiagonal:
		mov CheckDiagonal_found, 0
		mov CheckDiagonal_r, 0
	FOR_289:
		cmp CheckDiagonal_r, 14
		jg ENDFOR_290
		mov CheckDiagonal_c, 0
	FOR_292:
		cmp CheckDiagonal_c, 5
		jg ENDFOR_293
		mov rbx, CheckDiagonal_c
		mov rcx, CheckDiagonal_r
		push CheckDiagonal_r
		push CheckDiagonal_c
		push CheckDiagonal_cur
		push CheckDiagonal_found
		call FUNC_GridGet
		pop CheckDiagonal_found
		pop CheckDiagonal_cur
		pop CheckDiagonal_c
		pop CheckDiagonal_r
		mov rbx, rax
		mov CheckDiagonal_cur, rbx
		cmp CheckDiagonal_cur, 0
		je ELSE_295
		cmp CheckDiagonal_cur, 10
		je ELSE_295
		mov rdi, CheckDiagonal_c
		add rdi, 1
		mov r8, CheckDiagonal_r
		add r8, 1
		push rbx
		push rcx
		push rdx
		push rsi
		mov rbx, rdi
		mov rcx, r8
		push CheckDiagonal_r
		push CheckDiagonal_c
		push CheckDiagonal_cur
		push CheckDiagonal_found
		call FUNC_GridGet
		pop CheckDiagonal_found
		pop CheckDiagonal_cur
		pop CheckDiagonal_c
		pop CheckDiagonal_r
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov r9, rax
		cmp r9, CheckDiagonal_cur
		je CMP_TRUE_305
		mov r10, 0
		jmp CMP_END_306
	CMP_TRUE_305:
		mov r10, 1
	CMP_END_306:
		mov r9, CheckDiagonal_c
		add r9, 2
		mov r11, CheckDiagonal_r
		add r11, 2
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		push r10
		mov rbx, r9
		mov rcx, r11
		push CheckDiagonal_r
		push CheckDiagonal_c
		push CheckDiagonal_cur
		push CheckDiagonal_found
		call FUNC_GridGet
		pop CheckDiagonal_found
		pop CheckDiagonal_cur
		pop CheckDiagonal_c
		pop CheckDiagonal_r
		pop r10
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		cmp rax, CheckDiagonal_cur
		jne ELSE_303
		cmp r10, 0
		je ELSE_303
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, CheckDiagonal_c
		mov rcx, CheckDiagonal_r
		mov rdx, CheckDiagonal_cur
		push CheckDiagonal_r
		push CheckDiagonal_c
		push CheckDiagonal_cur
		push CheckDiagonal_found
		call PROC_ClearBlock
		pop CheckDiagonal_found
		pop CheckDiagonal_cur
		pop CheckDiagonal_c
		pop CheckDiagonal_r
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov r9, CheckDiagonal_c
		add r9, 1
		mov r10, CheckDiagonal_r
		add r10, 1
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, r9
		mov rcx, r10
		mov rdx, CheckDiagonal_cur
		push CheckDiagonal_r
		push CheckDiagonal_c
		push CheckDiagonal_cur
		push CheckDiagonal_found
		call PROC_ClearBlock
		pop CheckDiagonal_found
		pop CheckDiagonal_cur
		pop CheckDiagonal_c
		pop CheckDiagonal_r
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov r9, CheckDiagonal_c
		add r9, 2
		mov r10, CheckDiagonal_r
		add r10, 2
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, r9
		mov rcx, r10
		mov rdx, CheckDiagonal_cur
		push CheckDiagonal_r
		push CheckDiagonal_c
		push CheckDiagonal_cur
		push CheckDiagonal_found
		call PROC_ClearBlock
		pop CheckDiagonal_found
		pop CheckDiagonal_cur
		pop CheckDiagonal_c
		pop CheckDiagonal_r
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		push CheckDiagonal_r
		push CheckDiagonal_c
		push CheckDiagonal_cur
		push CheckDiagonal_found
		call PROC_AddLine
		pop CheckDiagonal_found
		pop CheckDiagonal_cur
		pop CheckDiagonal_c
		pop CheckDiagonal_r
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov CheckDiagonal_found, 1
	ELSE_303:
	ELSE_295:
	FOR_CONTINUE_294:
		add CheckDiagonal_c, 1
		jmp FOR_292
	ENDFOR_293:
	FOR_CONTINUE_291:
		add CheckDiagonal_r, 1
		jmp FOR_289
	ENDFOR_290:
		mov CheckDiagonal_r, 0
	FOR_311:
		cmp CheckDiagonal_r, 14
		jg ENDFOR_312
		mov CheckDiagonal_c, 2
	FOR_314:
		cmp CheckDiagonal_c, 7
		jg ENDFOR_315
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, CheckDiagonal_c
		mov rcx, CheckDiagonal_r
		push CheckDiagonal_r
		push CheckDiagonal_c
		push CheckDiagonal_cur
		push CheckDiagonal_found
		call FUNC_GridGet
		pop CheckDiagonal_found
		pop CheckDiagonal_cur
		pop CheckDiagonal_c
		pop CheckDiagonal_r
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov r9, rax
		mov CheckDiagonal_cur, r9
		cmp CheckDiagonal_cur, 0
		je ELSE_317
		cmp CheckDiagonal_cur, 10
		je ELSE_317
		mov r9, CheckDiagonal_c
		sub r9, 1
		mov r10, CheckDiagonal_r
		add r10, 1
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, r9
		mov rcx, r10
		push CheckDiagonal_r
		push CheckDiagonal_c
		push CheckDiagonal_cur
		push CheckDiagonal_found
		call FUNC_GridGet
		pop CheckDiagonal_found
		pop CheckDiagonal_cur
		pop CheckDiagonal_c
		pop CheckDiagonal_r
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov r11, rax
		cmp r11, CheckDiagonal_cur
		je CMP_TRUE_327
		mov r9, 0
		jmp CMP_END_328
	CMP_TRUE_327:
		mov r9, 1
	CMP_END_328:
		mov r10, CheckDiagonal_c
		sub r10, 2
		mov r11, CheckDiagonal_r
		add r11, 2
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		push r9
		mov rbx, r10
		mov rcx, r11
		push CheckDiagonal_r
		push CheckDiagonal_c
		push CheckDiagonal_cur
		push CheckDiagonal_found
		call FUNC_GridGet
		pop CheckDiagonal_found
		pop CheckDiagonal_cur
		pop CheckDiagonal_c
		pop CheckDiagonal_r
		pop r9
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		cmp rax, CheckDiagonal_cur
		jne ELSE_325
		cmp r9, 0
		je ELSE_325
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, CheckDiagonal_c
		mov rcx, CheckDiagonal_r
		mov rdx, CheckDiagonal_cur
		push CheckDiagonal_r
		push CheckDiagonal_c
		push CheckDiagonal_cur
		push CheckDiagonal_found
		call PROC_ClearBlock
		pop CheckDiagonal_found
		pop CheckDiagonal_cur
		pop CheckDiagonal_c
		pop CheckDiagonal_r
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov r9, CheckDiagonal_c
		sub r9, 1
		mov r10, CheckDiagonal_r
		add r10, 1
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, r9
		mov rcx, r10
		mov rdx, CheckDiagonal_cur
		push CheckDiagonal_r
		push CheckDiagonal_c
		push CheckDiagonal_cur
		push CheckDiagonal_found
		call PROC_ClearBlock
		pop CheckDiagonal_found
		pop CheckDiagonal_cur
		pop CheckDiagonal_c
		pop CheckDiagonal_r
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov r9, CheckDiagonal_c
		sub r9, 2
		mov r10, CheckDiagonal_r
		add r10, 2
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, r9
		mov rcx, r10
		mov rdx, CheckDiagonal_cur
		push CheckDiagonal_r
		push CheckDiagonal_c
		push CheckDiagonal_cur
		push CheckDiagonal_found
		call PROC_ClearBlock
		pop CheckDiagonal_found
		pop CheckDiagonal_cur
		pop CheckDiagonal_c
		pop CheckDiagonal_r
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		push CheckDiagonal_r
		push CheckDiagonal_c
		push CheckDiagonal_cur
		push CheckDiagonal_found
		call PROC_AddLine
		pop CheckDiagonal_found
		pop CheckDiagonal_cur
		pop CheckDiagonal_c
		pop CheckDiagonal_r
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov CheckDiagonal_found, 1
	ELSE_325:
	ELSE_317:
	FOR_CONTINUE_316:
		add CheckDiagonal_c, 1
		jmp FOR_314
	ENDFOR_315:
	FOR_CONTINUE_313:
		add CheckDiagonal_r, 1
		jmp FOR_311
	ENDFOR_312:
		mov CheckDiagonal_r, 2
	FOR_333:
		cmp CheckDiagonal_r, 16
		jg ENDFOR_334
		mov CheckDiagonal_c, 0
	FOR_336:
		cmp CheckDiagonal_c, 5
		jg ENDFOR_337
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, CheckDiagonal_c
		mov rcx, CheckDiagonal_r
		push CheckDiagonal_r
		push CheckDiagonal_c
		push CheckDiagonal_cur
		push CheckDiagonal_found
		call FUNC_GridGet
		pop CheckDiagonal_found
		pop CheckDiagonal_cur
		pop CheckDiagonal_c
		pop CheckDiagonal_r
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov r9, rax
		mov CheckDiagonal_cur, r9
		cmp CheckDiagonal_cur, 0
		je ELSE_339
		cmp CheckDiagonal_cur, 10
		je ELSE_339
		mov r9, CheckDiagonal_c
		add r9, 1
		mov r10, CheckDiagonal_r
		sub r10, 1
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, r9
		mov rcx, r10
		push CheckDiagonal_r
		push CheckDiagonal_c
		push CheckDiagonal_cur
		push CheckDiagonal_found
		call FUNC_GridGet
		pop CheckDiagonal_found
		pop CheckDiagonal_cur
		pop CheckDiagonal_c
		pop CheckDiagonal_r
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov r11, rax
		cmp r11, CheckDiagonal_cur
		je CMP_TRUE_349
		mov r9, 0
		jmp CMP_END_350
	CMP_TRUE_349:
		mov r9, 1
	CMP_END_350:
		mov r10, CheckDiagonal_c
		add r10, 2
		mov r11, CheckDiagonal_r
		sub r11, 2
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		push r9
		mov rbx, r10
		mov rcx, r11
		push CheckDiagonal_r
		push CheckDiagonal_c
		push CheckDiagonal_cur
		push CheckDiagonal_found
		call FUNC_GridGet
		pop CheckDiagonal_found
		pop CheckDiagonal_cur
		pop CheckDiagonal_c
		pop CheckDiagonal_r
		pop r9
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		cmp rax, CheckDiagonal_cur
		jne ELSE_347
		cmp r9, 0
		je ELSE_347
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, CheckDiagonal_c
		mov rcx, CheckDiagonal_r
		mov rdx, CheckDiagonal_cur
		push CheckDiagonal_r
		push CheckDiagonal_c
		push CheckDiagonal_cur
		push CheckDiagonal_found
		call PROC_ClearBlock
		pop CheckDiagonal_found
		pop CheckDiagonal_cur
		pop CheckDiagonal_c
		pop CheckDiagonal_r
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov r9, CheckDiagonal_c
		add r9, 1
		mov r10, CheckDiagonal_r
		sub r10, 1
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, r9
		mov rcx, r10
		mov rdx, CheckDiagonal_cur
		push CheckDiagonal_r
		push CheckDiagonal_c
		push CheckDiagonal_cur
		push CheckDiagonal_found
		call PROC_ClearBlock
		pop CheckDiagonal_found
		pop CheckDiagonal_cur
		pop CheckDiagonal_c
		pop CheckDiagonal_r
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov r9, CheckDiagonal_c
		add r9, 2
		mov r10, CheckDiagonal_r
		sub r10, 2
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, r9
		mov rcx, r10
		mov rdx, CheckDiagonal_cur
		push CheckDiagonal_r
		push CheckDiagonal_c
		push CheckDiagonal_cur
		push CheckDiagonal_found
		call PROC_ClearBlock
		pop CheckDiagonal_found
		pop CheckDiagonal_cur
		pop CheckDiagonal_c
		pop CheckDiagonal_r
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		push CheckDiagonal_r
		push CheckDiagonal_c
		push CheckDiagonal_cur
		push CheckDiagonal_found
		call PROC_AddLine
		pop CheckDiagonal_found
		pop CheckDiagonal_cur
		pop CheckDiagonal_c
		pop CheckDiagonal_r
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov CheckDiagonal_found, 1
	ELSE_347:
	ELSE_339:
	FOR_CONTINUE_338:
		add CheckDiagonal_c, 1
		jmp FOR_336
	ENDFOR_337:
	FOR_CONTINUE_335:
		add CheckDiagonal_r, 1
		jmp FOR_333
	ENDFOR_334:
		mov CheckDiagonal_r, 2
	FOR_355:
		cmp CheckDiagonal_r, 16
		jg ENDFOR_356
		mov CheckDiagonal_c, 2
	FOR_358:
		cmp CheckDiagonal_c, 7
		jg ENDFOR_359
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, CheckDiagonal_c
		mov rcx, CheckDiagonal_r
		push CheckDiagonal_r
		push CheckDiagonal_c
		push CheckDiagonal_cur
		push CheckDiagonal_found
		call FUNC_GridGet
		pop CheckDiagonal_found
		pop CheckDiagonal_cur
		pop CheckDiagonal_c
		pop CheckDiagonal_r
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov r9, rax
		mov CheckDiagonal_cur, r9
		cmp CheckDiagonal_cur, 0
		je ELSE_361
		cmp CheckDiagonal_cur, 10
		je ELSE_361
		mov r9, CheckDiagonal_c
		sub r9, 1
		mov r10, CheckDiagonal_r
		sub r10, 1
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, r9
		mov rcx, r10
		push CheckDiagonal_r
		push CheckDiagonal_c
		push CheckDiagonal_cur
		push CheckDiagonal_found
		call FUNC_GridGet
		pop CheckDiagonal_found
		pop CheckDiagonal_cur
		pop CheckDiagonal_c
		pop CheckDiagonal_r
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov r11, rax
		cmp r11, CheckDiagonal_cur
		je CMP_TRUE_371
		mov r9, 0
		jmp CMP_END_372
	CMP_TRUE_371:
		mov r9, 1
	CMP_END_372:
		mov r10, CheckDiagonal_c
		sub r10, 2
		mov r11, CheckDiagonal_r
		sub r11, 2
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		push r9
		mov rbx, r10
		mov rcx, r11
		push CheckDiagonal_r
		push CheckDiagonal_c
		push CheckDiagonal_cur
		push CheckDiagonal_found
		call FUNC_GridGet
		pop CheckDiagonal_found
		pop CheckDiagonal_cur
		pop CheckDiagonal_c
		pop CheckDiagonal_r
		pop r9
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		cmp rax, CheckDiagonal_cur
		jne ELSE_369
		cmp r9, 0
		je ELSE_369
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, CheckDiagonal_c
		mov rcx, CheckDiagonal_r
		mov rdx, CheckDiagonal_cur
		push CheckDiagonal_r
		push CheckDiagonal_c
		push CheckDiagonal_cur
		push CheckDiagonal_found
		call PROC_ClearBlock
		pop CheckDiagonal_found
		pop CheckDiagonal_cur
		pop CheckDiagonal_c
		pop CheckDiagonal_r
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov r9, CheckDiagonal_c
		sub r9, 1
		mov r10, CheckDiagonal_r
		sub r10, 1
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, r9
		mov rcx, r10
		mov rdx, CheckDiagonal_cur
		push CheckDiagonal_r
		push CheckDiagonal_c
		push CheckDiagonal_cur
		push CheckDiagonal_found
		call PROC_ClearBlock
		pop CheckDiagonal_found
		pop CheckDiagonal_cur
		pop CheckDiagonal_c
		pop CheckDiagonal_r
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov r9, CheckDiagonal_c
		sub r9, 2
		mov r10, CheckDiagonal_r
		sub r10, 2
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, r9
		mov rcx, r10
		mov rdx, CheckDiagonal_cur
		push CheckDiagonal_r
		push CheckDiagonal_c
		push CheckDiagonal_cur
		push CheckDiagonal_found
		call PROC_ClearBlock
		pop CheckDiagonal_found
		pop CheckDiagonal_cur
		pop CheckDiagonal_c
		pop CheckDiagonal_r
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		push CheckDiagonal_r
		push CheckDiagonal_c
		push CheckDiagonal_cur
		push CheckDiagonal_found
		call PROC_AddLine
		pop CheckDiagonal_found
		pop CheckDiagonal_cur
		pop CheckDiagonal_c
		pop CheckDiagonal_r
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov CheckDiagonal_found, 1
	ELSE_369:
	ELSE_361:
	FOR_CONTINUE_360:
		add CheckDiagonal_c, 1
		jmp FOR_358
	ENDFOR_359:
	FOR_CONTINUE_357:
		add CheckDiagonal_r, 1
		jmp FOR_355
	ENDFOR_356:
		mov __funcret_CheckDiagonal, CheckDiagonal_found
	FUNC_END_CheckDiagonal:
		mov rax, __funcret_CheckDiagonal
		ret
	function FUNC_CheckAndClearMatches:
		mov CheckAndClearMatches_found, 0
		push CheckAndClearMatches_found
		call FUNC_CheckHorizontal
		pop CheckAndClearMatches_found
		mov rbx, rax
		cmp rbx, 1
		jne ELSE_377
		mov CheckAndClearMatches_found, 1
	ELSE_377:
		push rbx
		push rcx
		push CheckAndClearMatches_found
		call FUNC_CheckVertical
		pop CheckAndClearMatches_found
		pop rcx
		pop rbx
		mov rdx, rax
		cmp rdx, 1
		jne ELSE_381
		mov CheckAndClearMatches_found, 1
	ELSE_381:
		push rbx
		push rcx
		push rdx
		push rsi
		push CheckAndClearMatches_found
		call FUNC_CheckDiagonal
		pop CheckAndClearMatches_found
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		cmp rax, 1
		jne ELSE_385
		mov CheckAndClearMatches_found, 1
	ELSE_385:
		mov __funcret_CheckAndClearMatches, CheckAndClearMatches_found
	FUNC_END_CheckAndClearMatches:
		mov rax, __funcret_CheckAndClearMatches
		ret
	function FUNC_IsClearing:
		mov __funcret_IsClearing, clearing_active
	FUNC_END_IsClearing:
		mov rax, __funcret_IsClearing
		ret
	}
}