// File: readmapping[P]alfalfa/src/sparseSA.cpp
// Function: sparseSA::SMEM(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, std::vector<match_t, std::allocator<match_t>>&, int, int, int, int) const
void sparseSA::SMEM(const string &P, vector<match_t> &matches, int min_len, int maxCount, int sparseQ, int max_smem_cont) const {
  if(min_len < K) return;
  // Offset all intervals at different start points.
  int min_lenK = min_len - (sparseQ*K-1);
  interval_t mli(0,N/K-1,0); // min length interval
  interval_t xmi(0,N/K-1,0); // max match interval
  vector<intervTuple_t> intervals;
  intervals.reserve(P.length() - (min_lenK));
  for(int prefix = 0; prefix <= (int)P.length() - (min_lenK); prefix++) {
      // Right-most match used to terminate search.
      traverse_faster(P, prefix, mli, min_lenK, -1); // Traverse until minimum length matched.
      if(mli.depth > xmi.depth) xmi = mli;
      if(mli.depth <= 1) { mli.reset(N/K-1); xmi.reset(N/K-1); continue; }
      if(mli.depth >= min_lenK) {
          traverse_faster(P, prefix, xmi, P.length(), -1); // Traverse until mismatch.
          //check if we want to add this prefix to priority queue
          if(xmi.depth + prefix >= min_len){
              intervals.push_back(intervTuple_t(mli, xmi, prefix));
          }
      }
      mli.reset(N / K - 1);
      xmi.reset(N / K - 1);
      if(prefix % K == K-1) prefix += (sparseQ-1)*K;
  }
  sort(intervals.begin(),intervals.end(),compIntervTupleRev);
  vector<int> beginLong;
  vector<int> smemCount;
  beginLong.assign(P.length()+1,-1);
  smemCount.assign(P.length()+1,-1);
  //fill tables: for every RSMEM ending: make note if this position has a high number of RSMEMs.
  size_t i = 0;
  while(i < intervals.size()){
      long curSize = 0L;
      long curEnd = intervals[i].xmiEnd();
      bool foundMaxSmemCont = false;
      while(i < intervals.size() && intervals[i].xmiEnd() == curEnd){
          if(!foundMaxSmemCont || (intervals[i].prefix <= beginLong[curEnd] + K))
                curSize += intervals[i].xmi.size();
          if(!foundMaxSmemCont && curSize >= max_smem_cont){
              beginLong[intervals[i].xmiEnd()] = intervals[i].prefix;
              foundMaxSmemCont = true;
          }
          i++;
      }
      smemCount[intervals[i-1].xmiEnd()] = curSize;
  }
  i = 0;
  int curMinPos = P.length();
  int minMin_len = sparseQ > 1 ? min_len-K : min_len;
  while(i < intervals.size()){
      int curEnd = intervals[i].xmiEnd();
      //check if we need to skip all rsmems for this end position
      //do this only if there is a frequent rsmem with higher ending position and lower starting position
      bool skipEnd = smemCount[curEnd] >= maxCount || intervals[i].prefix > curMinPos+K;
      if(!skipEnd && smemCount[curEnd] >= max_smem_cont)
          curMinPos = min(curMinPos, beginLong[curEnd]);
      //iterate over this end pos
      while(i < intervals.size() && intervals[i].xmiEnd() == curEnd){
          //check if we need to collect SMEMs
          if(!skipEnd && intervals[i].prefix <= curMinPos+K && 
                  (smemCount[curEnd] < max_smem_cont || intervals[i].prefix <= beginLong[curEnd] + K )){
              //collect all smems in xmi
              //calculate stop criterium for mli
              //if xmi occurs frequent: do not calc mli
              if(smemCount[curEnd] >= max_smem_cont){// && (curPrefix + K <= beginLong[curEnd] || intervals[i].prefix > curPrefix + K)){
                  collectXmiAndMli(P, intervals[i], matches, false, 0L, 0L, minMin_len, maxCount, K*sparseQ);
              }
              else{
                  //if xmi does not occur frequent: calc mli until mem length reaches frequent smem
                  int nextEndStop = curEnd-1;
                  int nextEndPrefix = curEnd;
                  while(nextEndStop>=0 && smemCount[nextEndStop] < max_smem_cont)
                      nextEndStop--;
                  if(nextEndStop>=0)
                      nextEndPrefix = beginLong[nextEndStop];
                  collectXmiAndMli(P, intervals[i], matches, true, nextEndStop, nextEndPrefix, minMin_len, maxCount, K*sparseQ);
              }
          }
          i++;
      }
  }
}

