"import shield_swap_multisig_core.aleo;\n\nprogram shield_swap_freezelist.aleo;\n\nstruct ChecksumEdition:\n    checksum as [u8; 32u32];\n    edition as u16;\n\nmapping freeze_list:\n    key as address.public;\n    value as boolean.public;\n\nmapping freeze_list_index:\n    key as u32.public;\n    value as address.public;\n\nmapping freeze_list_last_index:\n    key as boolean.public;\n    value as u32.public;\n\nmapping freeze_list_root:\n    key as u8.public;\n    value as field.public;\n\nmapping root_updated_height:\n    key as boolean.public;\n    value as u32.public;\n\nmapping block_height_window:\n    key as boolean.public;\n    value as u32.public;\n\nmapping previous_root_window:\n    key as boolean.public;\n    value as u32.public;\n\nmapping address_to_role:\n    key as address.public;\n    value as u16.public;\n\nfunction initialize:\n    input r0 as address.public;\n    input r1 as u32.public;\n    async initialize r0 self.caller r1 into r2;\n    output r2 as shield_swap_freezelist.aleo/initialize.future;\n\nfinalize initialize:\n    input r0 as address.public;\n    input r1 as address.public;\n    input r2 as u32.public;\n    contains freeze_list_root[1u8] into r3;\n    not r3 into r4;\n    assert.eq r4 true;\n    assert.eq r1 aleo1fxxkwxer36ml7c8zk5dmnl7mvq938mw87d9z2vsm7jcef6fk3sqscvk3wf;\n    set 8u16 into address_to_role[r0];\n    set r2 into block_height_window[true];\n    set 0u32 into freeze_list_last_index[true];\n    set 3642222252059314292809609689035560016959342421640560347114299934615987159853field into freeze_list_root[1u8];\n    set false into freeze_list[aleo1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq3ljyzc];\n    set aleo1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq3ljyzc into freeze_list_index[0u32];\n\nfunction update_role:\n    input r0 as address.public;\n    input r1 as u16.public;\n    async update_role r0 self.caller r1 into r2;\n    output r2 as shield_swap_freezelist.aleo/update_role.future;\n\nfinalize update_role:\n    input r0 as address.public;\n    input r1 as address.public;\n    input r2 as u16.public;\n    get address_to_role[r1] into r3;\n    and r3 8u16 into r4;\n    is.eq r4 8u16 into r5;\n    assert.eq r5 true;\n    is.eq r1 r0 into r6;\n    branch.eq r6 false to end_then_0_0;\n    and r2 8u16 into r7;\n    is.eq r7 8u16 into r8;\n    assert.eq r8 true;\n    branch.eq true true to end_otherwise_0_1;\n    position end_then_0_0;\n    position end_otherwise_0_1;\n    set r2 into address_to_role[r0];\n\nfunction update_block_height_window:\n    input r0 as u32.public;\n    async update_block_height_window r0 self.caller into r1;\n    output r1 as shield_swap_freezelist.aleo/update_block_height_window.future;\n\nfinalize update_block_height_window:\n    input r0 as u32.public;\n    input r1 as address.public;\n    get address_to_role[r1] into r2;\n    and r2 16u16 into r3;\n    is.eq r3 16u16 into r4;\n    assert.eq r4 true;\n    set r0 into block_height_window[true];\n\nfunction update_freeze_list:\n    input r0 as address.public;\n    input r1 as boolean.public;\n    input r2 as u32.public;\n    input r3 as field.public;\n    input r4 as field.public;\n    async update_freeze_list r0 r1 r2 self.caller r3 r4 into r5;\n    output r5 as shield_swap_freezelist.aleo/update_freeze_list.future;\n\nfinalize update_freeze_list:\n    input r0 as address.public;\n    input r1 as boolean.public;\n    input r2 as u32.public;\n    input r3 as address.public;\n    input r4 as field.public;\n    input r5 as field.public;\n    get address_to_role[r3] into r6;\n    and r6 16u16 into r7;\n    is.eq r7 16u16 into r8;\n    assert.eq r8 true;\n    assert.neq r2 0u32;\n    assert.neq r0 aleo1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq3ljyzc;\n    get freeze_list_root[1u8] into r9;\n    assert.eq r4 r9;\n    assert.neq r5 r9;\n    set r9 into freeze_list_root[2u8];\n    set r5 into freeze_list_root[1u8];\n    get.or_use freeze_list[r0] false into r10;\n    assert.neq r1 r10;\n    set r1 into freeze_list[r0];\n    get.or_use freeze_list_index[r2] aleo1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq3ljyzc into r11;\n    branch.eq r1 false to end_then_0_0;\n    assert.eq r11 aleo1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq3ljyzc;\n    get freeze_list_last_index[true] into r12;\n    add r12 1u32 into r13;\n    gte r13 r2 into r14;\n    assert.eq r14 true;\n    lt r12 r2 into r15;\n    branch.eq r15 false to end_then_1_2;\n    lt r12 32768u32 into r16;\n    assert.eq r16 true;\n    set r2 into freeze_list_last_index[true];\n    branch.eq true true to end_otherwise_1_3;\n    position end_then_1_2;\n    position end_otherwise_1_3;\n    set r0 into freeze_list_index[r2];\n    branch.eq true true to end_otherwise_0_1;\n    position end_then_0_0;\n    assert.eq r11 r0;\n    set aleo1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq3ljyzc into freeze_list_index[r2];\n    position end_otherwise_0_1;\n    get block_height_window[true] into r17;\n    set r17 into previous_root_window[true];\n    set block.height into root_updated_height[true];\n\nconstructor:\n    is.eq edition 0u16 into r0;\n    branch.eq r0 false to end_then_0_0;\n    assert.eq program_owner aleo1fxxkwxer36ml7c8zk5dmnl7mvq938mw87d9z2vsm7jcef6fk3sqscvk3wf;\n    branch.eq true true to end_otherwise_0_1;\n    position end_then_0_0;\n    position end_otherwise_0_1;\n    gt edition 0u16 into r1;\n    branch.eq r1 false to end_then_0_2;\n    cast checksum edition into r2 as ChecksumEdition;\n    hash.bhp256 r2 into r3 as field;\n    cast shield_swap_freezelist.aleo r3 into r4 as shield_swap_multisig_core.aleo/WalletSigningOpId;\n    hash.bhp256 r4 into r5 as field;\n    contains shield_swap_multisig_core.aleo/completed_signing_ops[r5] into r6;\n    assert.eq r6 true;\n    branch.eq true true to end_otherwise_0_3;\n    position end_then_0_2;\n    position end_otherwise_0_3;\n"