// File: andrakis[P]alisp/./environment.hpp
// Function: ALisp::Environment::Environment(ALisp::Cell const&, std::vector<ALisp::Cell, std::allocator<ALisp::Cell>> const&, std::shared_ptr<ALisp::Environment>)
Environment(const Cell &keys, const ListType &values, outer_type parent = nullptr)
			: _map(), _outer(parent) {
			ListType lt_keys, lt_values;
			if (keys.type() == CellType::List) {
				// List of keys and values
				lt_keys.insert(lt_keys.end(), keys.cbegin(), keys.cend());
				lt_values.insert(lt_values.end(), values.cbegin(), values.cend());
			} else {
				// Single key capturing multiple values
				lt_keys.push_back(keys);
				lt_values.push_back(ListCell(values.cbegin(), values.cend()));
			}
			addRange(lt_keys, lt_values);
		}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x120, %rsp            # imm = 0x120
movq %rcx, -0xe0(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq -0x8(%rbp), %rdi
movq %rdi, -0xe8(%rbp)
movq %rdi, %rax
movq %rax, -0xf0(%rbp)
xorps %xmm0, %xmm0
movups %xmm0, 0x20(%rdi)
movups %xmm0, 0x10(%rdi)
movups %xmm0, (%rdi)
movq $0x0, 0x30(%rdi)
callq 0xf810
movq -0xe8(%rbp), %rdi
movq -0xe0(%rbp), %rsi
addq $0x38, %rdi
movq %rdi, -0xd8(%rbp)
callq 0xf830
leaq -0x38(%rbp), %rdi
callq 0xc080
leaq -0x50(%rbp), %rdi
callq 0xc080
movq -0x10(%rbp), %rdi
callq 0xd3a0
movl %eax, -0xcc(%rbp)
jmp 0x2c233
movl -0xcc(%rbp), %eax
cmpl $0x5, %eax
jne 0x2c35a
leaq -0x38(%rbp), %rdi
callq 0xc5c0
movq %rax, -0x70(%rbp)
leaq -0x68(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x13960
movq -0x10(%rbp), %rdi
callq 0x139a0
movq %rax, -0xf8(%rbp)
jmp 0x2c26e
movq -0xf8(%rbp), %rax
movq %rax, -0x78(%rbp)
movq -0x10(%rbp), %rdi
callq 0x13ac0
movq %rax, -0x100(%rbp)
jmp 0x2c28b
movq -0x100(%rbp), %rax
movq %rax, -0x80(%rbp)
movq -0x68(%rbp), %rsi
movq -0x78(%rbp), %rdx
movq -0x80(%rbp), %rcx
leaq -0x38(%rbp), %rdi
callq 0x138b0
movq %rax, -0x108(%rbp)
jmp 0x2c2b4
movq -0x108(%rbp), %rax
movq %rax, -0x88(%rbp)
leaq -0x50(%rbp), %rdi
movq %rdi, -0x118(%rbp)
callq 0xc5c0
movq %rax, -0x98(%rbp)
leaq -0x90(%rbp), %rdi
leaq -0x98(%rbp), %rsi
callq 0x13960
movq -0x18(%rbp), %rdi
callq 0x12f00
movq %rax, -0xa0(%rbp)
movq -0x18(%rbp), %rdi
callq 0x12f30
movq -0x118(%rbp), %rdi
movq %rax, -0xa8(%rbp)
movq -0x90(%rbp), %rsi
movq -0xa0(%rbp), %rdx
movq -0xa8(%rbp), %rcx
callq 0x138b0
movq %rax, -0x110(%rbp)
jmp 0x2c336
movq -0x110(%rbp), %rax
movq %rax, -0xb0(%rbp)
jmp 0x2c3df
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x2c410
movq -0x10(%rbp), %rsi
leaq -0x38(%rbp), %rdi
callq 0x14d00
jmp 0x2c369
movq -0x18(%rbp), %rdi
callq 0x12f00
movq %rax, -0xc0(%rbp)
movq -0x18(%rbp), %rdi
callq 0x12f30
movq %rax, -0xc8(%rbp)
movq -0xc0(%rbp), %rsi
movq -0xc8(%rbp), %rdx
leaq -0xb8(%rbp), %rdi
callq 0x15090
jmp 0x2c3a5
leaq -0x50(%rbp), %rdi
leaq -0xb8(%rbp), %rsi
callq 0xc370
jmp 0x2c3b7
leaq -0xb8(%rbp), %rdi
callq 0xbd80
jmp 0x2c3df
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0xb8(%rbp), %rdi
callq 0xbd80
jmp 0x2c410
movq -0xf0(%rbp), %rdi
leaq -0x38(%rbp), %rsi
leaq -0x50(%rbp), %rdx
callq 0x2c4e0
jmp 0x2c3f5
leaq -0x50(%rbp), %rdi
callq 0xc130
leaq -0x38(%rbp), %rdi
callq 0xc130
addq $0x120, %rsp            # imm = 0x120
popq %rbp
retq
leaq -0x50(%rbp), %rdi
callq 0xc130
leaq -0x38(%rbp), %rdi
callq 0xc130
movq -0xd8(%rbp), %rdi
callq 0xb8e0
movq -0xe8(%rbp), %rdi
callq 0xfbe0
movq -0x58(%rbp), %rdi
callq 0x87b0
nopw %cs:(%rax,%rax)
nopl (%rax)