// Assembly:
subq $0x2a8, %rsp            # imm = 0x2A8
movl 0x2b0(%rsp), %eax
movq %rdi, 0x2a0(%rsp)
movq %rsi, 0x298(%rsp)
movq %rdx, 0x290(%rsp)
movl %ecx, 0x28c(%rsp)
movl %r8d, 0x288(%rsp)
movl %r9d, 0x284(%rsp)
movq 0x2a0(%rsp), %rcx
movq %rcx, 0xf8(%rsp)
movslq 0x28c(%rsp), %rax
cmpq 0xe8(%rcx), %rax
jge 0x1ce83
jmp 0x1dae4
movq 0xf8(%rsp), %rcx
movl 0x28c(%rsp), %edx
movl 0x284(%rsp), %esi
movl 0xe8(%rcx), %eax
imull %eax, %esi
movl %edx, %eax
negl %esi
movl %esi, %edx
leal 0x1(%rax,%rdx), %eax
movl %eax, 0x280(%rsp)
movq 0x38(%rcx), %rax
movq 0xe8(%rcx), %rcx
cqto
idivq %rcx
movq %rax, %rdx
decq %rdx
xorl %ecx, %ecx
movl %ecx, 0xec(%rsp)
movl %ecx, %esi
movq %rsi, 0xe0(%rsp)
leaq 0x268(%rsp), %rdi
callq 0x1eea0
movq 0xf8(%rsp), %rdx
movq 0xe0(%rsp), %rsi
movl 0xec(%rsp), %ecx
movq 0x38(%rdx), %rax
movq 0xe8(%rdx), %rdi
cqto
idivq %rdi
movq %rax, %rdx
decq %rdx
leaq 0x250(%rsp), %rdi
callq 0x1eea0
leaq 0x238(%rsp), %rdi
movq %rdi, 0xf0(%rsp)
callq 0x20970
movq 0x298(%rsp), %rdi
callq 0x8630
movq 0xf0(%rsp), %rdi
movq %rax, %rsi
movslq 0x280(%rsp), %rax
subq %rax, %rsi
callq 0x20980
jmp 0x1cf62
movl $0x0, 0x228(%rsp)
movl 0x228(%rsp), %eax
movl %eax, 0xdc(%rsp)
movq 0x298(%rsp), %rdi
callq 0x8630
movq %rax, %rcx
movl 0xdc(%rsp), %eax
subl 0x280(%rsp), %ecx
cmpl %ecx, %eax
jg 0x1d227
movq 0xf8(%rsp), %rdi
movq 0x298(%rsp), %rsi
movl 0x228(%rsp), %edx
movl 0x280(%rsp), %r8d
leaq 0x268(%rsp), %rcx
movl $0xffffffff, %r9d       # imm = 0xFFFFFFFF
callq 0x1fc90
jmp 0x1cfd5
movl 0x278(%rsp), %eax
cmpl 0x260(%rsp), %eax
jle 0x1d02e
movq 0x268(%rsp), %rax
movq %rax, 0x250(%rsp)
movq 0x270(%rsp), %rax
movq %rax, 0x258(%rsp)
movl 0x278(%rsp), %eax
movl %eax, 0x260(%rsp)
jmp 0x1d02e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x230(%rsp)
movl %eax, 0x22c(%rsp)
jmp 0x1daec
cmpl $0x1, 0x278(%rsp)
jg 0x1d097
movq 0xf8(%rsp), %rcx
movq 0x38(%rcx), %rax
movq 0xe8(%rcx), %rcx
cqto
idivq %rcx
movq %rax, %rsi
decq %rsi
leaq 0x268(%rsp), %rdi
callq 0x20830
jmp 0x1d065
movq 0xf8(%rsp), %rcx
movq 0x38(%rcx), %rax
movq 0xe8(%rcx), %rcx
cqto
idivq %rcx
movq %rax, %rsi
decq %rsi
leaq 0x250(%rsp), %rdi
callq 0x20830
jmp 0x1d092
jmp 0x1d211
movl 0x278(%rsp), %eax
cmpl 0x280(%rsp), %eax
jl 0x1d155
movq 0x298(%rsp), %rdi
movq %rdi, 0xd0(%rsp)
movl 0x228(%rsp), %eax
movl %eax, 0xd8(%rsp)
callq 0x8630
movq 0xf8(%rsp), %rdi
movq 0xd0(%rsp), %rsi
movl 0xd8(%rsp), %edx
movl %eax, %r8d
leaq 0x250(%rsp), %rcx
movl $0xffffffff, %r9d       # imm = 0xFFFFFFFF
callq 0x1fc90
jmp 0x1d0fd
movl 0x260(%rsp), %eax
addl 0x228(%rsp), %eax
cmpl 0x28c(%rsp), %eax
jl 0x1d153
movl 0x228(%rsp), %ecx
leaq 0x1f0(%rsp), %rdi
leaq 0x268(%rsp), %rsi
leaq 0x250(%rsp), %rdx
callq 0x20af0
jmp 0x1d13a
leaq 0x238(%rsp), %rdi
leaq 0x1f0(%rsp), %rsi
callq 0x20ac0
jmp 0x1d151
jmp 0x1d153
jmp 0x1d155
movq 0xf8(%rsp), %rcx
movq 0x38(%rcx), %rax
movq 0xe8(%rcx), %rcx
cqto
idivq %rcx
movq %rax, %rsi
decq %rsi
leaq 0x268(%rsp), %rdi
callq 0x20830
jmp 0x1d182
movq 0xf8(%rsp), %rcx
movq 0x38(%rcx), %rax
movq 0xe8(%rcx), %rcx
cqto
idivq %rcx
movq %rax, %rsi
decq %rsi
leaq 0x250(%rsp), %rdi
callq 0x20830
jmp 0x1d1af
movq 0xf8(%rsp), %rcx
movslq 0x228(%rsp), %rax
cqto
idivq 0xe8(%rcx)
movq 0xf8(%rsp), %rax
movq 0xe8(%rax), %rax
subq $0x1, %rax
cmpq %rax, %rdx
jne 0x1d20f
movq 0xf8(%rsp), %rax
movl 0x284(%rsp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
imulq 0xe8(%rax), %rcx
movslq 0x228(%rsp), %rax
addq %rcx, %rax
movl %eax, 0x228(%rsp)
jmp 0x1d211
movl 0x228(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x228(%rsp)
jmp 0x1cf6d
leaq 0x238(%rsp), %rdi
movq %rdi, 0xc8(%rsp)
callq 0x20b90
movq 0xc8(%rsp), %rdi
movq %rax, 0x1e8(%rsp)
callq 0x20bc0
movq %rax, 0x1e0(%rsp)
movq 0x1e8(%rsp), %rdi
movq 0x1e0(%rsp), %rsi
leaq -0x6ff0(%rip), %rdx     # 0x16280
callq 0x20b40
jmp 0x1d277
leaq 0x1c8(%rsp), %rdi
movq %rdi, 0xc0(%rsp)
callq 0xe760
leaq 0x1b0(%rsp), %rdi
callq 0xe760
movq 0x298(%rsp), %rdi
callq 0x8630
movq 0xc0(%rsp), %rdi
movq %rax, %rsi
incq %rsi
movl $0xffffffff, 0x1ac(%rsp) # imm = 0xFFFFFFFF
leaq 0x1ac(%rsp), %rdx
callq 0x20bf0
jmp 0x1d2ce
movq 0x298(%rsp), %rdi
callq 0x8630
movq %rax, %rsi
incq %rsi
movl $0xffffffff, 0x1a8(%rsp) # imm = 0xFFFFFFFF
leaq 0x1b0(%rsp), %rdi
leaq 0x1a8(%rsp), %rdx
callq 0x20bf0
jmp 0x1d303
movq $0x0, 0x1a0(%rsp)
movq 0x1a0(%rsp), %rax
movq %rax, 0xb8(%rsp)
leaq 0x238(%rsp), %rdi
callq 0x20c20
movq %rax, %rcx
movq 0xb8(%rsp), %rax
cmpq %rcx, %rax
jae 0x1d5ed
movq $0x0, 0x198(%rsp)
movq 0x1a0(%rsp), %rsi
leaq 0x238(%rsp), %rdi
callq 0x20c40
movq %rax, %rdi
callq 0x20c60
movl %eax, 0xb4(%rsp)
jmp 0x1d372
movl 0xb4(%rsp), %eax
cltq
movq %rax, 0x190(%rsp)
movb $0x0, 0x18f(%rsp)
movq 0x1a0(%rsp), %rax
movq %rax, 0xa8(%rsp)
leaq 0x238(%rsp), %rdi
callq 0x20c20
movq 0xa8(%rsp), %rcx
movq %rax, %rdx
xorl %eax, %eax
cmpq %rdx, %rcx
movb %al, 0xb3(%rsp)
jae 0x1d402
movq 0x1a0(%rsp), %rsi
leaq 0x238(%rsp), %rdi
callq 0x20c40
movq %rax, %rdi
callq 0x20c60
movl %eax, 0xa4(%rsp)
jmp 0x1d3e7
movl 0xa4(%rsp), %eax
cltq
cmpq 0x190(%rsp), %rax
sete %al
movb %al, 0xb3(%rsp)
movb 0xb3(%rsp), %al
testb $0x1, %al
jne 0x1d412
jmp 0x1d59d
testb $0x1, 0x18f(%rsp)
je 0x1d474
movq 0x1a0(%rsp), %rsi
leaq 0x238(%rsp), %rdi
callq 0x20c40
movslq 0x30(%rax), %rax
movq %rax, 0x98(%rsp)
movq 0x190(%rsp), %rsi
leaq 0x1c8(%rsp), %rdi
callq 0x1eb90
movq 0xf8(%rsp), %rdx
movq %rax, %rcx
movq 0x98(%rsp), %rax
movslq (%rcx), %rcx
addq 0xe8(%rdx), %rcx
cmpq %rcx, %rax
jg 0x1d4ec
movq 0x1a0(%rsp), %rsi
leaq 0x238(%rsp), %rdi
callq 0x20c40
movq %rax, %rdi
addq $0x18, %rdi
callq 0x1fbb0
movq %rax, 0x90(%rsp)
jmp 0x1d49f
movq 0x90(%rsp), %rax
addq 0x198(%rsp), %rax
movq %rax, 0x198(%rsp)
jmp 0x1d4ec
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x230(%rsp)
movl %eax, 0x22c(%rsp)
leaq 0x1b0(%rsp), %rdi
callq 0xe770
leaq 0x1c8(%rsp), %rdi
callq 0xe770
jmp 0x1daec
testb $0x1, 0x18f(%rsp)
jne 0x1d584
movq 0x198(%rsp), %rax
movslq 0x2b0(%rsp), %rcx
cmpq %rcx, %rax
jl 0x1d584
movq 0x1a0(%rsp), %rsi
leaq 0x238(%rsp), %rdi
movq %rdi, 0x80(%rsp)
callq 0x20c40
movq 0x80(%rsp), %rdi
movl 0x30(%rax), %eax
movl %eax, 0x88(%rsp)
movq 0x1a0(%rsp), %rsi
callq 0x20c40
movq %rax, %rdi
callq 0x20c60
movl %eax, 0x8c(%rsp)
jmp 0x1d55c
movl 0x8c(%rsp), %eax
movslq %eax, %rsi
leaq 0x1c8(%rsp), %rdi
callq 0x1eb90
movl 0x88(%rsp), %ecx
movl %ecx, (%rax)
movb $0x1, 0x18f(%rsp)
movq 0x1a0(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x1a0(%rsp)
jmp 0x1d38b
movl 0x198(%rsp), %eax
movl %eax, 0x78(%rsp)
movq 0x1a0(%rsp), %rsi
decq %rsi
leaq 0x238(%rsp), %rdi
callq 0x20c40
movq %rax, %rdi
callq 0x20c60
movl %eax, 0x7c(%rsp)
jmp 0x1d5ce
movl 0x7c(%rsp), %eax
movslq %eax, %rsi
leaq 0x1b0(%rsp), %rdi
callq 0x1eb90
movl 0x78(%rsp), %ecx
movl %ecx, (%rax)
jmp 0x1d30f
movq $0x0, 0x1a0(%rsp)
movq 0x298(%rsp), %rdi
callq 0x8630
movl %eax, 0x188(%rsp)
cmpl $0x1, 0x284(%rsp)
jle 0x1d635
movq 0xf8(%rsp), %rcx
movslq 0x28c(%rsp), %rax
subq 0xe8(%rcx), %rax
movq %rax, 0x70(%rsp)
jmp 0x1d642
movslq 0x28c(%rsp), %rax
movq %rax, 0x70(%rsp)
movq 0x70(%rsp), %rax
movl %eax, 0x184(%rsp)
movq 0x1a0(%rsp), %rax
movq %rax, 0x68(%rsp)
leaq 0x238(%rsp), %rdi
callq 0x20c20
movq %rax, %rcx
movq 0x68(%rsp), %rax
cmpq %rcx, %rax
jae 0x1dabd
movq 0x1a0(%rsp), %rsi
leaq 0x238(%rsp), %rdi
callq 0x20c40
movq %rax, %rdi
callq 0x20c60
movl %eax, 0x64(%rsp)
jmp 0x1d69c
movl 0x64(%rsp), %eax
movl %eax, 0x180(%rsp)
movslq 0x180(%rsp), %rsi
leaq 0x1b0(%rsp), %rdi
callq 0x1eb90
movl (%rax), %ecx
movb $0x1, %al
cmpl 0x288(%rsp), %ecx
movb %al, 0x63(%rsp)
jge 0x1d707
movq 0x1a0(%rsp), %rsi
leaq 0x238(%rsp), %rdi
callq 0x20c40
movq 0xf8(%rsp), %rdx
movslq 0x30(%rax), %rax
movslq 0x188(%rsp), %rcx
addq 0xe8(%rdx), %rcx
cmpq %rcx, %rax
setg %al
movb %al, 0x63(%rsp)
movb 0x63(%rsp), %al
andb $0x1, %al
movb %al, 0x17f(%rsp)
testb $0x1, 0x17f(%rsp)
jne 0x1d778
movslq 0x180(%rsp), %rsi
leaq 0x1b0(%rsp), %rdi
callq 0x1eb90
movl (%rax), %eax
cmpl 0x2b0(%rsp), %eax
jl 0x1d778
movslq 0x180(%rsp), %rsi
leaq 0x1c8(%rsp), %rdi
callq 0x1eb90
movq %rax, %rsi
leaq 0x188(%rsp), %rdi
callq 0xc080
movq %rax, 0x58(%rsp)
jmp 0x1d76a
movq 0x58(%rsp), %rax
movl (%rax), %eax
movl %eax, 0x188(%rsp)
jmp 0x1d77a
movq 0x1a0(%rsp), %rax
movq %rax, 0x48(%rsp)
leaq 0x238(%rsp), %rdi
callq 0x20c20
movq 0x48(%rsp), %rcx
movq %rax, %rdx
xorl %eax, %eax
cmpq %rdx, %rcx
movb %al, 0x57(%rsp)
jae 0x1d7dc
movq 0x1a0(%rsp), %rsi
leaq 0x238(%rsp), %rdi
callq 0x20c40
movq %rax, %rdi
callq 0x20c60
movl %eax, 0x44(%rsp)
jmp 0x1d7ca
movl 0x44(%rsp), %eax
cmpl 0x180(%rsp), %eax
sete %al
movb %al, 0x57(%rsp)
movb 0x57(%rsp), %al
testb $0x1, %al
jne 0x1d7e9
jmp 0x1dab8
testb $0x1, 0x17f(%rsp)
jne 0x1da9f
movq 0x1a0(%rsp), %rsi
leaq 0x238(%rsp), %rdi
callq 0x20c40
movq 0xf8(%rsp), %rdx
movslq 0x30(%rax), %rax
movslq 0x188(%rsp), %rcx
addq 0xe8(%rdx), %rcx
cmpq %rcx, %rax
jg 0x1da9f
movslq 0x180(%rsp), %rsi
leaq 0x1b0(%rsp), %rdi
callq 0x1eb90
movl (%rax), %eax
cmpl 0x2b0(%rsp), %eax
jl 0x1d8a6
movq 0x1a0(%rsp), %rsi
leaq 0x238(%rsp), %rdi
callq 0x20c40
movslq 0x30(%rax), %rax
movq %rax, 0x38(%rsp)
movslq 0x180(%rsp), %rsi
leaq 0x1c8(%rsp), %rdi
callq 0x1eb90
movq 0xf8(%rsp), %rdx
movq %rax, %rcx
movq 0x38(%rsp), %rax
movslq (%rcx), %rcx
addq 0xe8(%rdx), %rcx
cmpq %rcx, %rax
jg 0x1da9f
movslq 0x180(%rsp), %rsi
leaq 0x1b0(%rsp), %rdi
callq 0x1eb90
movl (%rax), %eax
cmpl 0x2b0(%rsp), %eax
jl 0x1d962
movq 0x298(%rsp), %rax
movq %rax, 0x30(%rsp)
movq 0x1a0(%rsp), %rsi
leaq 0x238(%rsp), %rdi
callq 0x20c40
movq %rax, %rsi
leaq 0x140(%rsp), %rdi
callq 0x20c80
jmp 0x1d8fe
movq 0x30(%rsp), %rsi
movq 0xf8(%rsp), %rdi
movq 0x290(%rsp), %rcx
movl 0x184(%rsp), %edx
movl 0x288(%rsp), %r8d
movl 0xe8(%rdi), %r9d
movl 0x284(%rsp), %eax
imull %eax, %r9d
movq %rsp, %rax
movl %r9d, 0x18(%rax)
movl %r8d, 0x10(%rax)
movl %edx, 0x8(%rax)
movl $0x0, (%rax)
leaq 0x140(%rsp), %rdx
xorl %r9d, %r9d
movl %r9d, %r8d
callq 0x1b220
jmp 0x1d95d
jmp 0x1da9d
movl 0x180(%rsp), %eax
subl $0x1, %eax
movl %eax, 0x13c(%rsp)
movl 0x180(%rsp), %eax
movl %eax, 0x138(%rsp)
xorl %eax, %eax
cmpl $0x0, 0x13c(%rsp)
movb %al, 0x2f(%rsp)
jl 0x1d9b6
movslq 0x13c(%rsp), %rsi
leaq 0x1b0(%rsp), %rdi
callq 0x1eb90
movl (%rax), %eax
cmpl 0x2b0(%rsp), %eax
setl %al
movb %al, 0x2f(%rsp)
movb 0x2f(%rsp), %al
testb $0x1, %al
jne 0x1d9c0
jmp 0x1d9d3
movl 0x13c(%rsp), %eax
addl $-0x1, %eax
movl %eax, 0x13c(%rsp)
jmp 0x1d981
cmpl $0x0, 0x13c(%rsp)
jl 0x1d9fb
movslq 0x13c(%rsp), %rsi
leaq 0x1c8(%rsp), %rdi
callq 0x1eb90
movl (%rax), %eax
movl %eax, 0x138(%rsp)
movq 0x298(%rsp), %rax
movq %rax, 0x20(%rsp)
movq 0x1a0(%rsp), %rsi
leaq 0x238(%rsp), %rdi
callq 0x20c40
movq %rax, %rsi
leaq 0x100(%rsp), %rdi
callq 0x20c80
jmp 0x1da2f
movq 0x20(%rsp), %rsi
movq 0xf8(%rsp), %rdi
movq 0x290(%rsp), %rcx
movl 0x13c(%rsp), %r9d
movl 0x138(%rsp), %edx
movl 0x184(%rsp), %r8d
movl 0x288(%rsp), %r10d
movl 0xe8(%rdi), %r11d
movl 0x284(%rsp), %eax
imull %eax, %r11d
movq %rsp, %rax
movl %r11d, 0x18(%rax)
movl %r10d, 0x10(%rax)
movl %r8d, 0x8(%rax)
movl %edx, (%rax)
leaq 0x100(%rsp), %rdx
movl $0x1, %r8d
callq 0x1b220
jmp 0x1da9b
jmp 0x1da9d
jmp 0x1da9f
movq 0x1a0(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x1a0(%rsp)
jmp 0x1d77a
jmp 0x1d64e
leaq 0x1b0(%rsp), %rdi
callq 0xe770
leaq 0x1c8(%rsp), %rdi
callq 0xe770
leaq 0x238(%rsp), %rdi
callq 0x20cd0
addq $0x2a8, %rsp            # imm = 0x2A8
retq
leaq 0x238(%rsp), %rdi
callq 0x20cd0
movq 0x230(%rsp), %rdi
callq 0x8730
nopw %cs:(%rax,%rax)