// File: btbujiangjun[P]abcdl/include/fnn/FNN.h
// Function: abcdl::fnn::FNN::set_layers(std::vector<abcdl::fnn::Layer*, std::allocator<abcdl::fnn::Layer*>>&)
void set_layers(std::vector<abcdl::fnn::Layer*>& layers){
        size_t layer_size = layers.size();
        CHECK(layer_size > 1 && layers[0]->get_layer_type() == abcdl::framework::INPUT);
        size_t output_dim = layers[0]->get_output_dim();
        for(size_t i = 1; i != layer_size; i++){
            CHECK(layers[i]->get_layer_type() == ((i == layer_size - 1) ? abcdl::framework::OUTPUT : abcdl::framework::FULL_CONN));
            CHECK(output_dim == layers[i]->get_input_dim());
            output_dim = layers[i]->get_output_dim();
        }
        _layers = layers;
    }

// Assembly:
subq $0x508, %rsp            # imm = 0x508
movq %rdi, 0x500(%rsp)
movq %rsi, 0x4f8(%rsp)
movq 0x500(%rsp), %rax
movq %rax, 0x28(%rsp)
movq 0x4f8(%rsp), %rdi
callq 0x17250
movq %rax, 0x4f0(%rsp)
xorl %eax, %eax
cmpq $0x1, 0x4f0(%rsp)
movb %al, 0x37(%rsp)
jbe 0x15f6d
movq 0x4f8(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x17270
movq (%rax), %rdi
callq 0x17290
cmpl $0x0, %eax
sete %al
movb %al, 0x37(%rsp)
movb 0x37(%rsp), %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x15f79
jmp 0x15fe4
leaq 0x7815e(%rip), %rsi     # 0x8e0de
leaq 0x368(%rsp), %rdi
movq %rdi, 0x20(%rsp)
movl $0x36, %edx
movl $0x3, %ecx
callq 0x89860
movq 0x20(%rsp), %rdi
leaq 0x78148(%rip), %rsi     # 0x8e0f0
callq 0x172a0
jmp 0x15faf
leaq 0x368(%rsp), %rdi
callq 0x89c20
jmp 0x15fe4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x360(%rsp)
movl %eax, 0x35c(%rsp)
leaq 0x368(%rsp), %rdi
callq 0x89c20
jmp 0x161db
movq 0x4f8(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x17270
movq (%rax), %rdi
callq 0x172d0
movq %rax, 0x350(%rsp)
movq $0x1, 0x348(%rsp)
movq 0x348(%rsp), %rax
cmpq 0x4f0(%rsp), %rax
je 0x161bd
movq 0x4f8(%rsp), %rdi
movq 0x348(%rsp), %rsi
callq 0x17270
movq (%rax), %rdi
callq 0x17290
movq 0x348(%rsp), %rsi
movq 0x4f0(%rsp), %rdi
subq $0x1, %rdi
movl $0x1, %ecx
movl $0x4, %edx
cmpq %rdi, %rsi
cmovel %edx, %ecx
cmpl %ecx, %eax
sete %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x16075
jmp 0x160e0
leaq 0x78062(%rip), %rsi     # 0x8e0de
leaq 0x1c0(%rsp), %rdi
movq %rdi, 0x18(%rsp)
movl $0x39, %edx
movl $0x3, %ecx
callq 0x89860
movq 0x18(%rsp), %rdi
leaq 0x780a3(%rip), %rsi     # 0x8e147
callq 0x172e0
jmp 0x160ab
leaq 0x1c0(%rsp), %rdi
callq 0x89c20
jmp 0x160e0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x360(%rsp)
movl %eax, 0x35c(%rsp)
leaq 0x1c0(%rsp), %rdi
callq 0x89c20
jmp 0x161db
movq 0x350(%rsp), %rax
movq %rax, 0x10(%rsp)
movq 0x4f8(%rsp), %rdi
movq 0x348(%rsp), %rsi
callq 0x17270
movq (%rax), %rdi
callq 0x17310
movq %rax, %rcx
movq 0x10(%rsp), %rax
cmpq %rcx, %rax
sete %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x16120
jmp 0x1617f
leaq 0x77fb7(%rip), %rsi     # 0x8e0de
leaq 0x38(%rsp), %rdi
movq %rdi, 0x8(%rsp)
movl $0x3a, %edx
movl $0x3, %ecx
callq 0x89860
movq 0x8(%rsp), %rdi
leaq 0x78079(%rip), %rsi     # 0x8e1c5
callq 0x17320
jmp 0x16153
leaq 0x38(%rsp), %rdi
callq 0x89c20
jmp 0x1617f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x360(%rsp)
movl %eax, 0x35c(%rsp)
leaq 0x38(%rsp), %rdi
callq 0x89c20
jmp 0x161db
movq 0x4f8(%rsp), %rdi
movq 0x348(%rsp), %rsi
callq 0x17270
movq (%rax), %rdi
callq 0x172d0
movq %rax, 0x350(%rsp)
movq 0x348(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x348(%rsp)
jmp 0x16011
movq 0x28(%rsp), %rdi
movq 0x4f8(%rsp), %rsi
addq $0x30, %rdi
callq 0x17350
addq $0x508, %rsp            # imm = 0x508
retq
movq 0x360(%rsp), %rdi
callq 0x9700
nopl (%rax,%rax)