static int lag_decode_zero_run_line(LagarithContext *l, uint8_t *dst,
                                    const uint8_t *src, const uint8_t *src_end,
                                    int width, int esc_count)
{
    int i = 0;
    int count;
    uint8_t zero_run = 0;
    const uint8_t *src_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);
        if (end - dst < count) {
            av_log(l->avctx, AV_LOG_ERROR, "Too many zeros remaining.\n");
            return AVERROR_INVALIDDATA;
        }
        memset(dst, 0, count);
        l->zeros_rem -= count;
        dst += count;
    }
    while (dst < end) {
        i = 0;
        while (!zero_run && dst + i < end) {
            i++;
            if (i+2 >= src_end - src)
                return AVERROR_INVALIDDATA;
            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;
            dst += i;
        }
    }
    return  src - src_start;
}
static int lag_decode_zero_run_line(LagarithContext *l, uint8_t *dst,
                                    const uint8_t *src, const uint8_t *src_end,
                                    int width, int esc_count)
{
    int i = 0;
    int count;
    uint8_t zero_run = 0;
    const uint8_t *src_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);
        if (end - dst < count) {
            av_log(l->avctx, AV_LOG_ERROR, "Too many zeros remaining.\n");
            return AVERROR_INVALIDDATA;
        }
        memset(dst, 0, count);
        l->zeros_rem -= count;
        dst += count;
    }
    while (dst < end) {
        i = 0;
        while (!zero_run && dst + i < end) {
            i++;
            if (i+2 >= src_end - src)
                return AVERROR_INVALIDDATA;
            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;
            dst += i;
        }
    }
    return  src - src_start;
}
static int FUNC_0(LagarithContext *VAR_0, uint8_t *VAR_1,
                                    const uint8_t *VAR_2, const uint8_t *VAR_3,
                                    int VAR_4, int VAR_5)
{
    int VAR_6 = 0;
    int VAR_7;
    uint8_t zero_run = 0;
    const uint8_t *VAR_8 = VAR_2;
    uint8_t mask1 = -(VAR_5 < 2);
    uint8_t mask2 = -(VAR_5 < 3);
    uint8_t *end = VAR_1 + (VAR_4 - 2);
output_zeros:
    if (VAR_0->zeros_rem) {
        VAR_7 = FFMIN(VAR_0->zeros_rem, VAR_4 - VAR_6);
        if (end - VAR_1 < VAR_7) {
            av_log(VAR_0->avctx, AV_LOG_ERROR, "Too many zeros remaining.\n");
            return AVERROR_INVALIDDATA;
        }
        memset(VAR_1, 0, VAR_7);
        VAR_0->zeros_rem -= VAR_7;
        VAR_1 += VAR_7;
    }
    while (VAR_1 < end) {
        VAR_6 = 0;
        while (!zero_run && VAR_1 + VAR_6 < end) {
            VAR_6++;
            if (VAR_6+2 >= VAR_3 - VAR_2)
                return AVERROR_INVALIDDATA;
            zero_run =
                !(VAR_2[VAR_6] | (VAR_2[VAR_6 + 1] & mask1) | (VAR_2[VAR_6 + 2] & mask2));
        }
        if (zero_run) {
            zero_run = 0;
            VAR_6 += VAR_5;
            memcpy(VAR_1, VAR_2, VAR_6);
            VAR_1 += VAR_6;
            VAR_0->zeros_rem = lag_calc_zero_run(VAR_2[VAR_6]);
            VAR_2 += VAR_6 + 1;
            goto output_zeros;
        } else {
            memcpy(VAR_1, VAR_2, VAR_6);
            VAR_2 += VAR_6;
            VAR_1 += VAR_6;
        }
    }
    return  VAR_2 - VAR_8;
}
static int FUNC_0(LagarithContext *VAR_0, uint8_t *VAR_1,
const uint8_t *VAR_2, const uint8_t *VAR_3,
int VAR_4, int VAR_5)
{ int VAR_6 = 0; int VAR_7; uint8_t zero_run = 0; const uint8_t *VAR_8 = VAR_2; uint8_t mask1 = -(VAR_5 < 2); uint8_t mask2 = -(VAR_5 < 3); uint8_t *end = VAR_1 + (VAR_4 - 2); output_zeros:
if (VAR_0->zeros_rem) { VAR_7 = FFMIN(VAR_0->zeros_rem, VAR_4 - VAR_6); if (end - VAR_1 < VAR_7) { av_log(VAR_0->avctx, AV_LOG_ERROR, "Too many zeros remaining.\n"); return AVERROR_INVALIDDATA; } memset(VAR_1, 0, VAR_7); VAR_0->zeros_rem -= VAR_7; VAR_1 += VAR_7; } while (VAR_1 < end) { VAR_6 = 0; while (!zero_run && VAR_1 + VAR_6 < end) { VAR_6++; if (VAR_6+2 >= VAR_3 - VAR_2)
return AVERROR_INVALIDDATA; zero_run =
!(VAR_2[VAR_6] | (VAR_2[VAR_6 + 1] & mask1) | (VAR_2[VAR_6 + 2] & mask2)); } if (zero_run) { zero_run = 0; VAR_6 += VAR_5; memcpy(VAR_1, VAR_2, VAR_6); VAR_1 += VAR_6; VAR_0->zeros_rem = lag_calc_zero_run(VAR_2[VAR_6]); VAR_2 += VAR_6 + 1; goto output_zeros; } else { memcpy(VAR_1, VAR_2, VAR_6); VAR_2 += VAR_6; VAR_1 += VAR_6; } } return  VAR_2 - VAR_8; }