diff --git a/useful/stg312/.size.out b/useful/stg312/.size.out
index 0d99857458ce8761e81a73517efd8809e496582d..00ab0c3375201fa89b6ae7a15302a9604c2240ab 100644
--- a/useful/stg312/.size.out
+++ b/useful/stg312/.size.out
@@ -1 +1 @@
-1729704	teste-versao-comentada.r1.tar.gz
+1729732	teste-libs-inuteis.r1.tar.gz
diff --git a/useful/stg312/.upid.out b/useful/stg312/.upid.out
index bc0a8da65e34c6fd9d88ee9f973f659629268847..c18e07032f0c2d49bba1a63751f464d682ec7d42 100644
--- a/useful/stg312/.upid.out
+++ b/useful/stg312/.upid.out
@@ -1 +1 @@
-{"uploadid":"SKwGngE2ZgVnuqkUUMZrASSGPktr5iWQQeb","status":"ok","code":"003","msg":"New upload succesful"}
\ No newline at end of file
+{"uploadid":"xKo1qTyEi3RtsCyZow6VoeOHVF2sJfzSdtP","status":"ok","code":"003","msg":"New upload succesful"}
\ No newline at end of file
diff --git a/useful/stg312/openslx_gui b/useful/stg312/openslx_gui
index a60e4435be36a17ef973b96338014689d38f500b..6bcb70548ab041c18e438a225b8f37ddeb7cd7ae 100755
Binary files a/useful/stg312/openslx_gui and b/useful/stg312/openslx_gui differ
diff --git a/useful/stg312/openslx_gui.c b/useful/stg312/openslx_gui.c
index d3520483fc4a8e17331c72bf46cd8052ad476b00..4da53e6631e4100d8b934e5f005926725be1b3bd 100644
--- a/useful/stg312/openslx_gui.c
+++ b/useful/stg312/openslx_gui.c
@@ -6,7 +6,6 @@
 #include <sys/wait.h>
 #include "utils.h"
 #include "stg4.h"
-#include <X11/Xlib.h>
 #include <gdk/gdkkeysyms.h>
 #include <unistd.h>
 #include <locale.h>
