// File: kobanium[P]Ray/src/learn/MinorizationMaximization.cpp
// Function: SamplingFeatures(game_info_t*, int, int)
static void
SamplingFeatures( game_info_t *game, const int color, const int id )
{
  const int previous_move = game->record[game->moves - 1].pos;
  pattern_t *pat = game->pat;
  double gamma, Ej = 0;
  unsigned char *tactical_features = game->tactical_features;
  unsigned int check_pat3[PURE_BOARD_MAX], check_md2[PURE_BOARD_MAX];
  int cpat3 = 0, cmd2 = 0, update_num = 0, update_pos[PURE_BOARD_MAX];
  
  std::fill_n(check_pat3, PURE_BOARD_MAX, 0);
  std::fill_n(check_md2, PURE_BOARD_MAX, 0);
  
  for (int i = 0; i < PURE_BOARD_MAX; i++) {
    const int pos = onboard_pos[i];
    ClearTacticalFeatures(&tactical_features[pos * ALL_MAX]);
  }
  
  CheckFeaturesForSimulation(game, color, update_pos, update_num);
  CheckRemove2StonesForSimulation(game, color, update_pos, update_num);
  if (game->ko_move == game->moves - 2) {
    CheckCaptureAfterKoForSimulation(game, color, update_pos, update_num);
  }

  for (int i = 0; i < pure_board_max; i++) {
    const int pos = onboard_pos[i];
    if (IsLegalNotEye(game, pos, color)) {
      CheckSelfAtariForSimulation(game, color, pos);
      CheckCaptureAndAtariForSimulation(game, color, pos);

      // 戦術的特徴
      gamma  = GetTacticalFeatureGamma(capture[id], tactical_features, pos, CAPTURE);
      gamma *= GetTacticalFeatureGamma(save_extension[id], tactical_features, pos, SAVE_EXTENSION);
      gamma *= GetTacticalFeatureGamma(atari[id], tactical_features, pos, ATARI);
      gamma *= GetTacticalFeatureGamma(extension[id], tactical_features, pos, EXTENSION);
      gamma *= GetTacticalFeatureGamma(dame[id], tactical_features, pos, DAME);
      gamma *= GetTacticalFeatureGamma(throw_in[id], tactical_features, pos, THROW_IN);

      // 直前からの着手距離
      if (game->moves > 1 && previous_move != PASS) {
        const int dis = DIS(previous_move, pos);
        if (dis == 2) {
          gamma *= previous_distance[id][0].gamma;
        } else if (dis == 3) {
          gamma *= previous_distance[id][1].gamma;
        } else if (dis == 4) {
          gamma *= previous_distance[id][2].gamma;
        }
      }

      // 配石パターン
      const int pat_md2 = md2_index[MD2(pat, pos)];
      const int pat_3x3 = pat3_index[Pat3(pat, pos)];
      if (md2_target[pat_md2]) {
        gamma *= md2[id][pat_md2].gamma;
      } else {
        gamma *= pat3[id][pat_3x3].gamma;
      }

      // チームの仲間の強さ
      SumUpTacticalFeatureTeamRating(capture[id], tactical_features, pos, CAPTURE, gamma);
      SumUpTacticalFeatureTeamRating(save_extension[id], tactical_features, pos, SAVE_EXTENSION, gamma);
      SumUpTacticalFeatureTeamRating(atari[id], tactical_features, pos, ATARI, gamma);
      SumUpTacticalFeatureTeamRating(extension[id], tactical_features, pos, EXTENSION, gamma);
      SumUpTacticalFeatureTeamRating(dame[id], tactical_features, pos, DAME, gamma);
      SumUpTacticalFeatureTeamRating(throw_in[id], tactical_features, pos, THROW_IN, gamma);

      // 直前からの着手距離
      if (game->moves > 1 && previous_move != PASS) {
        const int dis = DIS(previous_move, pos);
        if (dis == 2) {
          previous_distance[id][0].c += gamma;
        } else if (dis == 3) {
          previous_distance[id][1].c += gamma;
        } else if (dis == 4) {
          previous_distance[id][2].c += gamma;
        }
      }

      if (md2_target[pat_md2]) {
        // md2
        md2[id][pat_md2].c += gamma;
        check_md2[cmd2++] = pat_md2;
      } else {
        // 3x3
        pat3[id][pat_3x3].c += gamma;
        check_pat3[cpat3++] = pat_3x3;
      }
      // 全員の強さ
      Ej += gamma;
    }
  }
  
  UpdateSigma(capture[id], Ej);
  UpdateSigma(save_extension[id], Ej);
  UpdateSigma(atari[id], Ej);
  UpdateSigma(extension[id], Ej);
  UpdateSigma(dame[id], Ej);
  UpdateSigma(throw_in[id], Ej);
  UpdateSigma(previous_distance[id], Ej);
  
  cpat3 = GetUniquePattern(check_pat3, cpat3);
  for (int i = 0; i < cpat3; i++) {
    const unsigned int index = check_pat3[i];
    pat3[id][index].sigma += (pat3[id][index].c / pat3[id][index].gamma) / Ej;
    pat3[id][index].c = 0.0;
  }

  cmd2 = GetUniquePattern(check_md2, cmd2);
  for (int i = 0; i < cmd2; i++) {
    const unsigned int index = check_md2[i];
    md2[id][index].sigma += (md2[id][index].c / md2[id][index].gamma) / Ej;
    md2[id][index].c = 0.0;
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x11f0, %rsp           # imm = 0x11F0
movq %rdi, -0x8(%rbp)
movl %esi, -0xc(%rbp)
movl %edx, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq -0x8(%rbp), %rcx
movl 0x43b0(%rcx), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movl 0x4(%rax), %eax
movl %eax, -0x14(%rbp)
movq -0x8(%rbp), %rax
addq $0x4748, %rax           # imm = 0x4748
movq %rax, -0x20(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x30(%rbp)
movq -0x8(%rbp), %rax
addq $0x97372, %rax          # imm = 0x97372
movq %rax, -0x38(%rbp)
movl $0x0, -0xb94(%rbp)
movl $0x0, -0xb98(%rbp)
movl $0x0, -0xb9c(%rbp)
leaq -0x5e0(%rbp), %rdi
movl $0x0, -0x1144(%rbp)
movl $0x169, %esi            # imm = 0x169
leaq -0x1144(%rbp), %rdx
callq 0x79300
leaq -0xb90(%rbp), %rdi
movl $0x0, -0x1148(%rbp)
movl $0x169, %esi            # imm = 0x169
leaq -0x1148(%rbp), %rdx
callq 0x79300
movl $0x0, -0x114c(%rbp)
cmpl $0x169, -0x114c(%rbp)   # imm = 0x169
jge 0x75d4f
movslq -0x114c(%rbp), %rcx
leaq 0x1ab5cb50(%rip), %rax  # 0x1abd2870
movl (%rax,%rcx,4), %eax
movl %eax, -0x1150(%rbp)
movq -0x38(%rbp), %rdi
imull $0x6, -0x1150(%rbp), %eax
cltq
addq %rax, %rdi
callq 0x79350
movl -0x114c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x114c(%rbp)
jmp 0x75d06
movq -0x8(%rbp), %rdi
movl -0xc(%rbp), %esi
leaq -0x1140(%rbp), %rdx
leaq -0xb9c(%rbp), %rcx
callq 0xa0820
movq -0x8(%rbp), %rdi
movl -0xc(%rbp), %esi
leaq -0x1140(%rbp), %rdx
leaq -0xb9c(%rbp), %rcx
callq 0xa3400
movq -0x8(%rbp), %rax
movl 0x43c8(%rax), %eax
movq -0x8(%rbp), %rcx
movl 0x43b0(%rcx), %ecx
subl $0x2, %ecx
cmpl %ecx, %eax
jne 0x75db8
movq -0x8(%rbp), %rdi
movl -0xc(%rbp), %esi
leaq -0x1140(%rbp), %rdx
leaq -0xb9c(%rbp), %rcx
callq 0xa24d0
movl $0x0, -0x1154(%rbp)
movl -0x1154(%rbp), %eax
leaq 0x71c71(%rip), %rcx     # 0xe7a40
cmpl (%rcx), %eax
jge 0x764d0
movslq -0x1154(%rbp), %rcx
leaq 0x1ab5ca8b(%rip), %rax  # 0x1abd2870
movl (%rax,%rcx,4), %eax
movl %eax, -0x1158(%rbp)
movq -0x8(%rbp), %rdi
movl -0x1158(%rbp), %esi
movl -0xc(%rbp), %edx
callq 0x9d460
testb $0x1, %al
jne 0x75e09
jmp 0x764ba
movq -0x8(%rbp), %rdi
movl -0xc(%rbp), %esi
movl -0x1158(%rbp), %edx
callq 0xa2830
movq -0x8(%rbp), %rdi
movl -0xc(%rbp), %esi
movl -0x1158(%rbp), %edx
callq 0xa3180
movslq -0x10(%rbp), %rsi
leaq 0x744f0(%rip), %rdi     # 0xea328
callq 0x792c0
movq %rax, %rdi
movq -0x38(%rbp), %rsi
movl -0x1158(%rbp), %edx
xorl %ecx, %ecx
callq 0x767e0
movsd %xmm0, -0x28(%rbp)
movslq -0x10(%rbp), %rsi
leaq 0x744df(%rip), %rdi     # 0xea340
callq 0x792c0
movq %rax, %rdi
movq -0x38(%rbp), %rsi
movl -0x1158(%rbp), %edx
movl $0x1, %ecx
callq 0x767e0
mulsd -0x28(%rbp), %xmm0
movsd %xmm0, -0x28(%rbp)
movslq -0x10(%rbp), %rsi
leaq 0x744c6(%rip), %rdi     # 0xea358
callq 0x792c0
movq %rax, %rdi
movq -0x38(%rbp), %rsi
movl -0x1158(%rbp), %edx
movl $0x2, %ecx
callq 0x767e0
mulsd -0x28(%rbp), %xmm0
movsd %xmm0, -0x28(%rbp)
movslq -0x10(%rbp), %rsi
leaq 0x744ad(%rip), %rdi     # 0xea370
callq 0x792c0
movq %rax, %rdi
movq -0x38(%rbp), %rsi
movl -0x1158(%rbp), %edx
movl $0x3, %ecx
callq 0x767e0
mulsd -0x28(%rbp), %xmm0
movsd %xmm0, -0x28(%rbp)
movslq -0x10(%rbp), %rsi
leaq 0x74494(%rip), %rdi     # 0xea388
callq 0x792c0
movq %rax, %rdi
movq -0x38(%rbp), %rsi
movl -0x1158(%rbp), %edx
movl $0x4, %ecx
callq 0x767e0
mulsd -0x28(%rbp), %xmm0
movsd %xmm0, -0x28(%rbp)
movslq -0x10(%rbp), %rsi
leaq 0x7447b(%rip), %rdi     # 0xea3a0
callq 0x792c0
movq %rax, %rdi
movq -0x38(%rbp), %rsi
movl -0x1158(%rbp), %edx
movl $0x5, %ecx
callq 0x767e0
mulsd -0x28(%rbp), %xmm0
movsd %xmm0, -0x28(%rbp)
movq -0x8(%rbp), %rax
cmpl $0x1, 0x43b0(%rax)
jle 0x76077
cmpl $0x0, -0x14(%rbp)
je 0x76077
movslq -0x14(%rbp), %rcx
leaq 0x1ab08e8f(%rip), %rax  # 0x1ab7ee00
movl (%rax,%rcx,4), %eax
movslq -0x1158(%rbp), %rdx
leaq 0x1ab08e7e(%rip), %rcx  # 0x1ab7ee00
subl (%rcx,%rdx,4), %eax
movl %eax, %ecx
negl %ecx
cmovnsl %ecx, %eax
movslq %eax, %rcx
leaq 0x1ab5c32a(%rip), %rax  # 0x1abd22c0
imulq $0x4c, %rcx, %rcx
addq %rcx, %rax
movslq -0x14(%rbp), %rdx
leaq 0x1ab09b88(%rip), %rcx  # 0x1ab7fb30
movl (%rcx,%rdx,4), %ecx
movslq -0x1158(%rbp), %rsi
leaq 0x1ab09b77(%rip), %rdx  # 0x1ab7fb30
subl (%rdx,%rsi,4), %ecx
movl %ecx, %edx
negl %edx
cmovnsl %edx, %ecx
movslq %ecx, %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0x115c(%rbp)
cmpl $0x2, -0x115c(%rbp)
jne 0x76005
movslq -0x10(%rbp), %rsi
leaq 0x742fd(%rip), %rdi     # 0xea2e0
callq 0x792c0
movq %rax, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x792e0
movsd 0x18(%rax), %xmm0
mulsd -0x28(%rbp), %xmm0
movsd %xmm0, -0x28(%rbp)
jmp 0x76075
cmpl $0x3, -0x115c(%rbp)
jne 0x7603c
movslq -0x10(%rbp), %rsi
leaq 0x742c7(%rip), %rdi     # 0xea2e0
callq 0x792c0
movq %rax, %rdi
movl $0x1, %esi
callq 0x792e0
movsd 0x18(%rax), %xmm0
mulsd -0x28(%rbp), %xmm0
movsd %xmm0, -0x28(%rbp)
jmp 0x76073
cmpl $0x4, -0x115c(%rbp)
jne 0x76071
movslq -0x10(%rbp), %rsi
leaq 0x74290(%rip), %rdi     # 0xea2e0
callq 0x792c0
movq %rax, %rdi
movl $0x2, %esi
callq 0x792e0
movsd 0x18(%rax), %xmm0
mulsd -0x28(%rbp), %xmm0
movsd %xmm0, -0x28(%rbp)
jmp 0x76073
jmp 0x76075
jmp 0x76077
movq -0x20(%rbp), %rdi
movl -0x1158(%rbp), %esi
callq 0x93d60
movl %eax, %eax
movl %eax, %esi
leaq 0x74237(%rip), %rdi     # 0xea2c8
callq 0x63590
movl (%rax), %eax
movl %eax, -0x1160(%rbp)
movq -0x20(%rbp), %rdi
movl -0x1158(%rbp), %esi
callq 0x93d30
movl %eax, %eax
movl %eax, %esi
leaq 0x741f8(%rip), %rdi     # 0xea2b0
callq 0x63590
movl (%rax), %eax
movl %eax, -0x1164(%rbp)
movslq -0x1160(%rbp), %rsi
leaq 0x742fd(%rip), %rdi     # 0xea3d0
callq 0x67360
movq %rax, -0x1178(%rbp)
movq %rdx, -0x1170(%rbp)
leaq -0x1178(%rbp), %rdi
callq 0x673c0
testb $0x1, %al
jne 0x760f8
jmp 0x76128
movslq -0x10(%rbp), %rsi
leaq 0x7420d(%rip), %rdi     # 0xea310
callq 0x792c0
movq %rax, %rdi
movslq -0x1160(%rbp), %rsi
callq 0x792e0
movsd 0x18(%rax), %xmm0
mulsd -0x28(%rbp), %xmm0
movsd %xmm0, -0x28(%rbp)
jmp 0x76156
movslq -0x10(%rbp), %rsi
leaq 0x741c5(%rip), %rdi     # 0xea2f8
callq 0x792c0
movq %rax, %rdi
movslq -0x1164(%rbp), %rsi
callq 0x792e0
movsd 0x18(%rax), %xmm0
mulsd -0x28(%rbp), %xmm0
movsd %xmm0, -0x28(%rbp)
movslq -0x10(%rbp), %rsi
leaq 0x741c7(%rip), %rdi     # 0xea328
callq 0x792c0
movq %rax, %rdi
movq -0x38(%rbp), %rsi
movl -0x1158(%rbp), %edx
movsd -0x28(%rbp), %xmm0
xorl %ecx, %ecx
callq 0x76850
movslq -0x10(%rbp), %rsi
leaq 0x741b6(%rip), %rdi     # 0xea340
callq 0x792c0
movq %rax, %rdi
movq -0x38(%rbp), %rsi
movl -0x1158(%rbp), %edx
movsd -0x28(%rbp), %xmm0
movl $0x1, %ecx
callq 0x76850
movslq -0x10(%rbp), %rsi
leaq 0x741a2(%rip), %rdi     # 0xea358
callq 0x792c0
movq %rax, %rdi
movq -0x38(%rbp), %rsi
movl -0x1158(%rbp), %edx
movsd -0x28(%rbp), %xmm0
movl $0x2, %ecx
callq 0x76850
movslq -0x10(%rbp), %rsi
leaq 0x7418e(%rip), %rdi     # 0xea370
callq 0x792c0
movq %rax, %rdi
movq -0x38(%rbp), %rsi
movl -0x1158(%rbp), %edx
movsd -0x28(%rbp), %xmm0
movl $0x3, %ecx
callq 0x76850
movslq -0x10(%rbp), %rsi
leaq 0x7417a(%rip), %rdi     # 0xea388
callq 0x792c0
movq %rax, %rdi
movq -0x38(%rbp), %rsi
movl -0x1158(%rbp), %edx
movsd -0x28(%rbp), %xmm0
movl $0x4, %ecx
callq 0x76850
movslq -0x10(%rbp), %rsi
leaq 0x74166(%rip), %rdi     # 0xea3a0
callq 0x792c0
movq %rax, %rdi
movq -0x38(%rbp), %rsi
movl -0x1158(%rbp), %edx
movsd -0x28(%rbp), %xmm0
movl $0x5, %ecx
callq 0x76850
movq -0x8(%rbp), %rax
cmpl $0x1, 0x43b0(%rax)
jle 0x763ba
cmpl $0x0, -0x14(%rbp)
je 0x763ba
movslq -0x14(%rbp), %rcx
leaq 0x1ab08b7f(%rip), %rax  # 0x1ab7ee00
movl (%rax,%rcx,4), %eax
movslq -0x1158(%rbp), %rdx
leaq 0x1ab08b6e(%rip), %rcx  # 0x1ab7ee00
subl (%rcx,%rdx,4), %eax
movl %eax, %ecx
negl %ecx
cmovnsl %ecx, %eax
movslq %eax, %rcx
leaq 0x1ab5c01a(%rip), %rax  # 0x1abd22c0
imulq $0x4c, %rcx, %rcx
addq %rcx, %rax
movslq -0x14(%rbp), %rdx
leaq 0x1ab09878(%rip), %rcx  # 0x1ab7fb30
movl (%rcx,%rdx,4), %ecx
movslq -0x1158(%rbp), %rsi
leaq 0x1ab09867(%rip), %rdx  # 0x1ab7fb30
subl (%rdx,%rsi,4), %ecx
movl %ecx, %edx
negl %edx
cmovnsl %edx, %ecx
movslq %ecx, %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0x117c(%rbp)
cmpl $0x2, -0x117c(%rbp)
jne 0x76328
movsd -0x28(%rbp), %xmm0
movsd %xmm0, -0x11a8(%rbp)
movslq -0x10(%rbp), %rsi
leaq 0x73fe0(%rip), %rdi     # 0xea2e0
callq 0x792c0
movq %rax, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x792e0
movsd -0x11a8(%rbp), %xmm0
addsd 0x8(%rax), %xmm0
movsd %xmm0, 0x8(%rax)
jmp 0x763b8
cmpl $0x3, -0x117c(%rbp)
jne 0x7636f
movsd -0x28(%rbp), %xmm0
movsd %xmm0, -0x11b0(%rbp)
movslq -0x10(%rbp), %rsi
leaq 0x73f97(%rip), %rdi     # 0xea2e0
callq 0x792c0
movq %rax, %rdi
movl $0x1, %esi
callq 0x792e0
movsd -0x11b0(%rbp), %xmm0
addsd 0x8(%rax), %xmm0
movsd %xmm0, 0x8(%rax)
jmp 0x763b6
cmpl $0x4, -0x117c(%rbp)
jne 0x763b4
movsd -0x28(%rbp), %xmm0
movsd %xmm0, -0x11b8(%rbp)
movslq -0x10(%rbp), %rsi
leaq 0x73f50(%rip), %rdi     # 0xea2e0
callq 0x792c0
movq %rax, %rdi
movl $0x2, %esi
callq 0x792e0
movsd -0x11b8(%rbp), %xmm0
addsd 0x8(%rax), %xmm0
movsd %xmm0, 0x8(%rax)
jmp 0x763b6
jmp 0x763b8
jmp 0x763ba
movslq -0x1160(%rbp), %rsi
leaq 0x74008(%rip), %rdi     # 0xea3d0
callq 0x67360
movq %rax, -0x1190(%rbp)
movq %rdx, -0x1188(%rbp)
leaq -0x1190(%rbp), %rdi
callq 0x673c0
testb $0x1, %al
jne 0x763ed
jmp 0x7644d
movsd -0x28(%rbp), %xmm0
movsd %xmm0, -0x11c0(%rbp)
movslq -0x10(%rbp), %rsi
leaq 0x73f0b(%rip), %rdi     # 0xea310
callq 0x792c0
movq %rax, %rdi
movslq -0x1160(%rbp), %rsi
callq 0x792e0
movsd -0x11c0(%rbp), %xmm0
addsd 0x8(%rax), %xmm0
movsd %xmm0, 0x8(%rax)
movl -0x1160(%rbp), %ecx
movl -0xb98(%rbp), %eax
movl %eax, %edx
addl $0x1, %edx
movl %edx, -0xb98(%rbp)
cltq
movl %ecx, -0xb90(%rbp,%rax,4)
jmp 0x764ab
movsd -0x28(%rbp), %xmm0
movsd %xmm0, -0x11c8(%rbp)
movslq -0x10(%rbp), %rsi
leaq 0x73e93(%rip), %rdi     # 0xea2f8
callq 0x792c0
movq %rax, %rdi
movslq -0x1164(%rbp), %rsi
callq 0x792e0
movsd -0x11c8(%rbp), %xmm0
addsd 0x8(%rax), %xmm0
movsd %xmm0, 0x8(%rax)
movl -0x1164(%rbp), %ecx
movl -0xb94(%rbp), %eax
movl %eax, %edx
addl $0x1, %edx
movl %edx, -0xb94(%rbp)
cltq
movl %ecx, -0x5e0(%rbp,%rax,4)
movsd -0x28(%rbp), %xmm0
addsd -0x30(%rbp), %xmm0
movsd %xmm0, -0x30(%rbp)
jmp 0x764bc
movl -0x1154(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1154(%rbp)
jmp 0x75dc2
movslq -0x10(%rbp), %rsi
leaq 0x73e4d(%rip), %rdi     # 0xea328
callq 0x792c0
movq %rax, %rdi
movsd -0x30(%rbp), %xmm0
callq 0x768c0
movslq -0x10(%rbp), %rsi
leaq 0x73e48(%rip), %rdi     # 0xea340
callq 0x792c0
movq %rax, %rdi
movsd -0x30(%rbp), %xmm0
callq 0x768c0
movslq -0x10(%rbp), %rsi
leaq 0x73e43(%rip), %rdi     # 0xea358
callq 0x792c0
movq %rax, %rdi
movsd -0x30(%rbp), %xmm0
callq 0x768c0
movslq -0x10(%rbp), %rsi
leaq 0x73e3e(%rip), %rdi     # 0xea370
callq 0x792c0
movq %rax, %rdi
movsd -0x30(%rbp), %xmm0
callq 0x768c0
movslq -0x10(%rbp), %rsi
leaq 0x73e39(%rip), %rdi     # 0xea388
callq 0x792c0
movq %rax, %rdi
movsd -0x30(%rbp), %xmm0
callq 0x768c0
movslq -0x10(%rbp), %rsi
leaq 0x73e34(%rip), %rdi     # 0xea3a0
callq 0x792c0
movq %rax, %rdi
movsd -0x30(%rbp), %xmm0
callq 0x768c0
movslq -0x10(%rbp), %rsi
leaq 0x73d57(%rip), %rdi     # 0xea2e0
callq 0x792c0
movq %rax, %rdi
movsd -0x30(%rbp), %xmm0
callq 0x768c0
leaq -0x5e0(%rbp), %rdi
movl -0xb94(%rbp), %esi
callq 0x7c400
movl %eax, -0xb94(%rbp)
movl $0x0, -0x1194(%rbp)
movl -0x1194(%rbp), %eax
cmpl -0xb94(%rbp), %eax
jge 0x766b8
movslq -0x1194(%rbp), %rax
movl -0x5e0(%rbp,%rax,4), %eax
movl %eax, -0x1198(%rbp)
movslq -0x10(%rbp), %rsi
leaq 0x73d0a(%rip), %rdi     # 0xea2f8
callq 0x792c0
movq %rax, %rdi
movl -0x1198(%rbp), %eax
movl %eax, %esi
callq 0x792e0
movsd 0x8(%rax), %xmm0
movsd %xmm0, -0x11d8(%rbp)
movslq -0x10(%rbp), %rsi
leaq 0x73cdd(%rip), %rdi     # 0xea2f8
callq 0x792c0
movq %rax, %rdi
movl -0x1198(%rbp), %eax
movl %eax, %esi
callq 0x792e0
movsd -0x11d8(%rbp), %xmm0
divsd 0x18(%rax), %xmm0
divsd -0x30(%rbp), %xmm0
movsd %xmm0, -0x11d0(%rbp)
movslq -0x10(%rbp), %rsi
leaq 0x73ca3(%rip), %rdi     # 0xea2f8
callq 0x792c0
movq %rax, %rdi
movl -0x1198(%rbp), %eax
movl %eax, %esi
callq 0x792e0
movsd -0x11d0(%rbp), %xmm0
addsd 0x10(%rax), %xmm0
movsd %xmm0, 0x10(%rax)
movslq -0x10(%rbp), %rsi
leaq 0x73c71(%rip), %rdi     # 0xea2f8
callq 0x792c0
movq %rax, %rdi
movl -0x1198(%rbp), %eax
movl %eax, %esi
callq 0x792e0
xorps %xmm0, %xmm0
movsd %xmm0, 0x8(%rax)
movl -0x1194(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1194(%rbp)
jmp 0x765bd
leaq -0xb90(%rbp), %rdi
movl -0xb98(%rbp), %esi
callq 0x7c400
movl %eax, -0xb98(%rbp)
movl $0x0, -0x119c(%rbp)
movl -0x119c(%rbp), %eax
cmpl -0xb98(%rbp), %eax
jge 0x767d5
movslq -0x119c(%rbp), %rax
movl -0xb90(%rbp,%rax,4), %eax
movl %eax, -0x11a0(%rbp)
movslq -0x10(%rbp), %rsi
leaq 0x73c05(%rip), %rdi     # 0xea310
callq 0x792c0
movq %rax, %rdi
movl -0x11a0(%rbp), %eax
movl %eax, %esi
callq 0x792e0
movsd 0x8(%rax), %xmm0
movsd %xmm0, -0x11e8(%rbp)
movslq -0x10(%rbp), %rsi
leaq 0x73bd8(%rip), %rdi     # 0xea310
callq 0x792c0
movq %rax, %rdi
movl -0x11a0(%rbp), %eax
movl %eax, %esi
callq 0x792e0
movsd -0x11e8(%rbp), %xmm0
divsd 0x18(%rax), %xmm0
divsd -0x30(%rbp), %xmm0
movsd %xmm0, -0x11e0(%rbp)
movslq -0x10(%rbp), %rsi
leaq 0x73b9e(%rip), %rdi     # 0xea310
callq 0x792c0
movq %rax, %rdi
movl -0x11a0(%rbp), %eax
movl %eax, %esi
callq 0x792e0
movsd -0x11e0(%rbp), %xmm0
addsd 0x10(%rax), %xmm0
movsd %xmm0, 0x10(%rax)
movslq -0x10(%rbp), %rsi
leaq 0x73b6c(%rip), %rdi     # 0xea310
callq 0x792c0
movq %rax, %rdi
movl -0x11a0(%rbp), %eax
movl %eax, %esi
callq 0x792e0
xorps %xmm0, %xmm0
movsd %xmm0, 0x8(%rax)
movl -0x119c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x119c(%rbp)
jmp 0x766da
addq $0x11f0, %rsp           # imm = 0x11F0
popq %rbp
retq
nop