// Based on Go's implementation; BSD license use math; fn applypaeth(dec: *decoder) void = { const bpp = dec.bpp; let a = 0i32, b = 0i32, c = 0i32, pa = 0i32, pb = 0i32, pc = 0i32; for (let i = 0z; i < bpp; i += 1) { a = 0; c = 0; for (let j = i; j < len(dec.cr); j += bpp) { b = dec.pr[j]: i32; pa = b - c; pb = a - c; pc = math::absi32(pa + pb): i32; pa = math::absi32(pa): i32; pb = math::absi32(pb): i32; if (pa <= pb && pa <= pc) { void; // no-op } else if (pb <= pc) { a = b; } else { a = c; }; a += dec.cr[j]: i32; a &= 0xff; dec.cr[j] = a: u8; c = b; }; }; };