@@ -18,12 +17,18 @@
 
 //FUnção que mostra a tela de upload antigo, caso ele exista
 void tela_upload_antigo(GtkWidget *w,gpointer p){
+
     GtkWidget *window_upload_antigo, *janela_ant, *button_continua_upload, *button_nao_continua, *label_nome_imagem, *label_parte_upload;
 	GtkBuilder *builder;
     FILE *upload_in_progress;
     char *old_upload;
     old_upload = malloc(255*sizeof(char));
 
+    #ifdef DEBUG
+        puts("Entrou na tela de upload antigo");
+        puts("");
+    #endif /*DEBUG*/
+
     dados *data_ant = p; //Pega os dados recebidos pela chamada da função
     janela_ant = (GtkWidget*) data_ant->dado1; //Pega a janela antiga que chamou essa nova janela
 
@@ -36,6 +41,11 @@ void tela_upload_antigo(GtkWidget *w,gpointer p){
 	label_nome_imagem = GTK_WIDGET(gtk_builder_get_object(builder, "label_nome_imagem"));
 	label_parte_upload = GTK_WIDGET(gtk_builder_get_object(builder, "label_parte_upload"));
 
+    #ifdef DEBUG
+        puts("Vai abrir o arquivo de upload antigo");
+        puts("");
+    #endif /*DEBUG*/
+
     upload_in_progress = fopen(".progress.out", "a+"); //Abre o arquivo para ler os dados do upload antigo, abre com a+ para poder dar rewind
     printf("Linha %d\n", __LINE__);
     rewind(upload_in_progress);
@@ -59,13 +69,24 @@ void tela_upload_antigo(GtkWidget *w,gpointer p){
 
 //tela principal do programa, chamada após o login
 void tela_principal(GtkWidget *w,gpointer p){
+
 	GtkWidget *janela_principal, *janela_ant, *button_stg4, *button_ajuda_tela_principal, *button_stg4_update, *label_greeting;
 	GtkBuilder *builder;
     int status;
 
+    #ifdef DEBUG
+        puts("Entrou na tela principal");
+        puts("");
+    #endif /*DEBUG*/
+
     //Se não encontrou o arquivo .speed.out, calcula a velocidade de upload do usuário.
     if((access(".speed.out", F_OK) == -1)){
-        puts("Entrou no if");
+
+        #ifdef DEBUG
+           puts("Entrou no if");
+            puts("");
+        #endif /*DEBUG*/
+
         g_spawn_command_line_sync("speedtest-cli --bytes --simple > .speed.out", NULL, NULL, &status, NULL); // Executa o script
     }
 
@@ -89,11 +110,26 @@ void tela_principal(GtkWidget *w,gpointer p){
             gtk_widget_hide(janela_ant); //Esconde a janela anterior
         }
 
+        #ifdef DEBUG
+            puts("Vai pegar dados do usuário");
+            puts("");
+        #endif /*DEBUG*/
+
 		pega_dados_do_usuario(&dados_do_user); //Pega os dados do usuário recebidos no login
-		puts(dados_do_user.name);
-		puts(dados_do_user.login);
-		puts(dados_do_user.email);
-		puts(dados_do_user.city);
+
+		#ifdef DEBUG
+            puts(dados_do_user.name);
+            puts(dados_do_user.login);
+            puts(dados_do_user.email);
+            puts(dados_do_user.city);
+            puts("");
+        #endif /*DEBUG*/
+
+        #ifdef DEBUG
+            puts("Vai gerar arquivo de dados do usuário");
+            puts("");
+        #endif /*DEBUG*/
+
         gera_arquivo_dados_usuario(); //Cria o user_data.info
 		strcpy(greeting_text, dados_do_user.name);
 		strcat(greeting_text, "!");
@@ -125,23 +161,24 @@ void tela_principal(GtkWidget *w,gpointer p){
 
 //Função que mostra a tela de login para o usuario
 void tela_login(){
+    #ifdef DEBUG
+        puts("tela de login");
+        puts("");
+    #endif /*DEBUG*/
 
 	GtkWidget *window_login, *button_login, *entry_login, *entry_passwd, *label_login_erro;
 	GtkBuilder *builder;
 
 	builder = gtk_builder_new(); //Cria um novo Builder gtk
 	gtk_builder_add_from_file (builder, "openslx_gui_v01.glade", NULL); //Carrega as coisas do arquivo .glade para utilizar nos widgets
-    printf("Linha %d\n", __LINE__);
 
 	window_login = GTK_WIDGET(gtk_builder_get_object(builder, "window_login"));
 	g_signal_connect(window_login, "destroy", G_CALLBACK(sair), NULL);
-    printf("Linha %d\n", __LINE__);
 
 	button_login = GTK_WIDGET(gtk_builder_get_object(builder, "button_login"));
 	label_login_erro = GTK_WIDGET(gtk_builder_get_object(builder, "label_login_erro"));
 	entry_login = GTK_WIDGET(gtk_builder_get_object(builder, "entry_login"));
 	entry_passwd = GTK_WIDGET(gtk_builder_get_object(builder, "entry_passwd"));
-    printf("Linha %d\n", __LINE__);
 
 	struct dados *data = malloc(sizeof(*data));
 	data->dado1 = window_login;
@@ -151,21 +188,28 @@ void tela_login(){
 	data->dado4 = entry_passwd;
 	data->dado5 = label_login_erro;
 
-    printf("Linha %d\n", __LINE__);
     g_signal_connect (G_OBJECT (window_login), "key_press_event", G_CALLBACK (on_key_press), data);
-    printf("Linha %d\n", __LINE__);
     g_signal_connect(entry_passwd, "activate", G_CALLBACK(faz_login), data);
 	g_signal_connect(button_login, "clicked", G_CALLBACK(faz_login), data); //Caso ele aperte enter com o foco no password
-    printf("Linha %d\n", __LINE__);
 
 	gtk_widget_show_all(window_login);
 }
 
 // Main
 int main(int argc, char *argv[]){
-	XInitThreads();
+
+    #ifdef DEBUG
+        puts("Vai iniciar o GTK");
+        puts("");
+    #endif /*DEBUG*/
+
 	gtk_init(&argc, &argv); //Inicia o GTK
 
+
+    #ifdef DEBUG
+        puts("Vai informar os locales para a tradução");
+        puts("");
+    #endif /*DEBUG*/
 	setlocale(LC_ALL, "");
 	bindtextdomain("openslx_gui_v01", "/usr/share/locale");
 	textdomain("openslx_gui_v01");
@@ -180,6 +224,11 @@ int main(int argc, char *argv[]){
 		GdkScreen *screen;
 		GFile *css;
 
+        #ifdef DEBUG
+            puts("vai carregar os estilos css");
+            puts("");
+        #endif /*DEBUG*/
+
 		css = g_file_new_for_path("./styles.css");
 
 		provider = gtk_css_provider_new();
diff --git a/useful/stg312/openslx_gui.h b/useful/stg312/openslx_gui.h
index ddadd400eb04bbc720889c0ad10f57ca7c5d41d7..76bf7b06ba575f65de4dd93261a58be39127dba4 100644
--- a/useful/stg312/openslx_gui.h
+++ b/useful/stg312/openslx_gui.h
@@ -7,6 +7,8 @@
 #include <curl/curl.h>
 #include <curl/easy.h>
 
+#define DEBUG //Comment this for release version
+
 // Using http://www.digip.org/jansson/ for dealing with Json packages for Login/upload. All code was found in their tutorials.
 // Using https://curl.haxx.se/libcurl/c/example.html for doing http requests for Login/upload,
 //      the documenting and debugging of this library is a hellhole, i STRONGLY recommend coding this with the one responsible for the site API next to you
diff --git a/useful/stg312/openslx_gui_v01.glade b/useful/stg312/openslx_gui_v01.glade
index 9dab03a942c86a66323431d83a560392ad9b2a39..43f2e4391434e20f001431a9c086b96ed2a2960f 100644
--- a/useful/stg312/openslx_gui_v01.glade
+++ b/useful/stg312/openslx_gui_v01.glade
@@ -637,7 +637,7 @@ e clique em Gerenciamento de Imagens. Edite as configurações do sistema
 que fez upload e ele estará pronta para uso!
 
 Caso o navegador não abra, entre no site:
-http://slxbox.dev.c3sl.br
+http://slxboxdev.c3sl.br
 </property>
                   </object>
                 </child>
diff --git a/useful/stg312/stg4.c b/useful/stg312/stg4.c
index da1ab36e787464ac53885c6f2c1cc12839610420..4a75aed34b583e092801d5d595d669badf1b927c 100644
--- a/useful/stg312/stg4.c
+++ b/useful/stg312/stg4.c
@@ -5,7 +5,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <errno.h>
-#include <sys/wait.h>
+//#include <sys/wait.h>
 #include "utils.h"
 #include "upload-utils.h"
 #include <gdk/gdkkeysyms.h>
@@ -14,12 +14,20 @@
 
 //Ultima tela do sistema, mostra ao usuario o que ele deve fazer para ter a imagem habilitada
 void stg4_tela_confirmacao_upload(GPid pid, gint status,gpointer p){
+    #ifdef DEBUG
+        puts("stg4_tela_confirmação_upload");
+       puts("");
+     #endif /*DEBUG*/
 
 	GtkWidget *window_stg4_upload_confirm, *janela_ant, *button_return_upload_confirm, *button_site;
 	GtkBuilder *builder;
 
 	dados *data_ant = p; //Pega os dados recebidos pela chamada da função
 
+    #ifdef DEBUG
+           puts("Vai fechar o processo de upload");
+       puts("");
+     #endif /*DEBUG*/
 	GtkWidget *loading;
 	loading = data_ant->dado6;
 	pid = data_ant->pid;
@@ -90,6 +98,11 @@ void stg4_tela_img_select(GtkWidget *w,gpointer p){
 // // A função que exibe a 2a tela do programa, a tela de upload
 void stg4_2a_tela(GPid pid, gint status,gpointer p){
 
+    #ifdef DEBUG
+           puts("stg4_2a_tela");
+       puts("");
+     #endif /*DEBUG*/
+
 	GtkWidget *window_stg4_final, *button_stg4_final_sair, *janela_ant, *button_help_4at, *button_stg4_upload, *label_tempo_upload;
 	GtkBuilder *builder;
     char *texto_tempo_upload, *temp;
@@ -102,7 +115,10 @@ void stg4_2a_tela(GPid pid, gint status,gpointer p){
 	builder = gtk_builder_new(); //Cria um novo Builder gtk
 	gtk_builder_add_from_file (builder, "openslx_gui_v01.glade", NULL); //Carrega as coisas do arquivo .glade para utilizar nos widgets
 
-
+    #ifdef DEBUG
+        puts("Vai fechar o processo de clonagem de imagem");
+       puts("");
+     #endif /*DEBUG*/
     GtkWidget *loading;
 	loading = data_ant->dado6;
 	pid = data_ant->pid;
@@ -120,6 +136,12 @@ void stg4_2a_tela(GPid pid, gint status,gpointer p){
     button_stg4_upload = GTK_WIDGET(gtk_builder_get_object(builder, "button_stg4_upload"));
     label_tempo_upload = GTK_WIDGET(gtk_builder_get_object(builder, "label_tempo_upload"));
 
+
+    #ifdef DEBUG
+           puts("Vai calcular o tempo de upload estimado");
+       puts("");
+     #endif /*DEBUG*/
+
     strcpy(texto_tempo_upload, "Tempo estimado de upload: ");
     sprintf(temp, "%d",calcula_tempo_upload() ); //Estima o tempo de upload de imagem
     strcat(texto_tempo_upload, temp);
@@ -148,6 +170,10 @@ void stg4_2a_tela(GPid pid, gint status,gpointer p){
 
 //Função que chama o script que gera a imagem do usuario.
 void stg4_clique_2a_tela(GtkWidget *w,gpointer p){
+    #ifdef DEBUG
+        puts("stg4_clique_2a_tela");
+       puts("");
+     #endif /*DEBUG*/
 
 	GPid pid;
 	GChildWatchFunc handler;
@@ -177,6 +203,11 @@ void stg4_clique_2a_tela(GtkWidget *w,gpointer p){
 
 	struct dados *data = malloc(sizeof(*data));
 
+    #ifdef DEBUG
+        puts("Vai popular os parametros do script de clonagem da imagem");
+       puts("");
+     #endif /*DEBUG*/
+
     acha_tm_scripts(tmscripts); //Acha a pasta tm_scripts no sistema
     strcpy(version, gtk_entry_get_text(GTK_ENTRY(data_ant->dado4))); //Pega o nome da imagem que o usuario informou
     strcat(version, ".r1"); //versão será lidada pela api depois, por isso é a versão .r1
@@ -203,6 +234,11 @@ void stg4_clique_2a_tela(GtkWidget *w,gpointer p){
 
     argv[8] =  NULL;//ESSE ULTIMO PARAMETRO DEVE SER NULO, ele é o sentinela e informa o g_spawn onde acabam os parametros de invocação
 
+    #ifdef DEBUG
+        puts("Vai spawnar o processo com o script de clonagem de imagem");
+       puts("");
+     #endif /*DEBUG*/
+
     g_spawn_async_with_pipes(NULL, argv,NULL,G_SPAWN_DO_NOT_REAP_CHILD,NULL,NULL, &pid, NULL, NULL, NULL, NULL);//NAO USE FORK PARA SPAWNAR SCRIPTS, use essa função. Documentação em: https://developer.gnome.org/glib/stable/glib-Spawning-Processes.html#g-spawn-sync
 
     data->dado6 = loading_screen;
@@ -215,6 +251,10 @@ void stg4_clique_2a_tela(GtkWidget *w,gpointer p){
 
     handler = stg4_2a_tela; //Função que será chamada quando o g_spawn sair
 
+    #ifdef DEBUG
+        puts("Vai adicionar o processo ao child watch");
+       puts("");
+     #endif /*DEBUG*/
     g_child_watch_add(pid, handler, data); //Chama o handler quando o spawn acabar
 
 
@@ -223,6 +263,12 @@ void stg4_clique_2a_tela(GtkWidget *w,gpointer p){
 
 // Função que exibe a segunda tela, pedindo os dados necessários ao usuário
 void stg4_clique_1a_tela(GtkWidget *w,gpointer p){
+
+    #ifdef DEBUG
+        puts("stg4_clique_1a_tela");
+       puts("");
+     #endif /*DEBUG*/
+
 	GtkWidget *window_stg4_escolha, *janela_ant, *button_clonar, *entry_imagem, *file_chooser_local, *button_help_2at, *check_button_remove;
 	GtkBuilder *builder;
 
@@ -262,6 +308,11 @@ void stg4_clique_1a_tela(GtkWidget *w,gpointer p){
 //função que exibe a primeira tela do processo de clonagem, informando o usuário que ele deve instalar os pacotes desejados
 void stg4_inicio(GtkWidget *w,gpointer p){
 
+    #ifdef DEBUG
+        puts("stg4_inicio");
+       puts("");
+     #endif /*DEBUG*/
+
 	GtkWidget *window_stg4_inic, *janela_ant, *button_geren, *button_stg4_proximo, *button_help_1at;
 	GtkBuilder *builder;
 
@@ -273,8 +324,6 @@ void stg4_inicio(GtkWidget *w,gpointer p){
 	button_stg4_proximo  = GTK_WIDGET(gtk_builder_get_object(builder, "button_stg4_proximo"));
 	window_stg4_inic = GTK_WIDGET(gtk_builder_get_object(builder, "window_stg4_inic"));
 	button_geren = GTK_WIDGET(gtk_builder_get_object(builder, "button_geren"));
-	//button_shell = GTK_WIDGET(gtk_builder_get_object(builder, "button_shell"));
-
 
 	g_signal_connect(window_stg4_inic, "destroy", G_CALLBACK(chama_tela_principal), NULL); //Chama a tela principal ao destruir essa janela
 
diff --git a/useful/stg312/stg4.h b/useful/stg312/stg4.h
index 2a866f0f2a389d41a17d74fd90416310e015dcc0..acbab847de9dbe1d8d6fe3ee0867a608072fc3da 100644
--- a/useful/stg312/stg4.h
+++ b/useful/stg312/stg4.h
@@ -5,7 +5,6 @@
 #include <stdlib.h>
 #include <string.h>
 #include <errno.h>
-#include <sys/wait.h>
 
 
 //void stg4_tela_confirmacao_upload(GtkWidget *w,gpointer p);
diff --git a/useful/stg312/upload b/useful/stg312/upload
index 9c8adf2445df5c7a787c79480e14a9610f0dd17f..59c5cd22ecb28a43be4f8372bec1cd8958ecfd72 100755
Binary files a/useful/stg312/upload and b/useful/stg312/upload differ
diff --git a/useful/stg312/upload-utils.c b/useful/stg312/upload-utils.c
index b6abb937412914c402930c931bf81d093e938a6f..31ac060e51c433e33ec11eb5e77947cd8ab05fd1 100644
--- a/useful/stg312/upload-utils.c
+++ b/useful/stg312/upload-utils.c
@@ -4,7 +4,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <errno.h>
-#include <sys/wait.h>
+//#include <sys/wait.h>
 #include <gdk/gdkkeysyms.h>
 #include <gdk/gdk.h>
 #include <glib.h>
@@ -13,13 +13,18 @@
 #include <curl/easy.h>
 #include <jansson.h>
 #include <time.h>
-#include <gcrypt.h>
+//#include <gcrypt.h>
 #include <sys/types.h>
 #include <signal.h>
 
 //Função que faz logout do sistema
 void logout(){
 
+    #ifdef DEBUG
+           puts("logout");
+       puts("");
+     #endif /*DEBUG*/
+
     CURL *curl;
 
 
@@ -39,6 +44,11 @@ void logout(){
         curl_easy_setopt(curl, CURLOPT_URL, API_URL);
         curl_easy_setopt(curl, CURLOPT_POST, 1);
         curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "request=logout");
+
+        #ifdef DEBUG
+           puts("Vai fazer o logout com o curl");
+               puts("");
+         #endif /*DEBUG*/
         curl_easy_perform(curl); //faz logout
     }
 
@@ -47,10 +57,21 @@ void logout(){
 //Checa se existe algum upload antigo em progresso
 int checa_upload_antigo(){
 
+    #ifdef DEBUG
+           puts("checa_upload_antigo");
+       puts("");
+     #endif /*DEBUG*/
+
     FILE *upload_in_progress;
     char *old_upload;
     old_upload = malloc(255*sizeof(char));
 
+
+    #ifdef DEBUG
+           puts("Vai abrir arquivo de upload em progresso");
+       puts("");
+     #endif /*DEBUG*/
+
     upload_in_progress = fopen(".progress.out", "a+"); //Abre o arquivo que contem os dados do upload antigo
     printf("Linha %d\n", __LINE__);
     rewind(upload_in_progress);
@@ -67,7 +88,18 @@ int checa_upload_antigo(){
 //Estima o tempo de upload, não faz a estimativa correta, mas só deus sabe como fazer essa joça realmente. O curl faz muita coisa que demora mais que só o upload, eu assumo
 int calcula_tempo_upload(){
 
+    #ifdef DEBUG
+           puts("Calcula_tempo_upload");
+       puts("");
+     #endif /*DEBUG*/
+
     FILE *velocidade_upload;
+
+    #ifdef DEBUG
+           puts("Vai abrir arquivo contendo a velocidade de upload");
+       puts("");
+     #endif /*DEBUG*/
+
     velocidade_upload = fopen(".speed.out", "r");
 
     char *velocidade;
@@ -75,25 +107,14 @@ int calcula_tempo_upload(){
     int velocidade_f;
 
     fscanf(velocidade_upload, "%s", velocidade); //Le lixo e joga fora
-    puts(velocidade);
     fscanf(velocidade_upload, "%s", velocidade); //Le lixo e joga fora
-    puts(velocidade);
     fscanf(velocidade_upload, "%s", velocidade); //Le lixo e joga fora
-    puts(velocidade);
     fscanf(velocidade_upload, "%s", velocidade); //Le lixo e joga fora
-    puts(velocidade);
     fscanf(velocidade_upload, "%s", velocidade); //Le lixo e joga fora
-    puts(velocidade);
     fscanf(velocidade_upload, "%s", velocidade); //Le lixo e joga fora
-    puts(velocidade);
     fscanf(velocidade_upload, "%s", velocidade); //Le lixo e joga fora
-    puts(velocidade);
     fscanf(velocidade_upload, "%s", velocidade); //Le a velocidade de upload
-    puts(velocidade);
-    puts("vai calcular");
     velocidade_f = atoi(velocidade); //Transforma em float
-    puts("calculou");
-    puts("chegou aqui");
     return((1953)/velocidade_f*3); // *3 para levar em conta problemas de rede.
 }
 
@@ -101,9 +122,20 @@ int calcula_tempo_upload(){
 // sera submetido junto à imagem quando o upload for feito.
 void gera_arquivo_dados_usuario(){
 
+    #ifdef DEBUG
+        puts("gera_arquivo_dados_usuario");
+       puts("");
+    #endif /*DEBUG*/
+
     user_info dados_do_user; //Estrutura definida em openslx_gui.h para guardar os dados do usuario
     pega_dados_do_usuario(&dados_do_user); //Abre o arquivo gerado no Login e coloca os dados do usuario na estrutura dados_do_user
     FILE *user_data_file;
+
+    #ifdef DEBUG
+           puts("Abre o arquivo de dados do usuario para sobrescrever");
+       puts("");
+     #endif /*DEBUG*/
+
     user_data_file = fopen("user_data.info", "wr"); //Arquivo com os dados do usuario que será feito o upload
 
     fputs("Nome do criador da imagem: ", user_data_file);
@@ -115,96 +147,116 @@ void gera_arquivo_dados_usuario(){
     fputs("\nCidade do criador da imagem: ", user_data_file);
     fputs(dados_do_user.city, user_data_file);
 
+    #ifdef DEBUG
+           puts("Vai pegar o tempo do sistema");
+       puts("");
+     #endif /*DEBUG*/
+
     time_t timer;
     time(&timer); //pega o tempo de criação da imagem
     fputs("\nData da criação da imagem: ", user_data_file);
     fputs(ctime(&timer), user_data_file); //Coloca o tempo de criação da imagem no arquivo
 
+    #ifdef DEBUG
+           puts("Vai pegar os dados do sistema rodando o software");
+       puts("");
+     #endif /*DEBUG*/
+
     fclose(user_data_file);
     system("uname -a >> user_data.info"); //Coloca informações sobre o usuario no arquivo
     system("lsb_release -a >> user_data.info"); //Coloca informações sobre o sistema no arquivo
 
 
-
-
 }
 
 //Função que checa o arquivo .login.out para verificar o suceso do login.
 int checa_sucesso_do_login(){
 
+    #ifdef DEBUG
+        puts("checa_sucesso_do_login");
+       puts("");
+     #endif /*DEBUG*/
+
     FILE *login;
     char *user_data_str;
+
+    #ifdef DEBUG
+        puts("Vai abrir o arquivo com o resultado do login");
+       puts("");
+     #endif /*DEBUG*/
+
     login = fopen(".login.out", "r"); //Arquivo que contem a resposta do login
     user_data_str = malloc(2550*sizeof(char));
     fgets(user_data_str,2550*sizeof(char), login );
 
-    printf("%zu tamanho da string\n", strlen(user_data_str));
-    puts(user_data_str);
+   #ifdef DEBUG
+        puts("Dados lidos do pacote:");
+        puts(user_data_str);
+        puts("Vai ler o pacote json recebido pelo servidor");
+       puts("");
+     #endif /*DEBUG*/
 
     json_t *root;
     json_error_t error;
     root = json_loads(user_data_str,0, &error); //Pega os dados do arquivo em formato json
-    printf("Linha %d\n", __LINE__);
 
     if(!root){ //Caso não tenha conseguido carregar os dados
-        puts("erro ao carregar dados!");
-        //exit(0);
+        puts("Erro ao carregar dados!");
     }
-    printf("Linha %d\n", __LINE__);
 
     if(!json_is_object(root))
     {
         fprintf(stderr, "Dados não estão em formato Json\n");
         json_decref(root);
     }
-    printf("Linha %d\n", __LINE__);
 
     json_t  *sha;
-    printf("Linha %d\n", __LINE__);
 
     const char *message_text;
-    printf("Linha %d\n", __LINE__);
 
     sha = json_object_get(root, "status"); //Pega o Status da resposta
-    printf("Linha %d\n", __LINE__);
 
     if(json_is_string(sha))
     {
-        printf("Linha %d\n", __LINE__);
         message_text = json_string_value(sha); //coloca o valor de status na string
-        printf("Linha %d\n", __LINE__);
-        puts(message_text);
-        printf("Linha %d\n", __LINE__);
     }else{
-        printf("Linha %d\n", __LINE__);
-        puts("error, not string");
+        puts("Erro, o valor lido não é uma string");
         return 0;
-        printf("Linha %d\n", __LINE__);
     }
 
     if(!(strcmp("ok", message_text))){ //Caso o status seja diferente de OK
-        printf("Linha %d\n", __LINE__);
-        puts(message_text);
         return 1;
     }
 
-    printf("Linha %d\n", __LINE__);
     return 0;
-
-
 }
 
 //Função que utiliza o arquivo gerado pela chamada Curl com os dados do usuario e coloca eles na estrutura user_info *dados
 void pega_dados_do_usuario(user_info *dados){
 
+    #ifdef DEBUG
+        puts("pega_dados_do_usuario");
+       puts("");
+     #endif /*DEBUG*/
+
     FILE *user_data;
     char *user_data_str;
     user_data_str = malloc(2550*sizeof(char));
+
+    #ifdef DEBUG
+        puts("Vai abrir o arquivo com os dados do usuário");
+       puts("");
+     #endif /*DEBUG*/
+
     user_data = fopen(".data.out", "r"); //Abre arquivo contendo os dados do usuário
     fgets(user_data_str,2550*sizeof(char), user_data );
-    puts("User data: ");
-    puts(user_data_str);
-    puts("User data end ");
+
+    #ifdef DEBUG
+        puts("Dados lidos do pacote:");
+        puts(user_data_str);
+        puts("Vai ler o pacote json recebido pelo servidor");
+       puts("");
+     #endif /*DEBUG*/
 
     json_t *root;
     json_error_t error;
@@ -230,7 +282,7 @@ void pega_dados_do_usuario(user_info *dados){
         strcpy(dados->name, message_text);
     }else{
         dados->name[0] = '\0'; //Caso o campo seja nulo no banco de dados
-        puts("error, not string");
+        puts("Erro! O dado lido não é uma String.");
     }
 
     sha = json_object_get(root, "login"); //Pega nome
@@ -242,7 +294,7 @@ void pega_dados_do_usuario(user_info *dados){
 
     }else{
         dados->login[0] = '\0'; //Caso o campo seja nulo no banco de dados
-        puts("error, not string");
+        puts("Erro! O dado lido não é uma String.");
     }
 
     sha = json_object_get(root, "email"); //Pega nome
@@ -254,7 +306,7 @@ void pega_dados_do_usuario(user_info *dados){
 
     }else{
         dados->email[0] = '\0'; //Caso o campo seja nulo no banco de dados
-        puts("error, not string");
+        puts("Erro! O dado lido não é uma String.");
     }
 
     sha = json_object_get(root, "city"); //Pega nome
@@ -266,20 +318,35 @@ void pega_dados_do_usuario(user_info *dados){
 
     }else{
         dados->city[0] = '\0'; //Caso o campo seja nulo no banco de dados
-        puts("error, not string");
+        puts("Erro! O dado lido não é uma String.");
     }
 }
 
 int checa_sucesso_get_info(){
 
+    #ifdef DEBUG
+        puts("checa_sucesso_get_info");
+       puts("");
+     #endif /*DEBUG*/
+
     FILE *user_data;
     char *user_data_str;
     user_data_str = malloc(2550*sizeof(char));
+
+    #ifdef DEBUG
+        puts("Vai abrir o arquivo que contem os dados do usuário recebido.");
+       puts("");
+     #endif /*DEBUG*/
+
     user_data = fopen(".data.out", "r"); //Arquivo que contém o retorno do get info e os dados do usuário
     fgets(user_data_str,2550*sizeof(char), user_data );
-    puts("User data: ");
-    puts(user_data_str);
-    puts("User data end ");
+
+    #ifdef DEBUG
+        puts("Dados lidos do pacote:");
+        puts(user_data_str);
+        puts("Vai ler o pacote json recebido pelo servidor");
+       puts("");
+     #endif /*DEBUG*/
 
     json_t *root;
     json_error_t error;
@@ -315,14 +382,13 @@ int checa_sucesso_get_info(){
 }
 //Função que faz o Login do usuario no sistema. Utiliza a biblioteca Libcurlc para realizar as requisições http.
 // Guarda as saidas em arquivos para uso posterior. Guarda o cookie para uso posterior tbm
-int faz_login_dummy(GtkWidget *w, gpointer p){
-    dados *data_ant = p; //Pega os dados recebidos pela chamada da função
-    tela_principal(NULL, data_ant);
-    return 1;
-}
-
 int faz_login(GtkWidget *w, gpointer p){
 
+    #ifdef DEBUG
+        puts("faz_login");
+       puts("");
+     #endif /*DEBUG*/
+
     dados *data_ant = p; //Pega os dados recebidos pela chamada da função
     CURL *curl;
     char *data = malloc(255*sizeof(char));
@@ -330,19 +396,28 @@ int faz_login(GtkWidget *w, gpointer p){
     char * resp;
     FILE *dados_do_user, *login_out;
     resp = malloc(255*sizeof(char));
-    puts("teste");
-    puts(gtk_entry_get_text(GTK_ENTRY(data_ant->dado3)));
+
     strcat(data, gtk_entry_get_text(GTK_ENTRY(data_ant->dado3))); //Login do usuario
     strcat(data, "&passwd=");
     strcat(data, gtk_entry_get_text(GTK_ENTRY(data_ant->dado4))); //Senha do usuario
     strcat(data, "&request=login");
-    puts(data);
+
+    #ifdef DEBUG
+        puts("Vai abrir os arquivos de dados do usuário e de resultado do login");
+       puts("");
+     #endif /*DEBUG*/
 
     dados_do_user = fopen(".data.out", "wr");
     login_out = fopen(".login.out", "wr");
 
 
     curl = curl_easy_init();
+
+    #ifdef DEBUG
+        puts("Vai iniciar os processos de login com o curl");
+       puts("");
+     #endif /*DEBUG*/
+
     if(curl) {
 
         //para entender melhor o que é cada opção do Curl, leia: https://curl.haxx.se/libcurl/c/libcurl-tutorial.html
@@ -358,12 +433,19 @@ int faz_login(GtkWidget *w, gpointer p){
         curl_easy_setopt(curl, CURLOPT_URL, API_URL);
         curl_easy_setopt(curl, CURLOPT_POST, 1);
         curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
-        puts("Fazendo login.");
+
+        #ifdef DEBUG
+            puts("Fazendo login.");
+           puts("");
+     #endif /*DEBUG*/
         curl_easy_perform(curl); //Faz login
 
-        puts("teste 2");
         fclose(login_out);
-        printf("Linha antes checagem %d\n", __LINE__);
+
+        #ifdef DEBUG
+            puts("Vai checar o sucesso do login");
+               puts("");
+         #endif /*DEBUG*/
         if(checa_sucesso_do_login()){ //Se o login foi bem sucedido, pega as informações do usuário
 
             printf("Linha %d\n", __LINE__);
@@ -373,8 +455,11 @@ int faz_login(GtkWidget *w, gpointer p){
             curl_easy_setopt(curl, CURLOPT_VERBOSE, 0);
             curl_easy_setopt(curl, CURLOPT_HEADER, 0);
             curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data2);
-            printf("Linha %d\n", __LINE__);
-            puts("pegando informação.");
+
+            #ifdef DEBUG
+                puts("Pegando informaçes do usuário.");
+                       puts("");
+             #endif /*DEBUG*/
             curl_easy_perform(curl); //Pega informações
             fclose(dados_do_user);
             if(!(checa_sucesso_get_info())){ //nao conseguiu pegar informações
@@ -391,6 +476,10 @@ int faz_login(GtkWidget *w, gpointer p){
                 puts("Nao pegou dados");
             curl_easy_cleanup(curl);
 
+            #ifdef DEBUG
+                puts("Vai checar se tem um upload em progresso.");
+                       puts("");
+             #endif /*DEBUG*/
             if(checa_upload_antigo()){ //Verifica se existe um upload antigo nessa máquina
                 tela_upload_antigo(NULL, data_ant); //Se tiver, chama a tela de uplaod antigo
             }else{
@@ -398,11 +487,11 @@ int faz_login(GtkWidget *w, gpointer p){
             }
             return 1;
         }
-        printf("Linha %d\n", __LINE__);
+
     }
-    printf("Linha %d\n", __LINE__);
+
     gtk_label_set_text(GTK_LABEL(data_ant->dado5), "Login nao encontrado!"); //O login não foi bem sucedido
-    printf("Linha %d\n", __LINE__);
+
     return 0;
 }
 
@@ -411,6 +500,11 @@ int faz_login(GtkWidget *w, gpointer p){
 //função de teste que faz upload da imagem teste.r1
 void faz_upload_teste(GtkWidget *w, gpointer p){
 
+    #ifdef DEBUG
+        puts("faz_upload_teste");
+       puts("");
+     #endif /*DEBUG*/
+
     GtkWidget *loading;
 	GtkBuilder *builder;
 	dados *data_ant = p; //Pega os dados recebidos pela chamada da função
@@ -444,7 +538,11 @@ void faz_upload_teste(GtkWidget *w, gpointer p){
 
 void faz_upload(GtkWidget *w, gpointer p){
 
-    printf("Linha faz upload %d\n", __LINE__);
+    #ifdef DEBUG
+        puts("faz_upload");
+       puts("");
+     #endif /*DEBUG*/
+
     GtkWidget *loading;
 	dados *data_ant = p; //Pega os dados recebidos pela chamada da função
 	GtkBuilder *builder;
@@ -457,31 +555,40 @@ void faz_upload(GtkWidget *w, gpointer p){
 	for (i=0; i < 10; i++){
 		argv[i] = malloc(255*sizeof(char));
 	}
-    printf("Linha %d\n", __LINE__);
 
     builder = gtk_builder_new(); //Cria um novo Builder gtk
 	gtk_builder_add_from_file (builder, "openslx_gui_v01.glade", NULL); //Carrega as coisas do arquivo .glade para utilizar nos widgets
     loading = GTK_WIDGET(gtk_builder_get_object(builder, "loading_screen"));
 
-
-    printf("Linha %d\n", __LINE__);
-
     gtk_widget_show_all(loading);
-    printf("Linha %d\n", __LINE__);
+
+    #ifdef DEBUG
+        puts("Vai popular o vetor de argumentos para o script de upload.");
+       puts("");
+     #endif /*DEBUG*/
     strcpy(argv[0], "./upload"); //Comando a ser invocado pelo shell
     strcpy(argv[1], gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(data_ant->dado4))); //Caminho para a imagem criada pelo usuario
     strcpy(argv[2], gtk_entry_get_text(GTK_ENTRY(data_ant->dado3))); //Nome da imagem
     strcpy(argv[3], ".r1"); //versão, isso será depois lidado pela api, por isso o .r1
     argv[4] = NULL; //ESSE ULTIMO PARAMETRO DEVE SER NULO, ele é o sentinela e informa o g_spawn onde acabam os parametros de invocação
-    printf("Linha %d\n", __LINE__);
+
+    #ifdef DEBUG
+        puts("Vai spawnar o processo de upload.");
+       puts("");
+     #endif /*DEBUG*/
     g_spawn_async_with_pipes(NULL, argv,NULL,G_SPAWN_DO_NOT_REAP_CHILD,NULL,NULL, &pid, NULL, NULL, NULL, NULL); //NAO USE FORK PARA SPAWNAR SCRIPTS, use essa função. Documentação em: https://developer.gnome.org/glib/stable/glib-Spawning-Processes.html#g-spawn-sync
 
-    printf("Linha %d\n", __LINE__);
+
 
     handler = stg4_tela_confirmacao_upload; //Função a ser chamada quando o g_spawn sair
     data->dado6 = loading;
     data->dado1 = data_ant->dado1;
     data->pid = pid;
-    printf("Linha %d\n", __LINE__);
+
+
+    #ifdef DEBUG
+        puts("Vai adicionar o processo ao child watch");
+       puts("");
+     #endif /*DEBUG*/
     g_child_watch_add(pid, handler, data); //Chamará a função apontada por handler ao sair do processo criado pelo g_spawn
 }
diff --git a/useful/stg312/upload-utils.h b/useful/stg312/upload-utils.h
index 1dd972c482b3952ab93b9d82c96dc238bffabc49..234b0cdde9fc0d27046171450044811aa3c26ae0 100644
--- a/useful/stg312/upload-utils.h
+++ b/useful/stg312/upload-utils.h
@@ -4,7 +4,6 @@
 #include <stdlib.h>
 #include <string.h>
 #include <errno.h>
-#include <sys/wait.h>
 
 //Aviso a quem vai editar esse código. Boa sorte com a libcurl, a documentação é muito escassa e mal explicada, nada faz sentido
 // a opção de debug não indica nada importante e as soluções são extremamente Cripticas se vc não tem um conhecimento grande de
diff --git a/useful/stg312/upload.c b/useful/stg312/upload.c
index a1487308eb4ee9962bb7298698716c6b62f2afd6..a3e1f1c4f57e8517c9e0e2b05b215de45a839412 100644
--- a/useful/stg312/upload.c
+++ b/useful/stg312/upload.c
@@ -3,7 +3,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <errno.h>
-#include <sys/wait.h>
+//#include <sys/wait.h>
 #include <gdk/gdkkeysyms.h>
 #include <gdk/gdk.h>
 #include <glib.h>
@@ -12,7 +12,7 @@
 #include <curl/easy.h>
 #include <jansson.h>
 #include <time.h>
-#include <gcrypt.h>
+//#include <gcrypt.h>
 #include <sys/types.h>
 #include <signal.h>
 #include "upload-utils.h"
@@ -20,15 +20,28 @@
 //Função que checa o sucesso do upload feito;
 int checa_sucesso_upload(){
 
+    #ifdef DEBUG
+       puts("checa_sucesso_upload");
+       puts("");
+     #endif /*DEBUG*/
+
     FILE *user_data;
     char *user_data_str;
     user_data_str = malloc(2550*sizeof(char));
+
+    #ifdef DEBUG
+       puts("Vai abrir arquivo com a resposta do upload.");
+       puts("");
+     #endif /*DEBUG*/
     user_data = fopen(".upload.out", "r"); //Abre arquivo contendo a resposta do servidor
-    system("cat .upload.out"); //Para debug
+
     fgets(user_data_str,2550*sizeof(char), user_data );
-    puts("User data: ");
-    puts(user_data_str);
-    puts("User data end ");
+    #ifdef DEBUG
+        puts("Dados lidos do pacote:");
+        system("cat .upload.out"); //Para debug
+        puts("Vai ler o pacote json recebido pelo servidor");
+       puts("");
+     #endif /*DEBUG*/
 
     json_t *root;
     json_error_t error;
@@ -54,7 +67,7 @@ int checa_sucesso_upload(){
         message_text = json_string_value(sha); //Coloca o status no string
         puts(message_text);
     }else{
-        puts("error, not string"); //Status não é um string
+        puts("Erro! O dado lido não é uma String."); //Status não é um string
 
     }
 
@@ -68,12 +81,16 @@ int checa_sucesso_upload(){
         message_text = json_string_value(sha); //Coloca o codigo em uma string
         puts(message_text);
     }else{
-        puts("error, not string"); //O código não é uma string
+        puts("Erro! O dado lido não é uma String."); //O código não é uma string
         return 116;
     }
 
     //Para entender que erro é o que verifique documentação da API que está no Redmine (https://redmine.c3sl.ufpr.br/projects/openslx-dnbd3/files arquivo api_webservice_report) ou Taiga
-    puts("Irá procurar o erro.");
+
+    #ifdef DEBUG
+        puts("Irá procurar o erro.");
+       puts("");
+     #endif /*DEBUG*/
     if(!(strcmp(message_text, "109"))){
         puts("Erro 109: Uploadid nao informado, caso esteja vendo esse erro repita todo o processo de criação de imagem.");
         return 0;
@@ -121,14 +138,28 @@ int checa_sucesso_upload(){
 //Função que vai pegar o upload ip fornecido pela api
 int pega_upload_id(char *id){
 
+    #ifdef DEBUG
+       puts("pega_uplaod_id");
+       puts("");
+     #endif /*DEBUG*/
+
     FILE *user_data;
     char *user_data_str;
     user_data_str = malloc(2550*sizeof(char));
+
+    #ifdef DEBUG
+       puts("Vai abrir o arquivo contendo o upload id");
+       puts("");
+     #endif /*DEBUG*/
     user_data = fopen(".upid.out", "r"); //Abre o arquivo que contém o upload id
     fgets(user_data_str,2550*sizeof(char), user_data );
-    puts("User data: ");
-    puts(user_data_str);
-    puts("User data end ");
+
+    #ifdef DEBUG
+        puts("Dados lidos do pacote:");
+        puts(user_data_str);
+        puts("Vai ler o pacote json recebido pelo servidor");
+       puts("");
+     #endif /*DEBUG*/
 
     json_t *root;
     json_error_t error;
@@ -153,7 +184,7 @@ int pega_upload_id(char *id){
         message_text = json_string_value(sha);
         puts(message_text);
     }else{
-        puts("error, not string");
+        puts("Erro! O dado lido não é uma String.");
     }
 
     if(!(strcmp(message_text, "ok"))){ //Se o status estiver OK, continua
@@ -163,7 +194,7 @@ int pega_upload_id(char *id){
             message_text = json_string_value(sha);
             puts(message_text);
         }else{
-            puts("error, not string");
+            puts("Erro! O dado lido não é uma String.");
         }
 
         strcpy(id, message_text); //copia o uploadid pra id
@@ -176,7 +207,7 @@ int pega_upload_id(char *id){
         message_text = json_string_value(sha);
         puts(message_text);
     }else{
-        puts("error, not string");
+        puts("Erro! O dado lido não é uma String.");
     }
 
     if(!(strcmp(message_text, "108"))){
@@ -188,6 +219,11 @@ int pega_upload_id(char *id){
 
 int main(int argc, char *argv[]){
 
+    #ifdef DEBUG
+       puts("main do upload.c");
+       puts("");
+     #endif /*DEBUG*/
+
     system("echo n > .result.out"); //Inicia o arquivo de sucesso com falha
 
     CURL *curl;
@@ -205,6 +241,11 @@ int main(int argc, char *argv[]){
     //strcpy(version, ARQUIVO_TESTE);
 
     FILE *upid, *sha_calc, *upload_output, *upload_in_progress;
+
+    #ifdef DEBUG
+       puts("Vai abrir o arquivo para o upload id");
+       puts("");
+     #endif /*DEBUG*/
     upid = fopen(".upid.out", "wr");
 
     curl = curl_easy_init();
@@ -221,14 +262,12 @@ int main(int argc, char *argv[]){
         curl_easy_setopt(curl, CURLOPT_POST, 1);
 
         upload_in_progress = fopen(".progress.out", "a+"); //Abre o arquivo com o possível upload antigo em progresso.
-        printf("Linha %d\n", __LINE__);
         rewind(upload_in_progress);
         fscanf(upload_in_progress, "%s", old_upload);
-        printf("Linha %d\n", __LINE__);
 
         i = 0;
 
-        puts(old_upload);
+
         if(!(strcmp(old_upload, "Upload"))){ //Verifica se existe um upload antigo
             puts("Achou um upload antigo, continuando ele");
             fscanf(upload_in_progress, "%s", old_upload);
@@ -250,15 +289,22 @@ int main(int argc, char *argv[]){
             strcat(upload_name, "&version=");
             strcat(upload_name, argv[3]);
 
-            puts("Upload_name: ");
-            puts(upload_name);
+
+            #ifdef DEBUG
+                puts("Upload_name: ");
+                puts(upload_name);
+                       puts("");
+             #endif /*DEBUG*/
 
             curl_easy_setopt(curl, CURLOPT_POSTFIELDS, upload_name);
             curl_easy_setopt(curl, CURLOPT_WRITEDATA, upid);
 
-            puts("Pegando UploadId.");
+
+            #ifdef DEBUG
+                 puts("Pegando UploadId.");
+                       puts("");
+             #endif /*DEBUG*/
             curl_easy_perform(curl); //Pega o uploadid
-            printf("Linha %d\n", __LINE__);
 
             fclose(upid);
             if(!(pega_upload_id(uploadid))){
@@ -272,26 +318,26 @@ int main(int argc, char *argv[]){
         fclose(upload_in_progress);
 
         // Vai preparar pra fazer o upload.
-
-        printf("Linha %d\n", __LINE__);
         char *calculated_sha = malloc(255*sizeof(char));
         char *sha_command_line = malloc(255*sizeof(char));
-        printf("Linha %d\n", __LINE__);
+
 
         curl_easy_setopt(curl, CURLOPT_POST, 0);
         struct curl_slist *list = NULL;
         list = curl_slist_append(list, "Expect: ");
         curl_easy_setopt(curl,CURLOPT_HTTPHEADER,list);
         curl_formadd(&formpost,&lastptr,CURLFORM_COPYNAME, "request", CURLFORM_COPYCONTENTS,"upload",CURLFORM_END);
-        printf("Linha %d\n", __LINE__);
         curl_formadd(&formpost,&lastptr,CURLFORM_COPYNAME, "uploadid", CURLFORM_COPYCONTENTS, uploadid,CURLFORM_END);
 
         //começa a fazer o upload
         for(; i < NUMBER_OF_PARTS; ++i){
-            puts(version);
             strcpy(upload_name, version);
             strcat(upload_name, part_suffix);
 
+            #ifdef DEBUG
+                 puts("Vai abrir o arquivo que irá conter o upload antigo.");
+                       puts("");
+             #endif /*DEBUG*/
             upload_output = fopen(".upload.out", "wr");
 
             strcpy(sha_command_line, "openssl dgst -sha1 "); //calcula o sha do arquivo
@@ -304,19 +350,30 @@ int main(int argc, char *argv[]){
             curl_formadd(&formpost,&lastptr,CURLFORM_COPYNAME, "sha1", CURLFORM_COPYCONTENTS,calculated_sha,CURLFORM_END);
             curl_easy_setopt(curl, CURLOPT_WRITEDATA, upload_output);
             curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
-            puts("Fazendo Upload de:");
-            puts(part_suffix);
+
+            #ifdef DEBUG
+                puts("Fazendo Upload de:");
+                puts(part_suffix);
+                       puts("");
+             #endif /*DEBUG*/
 
             upload_in_progress = fopen(".progress.out", "wr"); //Abre o arquivo que conterá os dados necessários para continuar o upload caso esse falhe
             fprintf(upload_in_progress, "Upload\n%s\n%s\n%s\n%d\n%s", uploadid, upload_name, part_suffix, i, version); //Insere os dados necessários para continuar o upload em caso de falha
             fclose(upload_in_progress); //fecha o arquivo, obriga um sync dele
 
+            #ifdef DEBUG
+               puts("Vai fazer o upload usando o curl.");
+                       puts("");
+             #endif /*DEBUG*/
             curl_easy_perform(curl); //Faz o upload propriamente dito
 
             fclose(upload_output);
-            printf("Linha %d\n", __LINE__);
+
+            #ifdef DEBUG
+                puts("Vai checar o sucesos do upload:");
+                       puts("");
+             #endif /*DEBUG*/
             check_response = checa_sucesso_upload(); //Checa se o upload foi feito com sucesso
-            printf("Linha %d\n", __LINE__);
             if(check_response == 1){
                 puts("Parte enviada para o servidor com suceso.");
                 part_suffix[9]++;
@@ -338,14 +395,14 @@ int main(int argc, char *argv[]){
                     --i;
                 }
             }
-            printf("Linha %d\n", __LINE__);
+
         }
         //Fez o upload, vai atualizar o arquivo de upload em progresso
-        printf("Linha %d\n", __LINE__);
+
         upload_in_progress = fopen(".progress.out", "wr");
-        printf("Linha %d\n", __LINE__);
+
         fprintf(upload_in_progress, "Nothing to see here, move along now");
-        printf("Linha %d\n", __LINE__);
+
         curl_easy_cleanup(curl);
     }
     system("echo s > .result.out"); //Terminou tudo corretamente, atualiza o arquivo de checagem de sucesso!
diff --git a/useful/stg312/utils.c b/useful/stg312/utils.c
index 9c2798426ae18e9d1ee7a011e479589ec8384c16..cea7ff9d967825ccd3c45c3249af31e967e0c2bc 100644
--- a/useful/stg312/utils.c
+++ b/useful/stg312/utils.c
@@ -5,7 +5,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <errno.h>
-#include <sys/wait.h>
+//#include <sys/wait.h>
 #include <gdk/gdkkeysyms.h>
 #include <gdk/gdk.h>
 #include <glib.h>
@@ -14,35 +14,40 @@
 #include <curl/easy.h>
 #include <jansson.h>
 #include <time.h>
-#include <gcrypt.h>
+//#include <gcrypt.h>
 #include <sys/types.h>
 #include <signal.h>
 
 //FUnção que acha o caminho para o tm-scripts, utilizada no arquivo clone_stage4.sh
 void acha_tm_scripts(char *path){
-
-        char *cam_tm_scripts;
-        char *first_p;
-        char paths[1024];
-        getcwd(paths, sizeof(paths)); // Pega o current working directory
-        cam_tm_scripts = strstr(paths, "tm-scripts"); //Acha onde esta escrito tm-scripts
-        puts(cam_tm_scripts);
-        first_p = strchr(cam_tm_scripts, 'p');//acha o primeiro 'p' em tm scripts
-        first_p += 3; //anda o ponteiro
-        *first_p = '\0'; //termina a string, sim, tem um leak de memoria.
-		strcpy(path, paths);
-
+    #ifdef DEBUG
+        puts("acha_tm_scripts");
+       puts("");
+     #endif /*DEBUG*/
+
+    char *cam_tm_scripts;
+    char *first_p;
+    char paths[1024];
+    getcwd(paths, sizeof(paths)); // Pega o current working directory
+    cam_tm_scripts = strstr(paths, "tm-scripts"); //Acha onde esta escrito tm-scripts
+    puts(cam_tm_scripts);
+    first_p = strchr(cam_tm_scripts, 'p');//acha o primeiro 'p' em tm scripts
+    first_p += 3; //anda o ponteiro
+    *first_p = '\0'; //termina a string, sim, tem um leak de memoria.
+    strcpy(path, paths);
 }
 
 
 //função que lida com os inputs do teclado. Ver https://git.gnome.org/browse/gtk+/plain/gdk/gdkkeysyms.h para uma lista completa das Macros de teclas.
 gboolean on_key_press (GtkWidget *w, GdkEventKey *event, gpointer p){
-
+    #ifdef DEBUG
+        puts("on_key_press");
+       puts("");
+     #endif /*DEBUG*/
 	gpointer window, button;
 	window = w;
 	dados *data_ant = p; //Pega os dados recebidos pela chamada da função
 	button = data_ant->dado2; //Botão que da continuidade ao software, dado->2 por comodidade.
-    puts(gtk_widget_get_name(w));
 
 	switch (event->keyval){
 
@@ -51,8 +56,15 @@ gboolean on_key_press (GtkWidget *w, GdkEventKey *event, gpointer p){
 		break;
 
 		case GDK_KEY_F6: //Apertou f6
-            if(!strcmp(gtk_widget_get_name(w), "instal_window"))
+
+
+            if(!strcmp(gtk_widget_get_name(w), "instal_window")){
+                #ifdef DEBUG
+                    puts("Vai abrir o shell");
+                               puts("");
+                 #endif /*DEBUG*/
                 abre_shell(NULL, NULL);
+            }
 		break;
 
 		case GDK_KEY_Escape: //Apertou esc, destroi a janela
@@ -73,7 +85,11 @@ return FALSE;
 
 //Função que abre o software center do sistema
 void abre_software_center(GtkWidget *w, gpointer p){
-
+    #ifdef DEBUG
+        puts("abre_software_center");
+        puts("Vai abrir o synaptic.");
+       puts("");
+     #endif /*DEBUG*/
     int status;
     g_spawn_command_line_sync("synaptic", NULL, NULL, &status, NULL); //Abre o synaptic. Quando melhorarem o software center usar o software center
 
@@ -81,18 +97,24 @@ void abre_software_center(GtkWidget *w, gpointer p){
 
 //Função que abre um shell para instalar os pacotes.
 void abre_shell(GtkWidget *w, gpointer p){
-
+    #ifdef DEBUG
+        puts("abre_shell");
+        puts("Vai abrir o shell.");
+       puts("");
+     #endif /*DEBUG*/
     int status;
-
     g_spawn_command_line_sync("x-terminal-emulator", NULL, NULL, &status, NULL); // Abre o shell
 
 
 }
 
 void abre_site(GtkWidget *w, gpointer p){
-
+    #ifdef DEBUG
+        puts("abre_site");
+        puts("Vai abrir o site do openslx.");
+       puts("");
+     #endif /*DEBUG*/
     int status;
-
     g_spawn_command_line_sync("xdg-open http://slxboxdev.c3sl.ufpr.br", NULL, NULL, &status, NULL); // Abre o site.
 
 
@@ -100,16 +122,23 @@ void abre_site(GtkWidget *w, gpointer p){
 
 //Função que sai do programa, fazendo logout antes
 void sair(GtkWidget *w, gpointer p){
-
+    #ifdef DEBUG
+        puts("sair");
+        puts("Vai fazer o logout.");
+       puts("");
+     #endif /*DEBUG*/
     logout();
 	gtk_main_quit();
 
 }
 
-// Função que checa se os scripts foram rodados com sucesso. Ela é utilizada tanto na tela 2 quanto na tela 3.
+// Função que checa se os scripts foram rodados com sucesso.
 int checa_sucesso(){
 
-
+    #ifdef DEBUG
+        puts("checa_sucesso");
+       puts("");
+     #endif /*DEBUG*/
 	FILE *resultado; // Arquivo utilizado para ler o resultado do script.
 	char controle;
 
@@ -121,11 +150,19 @@ int checa_sucesso(){
 
     dialogo = GTK_WIDGET(gtk_builder_get_object(builder, "error_dialog")); //Carrega o dialogo de erro
 
+    #ifdef DEBUG
+        puts("Vai abrir o arquivo contendo o resultdo da operação");
+       puts("");
+     #endif /*DEBUG*/
 	resultado = fopen(".result.out", "r"); // .result.out é o arquivo que armazena se o script foi executado corretamente ou não
 
 	if(resultado != NULL){
 		fread(&controle, sizeof(char), 1, resultado); //Lê a saida do script
-		printf("Controle = %c\n", controle);
+
+		#ifdef DEBUG
+           printf("Controle = %c\n", controle);
+               puts("");
+         #endif /*DEBUG*/
 
 		if(controle == 's'){ //Caso o script não tenha sido executado com sucesso o programa informa o usuário por meio de uma janela de dialogo do GTK
             system("rm .result.out");
@@ -154,6 +191,11 @@ return(0);
 
 // Função que verifica se o usuário inseriu um nome com espaços no campo nome da imagem
 void stg4_clique_2a_tela_caller(GtkWidget *w, gpointer p){
+
+    #ifdef DEBUG
+           puts("stg4_clique_2a_tela_caller");
+       puts("");
+     #endif /*DEBUG*/
     GtkWidget *entry;
     dados *data_ant = p; //Pega os dados recebidos pela chamada da função
 
@@ -178,6 +220,11 @@ void stg4_clique_2a_tela_caller(GtkWidget *w, gpointer p){
 //Altera o texto da janela de ajuda
 void altera_texto_help(GtkWidget *w, gpointer p){
 
+    #ifdef DEBUG
+           puts("altera_texto_help");
+       puts("");
+     #endif /*DEBUG*/
+
 	const char *nome;
 	int nome_int;
 	GtkWidget *label;
@@ -217,6 +264,11 @@ void altera_texto_help(GtkWidget *w, gpointer p){
 
 //Janela de ajuda
 void help_screen(GtkWidget *w, gpointer p){
+
+    #ifdef DEBUG
+        puts("help_screen");
+       puts("");
+     #endif /*DEBUG*/
 	GtkWidget *window_help, *button_help_inicio, *button_help_2a_tela, *button_help_3a_tela, *button_help_4a_tela, *button_help_5a_tela, *label_help_info;
 	GtkBuilder *builder;
 
@@ -251,12 +303,21 @@ void help_screen(GtkWidget *w, gpointer p){
 //Sai do script chamado, verificando o sucesso
 void sai_do_script(GPid pid, gint status, gpointer p){
 
+    #ifdef DEBUG
+        puts("sai_do_script");
+       puts("");
+     #endif /*DEBUG*/
+
 	GtkWidget *loading;
 	dados *data_ant = p; //Pega os dados recebidos pela chamada da função
 	loading = data_ant->dado6;
 	pid = data_ant->pid;
 	gtk_widget_hide(loading); //Esconde a tela de loading
-	//gtk_widget_show(window);
+
+    #ifdef DEBUG
+        puts("Vai checar o sucesso do script");
+       puts("");
+     #endif /*DEBUG*/
 	checa_sucesso(); //Checa se o script foi executdo corretamente
 	g_spawn_close_pid(pid); //Mata o processo do script
 
@@ -264,20 +325,24 @@ void sai_do_script(GPid pid, gint status, gpointer p){
 
 //Fecha a janela que chama essa função e mostra a janela principal
 void mata_janela_e_chama_tela_principal(GtkWidget *w, gpointer p){
+
+    #ifdef DEBUG
+        puts("mata_janela_e_chama_tela_principal");
+       puts("");
+     #endif /*DEBUG*/
 	dados *data_ant = p; //Pega os dados recebidos pela chamada da função
-	puts("teste3");
 	GtkWidget *janela_ant;
-	puts("teste2");
 	janela_ant = data_ant->dado1;
-	puts("teste");
-	gtk_widget_hide(janela_ant); //Esconde a janela anterior//Nao achou isso, nao cuspiu teste 4
-	puts("teste4");
-    g_signal_emit_by_name(janela_ant, "destroy");
-    puts("teste5");
+	gtk_widget_hide(janela_ant); //Esconde a janela anterior
+    g_signal_emit_by_name(janela_ant, "destroy"); //Emite o sinal de destroy pra janela pra fazer certo as coisas quando fechar
 }
 
 //Chama a tela principal
 void chama_tela_principal(GtkWidget *w, gpointer p){
+    #ifdef DEBUG
+        puts("chama_tela_principal");
+       puts("");
+     #endif /*DEBUG*/
     struct dados *data = malloc(sizeof(*data));
     data->dado1 = NULL;
 	tela_principal(NULL,data);
diff --git a/useful/stg312/utils.h b/useful/stg312/utils.h
index 01713a92b5263876b2f20a5bb297c996f20c86bf..9ed1ac756ce35aaa94c31c07ac790bca1292139c 100644
--- a/useful/stg312/utils.h
+++ b/useful/stg312/utils.h
@@ -5,7 +5,6 @@
 #include <stdlib.h>
 #include <string.h>
 #include <errno.h>
-#include <sys/wait.h>
 #include "openslx_gui.h"
 #include "stg4.h"
 #include "upload-utils.h"
@@ -17,23 +16,6 @@ static const int NUMBER_OF_PARTS = 10; //
 static const char CLONE_STG4_SCRIPT[] = "./clone_stage4.sh";
 static const char CLONE_STG4_SCRIPT_DUMMY[] = "./clone_stage4-dummy.sh";
 static const char ARQUIVO_TESTE[] = "/home/ent13/Desktop/pasta-teste/teste.r1";
-/*
-int calcula_tempo_upload();
-
-void pega_dados_do_usuario(user_info *dados);
-
-void gera_arquivo_dados_usuario();
-
-int faz_login_dummy(GtkWidget *w, gpointer p);
-
-int faz_login(GtkWidget *w, gpointer p);
-
-void faz_upload_dummy(GtkWidget *w, gpointer p);
-
-void faz_upload_teste(GtkWidget *w, gpointer p);
-
-void faz_upload(GtkWidget *w, gpointer p);
-*/
 
 void stg4_clique_2a_tela_caller(GtkWidget *w, gpointer p);