// File: /workspace/github_cpp_makefile_star2_O2/viniciu21[P]PetLolja/./src/PetFera.cpp
// Function: Petfera::atualizar_animal(std::shared_ptr<Animal>)
bool Petfera::atualizar_animal(shared_ptr<Animal> animal)
{
	bool alterar_bool;
	string alterar_string;
	short escolha;
	string escolha_str;
	pelos alterar_pelos;
	TipoDeGestacao alterar_gestacao;
	stringstream ss;

	cout << "o que vc quer atualizar? "
			 << "\n"
			 << "# Temos as seguintes opcao : # "
			 << "\n"
			 << "    1 -> Alterar nome cientifico do animal"
			 << "\n"
			 << "    2 -> Alterar Nome do animal"
			 << "\n"
			 << "    3 -> Alterar Tipo de temperatura do animal"
			 << "\n"
			 << "    4 -> Alterar Tipo de pele do animal"
			 << "\n"
			 << "    5 -> Alterar Tipo de fecundacao do animal"
			 << "\n"
			 << "    6 -> Alterar Troca de pele do animal"
			 << "\n"
			 << "    7 -> Alterar Material eliminado do animal"
			 << endl;

	if (animal->getFamilia() == Mamiferos)
	{
		cout << "    8 -> Alterar se possui dentes" << endl;
		cout << "    9 -> Alterar pelagem" << endl;
		cout << "    10 -> Alterar tipo de gestacao" << endl;
	}
	else if (animal->getFamilia() == Aves)
	{
		cout << "    12 -> Alterar envergadura da asa" << endl;
		cout << "    13 -> Alterar tamanho do bico" << endl;
	}
	else if (animal->getFamilia() == Anfibios)
	{
		cout << "    14 -> Alterar habitat" << endl;
		cout << "    15 -> Alterar se possui ovos" << endl;
	}
	else if (animal->getFamilia() == Repteis)
	{
	}

	cout << "Escolha uma opcao"
			 << "\n";

	cin >> escolha_str;
	ss << escolha_str;
	ss >> escolha;

	if (escolha == 1)
	{
		cout << "Digite a nova especie \n";

		cin >> alterar_string;

		animal->setEspecie(alterar_string);
	}
	else if (escolha == 2)
	{
		cout << "Digite o novo nome \n";

		cin >> alterar_string;

		animal->setNome(alterar_string);
	}
	else if (escolha == 3)
	{
		cout << "Digite o novo tipo de temperatura \n";

		cin >> alterar_string;

		animal->setTipo_temperatura(alterar_string);
	}
	else if (escolha == 4)
	{
		cout << "Digite o novo tipo de pele \n";

		cin >> alterar_string;

		animal->setTipo_pele(alterar_string);
	}
	else if (escolha == 5)
	{
		cout << "Digite o novo tipo de fecundacao \n";

		cin >> alterar_string;

		animal->setTipo_fecundacao(alterar_string);
	}
	else if (escolha == 6)
	{
		cout << "Digite de S se troca de pele ou N se nao troca \n";

		cin >> alterar_bool;

		animal->setTroca_pele(alterar_bool);
	}
	else if (escolha == 7)
	{
		cout << "Digite o novo material eliminado \n";

		cin >> alterar_string;

		animal->setMaterial_eliminidado(alterar_string);
	}
	else if (escolha == 8)
	{
		alterar_bool = leBool("Possui Dentes? [S/n]");

		shared_ptr<Mamifero> mami_trat = dynamic_pointer_cast<Mamifero>(animal);

		mami_trat->setDentes(alterar_bool);
	}
	else if (escolha == 9)
	{
		alterar_pelos = lePelo("Digite o numero correspondende a pelagem do animal \n1-ausencia de pelos \n2-pelo reduzido \n3-pelo normal \n");

		shared_ptr<Mamifero> mami_trat = dynamic_pointer_cast<Mamifero>(animal);

		mami_trat->setPelagem(alterar_pelos);
	}
	else if (escolha == 10)
	{
		alterar_gestacao = leGestacao("Digite o numero que indique o tipo de gestacao do animal \n1-Marsupio \n2-Placenta");

		shared_ptr<Mamifero> mami_trat = dynamic_pointer_cast<Mamifero>(animal);

		mami_trat->setTipoGestacao(alterar_gestacao);
	}
	else if (escolha == 12)
	{
		cout << "Digite a nova envergadura \n";

		cin >> alterar_string;

		shared_ptr<Ave> ave_trat = dynamic_pointer_cast<Ave>(animal);

		ave_trat->setEnvergaduraAsas(alterar_string);
	}
	else if (escolha == 13)
	{
		cout << "Digite o novo tamanho do bico \n";

		cin >> alterar_string;

		shared_ptr<Ave> ave_trat = dynamic_pointer_cast<Ave>(animal);

		ave_trat->setTamanhoDoBico(alterar_string);
	}
	else if (escolha == 14)
	{
		cout << "Digite o novo habitat \n";

		cin >> alterar_string;

		shared_ptr<Anfibio> anfi_trat = dynamic_pointer_cast<Anfibio>(animal);

		anfi_trat->setHabitat(alterar_string);
	}
	else if (escolha == 15)
	{
		alterar_bool = leBool("Possui ovos? [S/n]");

		shared_ptr<Anfibio> anfi_trat = dynamic_pointer_cast<Anfibio>(animal);

		anfi_trat->setPossui_ovos(alterar_bool);
	}
	else if (escolha == 0 || escolha > 15)
	{
		cout << "Erro, escolha apenas as opções mostradas";

		return false;
	}

	return true;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0x388, %rsp            # imm = 0x388
movq %rsi, %rbx
leaq -0x48(%rbp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
xorl %ecx, %ecx
movb %cl, (%rax)
leaq -0x68(%rbp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb %cl, (%rax)
leaq -0x3a0(%rbp), %rdi
callq 0x4140
movq 0x1c9bc(%rip), %rdi     # 0x2efc8
leaq 0xe745(%rip), %rsi      # 0x20d58
callq 0x41a0
leaq 0xd3f2(%rip), %rsi      # 0x1fa11
movq %rax, %rdi
callq 0x41a0
leaq 0xe744(%rip), %rsi      # 0x20d72
movq %rax, %rdi
callq 0x41a0
leaq 0xd3d4(%rip), %rsi      # 0x1fa11
movq %rax, %rdi
callq 0x41a0
leaq 0xe8bd(%rip), %rsi      # 0x20f09
movq %rax, %rdi
callq 0x41a0
leaq 0xd3b6(%rip), %rsi      # 0x1fa11
movq %rax, %rdi
callq 0x41a0
leaq 0xe8ca(%rip), %rsi      # 0x20f34
movq %rax, %rdi
callq 0x41a0
leaq 0xd398(%rip), %rsi      # 0x1fa11
movq %rax, %rdi
callq 0x41a0
leaq 0xe8cc(%rip), %rsi      # 0x20f54
movq %rax, %rdi
callq 0x41a0
leaq 0xd37a(%rip), %rsi      # 0x1fa11
movq %rax, %rdi
callq 0x41a0
leaq 0xe8dd(%rip), %rsi      # 0x20f83
movq %rax, %rdi
callq 0x41a0
leaq 0xd35c(%rip), %rsi      # 0x1fa11
movq %rax, %rdi
callq 0x41a0
leaq 0xe8e7(%rip), %rsi      # 0x20fab
movq %rax, %rdi
callq 0x41a0
leaq 0xd33e(%rip), %rsi      # 0x1fa11
movq %rax, %rdi
callq 0x41a0
leaq 0xe8f7(%rip), %rsi      # 0x20fd9
movq %rax, %rdi
callq 0x41a0
leaq 0xd320(%rip), %rsi      # 0x1fa11
movq %rax, %rdi
callq 0x41a0
leaq 0xe902(%rip), %rsi      # 0x21002
movq %rax, %rdi
callq 0x41a0
movq %rax, %rdi
callq 0x40f0
movq (%rbx), %rdi
callq 0x6342
testl %eax, %eax
je 0x1274d
movq (%rbx), %rdi
callq 0x6342
cmpl $0x1, %eax
jne 0x1278c
movq 0x1c898(%rip), %rdi     # 0x2efc8
leaq 0xe957(%rip), %rsi      # 0x2108e
callq 0x41a0
movq %rax, %rdi
callq 0x40f0
leaq 0xe968(%rip), %rsi      # 0x210b3
jmp 0x127bf
movq 0x1c874(%rip), %rdi     # 0x2efc8
leaq 0xe8d5(%rip), %rsi      # 0x21030
callq 0x41a0
movq %rax, %rdi
callq 0x40f0
movq 0x1c859(%rip), %rdi     # 0x2efc8
leaq 0xe8dc(%rip), %rsi      # 0x21052
callq 0x41a0
movq %rax, %rdi
callq 0x40f0
leaq 0xe8e1(%rip), %rsi      # 0x2106b
jmp 0x127bf
movq (%rbx), %rdi
callq 0x6342
cmpl $0x2, %eax
jne 0x12896
movq 0x1c824(%rip), %rdi     # 0x2efc8
leaq 0xe92a(%rip), %rsi      # 0x210d5
callq 0x41a0
movq %rax, %rdi
callq 0x40f0
leaq 0xe930(%rip), %rsi      # 0x210ef
movq 0x1c802(%rip), %rdi     # 0x2efc8
callq 0x41a0
movq %rax, %rdi
callq 0x40f0
movq 0x1c7ee(%rip), %rdi     # 0x2efc8
leaq 0xe65f(%rip), %rsi      # 0x20e40
callq 0x41a0
leaq 0xd224(%rip), %rsi      # 0x1fa11
movq %rax, %rdi
callq 0x41a0
movq 0x1c7e4(%rip), %rdi     # 0x2efe0
leaq -0x78(%rbp), %rsi
callq 0x41f0
leaq -0x390(%rbp), %rdi
leaq -0x78(%rbp), %rsi
callq 0x4190
leaq -0x3a0(%rbp), %rdi
leaq -0x32(%rbp), %rsi
callq 0x4040
movzwl -0x32(%rbp), %eax
leal -0x1(%rax), %ecx
cmpl $0xe, %ecx
ja 0x12d12
leaq 0xd030(%rip), %rdx      # 0x1f86c
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movq 0x1c77c(%rip), %rdi     # 0x2efc8
leaq 0xe8bd(%rip), %rsi      # 0x21110
callq 0x41a0
movq 0x1c781(%rip), %rdi     # 0x2efe0
leaq -0x58(%rbp), %rsi
callq 0x41f0
movq (%rbx), %rbx
leaq -0x218(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x4210
leaq -0x218(%rbp), %rsi
movq %rbx, %rdi
callq 0x634c
leaq -0x218(%rbp), %rdi
jmp 0x12be0
movq (%rbx), %rdi
callq 0x6342
jmp 0x127d3
leaq 0xe99f(%rip), %rsi      # 0x21249
leaq -0x98(%rbp), %rdi
leaq -0x30(%rbp), %rdx
callq 0x40b0
leaq -0x98(%rbp), %rsi
callq 0xd44e
movl %eax, %r14d
movb %al, -0x19(%rbp)
leaq -0x98(%rbp), %rdi
callq 0x40e0
leaq -0x30(%rbp), %r15
movq %r15, %rdi
movq %rbx, %rsi
callq 0x140fc
movq (%r15), %rdi
movzbl %r14b, %esi
callq 0x4bc2
jmp 0x12cd9
movq 0x1c6c9(%rip), %rdi     # 0x2efc8
leaq 0xe8ef(%rip), %rsi      # 0x211f5
callq 0x41a0
movq 0x1c6ce(%rip), %rdi     # 0x2efe0
leaq -0x58(%rbp), %rsi
callq 0x41f0
leaq -0x30(%rbp), %r14
movq %r14, %rdi
movq %rbx, %rsi
callq 0x140a7
movq (%r14), %rbx
leaq -0xf8(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x4210
leaq -0xf8(%rbp), %rsi
movq %rbx, %rdi
callq 0x6a14
leaq -0xf8(%rbp), %rdi
jmp 0x12a9a
movq 0x1c669(%rip), %rdi     # 0x2efc8
leaq 0xe803(%rip), %rsi      # 0x21169
callq 0x41a0
movq 0x1c66e(%rip), %rdi     # 0x2efe0
leaq -0x58(%rbp), %rsi
callq 0x41f0
movq (%rbx), %rbx
leaq -0x198(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x4210
leaq -0x198(%rbp), %rsi
movq %rbx, %rdi
callq 0x6388
leaq -0x198(%rbp), %rdi
jmp 0x12be0
movq 0x1c618(%rip), %rdi     # 0x2efc8
leaq 0xe87a(%rip), %rsi      # 0x21231
callq 0x41a0
movq 0x1c61d(%rip), %rdi     # 0x2efe0
leaq -0x58(%rbp), %rsi
callq 0x41f0
leaq -0x30(%rbp), %r14
movq %r14, %rdi
movq %rbx, %rsi
callq 0x140fc
movq (%r14), %rbx
leaq -0xb8(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x4210
leaq -0xb8(%rbp), %rsi
movq %rbx, %rdi
callq 0x4bb0
leaq -0xb8(%rbp), %rdi
jmp 0x12a9a
movq 0x1c5b8(%rip), %rdi     # 0x2efc8
leaq 0xe775(%rip), %rsi      # 0x2118c
callq 0x41a0
movq 0x1c5bd(%rip), %rdi     # 0x2efe0
leaq -0x19(%rbp), %rsi
callq 0x4170
movq (%rbx), %rdi
movzbl -0x19(%rbp), %esi
movb $0x1, %bl
callq 0x639a
jmp 0x12ce4
movq 0x1c582(%rip), %rdi     # 0x2efc8
leaq 0xe7c4(%rip), %rsi      # 0x21211
callq 0x41a0
movq 0x1c587(%rip), %rdi     # 0x2efe0
leaq -0x58(%rbp), %rsi
callq 0x41f0
leaq -0x30(%rbp), %r14
movq %r14, %rdi
movq %rbx, %rsi
callq 0x140a7
movq (%r14), %rbx
leaq -0xd8(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x4210
leaq -0xd8(%rbp), %rsi
movq %rbx, %rdi
callq 0x6a26
leaq -0xd8(%rbp), %rdi
callq 0x40e0
jmp 0x12cd9
movq 0x1c51d(%rip), %rdi     # 0x2efc8
leaq 0xe69a(%rip), %rsi      # 0x2114c
callq 0x41a0
movq 0x1c522(%rip), %rdi     # 0x2efe0
leaq -0x58(%rbp), %rsi
callq 0x41f0
movq (%rbx), %rbx
leaq -0x1b8(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x4210
leaq -0x1b8(%rbp), %rsi
movq %rbx, %rdi
callq 0x6376
leaq -0x1b8(%rbp), %rdi
jmp 0x12be0
movq 0x1c4cc(%rip), %rdi     # 0x2efc8
leaq 0xe625(%rip), %rsi      # 0x21128
callq 0x41a0
movq 0x1c4d1(%rip), %rdi     # 0x2efe0
leaq -0x58(%rbp), %rsi
callq 0x41f0
movq (%rbx), %rbx
leaq -0x1d8(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x4210
leaq -0x1d8(%rbp), %rsi
movq %rbx, %rdi
callq 0x6368
leaq -0x1d8(%rbp), %rdi
jmp 0x12be0
movq 0x1c47b(%rip), %rdi     # 0x2efc8
leaq 0xe2fe(%rip), %rsi      # 0x20e52
callq 0x41a0
movq 0x1c480(%rip), %rdi     # 0x2efe0
leaq -0x58(%rbp), %rsi
callq 0x41f0
movq (%rbx), %rbx
leaq -0x1f8(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x4210
leaq -0x1f8(%rbp), %rsi
movq %rbx, %rdi
callq 0x635a
leaq -0x1f8(%rbp), %rdi
jmp 0x12be0
movq 0x1c42d(%rip), %rdi     # 0x2efc8
leaq 0xe61b(%rip), %rsi      # 0x211bd
callq 0x41a0
movq 0x1c432(%rip), %rdi     # 0x2efe0
leaq -0x58(%rbp), %rsi
callq 0x41f0
movq (%rbx), %rbx
leaq -0x178(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x4210
leaq -0x178(%rbp), %rsi
movq %rbx, %rdi
callq 0x63a8
leaq -0x178(%rbp), %rdi
callq 0x40e0
jmp 0x12ce2
leaq 0xe5ef(%rip), %rsi      # 0x211e0
leaq -0x158(%rbp), %rdi
leaq -0x30(%rbp), %rdx
callq 0x40b0
leaq -0x158(%rbp), %rsi
callq 0xd44e
movl %eax, %r14d
movb %al, -0x19(%rbp)
leaq -0x158(%rbp), %rdi
callq 0x40e0
leaq -0x30(%rbp), %r15
movq %r15, %rdi
movq %rbx, %rsi
callq 0x14052
movq (%r15), %rdi
movzbl %r14b, %esi
callq 0x1c3f2
jmp 0x12cd9
leaq 0xd819(%rip), %rsi      # 0x2045f
leaq -0x118(%rbp), %rdi
leaq -0x30(%rbp), %rdx
callq 0x40b0
leaq -0x118(%rbp), %rsi
callq 0x10a88
movl %eax, %r14d
leaq -0x118(%rbp), %rdi
callq 0x40e0
leaq -0x30(%rbp), %r15
movq %r15, %rdi
movq %rbx, %rsi
callq 0x14052
movq (%r15), %rdi
movl %r14d, %esi
callq 0x1c424
jmp 0x12cd9
leaq 0xd761(%rip), %rsi      # 0x203f5
leaq -0x138(%rbp), %rdi
leaq -0x30(%rbp), %rdx
callq 0x40b0
leaq -0x138(%rbp), %rsi
callq 0x10a58
movl %eax, %r14d
leaq -0x138(%rbp), %rdi
callq 0x40e0
leaq -0x30(%rbp), %r15
movq %r15, %rdi
movq %rbx, %rsi
callq 0x14052
movq (%r15), %rdi
movl %r14d, %esi
callq 0x1c40c
leaq -0x28(%rbp), %rdi
callq 0x4c0e
movb $0x1, %bl
leaq -0x3a0(%rbp), %rdi
callq 0x4150
leaq -0x78(%rbp), %rdi
callq 0x40e0
leaq -0x58(%rbp), %rdi
callq 0x40e0
movl %ebx, %eax
addq $0x388, %rsp            # imm = 0x388
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
testw %ax, %ax
setne %cl
cmpw $0x10, %ax
setl %al
movb $0x1, %bl
testb %al, %cl
jne 0x12ce4
movq 0x1c29c(%rip), %rdi     # 0x2efc8
leaq 0xe529(%rip), %rsi      # 0x2125c
callq 0x41a0
xorl %ebx, %ebx
jmp 0x12ce4
movq %rax, %rbx
leaq -0x178(%rbp), %rdi
jmp 0x12e01
movq %rax, %rbx
leaq -0x1f8(%rbp), %rdi
jmp 0x12e01
movq %rax, %rbx
leaq -0x1d8(%rbp), %rdi
jmp 0x12e01
movq %rax, %rbx
leaq -0x1b8(%rbp), %rdi
jmp 0x12e01
movq %rax, %rbx
leaq -0xd8(%rbp), %rdi
jmp 0x12db2
movq %rax, %rbx
leaq -0xb8(%rbp), %rdi
jmp 0x12db2
movq %rax, %rbx
leaq -0x198(%rbp), %rdi
jmp 0x12e01
movq %rax, %rbx
leaq -0x218(%rbp), %rdi
jmp 0x12e01
movq %rax, %rbx
leaq -0xf8(%rbp), %rdi
callq 0x40e0
jmp 0x12dc8
jmp 0x12dc5
jmp 0x12dc5
jmp 0x12dc5
jmp 0x12dc5
jmp 0x12dc5
jmp 0x12dc5
movq %rax, %rbx
leaq -0x28(%rbp), %rdi
callq 0x4c0e
jmp 0x12e18
movq %rax, %rbx
leaq -0x138(%rbp), %rdi
jmp 0x12e01
movq %rax, %rbx
leaq -0x118(%rbp), %rdi
jmp 0x12e01
movq %rax, %rbx
leaq -0x158(%rbp), %rdi
jmp 0x12e01
movq %rax, %rbx
leaq -0x98(%rbp), %rdi
callq 0x40e0
jmp 0x12e18
jmp 0x12e15
jmp 0x12e15
jmp 0x12e15
jmp 0x12e15
movq %rax, %rbx
jmp 0x12e24
movq %rax, %rbx
leaq -0x3a0(%rbp), %rdi
callq 0x4150
leaq -0x78(%rbp), %rdi
callq 0x40e0
leaq -0x58(%rbp), %rdi
callq 0x40e0
movq %rbx, %rdi
callq 0x42c0