// File: /workspace/github_c_makefile_star2_O3/nh13[P]ksw/src/parasail/src/nw_scan_avx2_256_8.c
// Function: parasail_nw_table_scan_profile_avx2_256_8
parasail_result_t* PNAME(
        const parasail_profile_t * const restrict profile,
        const char * const restrict s2, const int s2Len,
        const int open, const int gap)
{
    /* declare local variables */
    int32_t i = 0;
    int32_t j = 0;
    int32_t k = 0;
    int32_t s1Len = 0;
    int32_t end_query = 0;
    int32_t end_ref = 0;
    const parasail_matrix_t *matrix = NULL;
    int32_t segWidth = 0;
    int32_t segLen = 0;
    int32_t offset = 0;
    int32_t position = 0;
    __m256i* restrict pvP = NULL;
    __m256i* restrict pvE = NULL;
    int8_t* restrict boundary = NULL;
    __m256i* restrict pvHt = NULL;
    __m256i* restrict pvH = NULL;
    __m256i* restrict pvGapper = NULL;
    __m256i vGapO;
    __m256i vGapE;
    int8_t NEG_LIMIT = 0;
    int8_t POS_LIMIT = 0;
    __m256i vZero;
    int8_t score = 0;
    __m256i vNegLimit;
    __m256i vPosLimit;
    __m256i vSaturationCheckMin;
    __m256i vSaturationCheckMax;
    __m256i vNegInfFront;
    __m256i vSegLenXgap;
    parasail_result_t *result = NULL;

    /* validate inputs */
    PARASAIL_CHECK_NULL(profile);
    PARASAIL_CHECK_NULL(profile->profile8.score);
    PARASAIL_CHECK_NULL(profile->matrix);
    PARASAIL_CHECK_GT0(profile->s1Len);
    PARASAIL_CHECK_NULL(s2);
    PARASAIL_CHECK_GT0(s2Len);
    PARASAIL_CHECK_GE0(open);
    PARASAIL_CHECK_GE0(gap);

    /* initialize stack variables */
    i = 0;
    j = 0;
    k = 0;
    s1Len = profile->s1Len;
    end_query = s1Len-1;
    end_ref = s2Len-1;
    matrix = profile->matrix;
    segWidth = 32; /* number of values in vector unit */
    segLen = (s1Len + segWidth - 1) / segWidth;
    offset = (s1Len - 1) % segLen;
    position = (segWidth - 1) - (s1Len - 1) / segLen;
    pvP = (__m256i*)profile->profile8.score;
    vGapO = _mm256_set1_epi8(open);
    vGapE = _mm256_set1_epi8(gap);
    NEG_LIMIT = (-open < matrix->min ? INT8_MIN + open : INT8_MIN - matrix->min) + 1;
    POS_LIMIT = INT8_MAX - matrix->max - 1;
    vZero = _mm256_setzero_si256();
    score = NEG_LIMIT;
    vNegLimit = _mm256_set1_epi8(NEG_LIMIT);
    vPosLimit = _mm256_set1_epi8(POS_LIMIT);
    vSaturationCheckMin = vPosLimit;
    vSaturationCheckMax = vNegLimit;
    vNegInfFront = vZero;
    vNegInfFront = _mm256_insert_epi8_rpl(vNegInfFront, NEG_LIMIT, 0);
    vSegLenXgap = _mm256_adds_epi8(vNegInfFront,
            _mm256_slli_si256_rpl(_mm256_set1_epi8(-segLen*gap), 1));

    /* initialize result */
#ifdef PARASAIL_TABLE
    result = parasail_result_new_table1(segLen*segWidth, s2Len);
#else
#ifdef PARASAIL_ROWCOL
    result = parasail_result_new_rowcol1(segLen*segWidth, s2Len);
#else
    result = parasail_result_new();
#endif
#endif
    if (!result) return NULL;

    /* set known flags */
    result->flag |= PARASAIL_FLAG_NW | PARASAIL_FLAG_SCAN
        | PARASAIL_FLAG_BITS_8 | PARASAIL_FLAG_LANES_32;
#ifdef PARASAIL_TABLE
    result->flag |= PARASAIL_FLAG_TABLE;
#endif
#ifdef PARASAIL_ROWCOL
    result->flag |= PARASAIL_FLAG_ROWCOL;
#endif

    /* initialize heap variables */
    pvE = parasail_memalign___m256i(32, segLen);
    boundary = parasail_memalign_int8_t(32, s2Len+1);
    pvHt= parasail_memalign___m256i(32, segLen);
    pvH = parasail_memalign___m256i(32, segLen);
    pvGapper = parasail_memalign___m256i(32, segLen);

    /* validate heap variables */
    if (!pvE) return NULL;
    if (!boundary) return NULL;
    if (!pvHt) return NULL;
    if (!pvH) return NULL;
    if (!pvGapper) return NULL;

    /* initialize H and E */
    {
        int32_t index = 0;
        for (i=0; i<segLen; ++i) {
            int32_t segNum = 0;
            __m256i_8_t h;
            __m256i_8_t e;
            for (segNum=0; segNum<segWidth; ++segNum) {
                int64_t tmp = -open-gap*(segNum*segLen+i);
                h.v[segNum] = tmp < INT8_MIN ? INT8_MIN : tmp;
                tmp = tmp - open;
                e.v[segNum] = tmp < INT8_MIN ? INT8_MIN : tmp;
            }
            _mm256_store_si256(&pvH[index], h.m);
            _mm256_store_si256(&pvE[index], e.m);
            ++index;
        }
    }

    /* initialize uppder boundary */
    {
        boundary[0] = 0;
        for (i=1; i<=s2Len; ++i) {
            int64_t tmp = -open-gap*(i-1);
            boundary[i] = tmp < INT8_MIN ? INT8_MIN : tmp;
        }
    }

    {
        __m256i vGapper = _mm256_subs_epi8(vZero,vGapO);
        for (i=segLen-1; i>=0; --i) {
            _mm256_store_si256(pvGapper+i, vGapper);
            vGapper = _mm256_subs_epi8(vGapper, vGapE);
        }
    }

    /* outer loop over database sequence */
    for (j=0; j<s2Len; ++j) {
        __m256i vE;
        __m256i vHt;
        __m256i vF;
        __m256i vH;
        __m256i vHp;
        __m256i *pvW;
        __m256i vW;

        /* calculate E */
        /* calculate Ht */
        /* calculate F and H first pass */
        vHp = _mm256_load_si256(pvH+(segLen-1));
        vHp = _mm256_slli_si256_rpl(vHp, 1);
        vHp = _mm256_insert_epi8_rpl(vHp, boundary[j], 0);
        pvW = pvP + matrix->mapper[(unsigned char)s2[j]]*segLen;
        vHt = _mm256_subs_epi8(vNegLimit, pvGapper[0]);
        vF = vNegLimit;
        for (i=0; i<segLen; ++i) {
            vH = _mm256_load_si256(pvH+i);
            vE = _mm256_load_si256(pvE+i);
            vW = _mm256_load_si256(pvW+i);
            vE = _mm256_max_epi8(
                    _mm256_subs_epi8(vE, vGapE),
                    _mm256_subs_epi8(vH, vGapO));
            vHp = _mm256_adds_epi8(vHp, vW);
            vF = _mm256_max_epi8(vF, _mm256_adds_epi8(vHt, pvGapper[i]));
            vHt = _mm256_max_epi8(vE, vHp);
            _mm256_store_si256(pvE+i, vE);
            _mm256_store_si256(pvHt+i, vHt);
            vHp = vH;
        }

        /* pseudo prefix scan on F and H */
        vHt = _mm256_slli_si256_rpl(vHt, 1);
        vHt = _mm256_insert_epi8_rpl(vHt, boundary[j+1], 0);
        vF = _mm256_max_epi8(vF, _mm256_adds_epi8(vHt, pvGapper[0]));
        for (i=0; i<segWidth-2; ++i) {
            __m256i vFt = _mm256_slli_si256_rpl(vF, 1);
            vFt = _mm256_adds_epi8(vFt, vSegLenXgap);
            vF = _mm256_max_epi8(vF, vFt);
        }

        /* calculate final H */
        vF = _mm256_slli_si256_rpl(vF, 1);
        vF = _mm256_adds_epi8(vF, vNegInfFront);
        vH = _mm256_max_epi8(vHt, vF);
        for (i=0; i<segLen; ++i) {
            vHt = _mm256_load_si256(pvHt+i);
            vF = _mm256_max_epi8(
                    _mm256_subs_epi8(vF, vGapE),
                    _mm256_subs_epi8(vH, vGapO));
            vH = _mm256_max_epi8(vHt, vF);
            _mm256_store_si256(pvH+i, vH);
            vSaturationCheckMin = _mm256_min_epi8(vSaturationCheckMin, vH);
            vSaturationCheckMax = _mm256_max_epi8(vSaturationCheckMax, vH);
#ifdef PARASAIL_TABLE
            arr_store_si256(result->tables->score_table, vH, i, segLen, j, s2Len);
#endif
        } 


#ifdef PARASAIL_ROWCOL
        /* extract last value from the column */
        {
            vH = _mm256_load_si256(pvH + offset);
            for (k=0; k<position; ++k) {
                vH = _mm256_slli_si256_rpl(vH, 1);
            }
            result->rowcols->score_row[j] = (int8_t) _mm256_extract_epi8_rpl (vH, 31);
        }
#endif
    }

#ifdef PARASAIL_ROWCOL
    for (i=0; i<segLen; ++i) {
        __m256i vH = _mm256_load_si256(pvH+i);
        arr_store_col(result->rowcols->score_col, vH, i, segLen);
    }
#endif

    /* extract last value from the last column */
    {
        __m256i vH = _mm256_load_si256(pvH + offset);
        for (k=0; k<position; ++k) {
            vH = _mm256_slli_si256_rpl(vH, 1);
        }
        score = (int8_t) _mm256_extract_epi8_rpl (vH, 31);
    }

    if (_mm256_movemask_epi8(_mm256_or_si256(
            _mm256_cmplt_epi8_rpl(vSaturationCheckMin, vNegLimit),
            _mm256_cmpgt_epi8(vSaturationCheckMax, vPosLimit)))) {
        result->flag |= PARASAIL_FLAG_SATURATED;
        score = 0;
        end_query = 0;
        end_ref = 0;
    }

    result->score = score;
    result->end_query = end_query;
    result->end_ref = end_ref;

    parasail_free(pvGapper);
    parasail_free(pvH);
    parasail_free(pvHt);
    parasail_free(boundary);
    parasail_free(pvE);

    return result;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x338, %rsp            # imm = 0x338
movq %rsi, 0x90(%rsp)
testq %rdi, %rdi
je 0x4fa81e
movq 0x18(%rdi), %rax
movq %rax, 0x110(%rsp)
testq %rax, %rax
je 0x4fa825
movq 0x10(%rdi), %rax
movq %rax, 0x88(%rsp)
testq %rax, %rax
je 0x4fa82c
movl 0x8(%rdi), %edi
testl %edi, %edi
jle 0x4fa833
cmpq $0x0, 0x90(%rsp)
je 0x4fa83a
movl %edx, %r9d
testl %edx, %edx
jle 0x4fa841
testl %ecx, %ecx
js 0x4fa848
testl %r8d, %r8d
js 0x4fa84f
movl %r8d, 0x40(%rsp)
leal -0x1(%rdi), %eax
addq $0x1f, %rdi
movq %rdi, %r14
shrq $0x5, %r14
movl %eax, 0xc(%rsp)
xorl %edx, %edx
divl %r14d
movl %eax, %r15d
movl %edx, %r13d
movq 0x88(%rsp), %rdx
movl 0x20(%rdx), %eax
movl %eax, %esi
negb %sil
movzbl %sil, %ebx
movl %ecx, %esi
negl %esi
movl %esi, 0x38(%rsp)
cmpl %esi, %eax
movl %ecx, 0x60(%rsp)
cmovgl %ecx, %ebx
movb $0x7e, %bpl
subb 0x1c(%rdx), %bpl
andl $0x7fffffe0, %edi       # imm = 0x7FFFFFE0
movl %r9d, %esi
movq %r9, 0x18(%rsp)
callq 0x20abc2
testq %rax, %rax
je 0x4fa854
movq %rax, %r12
movl %ebp, 0xa0(%rsp)
movl %r13d, 0x5c(%rsp)
movl %r15d, 0x8(%rsp)
orl $0x20120401, 0xc(%rax)  # imm = 0x20120401
movl $0x20, %edi
movq %r14, %rsi
callq 0x4f1904
movq %rax, 0x28(%rsp)
movq 0x18(%rsp), %rax
leal 0x1(%rax), %esi
movl $0x20, %edi
callq 0x20a620
movq %rax, %r15
movl $0x20, %edi
movq %r14, %rsi
callq 0x4f1904
movq %rax, %r13
movl $0x20, %edi
movq %r14, %rsi
callq 0x4f1904
movq %rax, %rbp
movl $0x20, %edi
movq %r14, %rsi
callq 0x4f1904
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
sete %dl
testq %r15, %r15
sete %cl
orb %dl, %cl
testq %r13, %r13
sete %sil
testq %rbp, %rbp
sete %dl
orb %sil, %dl
orb %cl, %dl
movq %rax, 0x10(%rsp)
testq %rax, %rax
sete %al
orb %dl, %al
jne 0x4fa854
movq %rbp, %r11
movq %r13, 0x48(%rsp)
movq 0x18(%rsp), %r9
leal -0x1(%r9), %eax
movl %eax, 0x58(%rsp)
movl $0x1f, %esi
subl 0x8(%rsp), %esi
movl 0x60(%rsp), %ecx
vmovd %ecx, %xmm0
vpbroadcastb %xmm0, %ymm2
movl 0x40(%rsp), %r10d
vmovd %r10d, %xmm0
vpbroadcastb %xmm0, %ymm3
addb $-0x7f, %bl
vmovd %ebx, %xmm0
vpbroadcastb %xmm0, %ymm0
vmovdqu %ymm0, 0x310(%rsp)
vmovd 0xa0(%rsp), %xmm0
vpbroadcastb %xmm0, %ymm0
vmovdqu %ymm0, 0x2f0(%rsp)
movzbl %bl, %eax
vmovd %eax, %xmm1
movl %r14d, %eax
imull %r10d, %eax
negb %al
vmovd %eax, %xmm0
vpbroadcastb %xmm0, %ymm0
vpand 0x134b90(%rip), %ymm0, %ymm0 # 0x62dee0
vmovdqu %ymm1, 0x2d0(%rsp)
vpaddsb %ymm0, %ymm1, %ymm0
vmovdqu %ymm0, 0x2b0(%rsp)
movl %ecx, %eax
movl %r14d, %r8d
movl %r10d, %ecx
movl 0x38(%rsp), %ebx
movslq %ebx, %rdx
vmovq %rcx, %xmm0
vpbroadcastq %xmm0, %ymm0
vmovq %rdx, %xmm1
movq %r8, 0x108(%rsp)
vmovq %r8, %xmm4
vpbroadcastq %xmm4, %ymm4
vpmuldq 0x134b61(%rip), %ymm4, %ymm5 # 0x62df00
vmovdqu %ymm5, 0x270(%rsp)
vpmuldq 0x134b6f(%rip), %ymm4, %ymm5 # 0x62df20
vmovdqu %ymm5, 0x250(%rsp)
vpmuldq 0x134b7d(%rip), %ymm4, %ymm5 # 0x62df40
vmovdqu %ymm5, 0x230(%rsp)
vpmuldq 0x134b8b(%rip), %ymm4, %ymm5 # 0x62df60
vmovdqu %ymm5, 0x210(%rsp)
vpmuldq 0x1349f9(%rip), %ymm4, %ymm5 # 0x62dde0
vmovdqu %ymm5, 0x1f0(%rsp)
vpmuldq 0x134a07(%rip), %ymm4, %ymm5 # 0x62de00
vmovdqu %ymm5, 0x1d0(%rsp)
vpmuldq 0x134835(%rip), %ymm4, %ymm5 # 0x62dc40
vmovdqu %ymm5, 0x1b0(%rsp)
vpbroadcastq %xmm1, %ymm1
vmovdqu %ymm1, 0x190(%rsp)
vpmuldq 0x134715(%rip), %ymm4, %ymm1 # 0x62db40
vmovdqu %ymm1, 0x170(%rsp)
vmovq %rax, %xmm1
vpbroadcastq %xmm1, %ymm1
vmovdqu %ymm1, 0x290(%rsp)
xorl %eax, %eax
movq %rbp, 0x20(%rsp)
movq %rdi, %rdx
vpbroadcastq 0x134b66(%rip), %ymm14 # 0x62dfc0
vbroadcastsd 0x134b65(%rip), %ymm15 # 0x62dfc8
vmovq %rax, %xmm1
vpbroadcastq %xmm1, %ymm5
vpaddq 0x1b0(%rsp), %ymm5, %ymm1
vpaddq 0x170(%rsp), %ymm5, %ymm4
vpaddq 0x1d0(%rsp), %ymm5, %ymm6
vpaddq 0x1f0(%rsp), %ymm5, %ymm7
vpaddq 0x210(%rsp), %ymm5, %ymm8
vpaddq 0x230(%rsp), %ymm5, %ymm9
vpaddq 0x250(%rsp), %ymm5, %ymm10
vpaddq 0x270(%rsp), %ymm5, %ymm5
vpmuludq %ymm0, %ymm5, %ymm12
vpsrlq $0x20, %ymm5, %ymm5
vpmuludq %ymm0, %ymm5, %ymm5
vpsllq $0x20, %ymm5, %ymm5
vpaddq %ymm5, %ymm12, %ymm11
vpmuludq %ymm0, %ymm10, %ymm12
vpsrlq $0x20, %ymm10, %ymm10
vpmuludq %ymm0, %ymm10, %ymm10
vpsllq $0x20, %ymm10, %ymm10
vpaddq %ymm10, %ymm12, %ymm5
vmovdqu %ymm5, 0x60(%rsp)
vpmuludq %ymm0, %ymm9, %ymm10
vpsrlq $0x20, %ymm9, %ymm9
vpmuludq %ymm0, %ymm9, %ymm9
vpsllq $0x20, %ymm9, %ymm9
vpaddq %ymm9, %ymm10, %ymm12
vpmuludq %ymm0, %ymm8, %ymm9
vpsrlq $0x20, %ymm8, %ymm8
vpmuludq %ymm0, %ymm8, %ymm8
vpsllq $0x20, %ymm8, %ymm8
vpaddq %ymm8, %ymm9, %ymm5
vpmuludq %ymm0, %ymm7, %ymm8
vpsrlq $0x20, %ymm7, %ymm7
vpmuludq %ymm0, %ymm7, %ymm7
vpsllq $0x20, %ymm7, %ymm7
vpaddq %ymm7, %ymm8, %ymm9
vpmuludq %ymm0, %ymm6, %ymm7
vpsrlq $0x20, %ymm6, %ymm6
vpmuludq %ymm0, %ymm6, %ymm6
vpsllq $0x20, %ymm6, %ymm6
vpaddq %ymm6, %ymm7, %ymm6
vpmuludq %ymm0, %ymm4, %ymm7
vpsrlq $0x20, %ymm4, %ymm4
vpmuludq %ymm0, %ymm4, %ymm4
vpsllq $0x20, %ymm4, %ymm4
vpaddq %ymm4, %ymm7, %ymm4
vpmuludq %ymm0, %ymm1, %ymm7
vpsrlq $0x20, %ymm1, %ymm1
vpmuludq %ymm0, %ymm1, %ymm1
vpsllq $0x20, %ymm1, %ymm1
vpaddq %ymm1, %ymm7, %ymm1
vmovdqu 0x190(%rsp), %ymm10
vpsubq %ymm1, %ymm10, %ymm7
vpsubq %ymm4, %ymm10, %ymm8
vpsubq %ymm6, %ymm10, %ymm1
vpsubq %ymm9, %ymm10, %ymm4
vpsubq %ymm11, %ymm10, %ymm9
vpcmpgtq %ymm14, %ymm9, %ymm6
vblendvpd %ymm6, %ymm9, %ymm14, %ymm6
vmovupd %ymm6, 0xa0(%rsp)
vpsubq %ymm5, %ymm10, %ymm6
vpcmpgtq %ymm14, %ymm4, %ymm5
vblendvpd %ymm5, %ymm4, %ymm14, %ymm11
vpsubq %ymm12, %ymm10, %ymm12
vpcmpgtq %ymm14, %ymm8, %ymm5
vblendvpd %ymm5, %ymm8, %ymm14, %ymm13
vpsubq 0x60(%rsp), %ymm10, %ymm5
vpcmpgtq %ymm14, %ymm7, %ymm10
vblendvpd %ymm10, %ymm7, %ymm14, %ymm10
vandpd %ymm15, %ymm10, %ymm10
vandpd %ymm15, %ymm13, %ymm13
vpackusdw %ymm10, %ymm13, %ymm10
vpcmpgtq %ymm14, %ymm1, %ymm13
vblendvpd %ymm13, %ymm1, %ymm14, %ymm13
vandpd %ymm15, %ymm13, %ymm13
vandpd %ymm15, %ymm11, %ymm11
vpackusdw %ymm11, %ymm13, %ymm11
vpcmpgtq %ymm14, %ymm12, %ymm13
vblendvpd %ymm13, %ymm12, %ymm14, %ymm13
vpermq $0xd8, %ymm10, %ymm10   # ymm10 = ymm10[0,2,1,3]
vpermq $0xd8, %ymm11, %ymm11   # ymm11 = ymm11[0,2,1,3]
vpackusdw %ymm11, %ymm10, %ymm10
vmovdqu %ymm10, 0x60(%rsp)
vpcmpgtq %ymm14, %ymm6, %ymm10
vblendvpd %ymm10, %ymm6, %ymm14, %ymm10
vandpd %ymm15, %ymm10, %ymm10
vandpd %ymm15, %ymm13, %ymm11
vpackusdw %ymm11, %ymm10, %ymm10
vpcmpgtq %ymm14, %ymm5, %ymm11
vblendvpd %ymm11, %ymm5, %ymm14, %ymm11
vandpd %ymm15, %ymm11, %ymm11
vandpd 0xa0(%rsp), %ymm15, %ymm13
vpackusdw %ymm13, %ymm11, %ymm11
vpermq $0xd8, %ymm10, %ymm10   # ymm10 = ymm10[0,2,1,3]
vpermq $0xd8, %ymm11, %ymm11   # ymm11 = ymm11[0,2,1,3]
vpackusdw %ymm11, %ymm10, %ymm10
vmovdqu 0x290(%rsp), %ymm13
vpsubq %ymm13, %ymm7, %ymm11
vpsubq %ymm13, %ymm8, %ymm8
vpsubq %ymm13, %ymm9, %ymm7
vpcmpgtq %ymm14, %ymm7, %ymm9
vblendvpd %ymm9, %ymm7, %ymm14, %ymm7
vpsubq %ymm13, %ymm5, %ymm5
vpcmpgtq %ymm14, %ymm5, %ymm9
vblendvpd %ymm9, %ymm5, %ymm14, %ymm5
vpsubq %ymm13, %ymm12, %ymm9
vpcmpgtq %ymm14, %ymm9, %ymm12
vblendvpd %ymm12, %ymm9, %ymm14, %ymm9
vpsubq %ymm13, %ymm6, %ymm6
vpcmpgtq %ymm14, %ymm6, %ymm12
vblendvpd %ymm12, %ymm6, %ymm14, %ymm6
vpsubq %ymm13, %ymm4, %ymm4
vpcmpgtq %ymm14, %ymm4, %ymm12
vblendvpd %ymm12, %ymm4, %ymm14, %ymm4
vpsubq %ymm13, %ymm1, %ymm1
vpcmpgtq %ymm14, %ymm1, %ymm12
vblendvpd %ymm12, %ymm1, %ymm14, %ymm1
vpcmpgtq %ymm14, %ymm8, %ymm12
vblendvpd %ymm12, %ymm8, %ymm14, %ymm8
vpcmpgtq %ymm14, %ymm11, %ymm12
vblendvpd %ymm12, %ymm11, %ymm14, %ymm11
vpermq $0xd8, 0x60(%rsp), %ymm12 # ymm12 = mem[0,2,1,3]
vpermq $0xd8, %ymm10, %ymm10   # ymm10 = ymm10[0,2,1,3]
vpackuswb %ymm10, %ymm12, %ymm10
vandpd %ymm15, %ymm11, %ymm11
vandpd %ymm15, %ymm8, %ymm8
vpackusdw %ymm11, %ymm8, %ymm8
vandpd %ymm1, %ymm15, %ymm1
vandpd %ymm4, %ymm15, %ymm4
vpackusdw %ymm4, %ymm1, %ymm1
vpermq $0xd8, %ymm8, %ymm4     # ymm4 = ymm8[0,2,1,3]
vpermq $0xd8, %ymm1, %ymm1     # ymm1 = ymm1[0,2,1,3]
vpackusdw %ymm1, %ymm4, %ymm1
vandpd %ymm6, %ymm15, %ymm4
vandpd %ymm15, %ymm9, %ymm6
vpackusdw %ymm6, %ymm4, %ymm4
vandpd %ymm5, %ymm15, %ymm5
vandpd %ymm7, %ymm15, %ymm6
vpackusdw %ymm6, %ymm5, %ymm5
vpermq $0xd8, %ymm4, %ymm4     # ymm4 = ymm4[0,2,1,3]
vpermq $0xd8, %ymm5, %ymm5     # ymm5 = ymm5[0,2,1,3]
vpackusdw %ymm5, %ymm4, %ymm4
vpermq $0xd8, %ymm10, %ymm5    # ymm5 = ymm10[0,2,1,3]
vmovdqa %ymm5, (%r11)
vpermq $0xd8, %ymm1, %ymm1     # ymm1 = ymm1[0,2,1,3]
vpermq $0xd8, %ymm4, %ymm4     # ymm4 = ymm4[0,2,1,3]
vpackuswb %ymm4, %ymm1, %ymm1
vpermq $0xd8, %ymm1, %ymm1     # ymm1 = ymm1[0,2,1,3]
vmovdqa %ymm1, (%rdx)
incq %rax
addq $0x20, %rdx
addq $0x20, %r11
cmpq %rax, %r14
jne 0x4f9463
movb $0x0, (%r15)
movl %r9d, %eax
addl $0x1f, %r9d
andl $-0x20, %r9d
movq %rax, 0x80(%rsp)
decq %rax
vmovq %rax, %xmm0
vpbroadcastq %xmm0, %ymm6
vmovd %r10d, %xmm0
vpbroadcastd %xmm0, %ymm0
vmovdqu %ymm0, 0x230(%rsp)
vmovd %ebx, %xmm0
vpbroadcastd %xmm0, %ymm0
vmovdqu %ymm0, 0x210(%rsp)
vpmovsxbd 0x1347e5(%rip), %ymm9 # 0x62dfd0
vmovaps 0x1347ad(%rip), %ymm0   # 0x62dfa0
vmovups %ymm0, 0x60(%rsp)
vpmovsxbd 0x134646(%rip), %ymm10 # 0x62de48
vpmovsxbd 0x1344c5(%rip), %ymm0 # 0x62dcd0
xorl %r8d, %r8d
vpbroadcastq 0x134369(%rip), %xmm13 # 0x62db80
vbroadcastss 0x1347b8(%rip), %ymm1 # 0x62dfd8
vmovups %ymm1, 0x1f0(%rsp)
vbroadcastss 0x1347aa(%rip), %ymm1 # 0x62dfdc
vmovups %ymm1, 0x1d0(%rsp)
vpbroadcastq 0x13433c(%rip), %ymm12 # 0x62db80
vpbroadcastd 0x134373(%rip), %xmm14 # 0x62dbc0
vpbroadcastd 0x13478a(%rip), %ymm1 # 0x62dfe0
vmovdqu %ymm1, 0x170(%rsp)
vmovdqu %ymm12, 0x1b0(%rsp)
vmovdqu %ymm14, 0x190(%rsp)
vmovq %r8, %xmm1
vpbroadcastq %xmm1, %ymm1
vmovdqu %ymm1, 0x250(%rsp)
vpor 0x1342b4(%rip), %ymm1, %ymm8 # 0x62db40
vpxor %xmm6, %xmm13, %xmm4
vpxor %xmm13, %xmm8, %xmm5
vmovdqu %ymm0, 0x270(%rsp)
vpaddd 0x1349ba(%rip), %ymm0, %ymm7 # 0x62e260
vpcmpeqd %ymm11, %ymm11, %ymm11
vmovdqa %ymm10, %ymm0
vpaddd %ymm11, %ymm10, %ymm15
vmovdqu %ymm9, 0xa0(%rsp)
vpaddd %ymm11, %ymm9, %ymm9
vmovdqu 0x230(%rsp), %ymm10
vpmulld %ymm10, %ymm9, %ymm9
vpmulld %ymm10, %ymm15, %ymm15
vpmulld %ymm10, %ymm7, %ymm7
vpcmpgtq %xmm4, %xmm5, %xmm4
vmovdqu 0x210(%rsp), %ymm11
vpsubd %ymm7, %ymm11, %ymm5
vpsubd %ymm15, %ymm11, %ymm7
vmovdqu 0x60(%rsp), %ymm1
vpcmpeqd %ymm14, %ymm14, %ymm14
vmovdqu 0x1f0(%rsp), %ymm15
vpmaxsd %ymm15, %ymm7, %ymm7
vpmaxsd %ymm15, %ymm5, %ymm5
vmovdqu 0x1d0(%rsp), %ymm12
vpand %ymm5, %ymm12, %ymm5
vpand %ymm7, %ymm12, %ymm7
vpackusdw %ymm7, %ymm5, %ymm5
vpaddd %ymm1, %ymm14, %ymm7
vpmulld %ymm10, %ymm7, %ymm7
vpsubd %ymm7, %ymm11, %ymm7
vpsubd %ymm9, %ymm11, %ymm9
vpcmpeqd %xmm11, %xmm11, %xmm11
vpmaxsd %ymm15, %ymm9, %ymm9
vpmaxsd %ymm15, %ymm7, %ymm7
vpand %ymm7, %ymm12, %ymm7
vpand %ymm12, %ymm9, %ymm9
vpackusdw %ymm9, %ymm7, %ymm7
vpermq $0xd8, %ymm5, %ymm5     # ymm5 = ymm5[0,2,1,3]
vpermq $0xd8, %ymm7, %ymm7     # ymm7 = ymm7[0,2,1,3]
vpackuswb %ymm7, %ymm5, %ymm5
vpackssdw %xmm4, %xmm4, %xmm4
vpxor %xmm4, %xmm11, %xmm4
vpackssdw %xmm4, %xmm4, %xmm4
vpacksswb %xmm4, %xmm4, %xmm4
vmovd %xmm4, %eax
vpermq $0xd8, %ymm5, %ymm7     # ymm7 = ymm5[0,2,1,3]
testb $0x1, %al
je 0x4f998a
vpextrb $0x0, %xmm7, 0x1(%r15,%r8)
vpxor %xmm6, %xmm13, %xmm4
vpxor %xmm13, %xmm8, %xmm5
vpcmpgtq %xmm4, %xmm5, %xmm4
vpackssdw %xmm4, %xmm4, %xmm4
vpxor %xmm4, %xmm11, %xmm4
vpackssdw %xmm4, %xmm4, %xmm4
vpacksswb %xmm4, %xmm4, %xmm4
vpextrb $0x1, %xmm4, %eax
testb $0x1, %al
vmovdqu 0x1b0(%rsp), %ymm12
vmovdqu 0x190(%rsp), %ymm14
je 0x4f99cc
vpextrb $0x1, %xmm7, 0x2(%r15,%r8)
vpxor %ymm6, %ymm12, %ymm4
vpxor %ymm12, %ymm8, %ymm5
vpcmpgtq %ymm4, %ymm5, %ymm5
vpshuflw $0xe8, %ymm5, %ymm8     # ymm8 = ymm5[0,2,2,3,4,5,6,7,8,10,10,11,12,13,14,15]
vpxor 0x134879(%rip), %ymm8, %ymm8 # 0x62e260
vpermd %ymm8, %ymm14, %ymm8
vpackssdw %xmm8, %xmm8, %xmm8
vpacksswb %xmm8, %xmm8, %xmm8
vpextrb $0x2, %xmm8, %eax
testb $0x1, %al
vmovdqa %ymm0, %ymm10
vmovdqu 0x250(%rsp), %ymm1
je 0x4f9a15
vpextrb $0x2, %xmm7, 0x3(%r15,%r8)
vextracti128 $0x1, %ymm5, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpxor %xmm5, %xmm11, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpacksswb %xmm5, %xmm5, %xmm5
vpextrb $0x3, %xmm5, %eax
testb $0x1, %al
vmovdqu 0x270(%rsp), %ymm0
je 0x4f9a46
vpextrb $0x3, %xmm7, 0x4(%r15,%r8)
vpor 0x1341f2(%rip), %ymm1, %ymm8 # 0x62dc40
vpxor %xmm6, %xmm13, %xmm5
vpxor %xmm13, %xmm8, %xmm9
vpcmpgtq %xmm5, %xmm9, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpxor %xmm5, %xmm11, %xmm5
vpermq $0x55, %ymm5, %ymm5     # ymm5 = ymm5[1,1,1,1]
vpackssdw %ymm0, %ymm5, %ymm5
vextracti128 $0x1, %ymm5, %xmm5
vpbroadcastw %xmm5, %xmm5
vpacksswb %xmm5, %xmm5, %xmm5
vpextrb $0x4, %xmm5, %eax
testb $0x1, %al
je 0x4f9a8f
vpextrb $0x4, %xmm7, 0x5(%r15,%r8)
vpxor %xmm6, %xmm13, %xmm5
vpxor %xmm13, %xmm8, %xmm9
vpcmpgtq %xmm5, %xmm9, %xmm5
vpshufhw $0x84, %xmm5, %xmm5     # xmm5 = xmm5[0,1,2,3,4,5,4,6]
vpxor %xmm5, %xmm11, %xmm5
vpermq $0x55, %ymm5, %ymm5     # ymm5 = ymm5[1,1,1,1]
vpackssdw %ymm0, %ymm5, %ymm5
vextracti128 $0x1, %ymm5, %xmm5
vpbroadcastd %xmm5, %xmm5
vpacksswb %xmm5, %xmm5, %xmm5
vpextrb $0x5, %xmm5, %eax
testb $0x1, %al
je 0x4f9ad1
vpextrb $0x5, %xmm7, 0x6(%r15,%r8)
vpxor %ymm12, %ymm8, %ymm5
vpcmpgtq %ymm4, %ymm5, %ymm5
vpackssdw %ymm5, %ymm0, %ymm8
vextracti128 $0x1, %ymm8, %xmm8
vpxor %xmm11, %xmm8, %xmm8
vpackssdw %xmm8, %xmm8, %xmm8
vpacksswb %xmm8, %xmm8, %xmm8
vpextrb $0x6, %xmm8, %eax
testb $0x1, %al
je 0x4f9b06
vpextrb $0x6, %xmm7, 0x7(%r15,%r8)
vpshufhw $0x84, %ymm5, %ymm5     # ymm5 = ymm5[0,1,2,3,4,5,4,6,8,9,10,11,12,13,12,14]
vextracti128 $0x1, %ymm5, %xmm5
vpxor %xmm5, %xmm11, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpacksswb %xmm5, %xmm5, %xmm5
vpextrb $0x7, %xmm5, %eax
testb $0x1, %al
je 0x4f9b2f
vpextrb $0x7, %xmm7, 0x8(%r15,%r8)
vpor 0x1342c9(%rip), %ymm1, %ymm5 # 0x62de00
vpxor %xmm6, %xmm13, %xmm8
vpxor %xmm5, %xmm13, %xmm9
vpcmpgtq %xmm8, %xmm9, %xmm8
vpackssdw %xmm8, %xmm8, %xmm8
vpxor %xmm11, %xmm8, %xmm8
vpackssdw %xmm8, %xmm8, %xmm8
vpmovzxwd %xmm8, %ymm8    # ymm8 = xmm8[0],zero,xmm8[1],zero,xmm8[2],zero,xmm8[3],zero,xmm8[4],zero,xmm8[5],zero,xmm8[6],zero,xmm8[7],zero
vpacksswb %ymm0, %ymm8, %ymm8
vextracti128 $0x1, %ymm8, %xmm8
vmovd %xmm8, %eax
testb $0x1, %al
je 0x4f9b72
vpextrb $0x8, %xmm7, 0x9(%r15,%r8)
vpxor %xmm6, %xmm13, %xmm8
vpxor %xmm5, %xmm13, %xmm9
vpcmpgtq %xmm8, %xmm9, %xmm8
vpackssdw %xmm8, %xmm8, %xmm8
vpxor %xmm11, %xmm8, %xmm8
vpackssdw %xmm8, %xmm8, %xmm8
vpermq $0x55, %ymm8, %ymm8     # ymm8 = ymm8[1,1,1,1]
vpacksswb %ymm0, %ymm8, %ymm8
vextracti128 $0x1, %ymm8, %xmm8
vpextrb $0x1, %xmm8, %eax
testb $0x1, %al
je 0x4f9bb0
vpextrb $0x9, %xmm7, 0xa(%r15,%r8)
vpxor %ymm5, %ymm12, %ymm5
vpcmpgtq %ymm4, %ymm5, %ymm5
vpshuflw $0xe8, %ymm5, %ymm8     # ymm8 = ymm5[0,2,2,3,4,5,6,7,8,10,10,11,12,13,14,15]
vpxor 0x13469a(%rip), %ymm8, %ymm8 # 0x62e260
vpermd %ymm8, %ymm14, %ymm8
vpackssdw %xmm8, %xmm8, %xmm8
vpermq $0x55, %ymm8, %ymm8     # ymm8 = ymm8[1,1,1,1]
vpacksswb %ymm0, %ymm8, %ymm8
vextracti128 $0x1, %ymm8, %xmm8
vpextrb $0x2, %xmm8, %eax
testb $0x1, %al
je 0x4f9bf2
vpextrb $0xa, %xmm7, 0xb(%r15,%r8)
vextracti128 $0x1, %ymm5, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpxor %xmm5, %xmm11, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpermq $0x55, %ymm5, %ymm5     # ymm5 = ymm5[1,1,1,1]
vpacksswb %ymm0, %ymm5, %ymm5
vextracti128 $0x1, %ymm5, %xmm5
vpextrb $0x3, %xmm5, %eax
testb $0x1, %al
je 0x4f9c26
vpextrb $0xb, %xmm7, 0xc(%r15,%r8)
vpor 0x1341b2(%rip), %ymm1, %ymm5 # 0x62dde0
vpxor %xmm6, %xmm13, %xmm8
vpxor %xmm5, %xmm13, %xmm9
vpcmpgtq %xmm8, %xmm9, %xmm8
vpackssdw %xmm8, %xmm8, %xmm8
vpxor %xmm11, %xmm8, %xmm8
vpermq $0x55, %ymm8, %ymm8     # ymm8 = ymm8[1,1,1,1]
vpackssdw %ymm8, %ymm0, %ymm8
vpacksswb %ymm0, %ymm8, %ymm8
vextracti128 $0x1, %ymm8, %xmm8
vpextrb $0x4, %xmm8, %eax
testb $0x1, %al
je 0x4f9c6c
vpextrb $0xc, %xmm7, 0xd(%r15,%r8)
vpxor %xmm6, %xmm13, %xmm8
vpxor %xmm5, %xmm13, %xmm9
vpcmpgtq %xmm8, %xmm9, %xmm8
vpshufhw $0x84, %xmm8, %xmm8     # xmm8 = xmm8[0,1,2,3,4,5,4,6]
vpxor %xmm11, %xmm8, %xmm8
vpermq $0x55, %ymm8, %ymm8     # ymm8 = ymm8[1,1,1,1]
vpackssdw %ymm8, %ymm0, %ymm8
vpacksswb %ymm0, %ymm8, %ymm8
vextracti128 $0x1, %ymm8, %xmm8
vpextrb $0x5, %xmm8, %eax
testb $0x1, %al
je 0x4f9cab
vpextrb $0xd, %xmm7, 0xe(%r15,%r8)
vpxor %ymm5, %ymm12, %ymm5
vpcmpgtq %ymm4, %ymm5, %ymm5
vpackssdw %ymm5, %ymm0, %ymm8
vpxor 0x1345a0(%rip), %ymm8, %ymm8 # 0x62e260
vpackssdw %ymm8, %ymm0, %ymm8
vpacksswb %ymm0, %ymm8, %ymm8
vextracti128 $0x1, %ymm8, %xmm8
vpextrb $0x6, %xmm8, %eax
testb $0x1, %al
je 0x4f9ce1
vpextrb $0xe, %xmm7, 0xf(%r15,%r8)
vpshufhw $0x84, %ymm5, %ymm5     # ymm5 = ymm5[0,1,2,3,4,5,4,6,8,9,10,11,12,13,12,14]
vpxor 0x134572(%rip), %ymm5, %ymm5 # 0x62e260
vpackssdw %ymm5, %ymm0, %ymm5
vpacksswb %ymm0, %ymm5, %ymm5
vextracti128 $0x1, %ymm5, %xmm5
vpextrb $0x7, %xmm5, %eax
testb $0x1, %al
je 0x4f9d0e
vpextrb $0xf, %xmm7, 0x10(%r15,%r8)
vpor 0x13424a(%rip), %ymm1, %ymm5 # 0x62df60
vpxor %xmm6, %xmm13, %xmm8
vpxor %xmm5, %xmm13, %xmm9
vpcmpgtq %xmm8, %xmm9, %xmm8
vpackssdw %xmm8, %xmm8, %xmm8
vpxor %xmm11, %xmm8, %xmm8
vpackssdw %xmm8, %xmm8, %xmm8
vpacksswb %xmm8, %xmm8, %xmm8
vpextrb $0x8, %xmm8, %eax
vextracti128 $0x1, %ymm7, %xmm7
testb $0x1, %al
je 0x4f9d4f
vpextrb $0x0, %xmm7, 0x11(%r15,%r8)
vpxor %xmm6, %xmm13, %xmm8
vpxor %xmm5, %xmm13, %xmm9
vpcmpgtq %xmm8, %xmm9, %xmm8
vpackssdw %xmm8, %xmm8, %xmm8
vpxor %xmm11, %xmm8, %xmm8
vpackssdw %xmm8, %xmm8, %xmm8
vpacksswb %xmm8, %xmm8, %xmm8
vpextrb $0x9, %xmm8, %eax
testb $0x1, %al
je 0x4f9d82
vpextrb $0x1, %xmm7, 0x12(%r15,%r8)
vpxor %ymm5, %ymm12, %ymm5
vpcmpgtq %ymm4, %ymm5, %ymm5
vpshuflw $0xe8, %ymm5, %ymm8     # ymm8 = ymm5[0,2,2,3,4,5,6,7,8,10,10,11,12,13,14,15]
vpxor 0x1344c8(%rip), %ymm8, %ymm8 # 0x62e260
vpermd %ymm8, %ymm14, %ymm8
vpackssdw %xmm8, %xmm8, %xmm8
vpacksswb %xmm8, %xmm8, %xmm8
vpextrb $0xa, %xmm8, %eax
testb $0x1, %al
je 0x4f9db9
vpextrb $0x2, %xmm7, 0x13(%r15,%r8)
vextracti128 $0x1, %ymm5, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpxor %xmm5, %xmm11, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpacksswb %xmm5, %xmm5, %xmm5
vpextrb $0xb, %xmm5, %eax
testb $0x1, %al
je 0x4f9de1
vpextrb $0x3, %xmm7, 0x14(%r15,%r8)
vpor 0x134157(%rip), %ymm1, %ymm5 # 0x62df40
vpxor %xmm6, %xmm13, %xmm8
vpxor %xmm5, %xmm13, %xmm9
vpcmpgtq %xmm8, %xmm9, %xmm8
vpackssdw %xmm8, %xmm8, %xmm8
vpxor %xmm11, %xmm8, %xmm8
vpermq $0x55, %ymm8, %ymm8     # ymm8 = ymm8[1,1,1,1]
vpackssdw %ymm0, %ymm8, %ymm8
vextracti128 $0x1, %ymm8, %xmm8
vpbroadcastw %xmm8, %xmm8
vpacksswb %xmm8, %xmm8, %xmm8
vpextrb $0xc, %xmm8, %eax
testb $0x1, %al
je 0x4f9e2c
vpextrb $0x4, %xmm7, 0x15(%r15,%r8)
vpxor %xmm6, %xmm13, %xmm8
vpxor %xmm5, %xmm13, %xmm9
vpcmpgtq %xmm8, %xmm9, %xmm8
vpshufhw $0x84, %xmm8, %xmm8     # xmm8 = xmm8[0,1,2,3,4,5,4,6]
vpxor %xmm11, %xmm8, %xmm8
vpermq $0x55, %ymm8, %ymm8     # ymm8 = ymm8[1,1,1,1]
vpackssdw %ymm0, %ymm8, %ymm8
vextracti128 $0x1, %ymm8, %xmm8
vpbroadcastd %xmm8, %xmm8
vpacksswb %xmm8, %xmm8, %xmm8
vpextrb $0xd, %xmm8, %eax
testb $0x1, %al
je 0x4f9e70
vpextrb $0x5, %xmm7, 0x16(%r15,%r8)
vpxor %ymm5, %ymm12, %ymm5
vpcmpgtq %ymm4, %ymm5, %ymm5
vpackssdw %ymm5, %ymm0, %ymm8
vextracti128 $0x1, %ymm8, %xmm8
vpxor %xmm11, %xmm8, %xmm8
vpackssdw %xmm8, %xmm8, %xmm8
vpacksswb %xmm8, %xmm8, %xmm8
vpextrb $0xe, %xmm8, %eax
testb $0x1, %al
je 0x4f9ea4
vpextrb $0x6, %xmm7, 0x17(%r15,%r8)
vpshufhw $0x84, %ymm5, %ymm5     # ymm5 = ymm5[0,1,2,3,4,5,4,6,8,9,10,11,12,13,12,14]
vextracti128 $0x1, %ymm5, %xmm5
vpxor %xmm5, %xmm11, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpacksswb %xmm5, %xmm5, %xmm5
vpextrb $0xf, %xmm5, %eax
testb $0x1, %al
je 0x4f9ecd
vpextrb $0x7, %xmm7, 0x18(%r15,%r8)
vpor 0x13404b(%rip), %ymm1, %ymm5 # 0x62df20
vpxor %xmm6, %xmm13, %xmm8
vpxor %xmm5, %xmm13, %xmm9
vpcmpgtq %xmm8, %xmm9, %xmm8
vpackssdw %xmm8, %xmm8, %xmm8
vpxor %xmm11, %xmm8, %xmm8
vpackssdw %xmm8, %xmm8, %xmm8
vpmovzxwd %xmm8, %ymm8    # ymm8 = xmm8[0],zero,xmm8[1],zero,xmm8[2],zero,xmm8[3],zero,xmm8[4],zero,xmm8[5],zero,xmm8[6],zero,xmm8[7],zero
vpacksswb %ymm8, %ymm0, %ymm8
vextracti128 $0x1, %ymm8, %xmm8
vpextrb $0x8, %xmm8, %eax
testb $0x1, %al
je 0x4f9f13
vpextrb $0x8, %xmm7, 0x19(%r15,%r8)
vpxor %xmm6, %xmm13, %xmm8
vpxor %xmm5, %xmm13, %xmm9
vpcmpgtq %xmm8, %xmm9, %xmm8
vpackssdw %xmm8, %xmm8, %xmm8
vpxor %xmm11, %xmm8, %xmm8
vpackssdw %xmm8, %xmm8, %xmm8
vpermq $0x55, %ymm8, %ymm8     # ymm8 = ymm8[1,1,1,1]
vpacksswb %ymm8, %ymm0, %ymm8
vextracti128 $0x1, %ymm8, %xmm8
vpextrb $0x9, %xmm8, %eax
testb $0x1, %al
je 0x4f9f52
vpextrb $0x9, %xmm7, 0x1a(%r15,%r8)
vpxor %ymm5, %ymm12, %ymm5
vpcmpgtq %ymm4, %ymm5, %ymm5
vpshuflw $0xe8, %ymm5, %ymm8     # ymm8 = ymm5[0,2,2,3,4,5,6,7,8,10,10,11,12,13,14,15]
vpxor 0x1342f8(%rip), %ymm8, %ymm8 # 0x62e260
vpermd %ymm8, %ymm14, %ymm8
vpackssdw %xmm8, %xmm8, %xmm8
vpermq $0x55, %ymm8, %ymm8     # ymm8 = ymm8[1,1,1,1]
vpacksswb %ymm8, %ymm0, %ymm8
vextracti128 $0x1, %ymm8, %xmm8
vpextrb $0xa, %xmm8, %eax
testb $0x1, %al
vmovdqu 0xa0(%rsp), %ymm9
je 0x4f9f9e
vpextrb $0xa, %xmm7, 0x1b(%r15,%r8)
vextracti128 $0x1, %ymm5, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpxor %xmm5, %xmm11, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpermq $0x55, %ymm5, %ymm5     # ymm5 = ymm5[1,1,1,1]
vpacksswb %ymm5, %ymm0, %ymm5
vextracti128 $0x1, %ymm5, %xmm5
vpextrb $0xb, %xmm5, %eax
testb $0x1, %al
je 0x4f9fd2
vpextrb $0xb, %xmm7, 0x1c(%r15,%r8)
vpor 0x133f26(%rip), %ymm1, %ymm1 # 0x62df00
vpxor %xmm6, %xmm13, %xmm5
vpxor %xmm1, %xmm13, %xmm8
vpcmpgtq %xmm5, %xmm8, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpxor %xmm5, %xmm11, %xmm5
vpermq $0x55, %ymm5, %ymm5     # ymm5 = ymm5[1,1,1,1]
vpackssdw %ymm5, %ymm0, %ymm5
vpacksswb %ymm5, %ymm0, %ymm5
vextracti128 $0x1, %ymm5, %xmm5
vpextrb $0xc, %xmm5, %eax
testb $0x1, %al
je 0x4fa015
vpextrb $0xc, %xmm7, 0x1d(%r15,%r8)
vpxor %xmm6, %xmm13, %xmm5
vpxor %xmm1, %xmm13, %xmm8
vpcmpgtq %xmm5, %xmm8, %xmm5
vpshufhw $0x84, %xmm5, %xmm5     # xmm5 = xmm5[0,1,2,3,4,5,4,6]
vpxor %xmm5, %xmm11, %xmm5
vpermq $0x55, %ymm5, %ymm5     # ymm5 = ymm5[1,1,1,1]
vpackssdw %ymm5, %ymm0, %ymm5
vpacksswb %ymm5, %ymm0, %ymm5
vextracti128 $0x1, %ymm5, %xmm5
vpextrb $0xd, %xmm5, %eax
testb $0x1, %al
je 0x4fa051
vpextrb $0xd, %xmm7, 0x1e(%r15,%r8)
vpxor %ymm1, %ymm12, %ymm1
vpcmpgtq %ymm4, %ymm1, %ymm1
vpackssdw %ymm1, %ymm0, %ymm4
vpxor 0x1341fa(%rip), %ymm4, %ymm4 # 0x62e260
vpackssdw %ymm4, %ymm0, %ymm4
vpacksswb %ymm4, %ymm0, %ymm4
vextracti128 $0x1, %ymm4, %xmm4
vpextrb $0xe, %xmm4, %eax
testb $0x1, %al
je 0x4fa086
vpextrb $0xe, %xmm7, 0x1f(%r15,%r8)
vpshufhw $0x84, %ymm1, %ymm1     # ymm1 = ymm1[0,1,2,3,4,5,4,6,8,9,10,11,12,13,12,14]
vpxor 0x1341cd(%rip), %ymm1, %ymm1 # 0x62e260
vpackssdw %ymm1, %ymm0, %ymm1
vpacksswb %ymm1, %ymm0, %ymm1
vextracti128 $0x1, %ymm1, %xmm1
vpextrb $0xf, %xmm1, %eax
testb $0x1, %al
je 0x4fa0b3
vpextrb $0xf, %xmm7, 0x20(%r15,%r8)
addq $0x20, %r8
vmovdqu 0x170(%rsp), %ymm4
vpaddd %ymm4, %ymm0, %ymm0
vpaddd %ymm4, %ymm10, %ymm10
vmovdqu 0x60(%rsp), %ymm1
vpaddd %ymm4, %ymm1, %ymm1
vmovdqu %ymm1, 0x60(%rsp)
vpaddd %ymm4, %ymm9, %ymm9
cmpq %r8, %r9
jne 0x4f9871
movl %esi, 0x54(%rsp)
vpxor %xmm0, %xmm0, %xmm0
vpsubsb %ymm2, %ymm0, %ymm0
leal -0x1(%r14), %eax
shlq $0x5, %rax
movq 0x10(%rsp), %rcx
addq %rax, %rcx
movl %r14d, %edx
vmovdqa %ymm0, (%rcx)
vpsubsb %ymm3, %ymm0, %ymm0
addq $-0x20, %rcx
decl %edx
jg 0x4fa104
movq 0x20(%rsp), %rcx
addq %rax, %rcx
movq %rcx, 0x100(%rsp)
movq %r14, %r9
shlq $0x5, %r9
movq 0x80(%rsp), %rcx
imulq %rcx, %r14
leaq (,%r14,4), %rdx
leaq (,%r14,8), %rbp
movq %r14, %r10
shlq $0x4, %r10
leaq (%r14,%r14,8), %rax
leaq (%rax,%rax,2), %rax
addq %r14, %rax
movq %r14, %r11
shlq $0x5, %r11
imulq $0x2c, %r14, %rbx
imulq $0x34, %r14, %rsi
movq %rsi, 0xa0(%rsp)
imulq $0x38, %r14, %rsi
movq %rsi, 0x270(%rsp)
imulq $0x3c, %r14, %rsi
movq %rsi, 0x250(%rsp)
movq %r14, %rsi
shlq $0x6, %rsi
movq %rsi, 0x230(%rsp)
leaq (%rsi,%r14,4), %rsi
movq %rsi, 0x210(%rsp)
imulq $0x4c, %r14, %rsi
movq %rsi, 0x1f0(%rsp)
imulq $0x54, %r14, %rsi
movq %rsi, 0x1d0(%rsp)
imulq $0x58, %r14, %rsi
movq %rsi, 0x1b0(%rsp)
imulq $0x5c, %r14, %rsi
movq %rsi, 0x190(%rsp)
imulq $0x64, %r14, %rsi
movq %rsi, 0x170(%rsp)
imulq $0x68, %r14, %rsi
movq %rsi, 0x290(%rsp)
imulq $0x6c, %r14, %rsi
movq %rsi, 0x18(%rsp)
imulq $0x70, %r14, %rsi
movq %rsi, 0x40(%rsp)
imulq $0x74, %r14, %rsi
movq %rsi, 0x38(%rsp)
imulq $0x78, %r14, %rsi
movq %rsi, 0x168(%rsp)
imulq $0x7c, %r14, %rsi
movq %rsi, 0x160(%rsp)
vmovdqu 0x310(%rsp), %ymm10
vmovdqa %ymm10, %ymm0
vmovdqu 0x2f0(%rsp), %ymm11
vmovdqa %ymm11, %ymm1
leaq (,%rcx,4), %rcx
movq %rcx, 0x158(%rsp)
leaq (%rdx,%rdx,2), %rcx
movq %rcx, 0x150(%rsp)
leaq (%rdx,%rdx,4), %rcx
movq %rcx, 0x148(%rsp)
leaq (%rbp,%rbp,2), %rcx
movq %rcx, 0xf8(%rsp)
movq %rdx, 0x60(%rsp)
leaq (%rdx,%rdx,8), %rcx
movq %rcx, 0xf0(%rsp)
leaq (%rbp,%rbp,4), %rcx
movq %rcx, 0xe8(%rsp)
leaq (%r10,%r10,2), %rcx
movq %rcx, 0xe0(%rsp)
leaq (%rbp,%rbp,8), %rcx
movq %rcx, 0xd8(%rsp)
leaq (%r10,%r10,4), %rcx
movq %rcx, 0xd0(%rsp)
leaq (%r11,%r11,2), %rcx
movq %rcx, 0xc8(%rsp)
movq $0x0, 0x98(%rsp)
xorl %r14d, %r14d
movq 0x48(%rsp), %r8
vmovdqu 0x2d0(%rsp), %ymm12
vmovdqu 0x2b0(%rsp), %ymm13
movq %r15, 0x30(%rsp)
movq %rbp, 0x140(%rsp)
movq %r10, 0x138(%rsp)
movq %rax, 0x130(%rsp)
movq %r11, 0x128(%rsp)
movq %rbx, 0x120(%rsp)
movq 0xf8(%rsp), %rax
movq 0xf0(%rsp), %r10
movq 0xe8(%rsp), %r11
movq 0xe0(%rsp), %rbp
movq 0xc8(%rsp), %rbx
movq 0x100(%rsp), %rdx
vmovdqa (%rdx), %ymm4
vinserti128 $0x1, %xmm4, %ymm0, %ymm5
vpalignr $0xf, %ymm5, %ymm4, %ymm4 # ymm4 = ymm5[15],ymm4[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],ymm5[31],ymm4[16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]
vpinsrb $0x0, (%r15,%r14), %xmm4, %xmm5
vpblendd $0xf, %ymm5, %ymm4, %ymm6 # ymm6 = ymm5[0,1,2,3],ymm4[4,5,6,7]
movq 0x88(%rsp), %rdx
movq 0x10(%rdx), %rdx
movq 0x90(%rsp), %rsi
movq %r14, %rcx
movzbl (%rsi,%r14), %esi
movslq (%rdx,%rsi,4), %rsi
movq 0x108(%rsp), %rdx
imulq %rsi, %rdx
shlq $0x5, %rdx
addq 0x110(%rsp), %rdx
movq 0x10(%rsp), %r15
vpsubsb (%r15), %ymm10, %ymm5
xorl %esi, %esi
vmovdqa %ymm10, %ymm4
movq 0x20(%rsp), %r13
vpaddsb (%rdx,%rsi), %ymm6, %ymm6
vmovdqa (%r13,%rsi), %ymm7
vmovdqa (%rdi,%rsi), %ymm8
vpsubsb %ymm3, %ymm8, %ymm8
vpsubsb %ymm2, %ymm7, %ymm9
vpmaxsb %ymm9, %ymm8, %ymm8
vpaddsb (%r15,%rsi), %ymm5, %ymm5
vpmaxsb %ymm5, %ymm4, %ymm4
vpmaxsb %ymm6, %ymm8, %ymm5
vmovdqa %ymm8, (%rdi,%rsi)
vmovdqa %ymm5, (%r8,%rsi)
addq $0x20, %rsi
vmovdqa %ymm7, %ymm6
cmpq %rsi, %r9
jne 0x4fa3a9
vinserti128 $0x1, %xmm5, %ymm0, %ymm6
vpalignr $0xf, %ymm6, %ymm5, %ymm5 # ymm5 = ymm6[15],ymm5[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],ymm6[31],ymm5[16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]
movq 0x30(%rsp), %rdx
vpinsrb $0x0, 0x1(%rdx,%rcx), %xmm5, %xmm6
incq %rcx
movq %rcx, 0x118(%rsp)
vpblendd $0xf, %ymm6, %ymm5, %ymm5 # ymm5 = ymm6[0,1,2,3],ymm5[4,5,6,7]
vpaddsb (%r15), %ymm5, %ymm6
vpmaxsb %ymm6, %ymm4, %ymm4
movl $0x1e, %edx
vperm2i128 $0x28, %ymm4, %ymm4, %ymm6 # ymm6 = zero,zero,ymm4[0,1]
vpalignr $0xf, %ymm6, %ymm4, %ymm6 # ymm6 = ymm6[15],ymm4[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],ymm6[31],ymm4[16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]
vpaddsb %ymm6, %ymm13, %ymm6
vpmaxsb %ymm6, %ymm4, %ymm4
decl %edx
jne 0x4fa428
vperm2i128 $0x28, %ymm4, %ymm4, %ymm6 # ymm6 = zero,zero,ymm4[0,1]
vpalignr $0xf, %ymm6, %ymm4, %ymm4 # ymm4 = ymm6[15],ymm4[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],ymm6[31],ymm4[16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]
vpaddsb %ymm4, %ymm12, %ymm4
vpmaxsb %ymm4, %ymm5, %ymm6
movq 0x98(%rsp), %rsi
xorl %edx, %edx
movq 0xd8(%rsp), %r13
movq 0xd0(%rsp), %rcx
vpsubsb %ymm3, %ymm4, %ymm4
vpsubsb %ymm2, %ymm6, %ymm5
vpmaxsb %ymm5, %ymm4, %ymm4
vpmaxsb (%r8,%rdx), %ymm4, %ymm6
movq 0x20(%rsp), %rdi
vmovdqa %ymm6, (%rdi,%rdx)
movq 0x10(%r12), %rdi
movq (%rdi), %rdi
vmovd %xmm6, %r8d
movsbl %r8b, %r8d
movl %r8d, (%rdi,%rsi)
vpextrb $0x1, %xmm6, %r8d
addq %rsi, %rdi
movsbl %r8b, %r8d
movq %r12, %r15
vpextrb $0x2, %xmm6, %r12d
movq 0x60(%rsp), %r14
movl %r8d, (%r14,%rdi)
movsbl %r12b, %r8d
vpextrb $0x3, %xmm6, %r12d
movq 0x140(%rsp), %r14
movl %r8d, (%r14,%rdi)
movsbl %r12b, %r8d
vpextrb $0x4, %xmm6, %r12d
movq 0x150(%rsp), %r14
movl %r8d, (%r14,%rdi)
movsbl %r12b, %r8d
vpextrb $0x5, %xmm6, %r12d
movq 0x138(%rsp), %r14
movl %r8d, (%r14,%rdi)
movsbl %r12b, %r8d
vpextrb $0x6, %xmm6, %r12d
movq 0x148(%rsp), %r14
movl %r8d, (%r14,%rdi)
movsbl %r12b, %r8d
vpextrb $0x7, %xmm6, %r12d
movl %r8d, (%rax,%rdi)
movsbl %r12b, %r8d
vpextrb $0x8, %xmm6, %r12d
movq 0x130(%rsp), %r14
movl %r8d, (%r14,%rdi)
movsbl %r12b, %r8d
vpextrb $0x9, %xmm6, %r12d
movq 0x128(%rsp), %r14
movl %r8d, (%r14,%rdi)
movsbl %r12b, %r8d
vpextrb $0xa, %xmm6, %r12d
movl %r8d, (%r10,%rdi)
movsbl %r12b, %r8d
vpextrb $0xb, %xmm6, %r12d
movl %r8d, (%r11,%rdi)
movsbl %r12b, %r8d
vpextrb $0xc, %xmm6, %r12d
movq 0x120(%rsp), %r14
movl %r8d, (%r14,%rdi)
movsbl %r12b, %r8d
vpextrb $0xd, %xmm6, %r12d
movl %r8d, (%rbp,%rdi)
movsbl %r12b, %r8d
vpextrb $0xe, %xmm6, %r12d
movq 0xa0(%rsp), %r14
movl %r8d, (%r14,%rdi)
movsbl %r12b, %r8d
vpextrb $0xf, %xmm6, %r12d
movq 0x270(%rsp), %r14
movl %r8d, (%r14,%rdi)
movsbl %r12b, %r8d
movq 0x250(%rsp), %r14
movl %r8d, (%r14,%rdi)
vextracti128 $0x1, %ymm6, %xmm7
vmovd %xmm7, %r8d
movsbl %r8b, %r8d
vpextrb $0x1, %xmm7, %r12d
movq 0x230(%rsp), %r14
movl %r8d, (%r14,%rdi)
movsbl %r12b, %r8d
vpextrb $0x2, %xmm7, %r12d
movq 0x210(%rsp), %r14
movl %r8d, (%r14,%rdi)
movsbl %r12b, %r8d
vpextrb $0x3, %xmm7, %r12d
movl %r8d, (%r13,%rdi)
movsbl %r12b, %r8d
vpextrb $0x4, %xmm7, %r12d
movq 0x1f0(%rsp), %r14
movl %r8d, (%r14,%rdi)
movsbl %r12b, %r8d
vpextrb $0x5, %xmm7, %r12d
movl %r8d, (%rcx,%rdi)
movsbl %r12b, %r8d
vpextrb $0x6, %xmm7, %r12d
movq 0x1d0(%rsp), %r14
movl %r8d, (%r14,%rdi)
movsbl %r12b, %r8d
vpextrb $0x7, %xmm7, %r12d
movq 0x1b0(%rsp), %r14
movl %r8d, (%r14,%rdi)
movsbl %r12b, %r8d
vpextrb $0x8, %xmm7, %r12d
movq 0x190(%rsp), %r14
movl %r8d, (%r14,%rdi)
movsbl %r12b, %r8d
vpextrb $0x9, %xmm7, %r12d
movl %r8d, (%rbx,%rdi)
movsbl %r12b, %r8d
vpextrb $0xa, %xmm7, %r12d
movq 0x170(%rsp), %r14
movl %r8d, (%r14,%rdi)
movsbl %r12b, %r8d
vpextrb $0xb, %xmm7, %r12d
movq 0x290(%rsp), %r14
movl %r8d, (%r14,%rdi)
movsbl %r12b, %r8d
vpextrb $0xc, %xmm7, %r12d
movq 0x18(%rsp), %r14
movl %r8d, (%r14,%rdi)
movsbl %r12b, %r8d
vpextrb $0xd, %xmm7, %r12d
movq 0x40(%rsp), %r14
movl %r8d, (%r14,%rdi)
movsbl %r12b, %r8d
vpextrb $0xe, %xmm7, %r12d
movq 0x38(%rsp), %r14
movl %r8d, (%r14,%rdi)
movsbl %r12b, %r8d
vpextrb $0xf, %xmm7, %r12d
movq 0x168(%rsp), %r14
movl %r8d, (%r14,%rdi)
movsbl %r12b, %r8d
movq %r15, %r12
movq 0x160(%rsp), %r14
movl %r8d, (%r14,%rdi)
movq 0x48(%rsp), %r8
vpminsb %ymm6, %ymm1, %ymm1
vpmaxsb %ymm6, %ymm0, %ymm0
addq $0x20, %rdx
addq 0x158(%rsp), %rsi
cmpq %rdx, %r9
jne 0x4fa470
addq $0x4, 0x98(%rsp)
movq 0x118(%rsp), %r14
cmpq 0x80(%rsp), %r14
movq 0x28(%rsp), %rdi
movq 0x30(%rsp), %r15
jne 0x4fa337
movl 0x5c(%rsp), %eax
shlq $0x5, %rax
movq 0x20(%rsp), %rbx
vmovdqa (%rbx,%rax), %ymm2
cmpl $0x1e, 0x8(%rsp)
movl 0x58(%rsp), %edx
jg 0x4fa7a5
xorl %eax, %eax
movl 0xc(%rsp), %ecx
movq 0x10(%rsp), %rdi
movl 0x54(%rsp), %esi
vperm2i128 $0x28, %ymm2, %ymm2, %ymm3 # ymm3 = zero,zero,ymm2[0,1]
vpalignr $0xf, %ymm3, %ymm2, %ymm2 # ymm2 = ymm3[15],ymm2[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],ymm3[31],ymm2[16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]
incl %eax
cmpl %esi, %eax
jl 0x4fa791
jmp 0x4fa7ae
movl 0xc(%rsp), %ecx
movq 0x10(%rsp), %rdi
vpcmpgtb %ymm1, %ymm10, %ymm1
vpcmpgtb %ymm11, %ymm0, %ymm0
vpor %ymm1, %ymm0, %ymm0
vpmovmskb %ymm0, %eax
testl %eax, %eax
je 0x4fa7d1
orb $0x40, 0xc(%r12)
xorl %eax, %eax
xorl %edx, %edx
xorl %ecx, %ecx
jmp 0x4fa7dd
vextracti128 $0x1, %ymm2, %xmm0
vpextrb $0xf, %xmm0, %eax
movsbl %al, %eax
movl %eax, (%r12)
movl %ecx, 0x4(%r12)
movl %edx, 0x8(%r12)
vzeroupper
callq 0x20a60d
movq %rbx, %rdi
callq 0x20a60d
movq 0x48(%rsp), %rdi
callq 0x20a60d
movq 0x30(%rsp), %rdi
callq 0x20a60d
movq 0x28(%rsp), %rdi
callq 0x20a60d
jmp 0x4fa857
callq 0x1e7c4b
jmp 0x4fa854
callq 0x1e7c25
jmp 0x4fa854
callq 0x1e7bff
jmp 0x4fa854
callq 0x1e7bd9
jmp 0x4fa854
callq 0x1e7bb3
jmp 0x4fa854
callq 0x1e7b8d
jmp 0x4fa854
callq 0x1e7b67
jmp 0x4fa854
callq 0x1e7b41
xorl %r12d, %r12d
movq %r12, %rax
addq $0x338, %rsp            # imm = 0x338
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq