static int lag_decode_zero_run_line(LagarithContext *l, uint8_t *dst,

                                    const uint8_t *src, int width,

                                    int esc_count)

{

    int i = 0;

    int count;

    uint8_t zero_run = 0;

    const uint8_t *start = src;

    uint8_t mask1 = -(esc_count < 2);

    uint8_t mask2 = -(esc_count < 3);

    uint8_t *end = dst + (width - 2);



output_zeros:

    if (l->zeros_rem) {

        count = FFMIN(l->zeros_rem, width - i);

        memset(dst, 0, count);

        l->zeros_rem -= count;

        dst += count;

    }



    while (dst < end) {

        i = 0;

        while (!zero_run && dst + i < end) {

            i++;

            zero_run =

                !(src[i] | (src[i + 1] & mask1) | (src[i + 2] & mask2));

        }

        if (zero_run) {

            zero_run = 0;

            i += esc_count;

            memcpy(dst, src, i);

            dst += i;

            l->zeros_rem = lag_calc_zero_run(src[i]);



            src += i + 1;

            goto output_zeros;

        } else {

            memcpy(dst, src, i);

            src += i;

        }

    }

    return  src - start;

}

static int lag_decode_zero_run_line(LagarithContext *l, uint8_t *dst,

                                    const uint8_t *src, int width,

                                    int esc_count)

{

    int i = 0;

    int count;

    uint8_t zero_run = 0;

    const uint8_t *start = src;

    uint8_t mask1 = -(esc_count < 2);

    uint8_t mask2 = -(esc_count < 3);

    uint8_t *end = dst + (width - 2);



output_zeros:

    if (l->zeros_rem) {

        count = FFMIN(l->zeros_rem, width - i);

        memset(dst, 0, count);

        l->zeros_rem -= count;

        dst += count;

    }



    while (dst < end) {

        i = 0;

        while (!zero_run && dst + i < end) {

            i++;

            zero_run =

                !(src[i] | (src[i + 1] & mask1) | (src[i + 2] & mask2));

        }

        if (zero_run) {

            zero_run = 0;

            i += esc_count;

            memcpy(dst, src, i);

            dst += i;

            l->zeros_rem = lag_calc_zero_run(src[i]);



            src += i + 1;

            goto output_zeros;

        } else {

            memcpy(dst, src, i);

            src += i;

        }

    }

    return  src - start;

}

static int FUNC_0(LagarithContext *VAR_0, uint8_t *VAR_1,

                                    const uint8_t *VAR_2, int VAR_3,

                                    int VAR_4)

{

    int VAR_5 = 0;

    int VAR_6;

    uint8_t zero_run = 0;

    const uint8_t *VAR_7 = VAR_2;

    uint8_t mask1 = -(VAR_4 < 2);

    uint8_t mask2 = -(VAR_4 < 3);

    uint8_t *end = VAR_1 + (VAR_3 - 2);



output_zeros:

    if (VAR_0->zeros_rem) {

        VAR_6 = FFMIN(VAR_0->zeros_rem, VAR_3 - VAR_5);

        memset(VAR_1, 0, VAR_6);

        VAR_0->zeros_rem -= VAR_6;

        VAR_1 += VAR_6;

    }



    while (VAR_1 < end) {

        VAR_5 = 0;

        while (!zero_run && VAR_1 + VAR_5 < end) {

            VAR_5++;

            zero_run =

                !(VAR_2[VAR_5] | (VAR_2[VAR_5 + 1] & mask1) | (VAR_2[VAR_5 + 2] & mask2));

        }

        if (zero_run) {

            zero_run = 0;

            VAR_5 += VAR_4;

            memcpy(VAR_1, VAR_2, VAR_5);

            VAR_1 += VAR_5;

            VAR_0->zeros_rem = lag_calc_zero_run(VAR_2[VAR_5]);



            VAR_2 += VAR_5 + 1;

            goto output_zeros;

        } else {

            memcpy(VAR_1, VAR_2, VAR_5);

            VAR_2 += VAR_5;

        }

    }

    return  VAR_2 - VAR_7;

}

static int FUNC_0(LagarithContext *VAR_0, uint8_t *VAR_1,
const uint8_t *VAR_2, int VAR_3,
int VAR_4)
{ int VAR_5 = 0; int VAR_6; uint8_t zero_run = 0; const uint8_t *VAR_7 = VAR_2; uint8_t mask1 = -(VAR_4 < 2); uint8_t mask2 = -(VAR_4 < 3); uint8_t *end = VAR_1 + (VAR_3 - 2); output_zeros:
if (VAR_0->zeros_rem) { VAR_6 = FFMIN(VAR_0->zeros_rem, VAR_3 - VAR_5); memset(VAR_1, 0, VAR_6); VAR_0->zeros_rem -= VAR_6; VAR_1 += VAR_6; } while (VAR_1 < end) { VAR_5 = 0; while (!zero_run && VAR_1 + VAR_5 < end) { VAR_5++; zero_run =
!(VAR_2[VAR_5] | (VAR_2[VAR_5 + 1] & mask1) | (VAR_2[VAR_5 + 2] & mask2)); } if (zero_run) { zero_run = 0; VAR_5 += VAR_4; memcpy(VAR_1, VAR_2, VAR_5); VAR_1 += VAR_5; VAR_0->zeros_rem = lag_calc_zero_run(VAR_2[VAR_5]); VAR_2 += VAR_5 + 1; goto output_zeros; } else { memcpy(VAR_1, VAR_2, VAR_5); VAR_2 += VAR_5; } } return  VAR_2 - VAR_7; }