// File: ArashPartow[P]exprtk/exprtk_simple_example_22.cpp
// Function: void compute_european_option_implied_volatility<double>()
void compute_european_option_implied_volatility()
{
   typedef exprtk::symbol_table<T>         symbol_table_t;
   typedef exprtk::expression<T>           expression_t;
   typedef exprtk::parser<T>               parser_t;
   typedef exprtk::function_compositor<T>  compositor_t;
   typedef typename compositor_t::function function_t;

   const std::string option_implied_volatility_program =
      " const var epsilon   := 0.0000001;                               "
      " const var max_iters := 1000;                                    "
      "                                                                 "
      " var v   := 0.5; /* Initial volatility guess */                  "
      " var itr := 0;                                                   "
      "                                                                 "
      " while ((itr += 1) <= max_iters)                                 "
      " {                                                               "
      "    var price :=                                                 "
      "       switch                                                    "
      "       {                                                         "
      "          case callput_flag == 'call' : bsm_call(s, k, r, t, v); "
      "          case callput_flag == 'put'  : bsm_put (s, k, r, t, v); "
      "       };                                                        "
      "                                                                 "
      "    var price_diff := price - target_price;                      "
      "                                                                 "
      "    if (abs(price_diff) <= epsilon)                              "
      "    {                                                            "
      "       break;                                                    "
      "    };                                                           "
      "                                                                 "
      "    var vega := bsm_vega(s, k, r, t, v);                         "
      "                                                                 "
      "    if (vega < epsilon)                                          "
      "    {                                                            "
      "       itr := max_iters + 1;                                     "
      "       break;                                                    "
      "    };                                                           "
      "                                                                 "
      "    v -= price_diff / vega;                                      "
      " };                                                              "
      "                                                                 "
      " itr <= max_iters ? v : null;                                    ";

   T s            = T(100.00); // Spot / Stock / Underlying / Base price
   T k            = T(110.00); // Strike price
   T t            = T(  2.22); // Years to maturity
   T r            = T(  0.05); // Risk free rate
   T target_price = T(  0.00);

   std::string callput_flag;

   symbol_table_t symbol_table(symbol_table_t::e_immutable);
   symbol_table.add_variable("s",s);
   symbol_table.add_variable("k",k);
   symbol_table.add_variable("t",t);
   symbol_table.add_variable("r",r);
   symbol_table.add_stringvar("callput_flag",callput_flag);
   symbol_table.add_variable ("target_price",target_price);
   symbol_table.add_pi();

   compositor_t compositor(symbol_table);

   compositor.add(
      function_t("bsm_call")
      .vars("s", "k", "r", "t", "v")
      .expression
      (
         " var d1 := (log(s / k) + (r + v^2 / 2) * t) / (v * sqrt(t)); "
         " var d2 := d1 - v * sqrt(t);                                 "
         " s * ncdf(d1) - k * exp(-r * t) * ncdf(d2);                  "
      ));

   compositor.add(
      function_t("bsm_put")
      .vars("s", "k", "r", "t", "v")
      .expression
      (
         " var d1 := (log(s / k) + (r + v^2 / 2) * t) / (v * sqrt(t)); "
         " var d2 := d1 - v * sqrt(t);                                 "
         " k * exp(-r * t) * ncdf(-d2) - s * ncdf(-d1);                "
      ));

   compositor.add(
      function_t("bsm_vega")
      .vars("s", "k", "r", "t", "v")
      .expression
      (
         " var d1 := (log(s / k) + (r + v^2 / 2) * t) / (v * sqrt(t)); "
         " s * exp(-d1^2 / 2) / sqrt(2pi) * sqrt(t);                   "
      ));

   expression_t expression;
   expression.register_symbol_table(symbol_table);

   parser_t parser;
   parser.compile(option_implied_volatility_program, expression);

   {
      callput_flag = "call";
      target_price = T(18.339502);

      const T call_option_implied_vol = expression.value();

      printf("Call Option(s: %5.3f, k: %5.3f, t: %5.3f, r: %5.3f) "
             "@ $%8.6f Implied volatility = %10.8f\n",
             s, k, t, r, target_price, call_option_implied_vol);
   }

   {
      callput_flag = "put";
      target_price = T(16.782764);

      const T put_option_implied_vol = expression.value();

      printf("Put  Option(s: %5.3f, k: %5.3f, t: %5.3f, r: %5.3f) "
             "@ $%8.6f Implied volatility = %10.8f\n",
             s, k, t, r, target_price, put_option_implied_vol);
   }
}

// Assembly:
subq $0x1c28, %rsp           # imm = 0x1C28
leaq 0x1c07(%rsp), %rdi
movq %rdi, 0x120(%rsp)
callq 0x113650
movq 0x120(%rsp), %rdx
leaq 0x349d2a(%rip), %rsi    # 0x464565
leaq 0x1c08(%rsp), %rdi
callq 0x11a750
jmp 0x11a84a
leaq 0x1c07(%rsp), %rdi
callq 0x113770
movabsq $0x4059000000000000, %rax # imm = 0x4059000000000000
movq %rax, 0x1be8(%rsp)
movabsq $0x405b800000000000, %rax # imm = 0x405B800000000000
movq %rax, 0x1be0(%rsp)
movabsq $0x4001c28f5c28f5c3, %rax # imm = 0x4001C28F5C28F5C3
movq %rax, 0x1bd8(%rsp)
movabsq $0x3fa999999999999a, %rax # imm = 0x3FA999999999999A
movq %rax, 0x1bd0(%rsp)
movq $0x0, 0x1bc8(%rsp)
leaq 0x1ba8(%rsp), %rdi
callq 0x113260
leaq 0x1ba0(%rsp), %rdi
movl $0x2, %esi
callq 0x11bfe0
jmp 0x11a8cc
leaq 0x1b7f(%rsp), %rdi
movq %rdi, 0x118(%rsp)
callq 0x113650
movq 0x118(%rsp), %rdx
leaq 0x349b25(%rip), %rsi    # 0x464415
leaq 0x1b80(%rsp), %rdi
callq 0x11a750
jmp 0x11a8ff
leaq 0x1ba0(%rsp), %rdi
leaq 0x1b80(%rsp), %rsi
leaq 0x1be8(%rsp), %rdx
xorl %ecx, %ecx
callq 0x11c020
jmp 0x11a920
leaq 0x1b80(%rsp), %rdi
callq 0x113788
leaq 0x1b7f(%rsp), %rdi
callq 0x113770
leaq 0x1b57(%rsp), %rdi
movq %rdi, 0x110(%rsp)
callq 0x113650
movq 0x110(%rsp), %rdx
leaq 0x349a4a(%rip), %rsi    # 0x4643a8
leaq 0x1b58(%rsp), %rdi
callq 0x11a750
jmp 0x11a96d
leaq 0x1ba0(%rsp), %rdi
leaq 0x1b58(%rsp), %rsi
leaq 0x1be0(%rsp), %rdx
xorl %ecx, %ecx
callq 0x11c020
jmp 0x11a98e
leaq 0x1b58(%rsp), %rdi
callq 0x113788
leaq 0x1b57(%rsp), %rdi
callq 0x113770
leaq 0x1b2f(%rsp), %rdi
movq %rdi, 0x108(%rsp)
callq 0x113650
movq 0x108(%rsp), %rdx
leaq 0x34ae8b(%rip), %rsi    # 0x465857
leaq 0x1b30(%rsp), %rdi
callq 0x11a750
jmp 0x11a9db
leaq 0x1ba0(%rsp), %rdi
leaq 0x1b30(%rsp), %rsi
leaq 0x1bd8(%rsp), %rdx
xorl %ecx, %ecx
callq 0x11c020
jmp 0x11a9fc
leaq 0x1b30(%rsp), %rdi
callq 0x113788
leaq 0x1b2f(%rsp), %rdi
callq 0x113770
leaq 0x1b07(%rsp), %rdi
movq %rdi, 0x100(%rsp)
callq 0x113650
movq 0x100(%rsp), %rdx
leaq 0x3499c6(%rip), %rsi    # 0x464400
leaq 0x1b08(%rsp), %rdi
callq 0x11a750
jmp 0x11aa49
leaq 0x1ba0(%rsp), %rdi
leaq 0x1b08(%rsp), %rsi
leaq 0x1bd0(%rsp), %rdx
xorl %ecx, %ecx
callq 0x11c020
jmp 0x11aa6a
leaq 0x1b08(%rsp), %rdi
callq 0x113788
leaq 0x1b07(%rsp), %rdi
callq 0x113770
leaq 0x1adf(%rsp), %rdi
movq %rdi, 0xf8(%rsp)
callq 0x113650
movq 0xf8(%rsp), %rdx
leaq 0x34a360(%rip), %rsi    # 0x464e08
leaq 0x1ae0(%rsp), %rdi
callq 0x11a750
jmp 0x11aab7
leaq 0x1ba0(%rsp), %rdi
leaq 0x1ae0(%rsp), %rsi
leaq 0x1ba8(%rsp), %rdx
xorl %ecx, %ecx
callq 0x11c0d0
jmp 0x11aad8
leaq 0x1ae0(%rsp), %rdi
callq 0x113788
leaq 0x1adf(%rsp), %rdi
callq 0x113770
leaq 0x1ab7(%rsp), %rdi
movq %rdi, 0xf0(%rsp)
callq 0x113650
movq 0xf0(%rsp), %rdx
leaq 0x34a2ff(%rip), %rsi    # 0x464e15
leaq 0x1ab8(%rsp), %rdi
callq 0x11a750
jmp 0x11ab25
leaq 0x1ba0(%rsp), %rdi
leaq 0x1ab8(%rsp), %rsi
leaq 0x1bc8(%rsp), %rdx
xorl %ecx, %ecx
callq 0x11c020
jmp 0x11ab46
leaq 0x1ab8(%rsp), %rdi
callq 0x113788
leaq 0x1ab7(%rsp), %rdi
callq 0x113770
leaq 0x1ba0(%rsp), %rdi
callq 0x11c190
jmp 0x11ab6f
leaq 0x10c8(%rsp), %rdi
leaq 0x1ba0(%rsp), %rsi
callq 0x11c2b0
jmp 0x11ab86
leaq 0x1017(%rsp), %rdi
movq %rdi, 0xe8(%rsp)
callq 0x113650
movq 0xe8(%rsp), %rdx
leaq 0x34a278(%rip), %rsi    # 0x464e22
leaq 0x1018(%rsp), %rdi
callq 0x11a750
jmp 0x11abb9
leaq 0x1038(%rsp), %rdi
leaq 0x1018(%rsp), %rsi
callq 0x11c4a0
jmp 0x11abd0
leaq 0xfef(%rsp), %rdi
movq %rdi, 0xe0(%rsp)
callq 0x113650
movq 0xe0(%rsp), %rdx
leaq 0x349821(%rip), %rsi    # 0x464415
leaq 0xff0(%rsp), %rdi
callq 0x11a750
jmp 0x11ac03
leaq 0xfc7(%rsp), %rdi
movq %rdi, 0xd8(%rsp)
callq 0x113650
movq 0xd8(%rsp), %rdx
leaq 0x349781(%rip), %rsi    # 0x4643a8
leaq 0xfc8(%rsp), %rdi
callq 0x11a750
jmp 0x11ac36
leaq 0xf9f(%rsp), %rdi
movq %rdi, 0xd0(%rsp)
callq 0x113650
movq 0xd0(%rsp), %rdx
leaq 0x3497a6(%rip), %rsi    # 0x464400
leaq 0xfa0(%rsp), %rdi
callq 0x11a750
jmp 0x11ac69
leaq 0xf77(%rsp), %rdi
movq %rdi, 0xc8(%rsp)
callq 0x113650
movq 0xc8(%rsp), %rdx
leaq 0x34abca(%rip), %rsi    # 0x465857
leaq 0xf78(%rsp), %rdi
callq 0x11a750
jmp 0x11ac9c
leaq 0xf4f(%rsp), %rdi
movq %rdi, 0xc0(%rsp)
callq 0x113650
movq 0xc0(%rsp), %rdx
leaq 0x34a16b(%rip), %rsi    # 0x464e2b
leaq 0xf50(%rsp), %rdi
callq 0x11a750
jmp 0x11accf
leaq 0x1038(%rsp), %rdi
leaq 0xff0(%rsp), %rsi
leaq 0xfc8(%rsp), %rdx
leaq 0xfa0(%rsp), %rcx
leaq 0xf78(%rsp), %r8
leaq 0xf50(%rsp), %r9
callq 0x11c520
movq %rax, 0xb8(%rsp)
jmp 0x11ad0e
leaq 0xf27(%rsp), %rdi
movq %rdi, 0xb0(%rsp)
callq 0x113650
movq 0xb0(%rsp), %rdx
leaq 0x34a0fb(%rip), %rsi    # 0x464e2d
leaq 0xf28(%rsp), %rdi
callq 0x11a750
jmp 0x11ad41
movq 0xb8(%rsp), %rdi
leaq 0xf28(%rsp), %rsi
callq 0x11c5b0
movq %rax, 0xa8(%rsp)
jmp 0x11ad60
movq 0xa8(%rsp), %rsi
leaq 0x10c8(%rsp), %rdi
xorl %edx, %edx
callq 0x11c450
jmp 0x11ad79
leaq 0xf28(%rsp), %rdi
callq 0x113788
leaq 0xf27(%rsp), %rdi
callq 0x113770
leaq 0xf50(%rsp), %rdi
callq 0x113788
leaq 0xf4f(%rsp), %rdi
callq 0x113770
leaq 0xf78(%rsp), %rdi
callq 0x113788
leaq 0xf77(%rsp), %rdi
callq 0x113770
leaq 0xfa0(%rsp), %rdi
callq 0x113788
leaq 0xf9f(%rsp), %rdi
callq 0x113770
leaq 0xfc8(%rsp), %rdi
callq 0x113788
leaq 0xfc7(%rsp), %rdi
callq 0x113770
leaq 0xff0(%rsp), %rdi
callq 0x113788
leaq 0xfef(%rsp), %rdi
callq 0x113770
leaq 0x1038(%rsp), %rdi
callq 0x11c5e0
leaq 0x1018(%rsp), %rdi
callq 0x113788
leaq 0x1017(%rsp), %rdi
callq 0x113770
leaq 0xe6f(%rsp), %rdi
movq %rdi, 0xa0(%rsp)
callq 0x113650
movq 0xa0(%rsp), %rdx
leaq 0x34a085(%rip), %rsi    # 0x464ee5
leaq 0xe70(%rsp), %rdi
callq 0x11a750
jmp 0x11ae6f
leaq 0xe90(%rsp), %rdi
leaq 0xe70(%rsp), %rsi
callq 0x11c4a0
jmp 0x11ae86
leaq 0xe47(%rsp), %rdi
movq %rdi, 0x98(%rsp)
callq 0x113650
movq 0x98(%rsp), %rdx
leaq 0x34956b(%rip), %rsi    # 0x464415
leaq 0xe48(%rsp), %rdi
callq 0x11a750
jmp 0x11aeb9
leaq 0xe1f(%rsp), %rdi
movq %rdi, 0x90(%rsp)
callq 0x113650
movq 0x90(%rsp), %rdx
leaq 0x3494cb(%rip), %rsi    # 0x4643a8
leaq 0xe20(%rsp), %rdi
callq 0x11a750
jmp 0x11aeec
leaq 0xdf7(%rsp), %rdi
movq %rdi, 0x88(%rsp)
callq 0x113650
movq 0x88(%rsp), %rdx
leaq 0x3494f0(%rip), %rsi    # 0x464400
leaq 0xdf8(%rsp), %rdi
callq 0x11a750
jmp 0x11af1f
leaq 0xdcf(%rsp), %rdi
movq %rdi, 0x80(%rsp)
callq 0x113650
movq 0x80(%rsp), %rdx
leaq 0x34a914(%rip), %rsi    # 0x465857
leaq 0xdd0(%rsp), %rdi
callq 0x11a750
jmp 0x11af52
leaq 0xda7(%rsp), %rdi
movq %rdi, 0x78(%rsp)
callq 0x113650
movq 0x78(%rsp), %rdx
leaq 0x349ebb(%rip), %rsi    # 0x464e2b
leaq 0xda8(%rsp), %rdi
callq 0x11a750
jmp 0x11af7f
leaq 0xe90(%rsp), %rdi
leaq 0xe48(%rsp), %rsi
leaq 0xe20(%rsp), %rdx
leaq 0xdf8(%rsp), %rcx
leaq 0xdd0(%rsp), %r8
leaq 0xda8(%rsp), %r9
callq 0x11c520
movq %rax, 0x70(%rsp)
jmp 0x11afbb
leaq 0xd7f(%rsp), %rdi
movq %rdi, 0x68(%rsp)
callq 0x113650
movq 0x68(%rsp), %rdx
leaq 0x349f14(%rip), %rsi    # 0x464eed
leaq 0xd80(%rsp), %rdi
callq 0x11a750
jmp 0x11afe8
movq 0x70(%rsp), %rdi
leaq 0xd80(%rsp), %rsi
callq 0x11c5b0
movq %rax, 0x60(%rsp)
jmp 0x11b001
movq 0x60(%rsp), %rsi
leaq 0x10c8(%rsp), %rdi
xorl %edx, %edx
callq 0x11c450
jmp 0x11b017
leaq 0xd80(%rsp), %rdi
callq 0x113788
leaq 0xd7f(%rsp), %rdi
callq 0x113770
leaq 0xda8(%rsp), %rdi
callq 0x113788
leaq 0xda7(%rsp), %rdi
callq 0x113770
leaq 0xdd0(%rsp), %rdi
callq 0x113788
leaq 0xdcf(%rsp), %rdi
callq 0x113770
leaq 0xdf8(%rsp), %rdi
callq 0x113788
leaq 0xdf7(%rsp), %rdi
callq 0x113770
leaq 0xe20(%rsp), %rdi
callq 0x113788
leaq 0xe1f(%rsp), %rdi
callq 0x113770
leaq 0xe48(%rsp), %rdi
callq 0x113788
leaq 0xe47(%rsp), %rdi
callq 0x113770
leaq 0xe90(%rsp), %rdi
callq 0x11c5e0
leaq 0xe70(%rsp), %rdi
callq 0x113788
leaq 0xe6f(%rsp), %rdi
callq 0x113770
leaq 0xcc7(%rsp), %rdi
movq %rdi, 0x58(%rsp)
callq 0x113650
movq 0x58(%rsp), %rdx
leaq 0x349ead(%rip), %rsi    # 0x464fa5
leaq 0xcc8(%rsp), %rdi
callq 0x11a750
jmp 0x11b107
leaq 0xce8(%rsp), %rdi
leaq 0xcc8(%rsp), %rsi
callq 0x11c4a0
jmp 0x11b11e
leaq 0xc9f(%rsp), %rdi
movq %rdi, 0x50(%rsp)
callq 0x113650
movq 0x50(%rsp), %rdx
leaq 0x3492d9(%rip), %rsi    # 0x464415
leaq 0xca0(%rsp), %rdi
callq 0x11a750
jmp 0x11b14b
leaq 0xc77(%rsp), %rdi
movq %rdi, 0x48(%rsp)
callq 0x113650
movq 0x48(%rsp), %rdx
leaq 0x34923f(%rip), %rsi    # 0x4643a8
leaq 0xc78(%rsp), %rdi
callq 0x11a750
jmp 0x11b178
leaq 0xc4f(%rsp), %rdi
movq %rdi, 0x40(%rsp)
callq 0x113650
movq 0x40(%rsp), %rdx
leaq 0x34926a(%rip), %rsi    # 0x464400
leaq 0xc50(%rsp), %rdi
callq 0x11a750
jmp 0x11b1a5
leaq 0xc27(%rsp), %rdi
movq %rdi, 0x38(%rsp)
callq 0x113650
movq 0x38(%rsp), %rdx
leaq 0x34a694(%rip), %rsi    # 0x465857
leaq 0xc28(%rsp), %rdi
callq 0x11a750
jmp 0x11b1d2
leaq 0xbff(%rsp), %rdi
movq %rdi, 0x30(%rsp)
callq 0x113650
movq 0x30(%rsp), %rdx
leaq 0x349c3b(%rip), %rsi    # 0x464e2b
leaq 0xc00(%rsp), %rdi
callq 0x11a750
jmp 0x11b1ff
leaq 0xce8(%rsp), %rdi
leaq 0xca0(%rsp), %rsi
leaq 0xc78(%rsp), %rdx
leaq 0xc50(%rsp), %rcx
leaq 0xc28(%rsp), %r8
leaq 0xc00(%rsp), %r9
callq 0x11c520
movq %rax, 0x28(%rsp)
jmp 0x11b23b
leaq 0xbd7(%rsp), %rdi
movq %rdi, 0x20(%rsp)
callq 0x113650
movq 0x20(%rsp), %rdx
leaq 0x349d55(%rip), %rsi    # 0x464fae
leaq 0xbd8(%rsp), %rdi
callq 0x11a750
jmp 0x11b268
movq 0x28(%rsp), %rdi
leaq 0xbd8(%rsp), %rsi
callq 0x11c5b0
movq %rax, 0x18(%rsp)
jmp 0x11b281
movq 0x18(%rsp), %rsi
leaq 0x10c8(%rsp), %rdi
xorl %edx, %edx
callq 0x11c450
jmp 0x11b297
leaq 0xbd8(%rsp), %rdi
callq 0x113788
leaq 0xbd7(%rsp), %rdi
callq 0x113770
leaq 0xc00(%rsp), %rdi
callq 0x113788
leaq 0xbff(%rsp), %rdi
callq 0x113770
leaq 0xc28(%rsp), %rdi
callq 0x113788
leaq 0xc27(%rsp), %rdi
callq 0x113770
leaq 0xc50(%rsp), %rdi
callq 0x113788
leaq 0xc4f(%rsp), %rdi
callq 0x113770
leaq 0xc78(%rsp), %rdi
callq 0x113788
leaq 0xc77(%rsp), %rdi
callq 0x113770
leaq 0xca0(%rsp), %rdi
callq 0x113788
leaq 0xc9f(%rsp), %rdi
callq 0x113770
leaq 0xce8(%rsp), %rdi
callq 0x11c5e0
leaq 0xcc8(%rsp), %rdi
callq 0x113788
leaq 0xcc7(%rsp), %rdi
callq 0x113770
leaq 0xbb0(%rsp), %rdi
callq 0x11c620
jmp 0x11b369
leaq 0xbb0(%rsp), %rdi
leaq 0x1ba0(%rsp), %rsi
callq 0x11c6d0
jmp 0x11b380
leaq 0x138(%rsp), %rdi
movl $0x7f, %esi
callq 0x11c780
jmp 0x11b394
leaq 0x288(%rsp), %rdi
leaq 0x138(%rsp), %rsi
callq 0x11c8b0
jmp 0x11b3ab
leaq 0x138(%rsp), %rdi
callq 0x11d0e0
leaq 0x288(%rsp), %rdi
leaq 0x1c08(%rsp), %rsi
leaq 0xbb0(%rsp), %rdx
callq 0x11d150
jmp 0x11b3d7
leaq 0x34d6d7(%rip), %rsi    # 0x468ab5
leaq 0x1ba8(%rsp), %rdi
callq 0x1132e0
jmp 0x11b3ed
movabsq $0x403256e99a62ed35, %rax # imm = 0x403256E99A62ED35
movq %rax, 0x1bc8(%rsp)
leaq 0xbb0(%rsp), %rdi
callq 0x11d9e0
movsd %xmm0, 0x10(%rsp)
jmp 0x11b414
movsd 0x10(%rsp), %xmm0
movsd %xmm0, 0x130(%rsp)
movsd 0x1be8(%rsp), %xmm0
movsd 0x1be0(%rsp), %xmm1
movsd 0x1bd8(%rsp), %xmm2
movsd 0x1bd0(%rsp), %xmm3
movsd 0x1bc8(%rsp), %xmm4
movsd 0x130(%rsp), %xmm5
leaq 0x349bc9(%rip), %rdi    # 0x465029
movb $0x6, %al
callq 0x113080
jmp 0x11b469
leaq 0x349a79(%rip), %rsi    # 0x464ee9
leaq 0x1ba8(%rsp), %rdi
callq 0x1132e0
jmp 0x11b47f
movabsq $0x4030c86338b47c74, %rax # imm = 0x4030C86338B47C74
movq %rax, 0x1bc8(%rsp)
leaq 0xbb0(%rsp), %rdi
callq 0x11d9e0
movsd %xmm0, 0x8(%rsp)
jmp 0x11b4a6
movsd 0x8(%rsp), %xmm0
movsd %xmm0, 0x128(%rsp)
movsd 0x1be8(%rsp), %xmm0
movsd 0x1be0(%rsp), %xmm1
movsd 0x1bd8(%rsp), %xmm2
movsd 0x1bd0(%rsp), %xmm3
movsd 0x1bc8(%rsp), %xmm4
movsd 0x128(%rsp), %xmm5
leaq 0x349b91(%rip), %rdi    # 0x465083
movb $0x6, %al
callq 0x113080
jmp 0x11b4fb
leaq 0x288(%rsp), %rdi
callq 0x11da00
leaq 0xbb0(%rsp), %rdi
callq 0x11dc00
leaq 0x10c8(%rsp), %rdi
callq 0x11dc40
leaq 0x1ba0(%rsp), %rdi
callq 0x11dcd0
leaq 0x1ba8(%rsp), %rdi
callq 0x113788
leaq 0x1c08(%rsp), %rdi
callq 0x113788
addq $0x1c28, %rsp           # imm = 0x1C28
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
leaq 0x1c07(%rsp), %rdi
callq 0x113770
jmp 0x11bd29
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
jmp 0x11bd0f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
jmp 0x11b5c7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
leaq 0x1b80(%rsp), %rdi
callq 0x113788
leaq 0x1b7f(%rsp), %rdi
callq 0x113770
jmp 0x11bd02
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
jmp 0x11b610
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
leaq 0x1b58(%rsp), %rdi
callq 0x113788
leaq 0x1b57(%rsp), %rdi
callq 0x113770
jmp 0x11bd02
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
jmp 0x11b659
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
leaq 0x1b30(%rsp), %rdi
callq 0x113788
leaq 0x1b2f(%rsp), %rdi
callq 0x113770
jmp 0x11bd02
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
jmp 0x11b6a2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
leaq 0x1b08(%rsp), %rdi
callq 0x113788
leaq 0x1b07(%rsp), %rdi
callq 0x113770
jmp 0x11bd02
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
jmp 0x11b6eb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
leaq 0x1ae0(%rsp), %rdi
callq 0x113788
leaq 0x1adf(%rsp), %rdi
callq 0x113770
jmp 0x11bd02
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
jmp 0x11b734
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
leaq 0x1ab8(%rsp), %rdi
callq 0x113788
leaq 0x1ab7(%rsp), %rdi
callq 0x113770
jmp 0x11bd02
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
jmp 0x11bd02
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
jmp 0x11b901
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
jmp 0x11b8f4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
jmp 0x11b8da
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
jmp 0x11b8c0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
jmp 0x11b8a6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
jmp 0x11b88c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
jmp 0x11b872
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
jmp 0x11b865
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
jmp 0x11b858
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
leaq 0xf28(%rsp), %rdi
callq 0x113788
leaq 0xf27(%rsp), %rdi
callq 0x113770
leaq 0xf50(%rsp), %rdi
callq 0x113788
leaq 0xf4f(%rsp), %rdi
callq 0x113770
leaq 0xf78(%rsp), %rdi
callq 0x113788
leaq 0xf77(%rsp), %rdi
callq 0x113770
leaq 0xfa0(%rsp), %rdi
callq 0x113788
leaq 0xf9f(%rsp), %rdi
callq 0x113770
leaq 0xfc8(%rsp), %rdi
callq 0x113788
leaq 0xfc7(%rsp), %rdi
callq 0x113770
leaq 0xff0(%rsp), %rdi
callq 0x113788
leaq 0xfef(%rsp), %rdi
callq 0x113770
leaq 0x1038(%rsp), %rdi
callq 0x11c5e0
leaq 0x1018(%rsp), %rdi
callq 0x113788
leaq 0x1017(%rsp), %rdi
callq 0x113770
jmp 0x11bcf5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
jmp 0x11bab5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
jmp 0x11baa8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
jmp 0x11ba8e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
jmp 0x11ba74
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
jmp 0x11ba5a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
jmp 0x11ba40
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
jmp 0x11ba26
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
jmp 0x11ba19
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
jmp 0x11ba0c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
leaq 0xd80(%rsp), %rdi
callq 0x113788
leaq 0xd7f(%rsp), %rdi
callq 0x113770
leaq 0xda8(%rsp), %rdi
callq 0x113788
leaq 0xda7(%rsp), %rdi
callq 0x113770
leaq 0xdd0(%rsp), %rdi
callq 0x113788
leaq 0xdcf(%rsp), %rdi
callq 0x113770
leaq 0xdf8(%rsp), %rdi
callq 0x113788
leaq 0xdf7(%rsp), %rdi
callq 0x113770
leaq 0xe20(%rsp), %rdi
callq 0x113788
leaq 0xe1f(%rsp), %rdi
callq 0x113770
leaq 0xe48(%rsp), %rdi
callq 0x113788
leaq 0xe47(%rsp), %rdi
callq 0x113770
leaq 0xe90(%rsp), %rdi
callq 0x11c5e0
leaq 0xe70(%rsp), %rdi
callq 0x113788
leaq 0xe6f(%rsp), %rdi
callq 0x113770
jmp 0x11bcf5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
jmp 0x11bc69
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
jmp 0x11bc5c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
jmp 0x11bc42
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
jmp 0x11bc28
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
jmp 0x11bc0e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
jmp 0x11bbf4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
jmp 0x11bbda
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
jmp 0x11bbcd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
jmp 0x11bbc0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
leaq 0xbd8(%rsp), %rdi
callq 0x113788
leaq 0xbd7(%rsp), %rdi
callq 0x113770
leaq 0xc00(%rsp), %rdi
callq 0x113788
leaq 0xbff(%rsp), %rdi
callq 0x113770
leaq 0xc28(%rsp), %rdi
callq 0x113788
leaq 0xc27(%rsp), %rdi
callq 0x113770
leaq 0xc50(%rsp), %rdi
callq 0x113788
leaq 0xc4f(%rsp), %rdi
callq 0x113770
leaq 0xc78(%rsp), %rdi
callq 0x113788
leaq 0xc77(%rsp), %rdi
callq 0x113770
leaq 0xca0(%rsp), %rdi
callq 0x113788
leaq 0xc9f(%rsp), %rdi
callq 0x113770
leaq 0xce8(%rsp), %rdi
callq 0x11c5e0
leaq 0xcc8(%rsp), %rdi
callq 0x113788
leaq 0xcc7(%rsp), %rdi
callq 0x113770
jmp 0x11bcf5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
jmp 0x11bcf5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
jmp 0x11bce8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
leaq 0x138(%rsp), %rdi
callq 0x11d0e0
jmp 0x11bce8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1bf8(%rsp)
movl %eax, 0x1bf4(%rsp)
leaq 0x288(%rsp), %rdi
callq 0x11da00
leaq 0xbb0(%rsp), %rdi
callq 0x11dc00
leaq 0x10c8(%rsp), %rdi
callq 0x11dc40
leaq 0x1ba0(%rsp), %rdi
callq 0x11dcd0
leaq 0x1ba8(%rsp), %rdi
callq 0x113788
leaq 0x1c08(%rsp), %rdi
callq 0x113788
movq 0x1bf8(%rsp), %rdi
callq 0x113440
nopw %cs:(%rax,%rax)