// File: IsaacLaw12[P]RayTracer/./src/Scene.cpp
// Function: Scene::edit_camera(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)
void Scene::edit_camera(std::string driver_line){
    std::string eye = "eye";
    std::string look = "look";
    std::string up = "up";
    std::string focal_length = "d";
    std::string bounds = "bounds";
    std::string res = "res";
    std::string frames = "frames";
    std::string start_frame = "start_frame";
    std::string recursion = "recursionLevel";
    std::string focus_blur = "focus_blur";
    std::string anti_alias = "anti_alias";
    std::stringstream d_line(driver_line);

    std::string line_type;
    d_line >> line_type;
    double d1, d2, d3, d4;
    if (!driver_line.compare(0, eye.size(), eye)){
        d_line >> d1 >> d2 >> d3;
        scene_camera.set_eye(d1, d2, d3);
    }else if(!driver_line.compare(0, look.size(), look)){
        d_line >> d1 >> d2 >> d3;
        scene_camera.set_look(d1, d2, d3);
    }else if (!driver_line.compare(0, up.size(), up)){
        d_line >> d1 >> d2 >> d3;
        scene_camera.set_up(d1, d2, d3);
    }else if(!driver_line.compare(0, focal_length.size(), focal_length)){
        d_line >> d1;
        scene_camera.set_focal_length(d1);
    }else if(!driver_line.compare(0, bounds.size(), bounds)){
        d_line >> d1 >> d2 >> d3 >> d4;
        scene_camera.set_bounds(d1,d2,d3,d4);
    }else if(!driver_line.compare(0, res.size(), res)){
        d_line >> d1 >> d2;
        scene_camera.set_resolution(d1, d2);
        destination_image.set_dimensions(d1, d2);
    }else if(!driver_line.compare(0, focus_blur.size(), focus_blur)){
        d_line >> d1 >> d2 >> d3;
        destination_image.set_focus_blur(d1, d2, d3);
    }else if(!driver_line.compare(0, anti_alias.size(), anti_alias)){
        d_line >> d1;
        scene_camera.set_anti_alias(d1);
        destination_image.set_anti_alias(d1);
    }else if(!driver_line.compare(0, recursion.size(), recursion)){
        d_line >> recursion_level;
    }else if(!driver_line.compare(0, frames.size(), frames)) {
        d_line >> number_frames;
        if (number_frames < 1){
            number_frames = 1;
        }
    }else if(!driver_line.compare(0, start_frame.size(), start_frame)) {
        d_line >> current_frame;
    }
}

