versão completa do código