user: Demonstrate the C code that generates the assembly output below:

```asm
<prutenic_1st_epicycle_luna>:
  endbr64
  sub    $0x5b8,%rsp
  lea    D0(%rip),%rsi
  mov    $0xb5,%ecx
  mov    %fs:0x28,%rax
  mov    %rax,0x5a8(%rsp)
  xor    %eax,%eax
  mov    %rsp,%rdi
  rep movsq %ds:(%rsi),%es:(%rdi)
  mov    %rsp,%rsi
  mov    $0xb5,%edi
  call   <interpolate_symmetric_linear@plt>
  mov    0x5a8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L9
  add    $0x5b8,%rsp
  ret
L9:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: data_label: D0
type: string

tool: 

assistant: ```c
double prutenic_1st_epicycle_luna(double angle) {
  double table[] = {
      ((0) + (((0) + (0) / 60.)) / 60.),   ((0) + (((4) + (45) / 60.)) / 60.),  ((0) + (((9) + (31) / 60.)) / 60.), ((0) + (((14) + (16) / 60.)) / 60.), ((0) + (((19) + (1) / 60.)) / 60.),  ((0) + (((23) + (45) / 60.)) / 60.), ((0) + (((28) + (30) / 60.)) / 60.), ((0) + (((33) + (14) / 60.)) / 60.), ((0) + (((37) + (57) / 60.)) / 60.), ((0) + (((42) + (40) / 60.)) / 60.), ((0) + (((47) + (22) / 60.)) / 60.), ((0) + (((52) + (4) / 60.)) / 60.), ((0) + (((56) + (45) / 60.)) / 60.), ((1) + (((1) + (25) / 60.)) / 60.),  ((1) + (((6) + (4) / 60.)) / 60.),   ((1) + (((10) + (43) / 60.)) / 60.), ((1) + (((15) + (20) / 60.)) / 60.), ((1) + (((19) + (56) / 60.)) / 60.), ((1) + (((24) + (31) / 60.)) / 60.), ((1) + (((29) + (5) / 60.)) / 60.),  ((1) + (((33) + (37) / 60.)) / 60.), ((1) + (((38) + (8) / 60.)) / 60.),  ((1) + (((42) + (38) / 60.)) / 60.), ((1) + (((47) + (7) / 60.)) / 60.),  ((1) + (((51) + (34) / 60.)) / 60.), ((1) + (((55) + (59) / 60.)) / 60.), ((2) + (((0) + (22) / 60.)) / 60.),  ((2) + (((4) + (44) / 60.)) / 60.),  ((2) + (((9) + (4) / 60.)) / 60.),   ((2) + (((13) + (22) / 60.)) / 60.), ((2) + (((17) + (38) / 60.)) / 60.), ((2) + (((21) + (52) / 60.)) / 60.), ((2) + (((26) + (4) / 60.)) / 60.),  ((2) + (((30) + (14) / 60.)) / 60.), ((2) + (((34) + (22) / 60.)) / 60.), ((2) + (((38) + (28) / 60.)) / 60.), ((2) + (((42) + (31) / 60.)) / 60.), ((2) + (((46) + (31) / 60.)) / 60.), ((2) + (((50) + (30) / 60.)) / 60.), ((2) + (((54) + (25) / 60.)) / 60.), ((2) + (((58) + (18) / 60.)) / 60.), ((3) + (((2) + (9) / 60.)) / 60.),  ((3) + (((5) + (57) / 60.)) / 60.),  ((3) + (((9) + (42) / 60.)) / 60.), ((3) + (((13) + (24) / 60.)) / 60.), ((3) + (((17) + (3) / 60.)) / 60.),  ((3) + (((20) + (39) / 60.)) / 60.), ((3) + (((24) + (12) / 60.)) / 60.), ((3) + (((27) + (42) / 60.)) / 60.), ((3) + (((31) + (9) / 60.)) / 60.),  ((3) + (((34) + (33) / 60.)) / 60.), ((3) + (((37) + (53) / 60.)) / 60.), ((3) + (((41) + (10) / 60.)) / 60.), ((3) + (((44) + (24) / 60.)) / 60.), ((3) + (((47) + (34) / 60.)) / 60.), ((3) + (((50) + (41) / 60.)) / 60.), ((3) + (((53) + (44) / 60.)) / 60.), ((3) + (((56) + (43) / 60.)) / 60.), ((3) + (((59) + (39) / 60.)) / 60.), ((4) + (((2) + (31) / 60.)) / 60.),  ((4) + (((5) + (19) / 60.)) / 60.), ((4) + (((8) + (3) / 60.)) / 60.),   ((4) + (((10) + (43) / 60.)) / 60.), ((4) + (((13) + (19) / 60.)) / 60.), ((4) + (((15) + (51) / 60.)) / 60.), ((4) + (((18) + (19) / 60.)) / 60.), ((4) + (((20) + (43) / 60.)) / 60.), ((4) + (((23) + (3) / 60.)) / 60.), ((4) + (((25) + (18) / 60.)) / 60.), ((4) + (((27) + (29) / 60.)) / 60.), ((4) + (((29) + (36) / 60.)) / 60.), ((4) + (((31) + (38) / 60.)) / 60.), ((4) + (((33) + (36) / 60.)) / 60.), ((4) + (((35) + (29) / 60.)) / 60.), ((4) + (((37) + (18) / 60.)) / 60.), ((4) + (((39) + (2) / 60.)) / 60.), ((4) + (((40) + (41) / 60.)) / 60.), ((4) + (((42) + (15) / 60.)) / 60.), ((4) + (((43) + (45) / 60.)) / 60.), ((4) + (((45) + (10) / 60.)) / 60.), ((4) + (((46) + (30) / 60.)) / 60.), ((4) + (((47) + (45) / 60.)) / 60.), ((4) + (((48) + (55) / 60.)) / 60.), ((4) + (((50) + (1) / 60.)) / 60.),  ((4) + (((51) + (1) / 60.)) / 60.),  ((4) + (((51) + (56) / 60.)) / 60.), ((4) + (((52) + (46) / 60.)) / 60.), ((4) + (((53) + (31) / 60.)) / 60.), ((4) + (((54) + (10) / 60.)) / 60.), ((4) + (((54) + (45) / 60.)) / 60.), ((4) + (((55) + (14) / 60.)) / 60.),
      ((4) + (((55) + (38) / 60.)) / 60.), ((4) + (((55) + (56) / 60.)) / 60.), ((4) + (((56) + (9) / 60.)) / 60.), ((4) + (((56) + (17) / 60.)) / 60.), ((4) + (((56) + (19) / 60.)) / 60.), ((4) + (((56) + (16) / 60.)) / 60.), ((4) + (((56) + (8) / 60.)) / 60.),  ((4) + (((55) + (54) / 60.)) / 60.), ((4) + (((55) + (34) / 60.)) / 60.), ((4) + (((55) + (9) / 60.)) / 60.),  ((4) + (((54) + (39) / 60.)) / 60.), ((4) + (((54) + (3) / 60.)) / 60.), ((4) + (((53) + (21) / 60.)) / 60.), ((4) + (((52) + (34) / 60.)) / 60.), ((4) + (((51) + (41) / 60.)) / 60.), ((4) + (((50) + (43) / 60.)) / 60.), ((4) + (((49) + (39) / 60.)) / 60.), ((4) + (((48) + (29) / 60.)) / 60.), ((4) + (((47) + (14) / 60.)) / 60.), ((4) + (((45) + (53) / 60.)) / 60.), ((4) + (((44) + (27) / 60.)) / 60.), ((4) + (((42) + (55) / 60.)) / 60.), ((4) + (((41) + (17) / 60.)) / 60.), ((4) + (((39) + (34) / 60.)) / 60.), ((4) + (((37) + (45) / 60.)) / 60.), ((4) + (((35) + (51) / 60.)) / 60.), ((4) + (((33) + (51) / 60.)) / 60.), ((4) + (((31) + (45) / 60.)) / 60.), ((4) + (((29) + (34) / 60.)) / 60.), ((4) + (((27) + (18) / 60.)) / 60.), ((4) + (((24) + (56) / 60.)) / 60.), ((4) + (((22) + (28) / 60.)) / 60.), ((4) + (((19) + (55) / 60.)) / 60.), ((4) + (((17) + (17) / 60.)) / 60.), ((4) + (((14) + (34) / 60.)) / 60.), ((4) + (((11) + (45) / 60.)) / 60.), ((4) + (((8) + (50) / 60.)) / 60.),  ((4) + (((5) + (51) / 60.)) / 60.),  ((4) + (((2) + (46) / 60.)) / 60.),  ((3) + (((59) + (36) / 60.)) / 60.), ((3) + (((56) + (21) / 60.)) / 60.), ((3) + (((53) + (1) / 60.)) / 60.), ((3) + (((49) + (36) / 60.)) / 60.), ((3) + (((46) + (6) / 60.)) / 60.), ((3) + (((42) + (32) / 60.)) / 60.), ((3) + (((38) + (52) / 60.)) / 60.), ((3) + (((35) + (7) / 60.)) / 60.),  ((3) + (((31) + (18) / 60.)) / 60.), ((3) + (((27) + (24) / 60.)) / 60.), ((3) + (((23) + (26) / 60.)) / 60.), ((3) + (((19) + (23) / 60.)) / 60.), ((3) + (((15) + (16) / 60.)) / 60.), ((3) + (((11) + (4) / 60.)) / 60.),  ((3) + (((6) + (48) / 60.)) / 60.),  ((3) + (((2) + (28) / 60.)) / 60.),  ((2) + (((58) + (3) / 60.)) / 60.),  ((2) + (((53) + (35) / 60.)) / 60.), ((2) + (((49) + (3) / 60.)) / 60.),  ((2) + (((44) + (27) / 60.)) / 60.), ((2) + (((39) + (47) / 60.)) / 60.), ((2) + (((35) + (4) / 60.)) / 60.), ((2) + (((30) + (17) / 60.)) / 60.), ((2) + (((25) + (26) / 60.)) / 60.), ((2) + (((20) + (32) / 60.)) / 60.), ((2) + (((15) + (35) / 60.)) / 60.), ((2) + (((10) + (35) / 60.)) / 60.), ((2) + (((5) + (32) / 60.)) / 60.),  ((2) + (((0) + (26) / 60.)) / 60.), ((1) + (((55) + (17) / 60.)) / 60.), ((1) + (((50) + (6) / 60.)) / 60.),  ((1) + (((44) + (52) / 60.)) / 60.), ((1) + (((39) + (35) / 60.)) / 60.), ((1) + (((34) + (16) / 60.)) / 60.), ((1) + (((28) + (55) / 60.)) / 60.), ((1) + (((23) + (32) / 60.)) / 60.), ((1) + (((18) + (7) / 60.)) / 60.), ((1) + (((12) + (40) / 60.)) / 60.), ((1) + (((7) + (11) / 60.)) / 60.),  ((1) + (((1) + (41) / 60.)) / 60.),  ((0) + (((56) + (9) / 60.)) / 60.),  ((0) + (((50) + (36) / 60.)) / 60.), ((0) + (((45) + (2) / 60.)) / 60.),  ((0) + (((39) + (26) / 60.)) / 60.), ((0) + (((33) + (50) / 60.)) / 60.), ((0) + (((28) + (13) / 60.)) / 60.), ((0) + (((22) + (35) / 60.)) / 60.), ((0) + (((16) + (57) / 60.)) / 60.), ((0) + (((11) + (18) / 60.)) / 60.), ((0) + (((5) + (39) / 60.)) / 60.),  ((0) + (((0) + (0) / 60.)) / 60.),
  };
  return interpolate_symmetric_linear(sizeof(table) / sizeof(*table), table, angle);
}
```