// File: /workspace/github_c_makefile_star2_O1/johsteffens[P]beth/lib/bcore/bcore.xo.c
// Function: x_hmap_tp_test_selftest
void x_hmap_tp_test_selftest( void )
{
    // bcore_x_hmap.x:54:5
    BLM_INIT_LEVEL(0);
    x_sink* log = x_sink_stdout();
    x_sink_push_fa(log,"#p80'='{== #<sc_t>_selftest }\n", bnameof( ((tp_t)(TYPEOF_x_hmap_tp_test)) ) );
    
    sz_t cycles = 200000;
    
    x_hmap_tp_test_map_s* map    = ((x_hmap_tp_test_map_s*)BLM_LEVEL_T_PUSH(0,x_hmap_tp_test_map_s,x_hmap_tp_test_map_s_create()));
    x_hmap_tp_test_kv_arr_s* kv_arr = ((x_hmap_tp_test_kv_arr_s*)BLM_LEVEL_T_PUSH(0,x_hmap_tp_test_kv_arr_s,x_hmap_tp_test_kv_arr_s_create()));
    x_array_set_space(((x_array*)(kv_arr)),cycles );
    
    clock_t time = clock();
    x_sink_push_fa(log,"Mixed access: " );
    
    x_hmap_tp_test_val_s mval;BLM_T_INIT_SPUSH(x_hmap_tp_test_val_s, &mval);;
    
    {
        u3_t rval1 = 1;
        u3_t rval2 = 12345;
        for(sz_t i = 0; i < cycles; i++ )
        {
            rval1 = bcore_lcg00_u3( rval1 );
            rval2 = bcore_lcg00_u3( rval2 );
            x_hmap_tp_test_kv_s* kv = ((x_hmap_tp_test_kv_s*)(x_array_push(((x_array*)(kv_arr)))));
            kv->key = ( tp_t )rval1;
            kv->val = rval2;
            mval.val = kv->val;
            x_hmap_tp_set_c(((x_hmap_tp*)(map)),kv->key,((const x_inst*)(&( mval ))));
    
            // retrieve
            rval1 = bcore_lcg00_u3( rval1 );
            kv = (&(kv_arr->data[ rval1 % kv_arr->size ]));
    
            u3_t val = ((const x_hmap_tp_test_val_s*)(x_hmap_tp_c_get(((const x_hmap_tp*)(map)),kv->key )))->val;
            if( kv->val != val ) ERR_fa( "value mismatch (#<u3_t> vs #<u3_t>)", kv->val, val );
    
            // delete
            rval1 = bcore_lcg00_u3( rval1 );
            if( ( ( rval1 >> 10 ) & 1 ) == 1 )
            {
                rval1 = bcore_lcg00_u3( rval1 );
                sz_t idx = rval1 % kv_arr->size;
                const x_hmap_tp_test_kv_s* kv =&( kv_arr->data[ idx ]);
                if( !((const x_hmap_tp_test_val_s*)(x_hmap_tp_c_get(((const x_hmap_tp*)(map)),kv->key ))) ) ERR_fa( "key #<tp_t> not found", kv->key );
                x_hmap_tp_remove(((x_hmap_tp*)(map)),kv->key );
                if( ((const x_hmap_tp_test_val_s*)(x_hmap_tp_c_get(((const x_hmap_tp*)(map)),kv->key ))) )  ERR_fa( "deleted key #<tp_t> still exists", kv->key );
                kv_arr->data[ idx ] = kv_arr->data[ kv_arr->size - 1 ];
                x_array_set_size(((x_array*)(kv_arr)),kv_arr->size - 1 );
            }
        }
    }
    
    time = clock() - time;
    x_sink_push_fa(log,"#<f3_t>s\n", ( f3_t )time/CLOCKS_PER_SEC );
    x_sink_push_st_d(log,x_hmap_tp_test_map_s_create_st_status(map) );
    
    time = clock();
    const x_hmap_tp_test_map_s* map_cloned = ((x_hmap_tp_test_map_s*)BLM_LEVEL_T_PUSH(0,x_hmap_tp_test_map_s,x_hmap_tp_test_map_s_clone(map)));
    time = clock() - time;
    x_sink_push_fa(log,"Clone .......... #<f3_t>s\n", ( f3_t )time/CLOCKS_PER_SEC );
    
    time = clock();
    if( bcore_compare_aware( map, map_cloned ) != 0 )
    {
        ERR( "comparison failed:\n%s", bcore_diff_aware( map, map_cloned )->sc );
    }
    
    time = clock() - time;
    x_sink_push_fa(log,"Comparison ..... #<f3_t>s\n", ( f3_t )time/CLOCKS_PER_SEC );
    
    {BLM_INIT_LEVEL(1);
        time = clock();
        x_hmap_tp_test_map_s* map_trans = ((x_hmap_tp_test_map_s*)BLM_LEVEL_T_PUSH(1,x_hmap_tp_test_map_s,x_hmap_tp_test_map_s_create()));
        BLM_TRY_EXIT(x_stamp_set_sr(((x_stamp*)(map_trans)),btypeof( "map" ), x_stamp_c_get_sr(((x_stamp*)(map)),btypeof( "map" ) ) ))
        time = clock() - time;
        x_sink_push_fa(log,"Stamp-assign ... #<f3_t>s\n", ( f3_t )time/CLOCKS_PER_SEC );
        time = clock();
        sz_t map_size = x_hmap_tp_size(((const x_hmap_tp*)(map)));
        for(uz_t i = 0; i < map_size; i++ )
        {
            tp_t key = x_hmap_tp_idx_key(((const x_hmap_tp*)(map)),i );
            if( key != 0 )
            {
                ASSERT( x_hmap_tp_exists(((const x_hmap_tp*)(map_trans)),key ) );
                ASSERT( ((const x_hmap_tp_test_val_s*)(x_hmap_tp_c_get(((const x_hmap_tp*)(map)),key )))->val == ((const x_hmap_tp_test_val_s*)(x_hmap_tp_c_get(((const x_hmap_tp*)(map_trans)),key )))->val );
            }
        }
        time = clock() - time;
        x_sink_push_fa(log,"verify assign .. #<f3_t>s\n", ( f3_t )time/CLOCKS_PER_SEC );
    BLM_DOWN();}
    
    {BLM_INIT_LEVEL(1);
        time = clock();
        x_hmap_tp_test_map_s* map_trans = ((x_hmap_tp_test_map_s*)BLM_LEVEL_T_PUSH(1,x_hmap_tp_test_map_s,x_hmap_tp_test_map_s_create()));
        st_s* buf = st_s_create();
        x_bbml_to_sink(((const x_bbml*)(map)),((x_sink*)(buf )));
        BLM_TRY_EXIT(x_bbml_from_source(((x_bbml*)(map_trans)),((x_source*)BLM_LEVEL_A_PUSH(1,x_source_create_from_st_d(buf ))) ))
        time = clock() - time;
        x_sink_push_fa(log,"BBML Transfer .. #<f3_t>s\n", ( f3_t )time/CLOCKS_PER_SEC );
        time = clock();
        sz_t map_size = x_hmap_tp_size(((const x_hmap_tp*)(map)));
        for(uz_t i = 0; i < map_size; i++ )
        {
            tp_t key = x_hmap_tp_idx_key(((const x_hmap_tp*)(map)),i );
            if( key != 0 )
            {
                ASSERT( x_hmap_tp_exists(((const x_hmap_tp*)(map_trans)),key ) );
                ASSERT( ((const x_hmap_tp_test_val_s*)(x_hmap_tp_c_get(((const x_hmap_tp*)(map)),key )))->val == ((const x_hmap_tp_test_val_s*)(x_hmap_tp_c_get(((const x_hmap_tp*)(map_trans)),key )))->val );
            }
        }
        time = clock() - time;
        x_sink_push_fa(log,"verify transfer  #<f3_t>s\n", ( f3_t )time/CLOCKS_PER_SEC );
    BLM_DOWN();}
    
    time = clock();
    x_sink_push_fa(log,"\nRead-access of #<sz_t> keys: ", kv_arr->size );
    uz_t read_cycles = 20;
    for(uz_t j = 0; j < read_cycles; j++ )
    {
        for(uz_t i = 0; i < kv_arr->size; i++ )
        {
            u3_t val = ((const x_hmap_tp_test_val_s*)(x_hmap_tp_c_get(((const x_hmap_tp*)(map)),kv_arr->data[ i ].key )))->val;
            if( val != kv_arr->data[ i ].val ) ERR_fa( "value mismatch (#<u3_t> vs #<u3_t>)", val, kv_arr->data[ i ].val );
        }
    }
    time = clock() - time;
    x_sink_push_fa(log,"(#<f3_t> per access)\n", ( ( f3_t )time/CLOCKS_PER_SEC ) / ( kv_arr->size * read_cycles ) );
    
    x_sink_push_fa(log,"\n" );
    x_sink_push_fa(log,"Removal: " );
    time = clock();
    while( kv_arr->size )
    {
        const x_hmap_tp_test_kv_s* kv =&( kv_arr->data[ kv_arr->size - 1 ]);
        if( !((const x_hmap_tp_test_val_s*)(x_hmap_tp_c_get(((const x_hmap_tp*)(map)),kv->key ))) ) ERR_fa( "key #<tp_t> not found", kv->key );
        x_hmap_tp_remove(((x_hmap_tp*)(map)),kv->key );
        if( ((const x_hmap_tp_test_val_s*)(x_hmap_tp_c_get(((const x_hmap_tp*)(map)),kv->key ))) ) ERR_fa( "deleted key #<tp_t> still exists", kv->key );
        x_array_set_size(((x_array*)(kv_arr)),kv_arr->size - 1 );
    }
    time = clock() - time;
    x_sink_push_fa(log,"(#<f3_t>s)\n", ( f3_t )time/CLOCKS_PER_SEC );
    x_sink_push_st_d(log,x_hmap_tp_test_map_s_create_st_status(map) );
    x_sink_push_fa(log,"#r80{=}\n" );
    BLM_DOWN();
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xe8, %rsp
movabsq $-0x6834659aae9abc39, %rbx # imm = 0x97CB9A65516543C7
leaq 0xff4eb(%rip), %rax     # 0x1a8dd0
movq (%rax), %rsi
leaq 0xb8(%rsp), %rdi
movq %rdi, 0x40(%rsp)
callq 0xe0431
movq 0x40(%rsp), %r13
movq $0x0, 0x10(%r13)
leaq 0xff4da(%rip), %rax     # 0x1a8de8
movq (%rax), %r15
movabsq $-0x742a684e9742d474, %rdi # imm = 0x8BD597B168BD2B8C
callq 0xe0cbc
leaq 0x9b0b1(%rip), %rsi     # 0x1449d8
movq %r15, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x5afab
callq 0xa95ba
movq %r13, %rdi
xorl %esi, %esi
movq %rbx, %rdx
movq %rax, %rcx
callq 0xe0676
movq %rax, %r14
callq 0xa8ccc
movabsq $-0x2dd2b458a7f76c66, %rdx # imm = 0xD22D4BA75808939A
movq %r13, %rdi
xorl %esi, %esi
movq %rax, %rcx
callq 0xe0676
movq %rax, 0x20(%rsp)
movq (%rax), %rbx
leaq 0xff4a9(%rip), %rdx     # 0x1a8e20
movl (%rdx), %eax
cltq
leaq (%rax,%rax,2), %rax
movq 0x20(%rdx,%rax,8), %rcx
movq 0x18(%rdx,%rax,8), %rdx
andq %rbx, %rdx
shlq $0x4, %rdx
leaq (%rcx,%rdx), %rax
movq (%rcx,%rdx), %rdx
movl $0x8, %ecx
cmpq %rbx, %rdx
je 0xa99d0
movq 0x10(%rax), %rdx
movl $0x18, %ecx
cmpq %rbx, %rdx
je 0xa99d0
movq 0x20(%rax), %rdx
movl $0x28, %ecx
cmpq %rbx, %rdx
je 0xa99d0
movq 0x30(%rax), %rdx
movl $0x38, %ecx
cmpq %rbx, %rdx
jne 0xaa694
movq (%rax,%rcx), %r12
movq %r15, 0x38(%rsp)
testq %r12, %r12
jne 0xa9a05
movabsq $-0x5073d588c3beb52e, %rdi # imm = 0xAF8C2A773C414AD2
movq %rbx, %rsi
callq 0xf3f85
movq %rax, %r12
leaq 0xff426(%rip), %rdi     # 0x1a8e20
movq %rbx, %rsi
movq %rax, %rdx
callq 0x12128c
movabsq $0x1c140000000001cd, %r15 # imm = 0x1C140000000001CD
movl $0x30d40, %edx          # imm = 0x30D40
movq %r12, %rdi
movq 0x20(%rsp), %rbx
movq %rbx, %rsi
callq 0xf6359
callq 0xd340
movq %rax, 0x50(%rsp)
leaq 0x9afc2(%rip), %rsi     # 0x1449f7
movq 0x38(%rsp), %rdi
xorl %eax, %eax
callq 0x5afab
leaq 0x60(%rsp), %r12
movq %r12, %rdi
callq 0xa8f01
movabsq $0x33f73e3560adac2, %rsi # imm = 0x33F73E3560ADAC2
movq %r13, 0x48(%rsp)
movq %r13, %rdi
movq %r15, %r13
movl $0x30d40, %r15d         # imm = 0x30D40
movq %r12, %rdx
callq 0xe06ab
movl $0x3039, %r12d          # imm = 0x3039
movl $0x1, %ebp
movq %r14, 0x28(%rsp)
imulq %r13, %rbp
incq %rbp
imulq %r13, %r12
incq %r12
movq (%rbx), %rsi
movq %rbx, %rdi
callq 0x5b7f0
movq %rbp, (%rax)
movq %r12, 0x8(%rax)
movq %r12, 0x18(%rsp)
movq %r12, 0x68(%rsp)
movq %r14, %rdi
callq 0xa8289
leaq 0x8(%rax), %rdi
movq %rbp, %rsi
leaq 0x60(%rsp), %rdx
callq 0xd66b8
imulq %r13, %rbp
incq %rbp
movq %r14, %rdi
movq 0x8(%rbx), %r14
movq %rbp, %rax
xorl %edx, %edx
divq 0x10(%rbx)
movq %rdx, %rbx
shlq $0x4, %rbx
movq (%r14,%rbx), %r12
callq 0xa8396
leaq 0x8(%rax), %rdi
movq %r12, %rsi
callq 0xd63b5
movq (%rax), %rax
movq 0x8(%rax), %r9
movq 0x8(%r14,%rbx), %r8
cmpq %r9, %r8
je 0xa9b29
leaq 0x9aef7(%rip), %rdi     # 0x144a06
leaq 0x989a0(%rip), %rsi     # 0x1424b6
movl $0x240d, %edx           # imm = 0x240D
leaq 0x9aefc(%rip), %rcx     # 0x144a1e
xorl %eax, %eax
callq 0xc825d
imulq %r13, %rbp
incq %rbp
btl $0xa, %ebp
jb 0xa9b45
movq 0x28(%rsp), %r14
movq 0x20(%rsp), %rbx
jmp 0xa9ce9
movq %r15, 0x58(%rsp)
movq %r13, %r15
imulq %r13, %rbp
incq %rbp
movq %rbp, %rax
xorl %edx, %edx
movq 0x20(%rsp), %rcx
divq 0x10(%rcx)
movq %rdx, %rbx
movq 0x8(%rcx), %r13
shlq $0x4, %rbx
movq (%r13,%rbx), %r12
addq %rbx, %r13
movq 0x28(%rsp), %r14
movq %r14, %rdi
callq 0xa8396
leaq 0x8(%rax), %rdi
movq %r12, %rsi
callq 0xd63b5
testq %rax, %rax
je 0xa9b99
cmpq $0x0, (%rax)
jne 0xa9bbe
movq (%r13), %r8
leaq 0x9ae62(%rip), %rdi     # 0x144a06
leaq 0x9890b(%rip), %rsi     # 0x1424b6
movl $0x2416, %edx           # imm = 0x2416
leaq 0x9ae8b(%rip), %rcx     # 0x144a42
xorl %eax, %eax
callq 0xc825d
movq (%r13), %r12
movq %r14, %rdi
callq 0xa8289
leaq 0x8(%rax), %rdi
movq %r12, %rsi
callq 0xd6790
movq (%r13), %r12
movq %r14, %rdi
callq 0xa8396
leaq 0x8(%rax), %rdi
movq %r12, %rsi
callq 0xd63b5
testq %rax, %rax
je 0xa9c1e
cmpq $0x0, (%rax)
je 0xa9c1e
movq (%r13), %r8
leaq 0x9ae02(%rip), %rdi     # 0x144a06
leaq 0x988ab(%rip), %rsi     # 0x1424b6
movl $0x2418, %edx           # imm = 0x2418
leaq 0x9ae41(%rip), %rcx     # 0x144a58
xorl %eax, %eax
callq 0xc825d
movq 0x20(%rsp), %rdx
movq 0x8(%rdx), %rax
movq 0x10(%rdx), %rcx
shlq $0x4, %rcx
movups -0x10(%rax,%rcx), %xmm0
movups %xmm0, (%rax,%rbx)
movq (%rdx), %r12
movq 0x10(%rdx), %rbx
leaq 0xff1da(%rip), %rdx     # 0x1a8e20
movl (%rdx), %eax
cltq
leaq (%rax,%rax,2), %rax
movq 0x20(%rdx,%rax,8), %rcx
movq 0x18(%rdx,%rax,8), %rdx
andq %r12, %rdx
shlq $0x4, %rdx
leaq (%rcx,%rdx), %rax
movq (%rcx,%rdx), %rdx
movl $0x8, %ecx
cmpq %r12, %rdx
je 0xa9c9b
movq 0x10(%rax), %rdx
movl $0x18, %ecx
cmpq %r12, %rdx
je 0xa9c9b
movq 0x20(%rax), %rdx
movl $0x28, %ecx
cmpq %r12, %rdx
je 0xa9c9b
movq 0x30(%rax), %rdx
movl $0x38, %ecx
cmpq %r12, %rdx
jne 0xa9cf9
movq (%rax,%rcx), %r13
testq %r13, %r13
jne 0xa9ccb
movabsq $-0x5073d588c3beb52e, %rdi # imm = 0xAF8C2A773C414AD2
movq %r12, %rsi
callq 0xf3f85
movq %rax, %r13
leaq 0xff160(%rip), %rdi     # 0x1a8e20
movq %r12, %rsi
movq %rax, %rdx
callq 0x12128c
decq %rbx
movq %r13, %rdi
movq 0x20(%rsp), %rsi
movq %rbx, %rdx
movq %rsi, %rbx
callq 0xf69d8
movq %r15, %r13
movq 0x58(%rsp), %r15
movq 0x18(%rsp), %r12
decq %r15
jne 0xa9a81
jmp 0xa9cfe
xorl %r13d, %r13d
jmp 0xa9c9f
callq 0xd340
subq 0x50(%rsp), %rax
xorps %xmm0, %xmm0
cvtsi2sd %rax, %xmm0
divsd 0x8e358(%rip), %xmm0    # 0x138070
leaq 0x9aef4(%rip), %rsi     # 0x144c13
movq 0x38(%rsp), %r15
movq %r15, %rdi
movb $0x1, %al
callq 0x5afab
movq %r14, %rdi
callq 0xa97ef
movq %rax, %rbx
movq (%r15), %r12
leaq 0xffd6d(%rip), %rdx     # 0x1a9ab0
movl (%rdx), %eax
cltq
leaq (%rax,%rax,2), %rax
movq 0x20(%rdx,%rax,8), %rcx
movq 0x18(%rdx,%rax,8), %rdx
andq %r12, %rdx
shlq $0x4, %rdx
leaq (%rcx,%rdx), %rax
movq (%rcx,%rdx), %rdx
movl $0x8, %ecx
cmpq %r12, %rdx
je 0xa9d9c
movq 0x10(%rax), %rdx
movl $0x18, %ecx
cmpq %r12, %rdx
je 0xa9d9c
movq 0x20(%rax), %rdx
movl $0x28, %ecx
cmpq %r12, %rdx
je 0xa9d9c
movq 0x30(%rax), %rdx
movl $0x38, %ecx
cmpq %r12, %rdx
jne 0xaa69c
movq (%rax,%rcx), %r13
movq 0x48(%rsp), %rbp
testq %r13, %r13
jne 0xa9dd1
movabsq $0x5ea8cabb93ff3b7e, %rdi # imm = 0x5EA8CABB93FF3B7E
movq %r12, %rsi
callq 0xf3f85
movq %rax, %r13
leaq 0xffcea(%rip), %rdi     # 0x1a9ab0
movq %r12, %rsi
movq %rax, %rdx
callq 0x12128c
movq %r13, %rdi
movq %r15, %rsi
movq %rbx, %rdx
callq 0x1090f0
callq 0xd340
movq %rax, %r12
movq %r14, %rdi
callq 0xa972b
movq %rbp, %rdi
xorl %esi, %esi
movabsq $-0x6834659aae9abc39, %rdx # imm = 0x97CB9A65516543C7
movq %rax, %rcx
callq 0xe0676
movq %rax, %rbx
callq 0xd340
subq %r12, %rax
xorps %xmm0, %xmm0
cvtsi2sd %rax, %xmm0
divsd 0x8e24f(%rip), %xmm0    # 0x138070
leaq 0x9ac51(%rip), %rsi     # 0x144a79
movq %r15, %rdi
movb $0x1, %al
callq 0x5afab
callq 0xd340
movq %rax, %r12
movq %r14, %rdi
movq %rbx, %rsi
callq 0xfe9cd
testl %eax, %eax
je 0xa9e79
movq %r14, %rdi
movq %rbx, %rsi
callq 0xff4f5
movq 0x8(%rax), %r8
leaq 0x9aba7(%rip), %rdi     # 0x144a06
leaq 0x98650(%rip), %rsi     # 0x1424b6
leaq 0x9ac27(%rip), %rcx     # 0x144a94
movl $0x242b, %edx           # imm = 0x242B
xorl %eax, %eax
callq 0xc80f6
movabsq $0x80f5919176d2d91, %rbx # imm = 0x80F5919176D2D91
callq 0xd340
subq %r12, %rax
xorps %xmm0, %xmm0
cvtsi2sd %rax, %xmm0
divsd 0x8e1d5(%rip), %xmm0    # 0x138070
leaq 0x9ac08(%rip), %rsi     # 0x144aaa
movq %r15, %rdi
movb $0x1, %al
callq 0x5afab
movq 0x40(%rsp), %rsi
leaq 0x88(%rsp), %rdi
movq %rdi, 0x30(%rsp)
callq 0xe0431
movq 0x30(%rsp), %r12
movq $0x1, 0x10(%r12)
callq 0xd340
movq %rax, %r13
callq 0xa95ba
movl $0x1, %esi
movq %r12, %rdi
movabsq $-0x6834659aae9abc39, %rdx # imm = 0x97CB9A65516543C7
movq %rax, %rcx
callq 0xe0676
movq %rax, %r12
movq (%r14), %rdx
leaq 0x70(%rsp), %rbp
movq %rbp, %rdi
movq %r14, %rsi
movq %rbx, %rcx
callq 0x5df81
movq 0x10(%rbp), %rax
testb $0x2, %al
jne 0xa9f25
orq $0x1, %rax
movq %rax, 0x80(%rsp)
movq (%r12), %rsi
movq 0x80(%rsp), %rax
movq %rax, 0x10(%rsp)
movups 0x70(%rsp), %xmm0
movups %xmm0, (%rsp)
movq %r12, %rdi
movq %rbx, %rdx
callq 0x5e149
testq %rax, %rax
je 0xa9f63
movq %rax, %rbx
movq 0x30(%rsp), %rdi
callq 0xe0b30
movl %ebx, %edi
callq 0x59990
callq 0xd340
subq %r13, %rax
xorps %xmm0, %xmm0
cvtsi2sd %rax, %xmm0
divsd 0x8e0f5(%rip), %xmm0    # 0x138070
leaq 0x9ab43(%rip), %rsi     # 0x144ac5
movq %r15, %rdi
movb $0x1, %al
callq 0x5afab
callq 0xd340
movq %rax, 0x18(%rsp)
movq %r14, %rdi
callq 0xa8396
leaq 0x8(%rax), %rdi
callq 0xd69ef
testq %rax, %rax
je 0xaa089
movq %rax, %rbp
xorl %r13d, %r13d
movq %r14, %rdi
callq 0xa8396
leaq 0x8(%rax), %rdi
movq %r13, %rsi
callq 0xd69f4
testq %rax, %rax
je 0xaa07d
movq %rax, %rbx
movq %r12, %rdi
callq 0xa8396
leaq 0x8(%rax), %rdi
movq %rbx, %rsi
callq 0xd6885
testb %al, %al
jne 0xaa017
leaq 0x8e652(%rip), %rdi     # 0x138647
leaq 0x9aae4(%rip), %rsi     # 0x144ae0
leaq 0x9aa03(%rip), %rdx     # 0x144a06
leaq 0x984ac(%rip), %rcx     # 0x1424b6
movl $0x243e, %r8d           # imm = 0x243E
xorl %eax, %eax
callq 0xc8053
movq %r14, %rdi
callq 0xa8396
leaq 0x8(%rax), %rdi
movq %rbx, %rsi
callq 0xd63b5
movq (%rax), %rax
movq 0x8(%rax), %r14
movq %r12, %rdi
callq 0xa8396
leaq 0x8(%rax), %rdi
movq %rbx, %rsi
callq 0xd63b5
movq (%rax), %rax
cmpq 0x8(%rax), %r14
movq 0x28(%rsp), %r14
je 0xaa07d
leaq 0x8e5ec(%rip), %rdi     # 0x138647
leaq 0x9aab5(%rip), %rsi     # 0x144b17
leaq 0x9a99d(%rip), %rdx     # 0x144a06
leaq 0x98446(%rip), %rcx     # 0x1424b6
movl $0x243f, %r8d           # imm = 0x243F
xorl %eax, %eax
callq 0xc8053
incq %r13
cmpq %r13, %rbp
jne 0xa9fb6
callq 0xd340
subq 0x18(%rsp), %rax
xorps %xmm0, %xmm0
cvtsi2sd %rax, %xmm0
divsd 0x8dfcd(%rip), %xmm0    # 0x138070
leaq 0x9ab22(%rip), %rsi     # 0x144bcc
movq %r15, %rdi
movb $0x1, %al
callq 0x5afab
leaq 0x30(%rsp), %rbx
movq %rbx, %rdi
callq 0xe0b11
movq 0x40(%rsp), %rsi
leaq 0x88(%rsp), %rdi
movq %rdi, (%rbx)
callq 0xe0431
movq (%rbx), %r13
movq $0x1, 0x10(%r13)
callq 0xd340
movq %rax, %r12
callq 0xa95ba
movl $0x1, %esi
movq %r13, %rdi
movabsq $-0x6834659aae9abc39, %rdx # imm = 0x97CB9A65516543C7
movq %rax, %rcx
callq 0xe0676
movq %rax, %rbx
xorl %eax, %eax
callq 0x114bbb
movq %rax, %rbp
movq (%r14), %rsi
movq %r14, %rdi
xorl %edx, %edx
movl $0x1, %ecx
movq %rax, %r8
callq 0x7b48a
movq %rbp, %rdi
callq 0xee7f3
movl $0x1, %esi
movq %r13, %rdi
movq %rax, %rdx
callq 0xe0900
movq (%rbx), %rsi
movq %rbx, %rdi
movq %rax, %rdx
callq 0x7ada6
testq %rax, %rax
je 0xaa16a
movq %rax, %r13
movq 0x30(%rsp), %rdi
callq 0xe0b30
movl %r13d, %edi
callq 0x59990
callq 0xd340
subq %r12, %rax
xorps %xmm0, %xmm0
cvtsi2sd %rax, %xmm0
divsd 0x8deee(%rip), %xmm0    # 0x138070
leaq 0x9aa5e(%rip), %rsi     # 0x144be7
movq %r15, %rdi
movb $0x1, %al
callq 0x5afab
callq 0xd340
movq %rax, 0x18(%rsp)
movq %r14, %rdi
callq 0xa8396
leaq 0x8(%rax), %rdi
callq 0xd69ef
testq %rax, %rax
je 0xaa290
movq %rax, %r13
xorl %r12d, %r12d
movq %r14, %rdi
callq 0xa8396
leaq 0x8(%rax), %rdi
movq %r12, %rsi
callq 0xd69f4
testq %rax, %rax
je 0xaa284
movq %rax, %rbp
movq %rbx, %rdi
callq 0xa8396
leaq 0x8(%rax), %rdi
movq %rbp, %rsi
callq 0xd6885
testb %al, %al
jne 0xaa21e
leaq 0x8e44b(%rip), %rdi     # 0x138647
leaq 0x9a8dd(%rip), %rsi     # 0x144ae0
leaq 0x9a7fc(%rip), %rdx     # 0x144a06
leaq 0x982a5(%rip), %rcx     # 0x1424b6
movl $0x2455, %r8d           # imm = 0x2455
xorl %eax, %eax
callq 0xc8053
movq %r14, %rdi
callq 0xa8396
leaq 0x8(%rax), %rdi
movq %rbp, %rsi
callq 0xd63b5
movq (%rax), %rax
movq 0x8(%rax), %r14
movq %rbx, %rdi
callq 0xa8396
leaq 0x8(%rax), %rdi
movq %rbp, %rsi
callq 0xd63b5
movq (%rax), %rax
cmpq 0x8(%rax), %r14
movq 0x28(%rsp), %r14
je 0xaa284
leaq 0x8e3e5(%rip), %rdi     # 0x138647
leaq 0x9a8ae(%rip), %rsi     # 0x144b17
leaq 0x9a796(%rip), %rdx     # 0x144a06
leaq 0x9823f(%rip), %rcx     # 0x1424b6
movl $0x2456, %r8d           # imm = 0x2456
xorl %eax, %eax
callq 0xc8053
incq %r12
cmpq %r12, %r13
jne 0xaa1bd
callq 0xd340
subq 0x18(%rsp), %rax
xorps %xmm0, %xmm0
cvtsi2sd %rax, %xmm0
divsd 0x8ddc6(%rip), %xmm0    # 0x138070
leaq 0x9a951(%rip), %rsi     # 0x144c02
movq %r15, %rdi
movb $0x1, %al
callq 0x5afab
leaq 0x30(%rsp), %rdi
callq 0xe0b11
callq 0xd340
movq %rax, 0x18(%rsp)
movq 0x20(%rsp), %rbx
movq 0x10(%rbx), %rdx
leaq 0x9a93e(%rip), %rsi     # 0x144c1d
movq %r15, %rdi
xorl %eax, %eax
callq 0x5afab
leaq 0x981c6(%rip), %r13     # 0x1424b6
leaq 0x9a727(%rip), %rbp     # 0x144a1e
xorl %r14d, %r14d
cmpq $0x0, 0x10(%rbx)
je 0xaa365
xorl %r15d, %r15d
xorl %r12d, %r12d
movq 0x8(%rbx), %rax
movq (%rax,%r15), %rbx
movq 0x28(%rsp), %rdi
callq 0xa8396
leaq 0x8(%rax), %rdi
movq %rbx, %rsi
movq 0x20(%rsp), %rbx
callq 0xd63b5
movq (%rax), %rax
movq 0x8(%rax), %r8
movq 0x8(%rbx), %rax
movq 0x8(%rax,%r15), %r9
cmpq %r9, %r8
je 0xaa358
leaq 0x9a6c0(%rip), %rdi     # 0x144a06
movq %r13, %rsi
movl $0x2465, %edx           # imm = 0x2465
movq %rbp, %rcx
xorl %eax, %eax
callq 0xc825d
incq %r12
addq $0x10, %r15
cmpq 0x10(%rbx), %r12
jb 0xaa307
incq %r14
cmpq $0x14, %r14
jne 0xaa2fa
callq 0xd340
subq 0x18(%rsp), %rax
xorps %xmm0, %xmm0
cvtsi2sd %rax, %xmm0
divsd 0x8dce8(%rip), %xmm0    # 0x138070
movq 0x10(%rbx), %rax
shlq $0x2, %rax
leaq (%rax,%rax,4), %rax
movq %rax, %xmm1
punpckldq 0x97eef(%rip), %xmm1 # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1]
subpd 0x97ef7(%rip), %xmm1    # 0x1422a0
movapd %xmm1, %xmm2
unpckhpd %xmm1, %xmm2            # xmm2 = xmm2[1],xmm1[1]
addsd %xmm1, %xmm2
divsd %xmm2, %xmm0
leaq 0x9a87c(%rip), %rsi     # 0x144c3c
movq 0x38(%rsp), %r14
movq %r14, %rdi
movb $0x1, %al
callq 0x5afab
leaq 0xa9318(%rip), %rsi     # 0x1536ee
movq %r14, %rdi
xorl %eax, %eax
callq 0x5afab
leaq 0x9a86b(%rip), %rsi     # 0x144c52
movq %r14, %rdi
xorl %eax, %eax
callq 0x5afab
callq 0xd340
movq %rax, 0x18(%rsp)
movq 0x10(%rbx), %rax
testq %rax, %rax
je 0xaa589
leaq 0x980a7(%rip), %r13     # 0x1424b6
movq 0x28(%rsp), %r15
movq 0x8(%rbx), %rcx
shlq $0x4, %rax
leaq (%rcx,%rax), %r12
movq -0x10(%rcx,%rax), %rbx
movq 0x28(%rsp), %rdi
callq 0xa8396
leaq 0x8(%rax), %rdi
movq %rbx, %rsi
callq 0xd63b5
testq %rax, %rax
je 0xaa446
cmpq $0x0, (%rax)
jne 0xaa468
movq -0x10(%r12), %r8
leaq 0x9a5b4(%rip), %rdi     # 0x144a06
movq %r13, %rsi
movl $0x2471, %edx           # imm = 0x2471
leaq 0x9a5e1(%rip), %rcx     # 0x144a42
xorl %eax, %eax
callq 0xc825d
movq -0x10(%r12), %rbx
movq %r15, %rdi
callq 0xa8289
leaq 0x8(%rax), %rdi
movq %rbx, %rsi
callq 0xd6790
movq -0x10(%r12), %rbx
movq %r15, %rdi
callq 0xa8396
leaq 0x8(%rax), %rdi
movq %rbx, %rsi
callq 0xd63b5
testq %rax, %rax
je 0xaa4c7
cmpq $0x0, (%rax)
je 0xaa4c7
movq -0x10(%r12), %r8
leaq 0x9a555(%rip), %rdi     # 0x144a06
movq %r13, %rsi
movl $0x2473, %edx           # imm = 0x2473
leaq 0x9a598(%rip), %rcx     # 0x144a58
xorl %eax, %eax
callq 0xc825d
movq 0x20(%rsp), %rax
movq (%rax), %rbp
movq 0x10(%rax), %rbx
leaq 0xfe946(%rip), %rdx     # 0x1a8e20
movl (%rdx), %eax
cltq
leaq (%rax,%rax,2), %rax
movq 0x20(%rdx,%rax,8), %rcx
movq 0x18(%rdx,%rax,8), %rdx
andq %rbp, %rdx
shlq $0x4, %rdx
leaq (%rcx,%rdx), %rax
movq (%rcx,%rdx), %rdx
movl $0x8, %ecx
cmpq %rbp, %rdx
je 0xaa52f
movq 0x10(%rax), %rdx
movl $0x18, %ecx
cmpq %rbp, %rdx
je 0xaa52f
movq 0x20(%rax), %rdx
movl $0x28, %ecx
cmpq %rbp, %rdx
je 0xaa52f
movq 0x30(%rax), %rdx
movl $0x38, %ecx
cmpq %rbp, %rdx
jne 0xaa584
movq (%rax,%rcx), %r12
testq %r12, %r12
jne 0xaa55f
movabsq $-0x5073d588c3beb52e, %rdi # imm = 0xAF8C2A773C414AD2
movq %rbp, %rsi
callq 0xf3f85
movq %rax, %r12
leaq 0xfe8cc(%rip), %rdi     # 0x1a8e20
movq %rbp, %rsi
movq %rax, %rdx
callq 0x12128c
decq %rbx
movq %r12, %rdi
movq 0x20(%rsp), %rsi
movq %rbx, %rdx
movq %rsi, %rbx
callq 0xf69d8
movq 0x10(%rbx), %rax
testq %rax, %rax
jne 0xaa414
jmp 0xaa589
xorl %r12d, %r12d
jmp 0xaa533
callq 0xd340
subq 0x18(%rsp), %rax
xorps %xmm0, %xmm0
cvtsi2sd %rax, %xmm0
divsd 0x8dacd(%rip), %xmm0    # 0x138070
leaq 0x9a6b2(%rip), %rsi     # 0x144c5c
movq %r14, %rdi
movb $0x1, %al
callq 0x5afab
movq 0x28(%rsp), %rdi
callq 0xa97ef
movq %rax, %rbx
movq (%r14), %r14
leaq 0xff4e5(%rip), %rdx     # 0x1a9ab0
movl (%rdx), %eax
cltq
leaq (%rax,%rax,2), %rax
movq 0x20(%rdx,%rax,8), %rcx
movq 0x18(%rdx,%rax,8), %rdx
andq %r14, %rdx
shlq $0x4, %rdx
leaq (%rcx,%rdx), %rax
movq (%rcx,%rdx), %rdx
movl $0x8, %ecx
cmpq %r14, %rdx
je 0xaa624
movq 0x10(%rax), %rdx
movl $0x18, %ecx
cmpq %r14, %rdx
je 0xaa624
movq 0x20(%rax), %rdx
movl $0x28, %ecx
cmpq %r14, %rdx
je 0xaa624
movq 0x30(%rax), %rdx
movl $0x38, %ecx
cmpq %r14, %rdx
jne 0xaa6a4
movq (%rax,%rcx), %r15
testq %r15, %r15
jne 0xaa654
movabsq $0x5ea8cabb93ff3b7e, %rdi # imm = 0x5EA8CABB93FF3B7E
movq %r14, %rsi
callq 0xf3f85
movq %rax, %r15
leaq 0xff467(%rip), %rdi     # 0x1a9ab0
movq %r14, %rsi
movq %rax, %rdx
callq 0x12128c
movq %r15, %rdi
movq 0x38(%rsp), %r14
movq %r14, %rsi
movq %rbx, %rdx
callq 0x1090f0
leaq 0x9a5fa(%rip), %rsi     # 0x144c68
movq %r14, %rdi
xorl %eax, %eax
callq 0x5afab
leaq 0x40(%rsp), %rdi
callq 0xe0b11
addq $0xe8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
xorl %r12d, %r12d
jmp 0xa99d4
xorl %r13d, %r13d
jmp 0xa9da0
xorl %r15d, %r15d
jmp 0xaa628