// Assembly:
subq $0x528, %rsp            # imm = 0x528
movq %rsi, 0x170(%rsp)
movq %rdi, 0x520(%rsp)
movq %rsi, 0x518(%rsp)
movq 0x520(%rsp), %rax
movq %rax, 0x178(%rsp)
leaq 0x4f7(%rsp), %rdi
movq %rdi, 0x180(%rsp)
callq 0x45f0
movq 0x180(%rsp), %rdx
leaq 0x2bfc6(%rip), %rsi     # 0x6bfa9
leaq 0x4f8(%rsp), %rdi
callq 0x11e60
jmp 0x3fff2
leaq 0x4f7(%rsp), %rdi
callq 0x43c0
leaq 0x4bf(%rsp), %rdi
movq %rdi, 0x168(%rsp)
callq 0x45f0
movq 0x168(%rsp), %rdx
leaq 0x2bf8a(%rip), %rsi     # 0x6bfad
leaq 0x4c0(%rsp), %rdi
callq 0x11e60
jmp 0x40032
leaq 0x4bf(%rsp), %rdi
callq 0x43c0
leaq 0x497(%rsp), %rdi
movq %rdi, 0x160(%rsp)
callq 0x45f0
movq 0x160(%rsp), %rdx
leaq 0x2bf4f(%rip), %rsi     # 0x6bfb2
leaq 0x498(%rsp), %rdi
callq 0x11e60
jmp 0x40072
leaq 0x497(%rsp), %rdi
callq 0x43c0
leaq 0x46f(%rsp), %rdi
movq %rdi, 0x158(%rsp)
callq 0x45f0
movq 0x158(%rsp), %rdx
leaq 0x1d2c5(%rip), %rsi     # 0x5d368
leaq 0x470(%rsp), %rdi
callq 0x11e60
jmp 0x400b2
leaq 0x46f(%rsp), %rdi
callq 0x43c0
leaq 0x447(%rsp), %rdi
movq %rdi, 0x150(%rsp)
callq 0x45f0
movq 0x150(%rsp), %rdx
leaq 0x2bed2(%rip), %rsi     # 0x6bfb5
leaq 0x448(%rsp), %rdi
callq 0x11e60
jmp 0x400f2
leaq 0x447(%rsp), %rdi
callq 0x43c0
leaq 0x41f(%rsp), %rdi
movq %rdi, 0x148(%rsp)
callq 0x45f0
movq 0x148(%rsp), %rdx
leaq 0x2be99(%rip), %rsi     # 0x6bfbc
leaq 0x420(%rsp), %rdi
callq 0x11e60
jmp 0x40132
leaq 0x41f(%rsp), %rdi
callq 0x43c0
leaq 0x3f7(%rsp), %rdi
movq %rdi, 0x140(%rsp)
callq 0x45f0
movq 0x140(%rsp), %rdx
leaq 0x2be5d(%rip), %rsi     # 0x6bfc0
leaq 0x3f8(%rsp), %rdi
callq 0x11e60
jmp 0x40172
leaq 0x3f7(%rsp), %rdi
callq 0x43c0
leaq 0x3cf(%rsp), %rdi
movq %rdi, 0x138(%rsp)
callq 0x45f0
movq 0x138(%rsp), %rdx
leaq 0x2be24(%rip), %rsi     # 0x6bfc7
leaq 0x3d0(%rsp), %rdi
callq 0x11e60
jmp 0x401b2
leaq 0x3cf(%rsp), %rdi
callq 0x43c0
leaq 0x3a7(%rsp), %rdi
movq %rdi, 0x130(%rsp)
callq 0x45f0
movq 0x130(%rsp), %rdx
leaq 0x2bdf0(%rip), %rsi     # 0x6bfd3
leaq 0x3a8(%rsp), %rdi
callq 0x11e60
jmp 0x401f2
leaq 0x3a7(%rsp), %rdi
callq 0x43c0
leaq 0x37f(%rsp), %rdi
movq %rdi, 0x128(%rsp)
callq 0x45f0
movq 0x128(%rsp), %rdx
leaq 0x2bdbf(%rip), %rsi     # 0x6bfe2
leaq 0x380(%rsp), %rdi
callq 0x11e60
jmp 0x40232
leaq 0x37f(%rsp), %rdi
callq 0x43c0
leaq 0x357(%rsp), %rdi
movq %rdi, 0x120(%rsp)
callq 0x45f0
movq 0x120(%rsp), %rdx
leaq 0x2bd8a(%rip), %rsi     # 0x6bfed
leaq 0x358(%rsp), %rdi
callq 0x11e60
jmp 0x40272
leaq 0x357(%rsp), %rdi
callq 0x43c0
movl $0x10, %edi
movl $0x8, %esi
callq 0x11e40
movl %eax, 0x11c(%rsp)
jmp 0x40297
movl 0x11c(%rsp), %edx
movq 0x170(%rsp), %rsi
leaq 0x1c8(%rsp), %rdi
callq 0x4520
jmp 0x402b5
leaq 0x1a8(%rsp), %rdi
movq %rdi, 0x110(%rsp)
callq 0x4490
movq 0x110(%rsp), %rsi
leaq 0x1c8(%rsp), %rdi
callq 0x4450
jmp 0x402e1
leaq 0x4f8(%rsp), %rdi
movq %rdi, 0x100(%rsp)
callq 0x4260
movq 0x170(%rsp), %rdi
movq 0x100(%rsp), %rcx
movq %rax, %rdx
xorl %eax, %eax
movl %eax, %esi
callq 0x4460
movl %eax, 0x10c(%rsp)
jmp 0x4031b
movl 0x10c(%rsp), %eax
cmpl $0x0, %eax
jne 0x405a1
leaq 0x1c8(%rsp), %rdi
leaq 0x1a0(%rsp), %rsi
callq 0x42e0
movq %rax, 0xf8(%rsp)
jmp 0x4034a
movq 0xf8(%rsp), %rdi
leaq 0x198(%rsp), %rsi
callq 0x42e0
movq %rax, 0xf0(%rsp)
jmp 0x40369
movq 0xf0(%rsp), %rdi
leaq 0x190(%rsp), %rsi
callq 0x42e0
jmp 0x40380
movq 0x178(%rsp), %rdi
addq $0x20, %rdi
movsd 0x1a0(%rsp), %xmm0
movsd 0x198(%rsp), %xmm1
movsd 0x190(%rsp), %xmm2
callq 0x9710
jmp 0x403ae
jmp 0x40c07
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4e8(%rsp)
movl %eax, 0x4e4(%rsp)
leaq 0x4f7(%rsp), %rdi
callq 0x43c0
jmp 0x40d47
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4e8(%rsp)
movl %eax, 0x4e4(%rsp)
leaq 0x4bf(%rsp), %rdi
callq 0x43c0
jmp 0x40d3a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4e8(%rsp)
movl %eax, 0x4e4(%rsp)
leaq 0x497(%rsp), %rdi
callq 0x43c0
jmp 0x40d2d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4e8(%rsp)
movl %eax, 0x4e4(%rsp)
leaq 0x46f(%rsp), %rdi
callq 0x43c0
jmp 0x40d20
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4e8(%rsp)
movl %eax, 0x4e4(%rsp)
leaq 0x447(%rsp), %rdi
callq 0x43c0
jmp 0x40d13
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4e8(%rsp)
movl %eax, 0x4e4(%rsp)
leaq 0x41f(%rsp), %rdi
callq 0x43c0
jmp 0x40d06
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4e8(%rsp)
movl %eax, 0x4e4(%rsp)
leaq 0x3f7(%rsp), %rdi
callq 0x43c0
jmp 0x40cf9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4e8(%rsp)
movl %eax, 0x4e4(%rsp)
leaq 0x3cf(%rsp), %rdi
callq 0x43c0
jmp 0x40cec
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4e8(%rsp)
movl %eax, 0x4e4(%rsp)
leaq 0x3a7(%rsp), %rdi
callq 0x43c0
jmp 0x40cdf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4e8(%rsp)
movl %eax, 0x4e4(%rsp)
leaq 0x37f(%rsp), %rdi
callq 0x43c0
jmp 0x40cd2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4e8(%rsp)
movl %eax, 0x4e4(%rsp)
leaq 0x357(%rsp), %rdi
callq 0x43c0
jmp 0x40cc5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4e8(%rsp)
movl %eax, 0x4e4(%rsp)
jmp 0x40cb8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x4e8(%rsp)
movl %eax, 0x4e4(%rsp)
leaq 0x1a8(%rsp), %rdi
callq 0x4200
leaq 0x1c8(%rsp), %rdi
callq 0x4290
jmp 0x40cb8
leaq 0x4c0(%rsp), %rdi
movq %rdi, 0xe0(%rsp)
callq 0x4260
movq 0x170(%rsp), %rdi
movq 0xe0(%rsp), %rcx
movq %rax, %rdx
xorl %eax, %eax
movl %eax, %esi
callq 0x4460
movl %eax, 0xec(%rsp)
jmp 0x405db
movl 0xec(%rsp), %eax
cmpl $0x0, %eax
jne 0x40673
leaq 0x1c8(%rsp), %rdi
leaq 0x1a0(%rsp), %rsi
callq 0x42e0
movq %rax, 0xd8(%rsp)
jmp 0x4060a
movq 0xd8(%rsp), %rdi
leaq 0x198(%rsp), %rsi
callq 0x42e0
movq %rax, 0xd0(%rsp)
jmp 0x40629
movq 0xd0(%rsp), %rdi
leaq 0x190(%rsp), %rsi
callq 0x42e0
jmp 0x40640
movq 0x178(%rsp), %rdi
addq $0x20, %rdi
movsd 0x1a0(%rsp), %xmm0
movsd 0x198(%rsp), %xmm1
movsd 0x190(%rsp), %xmm2
callq 0x9770
jmp 0x4066e
jmp 0x40c05
leaq 0x498(%rsp), %rdi
movq %rdi, 0xc0(%rsp)
callq 0x4260
movq 0x170(%rsp), %rdi
movq 0xc0(%rsp), %rcx
movq %rax, %rdx
xorl %eax, %eax
movl %eax, %esi
callq 0x4460
movl %eax, 0xcc(%rsp)
jmp 0x406ad
movl 0xcc(%rsp), %eax
cmpl $0x0, %eax
jne 0x40745
leaq 0x1c8(%rsp), %rdi
leaq 0x1a0(%rsp), %rsi
callq 0x42e0
movq %rax, 0xb8(%rsp)
jmp 0x406dc
movq 0xb8(%rsp), %rdi
leaq 0x198(%rsp), %rsi
callq 0x42e0
movq %rax, 0xb0(%rsp)
jmp 0x406fb
movq 0xb0(%rsp), %rdi
leaq 0x190(%rsp), %rsi
callq 0x42e0
jmp 0x40712
movq 0x178(%rsp), %rdi
addq $0x20, %rdi
movsd 0x1a0(%rsp), %xmm0
movsd 0x198(%rsp), %xmm1
movsd 0x190(%rsp), %xmm2
callq 0x97d0
jmp 0x40740
jmp 0x40c03
leaq 0x470(%rsp), %rdi
movq %rdi, 0xa0(%rsp)
callq 0x4260
movq 0x170(%rsp), %rdi
movq 0xa0(%rsp), %rcx
movq %rax, %rdx
xorl %eax, %eax
movl %eax, %esi
callq 0x4460
movl %eax, 0xac(%rsp)
jmp 0x4077f
movl 0xac(%rsp), %eax
cmpl $0x0, %eax
jne 0x407c3
leaq 0x1c8(%rsp), %rdi
leaq 0x1a0(%rsp), %rsi
callq 0x42e0
jmp 0x407a2
movq 0x178(%rsp), %rdi
addq $0x20, %rdi
movsd 0x1a0(%rsp), %xmm0
callq 0x9840
jmp 0x407be
jmp 0x40c01
leaq 0x448(%rsp), %rdi
movq %rdi, 0x90(%rsp)
callq 0x4260
movq 0x170(%rsp), %rdi
movq 0x90(%rsp), %rcx
movq %rax, %rdx
xorl %eax, %eax
movl %eax, %esi
callq 0x4460
movl %eax, 0x9c(%rsp)
jmp 0x407fd
movl 0x9c(%rsp), %eax
cmpl $0x0, %eax
jne 0x408b7
leaq 0x1c8(%rsp), %rdi
leaq 0x1a0(%rsp), %rsi
callq 0x42e0
movq %rax, 0x88(%rsp)
jmp 0x4082c
movq 0x88(%rsp), %rdi
leaq 0x198(%rsp), %rsi
callq 0x42e0
movq %rax, 0x80(%rsp)
jmp 0x4084b
movq 0x80(%rsp), %rdi
leaq 0x190(%rsp), %rsi
callq 0x42e0
movq %rax, 0x78(%rsp)
jmp 0x40867
movq 0x78(%rsp), %rdi
leaq 0x188(%rsp), %rsi
callq 0x42e0
jmp 0x4087b
movq 0x178(%rsp), %rdi
addq $0x20, %rdi
movsd 0x1a0(%rsp), %xmm0
movsd 0x198(%rsp), %xmm1
movsd 0x190(%rsp), %xmm2
movsd 0x188(%rsp), %xmm3
callq 0x9860
jmp 0x408b2
jmp 0x40bff
leaq 0x420(%rsp), %rdi
movq %rdi, 0x68(%rsp)
callq 0x4260
movq 0x170(%rsp), %rdi
movq 0x68(%rsp), %rcx
movq %rax, %rdx
xorl %eax, %eax
movl %eax, %esi
callq 0x4460
movl %eax, 0x74(%rsp)
jmp 0x408e8
movl 0x74(%rsp), %eax
cmpl $0x0, %eax
jne 0x40977
leaq 0x1c8(%rsp), %rdi
leaq 0x1a0(%rsp), %rsi
callq 0x42e0
movq %rax, 0x60(%rsp)
jmp 0x40911
movq 0x60(%rsp), %rdi
leaq 0x198(%rsp), %rsi
callq 0x42e0
jmp 0x40925
movq 0x178(%rsp), %rdi
addq $0x20, %rdi
cvttsd2si 0x1a0(%rsp), %esi
cvttsd2si 0x198(%rsp), %edx
callq 0x98c0
jmp 0x4094a
movq 0x178(%rsp), %rdi
addq $0xe8, %rdi
cvttsd2si 0x1a0(%rsp), %esi
cvttsd2si 0x198(%rsp), %edx
callq 0x4d40
jmp 0x40972
jmp 0x40bfd
leaq 0x380(%rsp), %rdi
movq %rdi, 0x50(%rsp)
callq 0x4260
movq 0x170(%rsp), %rdi
movq 0x50(%rsp), %rcx
movq %rax, %rdx
xorl %eax, %eax
movl %eax, %esi
callq 0x4460
movl %eax, 0x5c(%rsp)
jmp 0x409a8
movl 0x5c(%rsp), %eax
cmpl $0x0, %eax
jne 0x40a30
leaq 0x1c8(%rsp), %rdi
leaq 0x1a0(%rsp), %rsi
callq 0x42e0
movq %rax, 0x48(%rsp)
jmp 0x409cd
movq 0x48(%rsp), %rdi
leaq 0x198(%rsp), %rsi
callq 0x42e0
movq %rax, 0x40(%rsp)
jmp 0x409e6
movq 0x40(%rsp), %rdi
leaq 0x190(%rsp), %rsi
callq 0x42e0
jmp 0x409fa
movq 0x178(%rsp), %rdi
addq $0xe8, %rdi
movsd 0x1a0(%rsp), %xmm0
movsd 0x198(%rsp), %xmm1
movsd 0x190(%rsp), %xmm2
callq 0x5be0
jmp 0x40a2b
jmp 0x40bfb
leaq 0x358(%rsp), %rdi
movq %rdi, 0x30(%rsp)
callq 0x4260
movq 0x170(%rsp), %rdi
movq 0x30(%rsp), %rcx
movq %rax, %rdx
xorl %eax, %eax
movl %eax, %esi
callq 0x4460
movl %eax, 0x3c(%rsp)
jmp 0x40a61
movl 0x3c(%rsp), %eax
cmpl $0x0, %eax
jne 0x40ac1
leaq 0x1c8(%rsp), %rdi
leaq 0x1a0(%rsp), %rsi
callq 0x42e0
jmp 0x40a81
movq 0x178(%rsp), %rdi
addq $0x20, %rdi
cvttsd2si 0x1a0(%rsp), %esi
callq 0x9900
jmp 0x40a9d
movq 0x178(%rsp), %rdi
addq $0xe8, %rdi
cvttsd2si 0x1a0(%rsp), %esi
callq 0x5c30
jmp 0x40abc
jmp 0x40bf9
leaq 0x3a8(%rsp), %rdi
movq %rdi, 0x20(%rsp)
callq 0x4260
movq 0x170(%rsp), %rdi
movq 0x20(%rsp), %rcx
movq %rax, %rdx
xorl %eax, %eax
movl %eax, %esi
callq 0x4460
movl %eax, 0x2c(%rsp)
jmp 0x40af2
movl 0x2c(%rsp), %eax
cmpl $0x0, %eax
jne 0x40b1e
movq 0x178(%rsp), %rsi
addq $0x238, %rsi            # imm = 0x238
leaq 0x1c8(%rsp), %rdi
callq 0x41f0
jmp 0x40b19
jmp 0x40bf7
leaq 0x3f8(%rsp), %rdi
movq %rdi, 0x10(%rsp)
callq 0x4260
movq 0x170(%rsp), %rdi
movq 0x10(%rsp), %rcx
movq %rax, %rdx
xorl %eax, %eax
movl %eax, %esi
callq 0x4460
movl %eax, 0x1c(%rsp)
jmp 0x40b4f
movl 0x1c(%rsp), %eax
cmpl $0x0, %eax
jne 0x40b9b
movq 0x178(%rsp), %rsi
addq $0x230, %rsi            # imm = 0x230
leaq 0x1c8(%rsp), %rdi
callq 0x41f0
jmp 0x40b76
movq 0x178(%rsp), %rax
cmpl $0x1, 0x230(%rax)
jge 0x40b99
movq 0x178(%rsp), %rax
movl $0x1, 0x230(%rax)
jmp 0x40bf5
leaq 0x3d0(%rsp), %rdi
movq %rdi, (%rsp)
callq 0x4260
movq 0x170(%rsp), %rdi
movq (%rsp), %rcx
movq %rax, %rdx
xorl %eax, %eax
movl %eax, %esi
callq 0x4460
movl %eax, 0xc(%rsp)
jmp 0x40bca
movl 0xc(%rsp), %eax
cmpl $0x0, %eax
jne 0x40bf3
movq 0x178(%rsp), %rsi
addq $0x234, %rsi            # imm = 0x234
leaq 0x1c8(%rsp), %rdi
callq 0x41f0
jmp 0x40bf1
jmp 0x40bf3
jmp 0x40bf5
jmp 0x40bf7
jmp 0x40bf9
jmp 0x40bfb
jmp 0x40bfd
jmp 0x40bff
jmp 0x40c01
jmp 0x40c03
jmp 0x40c05
jmp 0x40c07
leaq 0x1a8(%rsp), %rdi
callq 0x4200
leaq 0x1c8(%rsp), %rdi
callq 0x4290
leaq 0x358(%rsp), %rdi
callq 0x4200
leaq 0x380(%rsp), %rdi
callq 0x4200
leaq 0x3a8(%rsp), %rdi
callq 0x4200
leaq 0x3d0(%rsp), %rdi
callq 0x4200
leaq 0x3f8(%rsp), %rdi
callq 0x4200
leaq 0x420(%rsp), %rdi
callq 0x4200
leaq 0x448(%rsp), %rdi
callq 0x4200
leaq 0x470(%rsp), %rdi
callq 0x4200
leaq 0x498(%rsp), %rdi
callq 0x4200
leaq 0x4c0(%rsp), %rdi
callq 0x4200
leaq 0x4f8(%rsp), %rdi
callq 0x4200
addq $0x528, %rsp            # imm = 0x528
retq
leaq 0x358(%rsp), %rdi
callq 0x4200
leaq 0x380(%rsp), %rdi
callq 0x4200
leaq 0x3a8(%rsp), %rdi
callq 0x4200
leaq 0x3d0(%rsp), %rdi
callq 0x4200
leaq 0x3f8(%rsp), %rdi
callq 0x4200
leaq 0x420(%rsp), %rdi
callq 0x4200
leaq 0x448(%rsp), %rdi
callq 0x4200
leaq 0x470(%rsp), %rdi
callq 0x4200
leaq 0x498(%rsp), %rdi
callq 0x4200
leaq 0x4c0(%rsp), %rdi
callq 0x4200
leaq 0x4f8(%rsp), %rdi
callq 0x4200
movq 0x4e8(%rsp), %rdi
callq 0x45e0
nopw %cs:(%rax,%rax)
nop