program keccak_permutation
use std.crypto.keccak256
use vm.core.convert
fn read_lane() -> keccak256.Lane { let lo = convert.as_u32(pub_read())
let hi = convert.as_u32(pub_read())
keccak256.Lane { lo: lo, hi: hi } }
fn main() {
let state = keccak256.KeccakState { s00: read_lane(), s10: read_lane(), s20: read_lane(), s30: read_lane(), s40: read_lane(), s01: read_lane(), s11: read_lane(), s21: read_lane(), s31: read_lane(), s41: read_lane(), s02: read_lane(), s12: read_lane(), s22: read_lane(), s32: read_lane(), s42: read_lane(), s03: read_lane(), s13: read_lane(), s23: read_lane(), s33: read_lane(), s43: read_lane(), s04: read_lane(), s14: read_lane(), s24: read_lane(), s34: read_lane(), s44: read_lane() }
let out = keccak256.keccak_f1600(state)
pub_write(convert.as_field(out.s00.lo))
pub_write(convert.as_field(out.s00.hi))
pub_write(convert.as_field(out.s10.lo))
pub_write(convert.as_field(out.s10.hi))
pub_write(convert.as_field(out.s20.lo))
pub_write(convert.as_field(out.s20.hi))
pub_write(convert.as_field(out.s30.lo))
pub_write(convert.as_field(out.s30.hi))
pub_write(convert.as_field(out.s40.lo))
pub_write(convert.as_field(out.s40.hi))
pub_write(convert.as_field(out.s01.lo))
pub_write(convert.as_field(out.s01.hi))
pub_write(convert.as_field(out.s11.lo))
pub_write(convert.as_field(out.s11.hi))
pub_write(convert.as_field(out.s21.lo))
pub_write(convert.as_field(out.s21.hi))
pub_write(convert.as_field(out.s31.lo))
pub_write(convert.as_field(out.s31.hi))
pub_write(convert.as_field(out.s41.lo))
pub_write(convert.as_field(out.s41.hi))
pub_write(convert.as_field(out.s02.lo))
pub_write(convert.as_field(out.s02.hi))
pub_write(convert.as_field(out.s12.lo))
pub_write(convert.as_field(out.s12.hi))
pub_write(convert.as_field(out.s22.lo))
pub_write(convert.as_field(out.s22.hi))
pub_write(convert.as_field(out.s32.lo))
pub_write(convert.as_field(out.s32.hi))
pub_write(convert.as_field(out.s42.lo))
pub_write(convert.as_field(out.s42.hi))
pub_write(convert.as_field(out.s03.lo))
pub_write(convert.as_field(out.s03.hi))
pub_write(convert.as_field(out.s13.lo))
pub_write(convert.as_field(out.s13.hi))
pub_write(convert.as_field(out.s23.lo))
pub_write(convert.as_field(out.s23.hi))
pub_write(convert.as_field(out.s33.lo))
pub_write(convert.as_field(out.s33.hi))
pub_write(convert.as_field(out.s43.lo))
pub_write(convert.as_field(out.s43.hi))
pub_write(convert.as_field(out.s04.lo))
pub_write(convert.as_field(out.s04.hi))
pub_write(convert.as_field(out.s14.lo))
pub_write(convert.as_field(out.s14.hi))
pub_write(convert.as_field(out.s24.lo))
pub_write(convert.as_field(out.s24.hi))
pub_write(convert.as_field(out.s34.lo))
pub_write(convert.as_field(out.s34.hi))
pub_write(convert.as_field(out.s44.lo))
pub_write(convert.as_field(out.s44.hi))
}