@aztec/protocol-contracts 0.40.1 → 0.42.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"transpiled":true,"noir_version":"0.29.0+5b9b1fab51e35c2112c0136785b5b69cd8529a92","name":"GasToken","functions":[{"name":"constructor","is_unconstrained":true,"custom_attributes":["aztec(public)","aztec(initializer)"],"abi":{"error_types":{},"param_witnesses":{"inputs":[{"end":40,"start":0}],"portal_address":[{"end":41,"start":40}]},"parameters":[{"name":"inputs","type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}},{"name":"side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"tx_tree_height","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"public_global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"transaction_fee","type":{"kind":"field"}}],"kind":"struct","path":"aztec::context::inputs::public_context_inputs::PublicContextInputs"},"visibility":"private"},{"name":"portal_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"},"visibility":"private"}],"return_type":{"abi_type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}},{"name":"side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"nullifier_read_requests","type":{"kind":"array","length":2,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"nullifier_non_existent_read_requests","type":{"kind":"array","length":2,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"contract_storage_update_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"storage_slot","type":{"kind":"field"}},{"name":"new_value","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::contrakt::storage_update_request::StorageUpdateRequest"}}},{"name":"contract_storage_reads","type":{"kind":"array","length":16,"type":{"fields":[{"name":"storage_slot","type":{"kind":"field"}},{"name":"current_value","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::contrakt::storage_read::StorageRead"}}},{"name":"public_call_stack_hashes","type":{"kind":"array","length":16,"type":{"kind":"field"}}},{"name":"new_note_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::note_hash::NoteHash"}}},{"name":"new_nullifiers","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::nullifier::Nullifier"}}},{"name":"new_l2_to_l1_msgs","type":{"kind":"array","length":2,"type":{"fields":[{"name":"recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"content","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"}}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"unencrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::side_effect::SideEffect"}}},{"name":"unencrypted_log_preimages_length","type":{"kind":"field"}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"tx_tree_height","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"prover_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"revert_code","type":{"kind":"integer","sign":"unsigned","width":8}},{"name":"start_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"end_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"transaction_fee","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_circuit_public_inputs::PublicCircuitPublicInputs"},"visibility":"public"},"return_witnesses":[41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270]},"bytecode":"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","debug_symbols":"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vhtCfTeE+m4I9d0Q6rsh1HdDqO+GUN8Nob47hPou8+8wRXzm22Pai7WY0Fq60FpcaC0htJYhtBbm72rrcx7CiPZiLVNnLcy/N/TlWkxoLV1oLS60lhBayxBaC7G/5OMzU57pf/3FX7uImH+d6IdXvnZdOfMvH/3bK/9lLcQ7wMjH51oer9ZiQmvpQmtxobWE0FqG0FpSaC1TaC1LZy3Mv3z05VqE+u4S6rtLqO8uob67hPruEuq7S6jvLqG+u3T6bns8dBrvczE6nfe5GJ3W+1yMTu99Lkan+T4Xo9N9n4vRab/Pxej03+didBrwczFKHbgpdeCm1IGbUgduSh24KXVgZmJsts/E2Gz5ajFDaTGptJiptJgltBhmbOzrxTSlxZjSYrrSYlxpMUod2JQ6sCl1YFPqwKbUgbtSB+5KHbgrdeCu1IG7UgfuSh24K3XgrtSBu1IH7kod2JU6sCt1YFfqwK7UgV2pA7tSB3alDuxKHdiVOrArdeBQ6sCh1IFDqQOHUgcOpQ4cSh04lDpwKHXgUOrAodSBh1IHHkodeCh14KHUgYdSBx5KHXgodeCh1IGHUgceSh04lTpwKnXgVOrAqdSBU6kDp1IHTqUOnEodOJU6cCp14KnUgadSB55KHXgqdeCp1IGnUgeeSh14KnXgqdSBp1IHXkodeCl14KXUgZdSB15KHXgpdeCl1IGXUgdeSh14CXXg9hDqwO0h1IHbQ6gDt4dQB37+lqy0GKEO3B5CHbg9hDpwewh14PZQ6sBNqQM3pQ7clDpwU+rATakDK2XimlImrill4ppSJq4pZeKaUiauKWXimlImrill4ppSJq4pZeKaUiauKWXimlImrill4ppSJq4pZeKaUiauKWXimlImrill4ppSJq4pZeKaUiauKWXimlImrill4ppSJq4pZeKaUiauKWXimlImrill4ppSJq4pZeKaUiauKWXimlImrill4ppSJq4pZeKaUiauKWXimlImrill4ppSJq4pZeKaUiauKWXimlImrill4ppSJq4pZeKaUiauKWXimlImrill4ppSJq4pZeKaUiauKWXimlImrill4ppSJq4pZeKaUiauKWXimlImrill4ppSJq4pZeKaUiauKWXimlImrill4ppSJq4pZeKaUiauKWXimlImrill4ppSJq4pZeKaUiauKWXiTCkTZ0qZOFPK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KZPzSpmcV8rkvFIm55UyOa+UyXmlTM4rZXJeKZPzSpmcV8rkvFIm5zVlcl5TJuc1ZXJeUybnNR8qPXbK5LymTM5ryuS8pkzOa8rkvKZMzmvK5LymTM5ryuS8pkzOa8rkvKZMzmvK5LymTM5ryuS8pkzOa8rkvKZMzmvK5LymTM5ryuS8pkzOa8rkvKZMzmvK5LymTM5ryuS8pkzOa8rkvKZMzmvK5LymTM5ryuS8pkzOa8rkvKZMzmvK5LymTM5ryuS8pkzOa8rkvKZMzmvK5LymTM5ryuS8pkzOa8rkvKZMzmvK5LymTM5ryuS8pkzOa8rkvKZMzmvK5LymTM5ryuS8pkzOa8rkvKZMzmvK5LymTM5ryuS8pkzOa8rkvKZMzmvK5LymTM5ryuS8pkzOa8rkvKZMzmvK5LymTM5ryuS8pkzOa8rkvKZMzmvK5LymTM5ryuS8pkzOa8rkvKZMzmvK5LymTM5ryuS8pkzOa8rkvKZMzmvK5LymTM5ryuS8pkzOa8rkvJZMzmvJ5LyWTM5ryeS81kOlxy6ZnNeSyXktmZzXksl5LZmc15LJeS2ZnNeSyXktmZzXksl5LZmc15LJeS2ZnNeSyXktmZzXksl5LZmc15LJeS2ZnNeSyXktmZzXksl5LZmc15LJeS2ZnNeSyXktmZzXksl5LZmc15LJeS2ZnNeSyXktmZzXksl5LZmc15LJeS2ZnNeSyXktmZzXksl5LZmc15LJeS2ZnNeSyXktmZzXksl5LZmc15LJeS2ZnNeSyXktmZzXksl5LZmc15LJeS2ZnNeSyXktmZzXksl5LZmc15LJeS2ZnNeSyXktmZzXksl5LZmc15LJeS2ZnNeSyXktmZzXksl5LZmc15LJeS2ZnNeSyXktmZzXksl5LZmc15LJeS2ZnNeSyXktmZzXksl5LZmc15LJeS2ZnNeSyXktmZzXksl5LZmc15LJeS2ZnNeSyXktmZzXksl5LZWclz1Ucl7PlYj02OdKRHrscyUiPfa5kj/UY1ebHyvp9kdXEjIrGTIrSZmVTJmVLJWV/LGc14+upMmsBOixH2/p+Fscf0vgbxn4WxJ/y8TfsuC3IHmZj7c0/C24+oarb7j6hqtvuPqGq2+4+oar33H1O65+x9XvuPodV7/j6ndc/Y6r33H1O66+4+o7rr7j6juuvuPqO66+4+o7rr7j6juu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s76Bs76Bs76Bs76Bs76Bs76Bs76Bs76Bs76Bs76Bs76Bs76Bs76Bs76Bs76Bs76Bs76Bs76Bs76Bs76Bs76Bs76Bs76Bs76Bs76Bs76Bs76Bs76Bs76Bs77EWV/irC9x1pc460uc9SXO+hJnfYmzvsRZX+KsL3HWlzjrS5z1Jc76Emd9ibO+xFlf4qwvcdaXOOtLnPUlzvoSZ32Js77EWV/irC9x1pc460uc9SXO+hJnfYmzvsRZX+KsL3HWlzjrS5z1Jc76Emd9ibO+xFlf4qwvcdaXOOtLnPUlzvoSZ32Js77EWV/irC9x1pc460uc9SXO+hJnfYmzvsRZX+KsL3HWlzjrS5z1Jc76Emd9ibO+xFlf4qwvcdaXOOtLnPUlzvoSZ32Js77EWV/irC9x1pc460uc9SXO+hJnfYmzvsRZX+KsL3HWlzjrS5z1Jc76Emd9ibO+xFlf4qwvcdaXOOtLnPUlzvoSZ32Js77EWV/irC9x1pc465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s465s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461s461sw6+sPmPU939Lwtxj+lo6/xfG3BP6Wgb8l8bdM/C24+g1Xv+HqN1z9hqvfcPUbrn7D1W+4+g1Xv+HqG66+4eobrr7h6huuvuHqG66+4eobrr7h6ndc/Y6r33H1O65+x9XvuPodV7/j6ndc/Y6r77j6jqvvuPqOq++4+o6r77j6jqvvuPqOqx+4+oGrH7j6gasfuPqBqx+4+oGrH7j6gas/cPUHrv7A1R+4+gNXf+DqD1z9gas/cPUHrn7i6ieufuLqJ65+4uonrn7i6ieufuLqJ67+xNWfuPoTV3/i6k9c/YmrP3H1J67+xNWfuPoLV3/h6i9c/YWrv3D1F67+wtVfuPoLVx9nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfQ1nfYazPsNZn+Gsz3DWZzjrM5z1Gc76DGd9hrM+w1mf4azPcNZnOOsznPUZzvoMZ32Gsz7DWZ/hrM9w1mc46zOc9RnO+gxnfYazPsNZn+Gsz3DWZzjrM5z1Gc76DGd9hrM+w1mf4azPcNZnOOsznPUZzvoMZ32Gsz7DWZ/hrM9w1mc46zOc9RnO+gxnfYazPsNZn+Gsz3DWZzjrM5z1Gc76DGd9hrM+w1mf4azPcNZnOOsznPUZzvoMZ32Gsz7DWZ/hrM9w1mc46zOc9RnO+gxnfYazPsNZn+Gsz3DWZzjrM5z1Gc76DGd9hrM+w1mf4azPcNZnOOsznPUZzvoMZ32Gsz7DWZ/hrM9w1mc46zOc9RnO+gxnfYazPsNZn+Gsz3DW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW13HW5zjrc5z1Oc76HGd9jrM+x1mf46zPcdbnOOtznPU5zvocZ32Osz7HWZ/jrM9x1uc463Oc9TnO+hxnfY6zPsdZn+Osz3HW5zjrc5z1Oc76HGd9jrM+x1mf46zPcdbnOOtznPU5zvocZ32Osz7HWZ/jrM9x1uc463Oc9TnO+hxnfY6zPsdZn+Osz3HW5zjrc5z1Oc76HGd9jrM+x1mf46zPcdbnOOtznPU5zvocZ32Osz7HWZ/jrM9x1uc463Oc9TnO+hxnfY6zPsdZn+Osz3HW5zjrc5z1Oc76HGd9jrM+x1mf46zPcdbnOOtznPU5zvocZ32Osz7HWZ/jrM9x1uc463Oc9TnO+hxnfY6zPsdZn+Osz3HW5zjrc5z1Oc76HGd9gbO+wFlf4KwvcNYXOOsLnPUFzvoCZ32Bs77AWV/grC9w1hc46wuc9QXO+gJnfYGzvsBZX+CsL3DWFzjrC5z1Bc76Amd9gbO+wFlf4KwvcNYXOOsLnPUFzvoCZ32Bs77AWV/grC9w1hc46wuc9QXO+gJnfYGzvsBZX+CsL3DWFzjrC5z1Bc76Amd9gbO+wFlf4KwvcNYXOOsLnPUFzvoCZ32Bs77AWV/grC9w1hc46wuc9QXO+gJnfYGzvsBZX+CsL3DWFzjrC5z1Bc76Amd9gbO+wFlf4KwvcNYXOOsLnPUFzvoCZ32Bs77AWV/grC9w1hc46wuc9QXO+gJnfYGzvsBZX+CsL3DWFzjrC5z1Bc76Amd9gbO+wFlf4KwvcNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNY3cNaXOOtLnPUlwvr+9l+9zlrmLy816/b56pUvXvyXv637y4v/8scW//qL1/z44Paw8fna1vxz5X3blfu2K49tVz62XXluu/K57crXritHfiMQW3nbduXb3kPbtvdQ5PcjsZVvew9t295D27b30LbtPbRtew+1be+htu091La9h9q291DkV3ixlW97D7Vt76G27T3Utr2H2rb30L7tPbRvew/t295D+7b3UMTLJLbybe+hfdt7aN/2Htq3vYf2be+hvu091Le9h/q291Df9h6KOELFVr7tPdS3vYf6tvdQ3/Ye6tveQ2Pbe2hsew+Nbe+hse09FPHVi61823tobHsPjW3vobHtPTS2vYeObe+hY9t76Nj2Hjq2vYci6SSxlW97Dx3b3kPHtvfQse09dGx7D81t76G57T00t72H5rb3UCTjKbbybe+hue09NLe9h+a299Dc9h46t72Hzm3voXPbe+jc9h6KJOXFVr7tPXRuew+d295D57b30LntPXRtew9d295D17b30LXtPRSZNyK28m3voWvbe+ja9h66tr2Hrl3vofOx6z10Pna9h85t5xTNbecUzceu99C57Zyiue2corntnKK57Zyiue2corntnKK57Zyiue2corntnKK57Zyiue2corntnKK57Zyiue2corntnKK57Zyiue2corntnKK57Zyiue2corntnKK57Zyiue2corntnKK57Zyiue2corntnKK57Zyiue2corntnKK57Zyiue2corntnKK57Zyiue2corntnKK57Zyiue2corntnKK57Zyiue2corntnKK57Zyiue2corntnKK57Zyiue2corntnKK57Zyiue2corntnKK57Zyiue2corntnKK57Zyiue2corntnKK57Zyiue2corntnKK57Zyiue2corntnKK57Zyiue2corntnKK57Zyiue2corntnKK57Zyiue2corntnKK57Zyiue2corntnKK57Zyiue2corntnKK57Zyiue2corntnKK57Zyiue2corntnKK57Zyiue2corntnKK57Zyiue2corntnKK57Zyiue2corntnKK57Zyiue2corXtnKK17Zyite2corXtnKL12PUeuradU7S2nVO0tp1TtLadU7S2nVO0tp1TtLadU7S2nVO0tp1TtLadU7S2nVO0tp1TtLadU7S2nVO0tp1TtLadU7S2nVO0tp1TtLadU7S2nVO0tp1TtLadU7S2nVO0tp1TtLadU7S2nVO0tp1TtLadU7S2nVO0tp1TtLadU7S2nVO0tp1TtLadU7S2nVO0tp1TtLadU7S2nVO0tp1TtLadU7S2nVO0tp1TtLadU7S2nVO0tp1TtLadU7S2nVO0tp1TtLadU7S2nVO0tp1TtLadU7S2nVO0tp1TtLadU7S2nVO0tp1TtLadU7S2nVO0tp1TtLadU7S2nVO0tp1TtLadU7S2nVO0tp1TtLadU7S2nVO0tp1TtLadU7S2nVO0tp1TtLadU7S2nVO0tp1TtLadU7S2nVO0tp1TtLadU7S2nVO0tp1TtLadU7S2nVO0tp1TtLadU7S2nVO0tp1TtLadU7S2nVO0tp1TtLadU7S2nVO0tp1TtLadU7R2nVPkj13nFD1Xvuk99LnyTe+hz5Vveg99rnzTe+hz5ZveQ58r3/Qe+lz5pvfQ58o3vYc+V77tPXTXOUXPlW97D911TtFz5dveQ3edU/Rc+bb30F3nFD1Xvu09dNc5Rc+Vb3sP3XVO0XPl295Dd51T9Fz5tvfQXecUPVe+7T101zlFz5Vvew/ddU7Rc+Xb3kN3nVP0XPm299Bd5xQ9V77tPXTXOUXPlW97D911TtFz5dveQ3edU/Rc+bb30F3nFD1Xvu09dNc5Rc+Vb3sP3XVO0XPl295Dd51T9Fz5tvfQXecUPVe+7T101zlFz5Vvew/ddU7Rc+Xb3kN3nVP0XPm299Bd5xQ9V77tPXTXOUXPlW97D911TtFz5dveQ3ed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qmUUUy2jmGoZxVTLKE61jOJUyyhOtYziVMsozodYp55qGcWpllGcahnFqZZRnGoZxamWUZxqGcWpllGcahnFqZZRnGoZxamWUZxqGcWpllGcahnFqZZRnGoZxamWUZxqGcWpllGcahnFqZZRnGoZxamWUZxqGcWpllGcahnFqZZRnGoZxamWUZxqGcWpllGcahnFqZZRnGoZxamWUZxqGcWpllGcahnFqZZRnGoZxamWUZxqGcWpllGcahnFqZZRnGoZxamWUZxqGcWpllGcahnFqZZRnGoZxamWUZxqGcWpllGcahnFqZZRnGoZxamWUZxqGcWpllGcahnFqZZRnGoZxamWUZxqGcWpllGcahnFqZZRnGoZxamWUZxqGcWpllGcahnFqZZRnGoZxamWUZxqGcWpllGcahnFqZZRnGoZxamWUZxqGcWpllGcahnFqZZRnGoZxamWUZxqGcWpllGcahnFqZZRnGoZxaWWUVxqGcWlllFcahnF9RDr1Esto7jUMopLLaO41DKKSy2juNQyiksto7jUMopLLaO41DKKSy2juNQyiksto7jUMopLLaO41DKKSy2juNQyiksto7jUMopLLaO41DKKSy2juNQyiksto7jUMopLLaO41DKKSy2juNQyiksto7jUMopLLaO41DKKSy2juNQyiksto7jUMopLLaO41DKKSy2juNQyiksto7jUMopLLaO41DKKSy2juNQyiksto7jUMopLLaO41DKKSy2juNQyiksto7jUMopLLaO41DKKSy2juNQyiksto7jUMopLLaO41DKKSy2juNQyiksto7jUMopLLaO41DKKSy2juNQyiksto7jUMopLLaO41DKKSy2juNQyiksto7jUMopLLaO41DKKSy2juNQyiksto7jUMopLLaO41DKKSy2juNQyiksto7jUMopLLaO41DKKSyyjOB5iGcXngrQ69XNBWp36uSCtTv1ckFanfi5Iq1M/F6TVqZ8L0urUzwVpderngtQ6tVhG8bkgtU4tllF8LkitU4tlFJ8LUuvUYhnF54LUOrVYRvG5ILVOLZZRfC5IrVOLZRSfC1Lr1GIZxeeC1Dq1WEbxuSC1Ti2WUXwuSK1Ti2UUnwtS69RiGcXngtQ6tVhG8bkgtU4tllF8LkitU4tlFJ8LUuvUYhnF54LUOrVYRvG5ILVOLZZRfC5I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"},{"name":"compute_note_hash_and_nullifier","is_unconstrained":true,"custom_attributes":[],"abi":{"error_types":{},"param_witnesses":{"contract_address":[{"end":1,"start":0}],"nonce":[{"end":2,"start":1}],"note_type_id":[{"end":4,"start":3}],"serialized_note":[],"storage_slot":[{"end":3,"start":2}]},"parameters":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"},"visibility":"private"},{"name":"nonce","type":{"kind":"field"},"visibility":"private"},{"name":"storage_slot","type":{"kind":"field"},"visibility":"private"},{"name":"note_type_id","type":{"kind":"field"},"visibility":"private"},{"name":"serialized_note","type":{"kind":"array","length":0,"type":{"kind":"field"}},"visibility":"private"}],"return_type":{"abi_type":{"kind":"array","length":4,"type":{"kind":"field"}},"visibility":"public"},"return_witnesses":[4,5,6,7]},"bytecode":"H4sIAAAAAAAA/+2byW7bMBCGJa9yVC+SZXlf4uTSm+w6tnPzy7Rv3XuBvkPRjMKpx8QkoNARIQImYGhMUfy/+blECRjfey/tt4+v4qZ2pQXbXNQ1+7+yE+wrK5PTd4Sz5ghnXZDTZzjh2lAxXGEut7zbef6vXAQnCRWlUDAwdVL3EdzNQ1BaKgg04IsE9CE7twgNhYYSKnB6MySJ+KQOn62ROtxB6o1rDi35HA4BMU+s37cBDb2r7y3iCcZ4D7RnpK5RUo5N+RzL8i5flehPU/XbJt/Rq46KBXfYHdX21adDND01RhhPSVtsh37UyBhD6XrX8e988lxDe65H2rSY/C+ebP5tjaetMTcVE5QIeLU9oKSxyaDfB/l+b8a8oY3JA8mpK+73/gx7QujdFv2nzIXEXcLzRZwn25WT5/vY9Qi7TL8vB/Cqr3kVal71SBvK0C/BP5/oYt/4vc9oy3lxPIP2wMCLAcMzsOzFgNEW9OIVtCMDLyKGJ7LsRcRoy3lx+gbasYEXMcMTW/YiZrTlvNjn7xZDAy+GDM/QshdDRltwjeTzIjHwImF4EsteJIy2oBc/QHtk4MWI4RlZ9mLEaAt68R20UwMvUoYntexFymgL7p35+8XYwIsxwzO27MWY0Rb0Yg/aEwMvJgzPxLIXE0ZbcI3k2lMDL6YMz9SyF/R31CLMQweZUweZ4wowB1oso33M98+ZgRczhmdm2QvUK8qcVIA50GIZ7eMLaM8NvJgzPHPLXqBeUebIQebYQeaRg8yJg8ypg8xVmM+BFston/I9dGHgxYLhWVj2AvWKMkcOMs8cZI4rwBxosYz2Kf/b3NLAiyXDs7TsBeoVZR47yDyoAHOgxTLapyNorwy8WDE8K8teoF5R5omDzKmDzDMHmWMHmUcOMicOMt/XoB3mqALM9EzT71J59q+hxoOeeRqjpzGGJKbnYNbijFlGx2dNtDbyWjtuvuD3Tana+zP0u5XPKX+Xf1J94Rm+LZPTs4qlz3M9kX59ooP1DRL/Im2xHfqB6xbZYd49qvj5k+dW2nM90uaRyf/iyea/1Xi2GjOMyU/CsRHn2J9N5vXAu67lr4SnhH3wQM/kYjHZd0raY3Yl5ZnRM3x/PNk1vdG8CjSveqQN3aM3JfhnMr/uzHfmj5jp+0RA6vD+mtTVtFzo/zJgezgz/BdsuDj5FjUAAA==","debug_symbols":"ndpBattQGIXRvWgciu+vpycpWymlOIlTDMYOsVMoJnuv3dIF9Mz0JN3ZNzq86/Cye/r48X1/fD2dh8ev1+Fwet5e9qfj7XQdNl+q/3l7ftse7y/Ol+37ZXgcKw/D7vhyf+qfD8Pr/rAbHqvV57eH+2iW0SKjFUbjRkaRUclolFGT0SQjKWKUIkYpYpQimhTRpIgmRTQpokkRTYpoUkSTIpoU0aSISYqYpIhJipikiEmKmKSISYqYpIhJipikiC5FdCmiSxFdiuhSRJciuhTRpYguRXQpYpYiZililiJmKWKWImYpYpYiZililiJmKWKRIhYpYpEiFilikSIWKWKRIhYpYpEiFililSJWKWKVIlYpYpUiVililSJWKWKVIlYpIpsNrUKrotVIq0ariVadVjOtFlpRG6E2Qm2E2gi1EWoj1EaojVAboTZCbRS1UdRGURtFbRS1UdQGcWbIM0OgGRLNEGmGTDOEmiHVDLFmyDVDsBmSzRBthmwzhJsh3QzxZsg3Q8AZEs4QcYaMM4ScIeUMMWfIOUPQGZLOEHWGrDOEnSHtDHFnyDtD4BkSzxB5hswzhJ4h9QyxZ8g9Q/AZks8QfYbsM4SfIf0M8WfIP0MAGhLQEIGGDDSEoCEFDTFoyEFDEBqS0BCFhiw0hKEhDQ1xaMhDQyAaEtEQiYZMNISiIRUNsWjIRYtctMhFi1y0yEWLXLTIRYtctMhFi1y0yEWLXLTIRYtctMhFi1y0yEWLXLTIRYtctMhFi1y0yEWLXLTIRYtctMhFy6552j1Pu+hJLlrkokUuWuSiRS5a/+2it9PP7ft++3TY3W/23j9+HJ//XfS9HS+/3v5+uf37Gw=="},{"name":"claim_public","is_unconstrained":true,"custom_attributes":["aztec(public)"],"abi":{"error_types":{},"param_witnesses":{"amount":[{"end":42,"start":41}],"inputs":[{"end":40,"start":0}],"leaf_index":[{"end":44,"start":43}],"secret":[{"end":43,"start":42}],"to":[{"end":41,"start":40}]},"parameters":[{"name":"inputs","type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}},{"name":"side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"tx_tree_height","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"public_global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"transaction_fee","type":{"kind":"field"}}],"kind":"struct","path":"aztec::context::inputs::public_context_inputs::PublicContextInputs"},"visibility":"private"},{"name":"to","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"},"visibility":"private"},{"name":"amount","type":{"kind":"field"},"visibility":"private"},{"name":"secret","type":{"kind":"field"},"visibility":"private"},{"name":"leaf_index","type":{"kind":"field"},"visibility":"private"}],"return_type":{"abi_type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}},{"name":"side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"nullifier_read_requests","type":{"kind":"array","length":2,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"nullifier_non_existent_read_requests","type":{"kind":"array","length":2,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"contract_storage_update_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"storage_slot","type":{"kind":"field"}},{"name":"new_value","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::contrakt::storage_update_request::StorageUpdateRequest"}}},{"name":"contract_storage_reads","type":{"kind":"array","length":16,"type":{"fields":[{"name":"storage_slot","type":{"kind":"field"}},{"name":"current_value","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::contrakt::storage_read::StorageRead"}}},{"name":"public_call_stack_hashes","type":{"kind":"array","length":16,"type":{"kind":"field"}}},{"name":"new_note_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::note_hash::NoteHash"}}},{"name":"new_nullifiers","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::nullifier::Nullifier"}}},{"name":"new_l2_to_l1_msgs","type":{"kind":"array","length":2,"type":{"fields":[{"name":"recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"content","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"}}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"unencrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::side_effect::SideEffect"}}},{"name":"unencrypted_log_preimages_length","type":{"kind":"field"}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"tx_tree_height","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"prover_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"revert_code","type":{"kind":"integer","sign":"unsigned","width":8}},{"name":"start_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"end_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"transaction_fee","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_circuit_public_inputs::PublicCircuitPublicInputs"},"visibility":"public"},"return_witnesses":[44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273]},"bytecode":"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","debug_symbols":"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VP60EsdUEphKFqaSDalk/Bnn9amVDEwlgqnkQGPvPzLPf8TOf8TPfyTOf2Sd/8g+/pETDOf+I+P8R+T8R86//XH+7Y/zb3+cf/vj/Nsf59/+OP/25fzbl/NvX86/fTn/9uX825fzb1/Ov305//bl/NuX829fz799Pf/29fzb1/NvX8+/fT3/9vX829fzb1/Pv309//bn+bc/z7/9ef7tz/Nvf55/+/P825/n3/48//bn+bc/z799O//27fzbt/Nv386/fTv/9u3827fzb9/Ov307//bt/Nv382/fz799P//2/fzb9/Nv38+/fT//9v382/fzb9/Pv/04//bj/NuP828/zr/9OP/24/zbj/NvP86//Tj/9uP821/n3/46//bX+be/zr/9df7tr/Nvf51/++v821/n3/46//b3+be/z7/9ff7t7/Nvf59/+/v829/n3/4+//b3+be/j799ua7zHxnnPyLnP6LnPzLPf8TOf8TPfyTOf2Sd/8j5t3++65PzXZ+c7/rkfNcn57s+Od/1yfmuT853fXK+65PzXZ+c7/rkfNcn57s+Od/1yfmuT853fXK+65PzXZ+c7/rkfNcn57s+Od/1yfmuT853fXK+65PzXZ+c7/rkfNcn57s+Od/1yfmuT853fXK+65PzXZ+c7/rkfNcn57s+Od/1yfmuT853fXK+65PzXZ+c7/rkfNcn57s+Od/1yfmuT853fXK+65PzXZ+c7/rkfNcn57s+Od/1yfmuT853fXK+65PzXZ+c7/rkfNcn57s+Od/1yfmuT853fXK+65PzXZ+c7/rkfNcn57s+Od/1yfmuT853fXK+65PzXZ+c7/rkfNcn57s+Od/1yfmuT853fXK+65PzXZ+c7/rkfNcn57s+Od/1yfmuT853fXK+65PzXZ+e7/r0fNen57s+Pd/16fmuT893fXq+69PzXZ+e7/r0fNen57s+Pd/16fmuT893fXq+69PzXZ+e7/r0fNen57s+Pd/16fmuT893fXq+69PzXZ+e7/r0fNen57s+Pd/16fmuT893fXq+69PzXZ+e7/r0fNen57s+Pd/16fmuT893fXq+69PzXZ+e7/r0fNen57s+Pd/16fmuT893fXq+69PzXZ+e7/r0fNen57s+Pd/16fmuT893fXq+69PzXZ+e7/r0fNen57s+Pd/16fmuT893fXq+69PzXZ+e7/r0fNen57s+Pd/16fmuT893fXq+69PzXZ+e7/r0fNen57s+Pd/16fmuT893fXq+69PzXZ+e7/r0fNen57s+Pd/16fmuT893fXq+69PzXZ+e7/r0fNen57s+Pd/16fmuT893fXq+69PzXZ+e7/r0fNen57s+Pd/1zfNd3zzf9c3zXd883/XN813fPN/1zfNd3zzf9c3zXd883/XN813fPN/1zfNd3zzf9c3zXd883/XN813fPN/1zfNd3zzf9c3zXd883/XN813fPN/1zfNd3zzf9c3zXd883/XN813fPN/1zfNd3zzf9c3zXd883/XN813fPN/1zfNd3zzf9c3zXd883/XN813fPN/1zfNd3zzf9c3zXd883/XN813fPN/1zfNd3zzf9c3zXd883/XN813fPN/1zfNd3zzf9c3zXd883/XN813fPN/1zfNd3zzf9c3zXd883/XN813fPN/1zfNd3zzf9c3zXd883/XN813fPN/1zfNd3zzf9c3zXd883/XN813fPN/1zfNd3zzf9c3zXd883/XN813fPN/1zfNd3zzf9c3zXd883/XN813fPN/1zfNd3zzf9c3zXd883/XN813fPN/1zfNd3zzf9c3zXd883/XZ+a7Pznd9dr7rs/Ndn53v+ux812fnuz473/XZ+a7Pznd9dr7rs/Ndn53v+ux812fnuz473/XZ+a7Pznd9dr7rs/Ndn53v+ux812fnuz473/XZ+a7Pznd9dr7rs/Ndn53v+ux812fnuz473/XZ+a7Pznd9dr7rs/Ndn53v+ux812fnuz473/XZ+a7Pznd9dr7rs/Ndn53v+ux812fnuz473/XZ+a7Pznd9dr7rs/Ndn53v+ux812fnuz473/XZ+a7Pznd9dr7rs/Ndn53v+ux812fnuz473/XZ+a7Pznd9dr7rs/Ndn53v+ux812fnuz473/XZ+a7Pznd9dr7rs/Ndn53v+ux812fnuz473/XZ+a7Pznd9dr7rs/Ndn53v+ux812fnuz473/XZ+a7Pznd9dr7rs/Ndn53v+ux812fnuz473/XZ+a7Pznd9dr7rs/Ndn5/v+vx81+fnuz4/3/X5+a7Pz3d9fr7r8/Ndn5/v+vx81+fnuz4/3/X5+a7Pz3d9fr7r8/Ndn5/v+vx81+fnuz4/3/X5+a7Pz3d9fr7r8/Ndn5/v+vx81+fnuz4/3/X5+a7Pz3d9fr7r8/Ndn5/v+vx81+fnuz4/3/X5+a7Pz3d9fr7r8/Ndn5/v+vx81+fnuz4/3/X5+a7Pz3d9fr7r8/Ndn5/v+vx81+fnuz4/3/X5+a7Pz3d9fr7r8/Ndn5/v+vx81+fnuz4/3/X5+a7Pz3d9fr7r8/Ndn5/v+vx81+fnuz4/3/X5+a7Pz3d9fr7r8/Ndn5/v+vx81+fnuz4/3/X5+a7Pz3d9fr7r8/Ndn5/v+vx81+fnuz4/3/X5+a7Pz3d9fr7r8/Ndn5/v+vx81+fnuz4/3/X5+a7Pz3d9fr7r8/Ndn5/v+vx81+fnuz4/3/XF+a4vznd9cb7ri/NdX5zv+uJ81xfnu7443/XF+a4vznd9cb7ri/NdX5zv+uJ81xfnu7443/XF+a4vznd9cb7ri/NdX5zv+uJ81xfnu7443/XF+a4vznd9cb7ri/NdX5zv+uJ81xfnu7443/XF+a4vznd9cb7ri/NdX5zv+uJ81xfnu7443/XF+a4vznd9cb7ri/NdX5zv+uJ81xfnu7443/XF+a4vznd9cb7ri/NdX5zv+uJ81xfnu7443/XF+a4vznd9cb7ri/NdX5zv+uJ81xfnu7443/XF+a4vznd9cb7ri/NdX5zv+uJ81xfnu7443/XF+a4vznd9cb7ri/NdX5zv+uJ81xfnu7443/XF+a4vznd9cb7ri/NdX5zv+uJ81xfnu7443/XF+a4vznd9cb7ri/NdX5zv+uJ81xfnu7443/XF+a4vznd9cb7ri/Nd3zrf9a3zXd863/Wt813fOt/1rfNd3zrf9a3zXd863/Wt813fOt/1rfNd3zrf9a3zXd863/Wt813fOt/1rfNd3zrf9a3zXd863/Wt813fOt/1rfNd3zrf9a3zXd863/Wt813fOt/1rfNd3zrf9a3zXd863/Wt813fOt/1rfNd3zrf9a3zXd863/Wt813fOt/1rfNd3zrf9a3zXd863/Wt813fOt/1rfNd3zrf9a3zXd863/Wt813fOt/1rfNd3zrf9a3zXd863/Wt813fOt/1rfNd3zrf9a3zXd863/Wt813fOt/1rfNd3zrf9a3zXd863/Wt813fOt/1rfNd3zrf9a3zXd863/Wt813fOt/1rfNd3zrf9a3zXd863/Wt813fOt/1rfNd3zrf9a3zXd863/Wt813fOt/1rfNd3zrf9a3zXd863/Wt813fOt/1rfNd3zrf9a3zXd863/Wt813fPt/17fNd3z7f9e3zXd8+3/Xt813fPt/17fNd3z7f9e3zXd8+3/Xt813fPt/17fNd3z7f9e3zXd8+3/Xt813fPt/17fNd3z7f9e3zXd8+3/Xt813fPt/17fNd3z7f9e3zXd8+3/Xt813fPt/17fNd3z7f9e3zXd8+3/Xt813fPt/17fNd3z7f9e3zXd8+3/Xt813fPt/17fNd3z7f9e3zXd8+3/Xt813fPt/17fNd3z7f9e3zXd8+3/Xt813fPt/17fNd3z7f9e3zXd8+3/Xt813fPt/17fNd3z7f9e3zXd8+3/Xt813fPt/17fNd3z7f9e3zXd8+3/Xt813fPt/17fNd3z7f9e2TXd8//tXrhlzx86VDYny8esejF1/XGPdXX5fNj5fHevBykXl/7x+/+vhXJZc+eLXdOv/nq/0S/YtX3z+qf5+PGt/no67v81H3t/moJzv47h91fJ+PKt/no+r3+ajz+3zU7/O0tL7P09L6Pk9L6/s8La3v87S0v8/T0i59WvL58VHHZb9/1Hs5WU809/fX5Pefye9vye/vye8fye+/kt9/Z76/XteV/P4j+f0l+f01+f1n8vtb8vt78vtH8vuv5PdP7t+R3L8juX9Hcv+O5P4dyf07kvt3JPfvSO7fkdy/I7l/Jbl/Jbl/Jbl/Jbl/Jbl/Jbl/Jbl/Jbl/Jbl/Jbl/Nbl/Nbl/Nbl/Nbl/Nbl/Nbl/Nbl/Nbl/Nbl/Nbl/Z3L/zuT+ncn9O5P7dyb370zu35ncvzO5f2dy/87k/rXk/rXk/rXk/rXk/rXk/rXk/rXk/rXk/rXk/rXk/vXk/vXk/vXk/vXk/vXk/vXk/vXk/vXk/vXk/vXk/o3k/o3k/o3k/o3k/o3k/o3k/o3k/o3k/o3k/o3k/l3J/buS+3cl9+9K7t+V3L8ruX9Xcv+u5P5dyf27kvt3J/fvTu7fndy/O7l/d3L/7uT+3cn9u5P7dyf3b7L/aiT7r0ay/2ok+69Gsv9qXDP5/S35/T35/SP5/Vfy+yf3b7L/aiT7r0ay/2ok+69Gsv9qJPuvRrL/aiT7r0ay/2ok+69Gsv9qJPuvRrL/aiT7r0ay/2ok+69Gsv9qJPuvRrL/aiT7r0ay/2ok+69Gsv9qJPuvRrL/aiT7r0ay/2ok+69Gsv9qJPuvRrL/aiT7r0ay/2ok+69Gsv9qJPuvRrL/aiT7r0ay/2ok+69Gsv9qJPuvRrL/aiT7r0ay/2ok+69Gsv9qJPuvRrL/aiT7r0ay/2ok+69Gsv9qJPuvRrL/aiT7r0ay/2ok+69Gsv9qJPuvRrL/aiT7r0ay/2ok+69Gsv9qJPuvRrL/aiT7r0ay/2ok+69Gsv9qJPuvRrL/aiT7r0ay/2ok+69Gsv9qJPuvRrL/aiT7r0ay/2ok+69Gsv9qJPuvRrL/aiT7r0ay/2ok+69Gsv9qJPuvJNl/Jcn+K0n2X0my/0qumfz+lvz+nvz+kfz+K/n9k/s32X8lyf4rSfZfSbL/SpL9V5Lsv5Jk/5Uk+68k2X8lyf4rSfZfSbL/SpL9V5Lsv5Jk/5Uk+68k2X8lyf4rSfZfSbL/SpL9V5Lsv5Jk/5Uk+68k2X8lyf4rSfZfSbL/SpL9V5Lsv5Jk/5Uk+68k2X8lyf4rSfZfSbL/SpL9V5Lsv5Jk/5Uk+68k2X8lyf4rSfZfSbL/SpL9V5Lsv5Jk/5Uk+68k2X8lyf4rSfZfSbL/SpL9V5Lsv5Jk/5Uk+68k2X8lyf4rSfZfSbL/SpL9V5Lsv5Jk/5Uk+68k2X8lyf4rSfZfSbL/SpL9V5Lsv5Jk/5Uk+68k2X8lyf4rSfZfSbL/SpL9V5Lsv5Jk/5Uk+68k2X8lyf4rSfZfSbL/SpL9V5Lsv5Jk/5Uk+68k2X8lyf4rTfZfabL/SpP9V5rsv9JrJr+/Jb+/J79/JL//Sn7/5P5N9l9psv9Kk/1Xmuy/0mT/lSb7rzTZf6XJ/itN9l9psv9Kk/1Xmuy/0mT/lSb7rzTZf6XJ/itN9l9psv9Kk/1Xmuy/0mT/lSb7rzTZf6XJ/itN9l9psv9Kk/1Xmuy/0mT/lSb7rzTZf6XJ/itN9l9psv9Kk/1Xmuy/0mT/lSb7rzTZf6XJ/itN9l9psv9Kk/1Xmuy/0mT/lSb7rzTZf6XJ/itN9l9psv9Kk/1Xmuy/0mT/lSb7rzTZf6XJ/itN9l9psv9Kk/1Xmuy/0mT/lSb7rzTZf6XJ/itN9l9psv9Kk/1Xmuy/0mT/lSb7rzTZf6XJ/itN9l9psv9Kk/1Xmuy/0mT/lSb7rzTZf6XJ/itN9l9psv9Kk/1Xmuy/0mT/lSb7rzTZf6XJ/itN9l9psv9qJvuvZrL/aib7r2ay/2peM/n9Lfn9Pfn9I/n9V/L7J/dvsv9qJvuvZrL/aib7r2ay/2om+69msv9qJvuvZrL/aib7r2ay/2om+69msv9qJvuvZrL/aib7r2ay/2om+69msv9qJvuvZrL/aib7r2ay/2om+69msv9qJvuvZrL/aib7r2ay/2om+69msv9qJvuvZrL/aib7r2ay/2om+69msv9qJvuvZrL/aib7r2ay/2om+69msv9qJvuvZrL/aib7r2ay/2om+69msv9qJvuvZrL/aib7r2ay/2om+69msv9qJvuvZrL/aib7r2ay/2om+69msv9qJvuvZrL/aib7r2ay/2om+69msv9qJvuvZrL/aib7r2ay/2om+69msv9qJvuvZrL/aib7r2ay/2om+69msv9qJvuvZrL/aib7r2ay/2om+69msv9qJvuvZrL/aib7r2ay/2om+68s2X9lyf4rS/ZfWbL/yq6Z/P6W/P6e/P6R/P4r+f2T+zfZf2XJ/itL9l9Zsv/Kkv1Xluy/smT/lSX7ryzZf2XJ/itL9l9Zsv/Kkv1Xluy/smT/lSX7ryzZf2XJ/itL9l9Zsv/Kkv1Xluy/smT/lSX7ryzZf2XJ/itL9l9Zsv/Kkv1Xluy/smT/lSX7ryzZf2XJ/itL9l9Zsv/Kkv1Xluy/smT/lSX7ryzZf2XJ/itL9l9Zsv/Kkv1Xluy/smT/lSX7ryzZf2XJ/itL9l9Zsv/Kkv1Xluy/smT/lSX7ryzZf2XJ/itL9l9Zsv/Kkv1Xluy/smT/lSX7ryzZf2XJ/itL9l9Zsv/Kkv1Xluy/smT/lSX7ryzZf2XJ/itL9l9Zsv/Kkv1Xluy/smT/lSX7ryzZf2XJ/itL9l9Zsv/Kkv1Xluy/smT/lSX7ryzZf2XJ/itP9l95sv/Kk/1Xnuy/8msmv78lv78nv38kv/9Kfv/k/k32X3my/8qT/Vee7L/yZP+VJ/uvPNl/5cn+K0/2X3my/8qT/Vee7L/yZP+VJ/uvPNl/5cn+K0/2X3my/8qT/Vee7L/yZP+VJ/uvPNl/5cn+K0/2X3my/8qT/Vee7L/yZP+VJ/uvPNl/5cn+K0/2X3my/8qT/Vee7L/yZP+VJ/uvPNl/5cn+K0/2X3my/8qT/Vee7L/yZP+VJ/uvPNl/5cn+K0/2X3my/8qT/Vee7L/yZP+VJ/uvPNl/5cn+K0/2X3my/8qT/Vee7L/yZP+VJ/uvPNl/5cn+K0/2X3my/8qT/Vee7L/yZP+VJ/uvPNl/5cn+K0/2X3my/8qT/Vee7L/yZP+VJ/uvPNl/5cn+K0/2X3my/8qT/Vee7L/yZP+VJ/uvPNl/5cn+K0/2X3my/yqS/VeR7L+KZP9VJPuv4prJ72/J7+/J7x/J77+S3z+5f5P9V5Hsv4pk/1Uk+68i2X8Vyf6rSPZfRbL/KpL9V5Hsv4pk/1Uk+68i2X8Vyf6rSPZfRbL/KpL9V5Hsv4pk/1Uk+68i2X8Vyf6rSPZfRbL/KpL9V5Hsv4pk/1Uk+68i2X8Vyf6rSPZfRbL/KpL9V5Hsv4pk/1Uk+68i2X8Vyf6rSPZfRbL/KpL9V5Hsv4pk/1Uk+68i2X8Vyf6rSPZfRbL/KpL9V5Hsv4pk/1Uk+68i2X8Vyf6rSPZfRbL/KpL9V5Hsv4pk/1Uk+68i2X8Vyf6rSPZfRbL/KpL9V5Hsv4pk/1Uk+68i2X8Vyf6rSPZfRbL/KpL9V5Hsv4pk/1Uk+68i2X8Vyf6rSPZfRbL/KpL9V5Hsv4pk/1Uk+68i2X8Vyf6rSPZfRbL/KpL9V5Hsv1rJ/quV7L9ayf6rley/WtdMfn9Lfn9Pfv9Ifv+V/P7J/Zvsv1rJ/quV7L9ayf6rley/Wsn+q5Xsv1rJ/quV7L9ayf6rley/Wsn+q5Xsv1rJ/quV7L9ayf6rley/Wsn+q5Xsv1rJ/quV7L9ayf6rley/Wsn+q5Xsv1rJ/quV7L9ayf6rley/Wsn+q5Xsv1rJ/quV7L9ayf6rley/Wsn+q5Xsv1rJ/quV7L9ayf6rley/Wsn+q5Xsv1rJ/quV7L9ayf6rley/Wsn+q5Xsv1rJ/quV7L9ayf6rley/Wsn+q5Xsv1rJ/quV7L9ayf6rley/Wsn+q5Xsv1rJ/quV7L9ayf6rley/Wsn+q5Xsv1rJ/quV7L9ayf6rley/Wsn+q5Xsv1rJ/quV7L9ayf6rley/Wsn+q5Xsv1rJ/quV7L9ayf6rley/Wsn+q5Xsv1rJ/quV7L9ayf6rley/Wsn+q53sv9rJ/qud7L/ayf6rfc3k97fk9/fk94/k91/J75/cv8n+q53sv9rJ/qv92H8VU3/+WMR6csaU+fO1U+y31+rHETP/CMs/wvOPiPwjVv4RO/2Ix6aszz1i5B8h+Ufkd7fkd7fkd7fkd7fkd7fkd7fkd7fmd7fmd7fmd7fmd7fmd7fmd7fmd7fmd7fmd7fmd/fM7+6Z390zv7tnfnfP/O6e+d0987t75nf3zO/umd/dlt/dlt/dlt/dlt/dlt/dlt/dlt/dlt/dlt/dlt/dnt/dnt/dnt/dnt/dnt/dnt/dnt/dnt/dnt/dnt/dkd/dkd/dkd/dkd/dkd/dkd/dkd/dkd/dkd/dkd/dK7+7V353r/zuXvndvfK7e+V398rv7pXf3Su/u1d+d+/87t753b3zu3vnd/fO7+6d3907v7t3fnfv/O7e2d09r+vKP2LkHyH5R2j+ETP/CMs/wvOPiPwjVv4R+d098rt75Hf3yO/ukd/dI7+7R353j/zuHvndPfK7e+R3t+R3t+R3t+R3t+R3t+R3t+R3t+R3t+R3t+R3t+R3t+Z3t+Z3t+Z3t+Z3t+Z3t+Z3t+Z3t+Z3t+Z3t+Z398zv7pnf3TO/u2d+d8/87p753T3zu3vmd/fM7+6Z392W392W392W392W392W392W392W392W392W392W392e392e392e392e392e392e392e392e392e392e392R392R392R392R392R392R392R392R392R392R390rv7tXfnev/O5e+d298rt75Xf3yu/uld/dK7+7V3537/zu3vndvfO7e+d3987v7p3f3Tu/u3d+d+/87s73qo18r9rI96qNfK/ayPeqjWvmH2H5R3j+EZF/xMo/Ir+7871qI9+rNvK9aiPfqzbyvWoj36s28r1qI9+rNvK9aiPfqzbyvWoj36s28r1qI9+rNvK9aiPfqzbyvWoj36s28r1qI9+rNvK9aiPfqzbyvWoj36s28r1qI9+rNvK9aiPfqzbyvWoj36s28r1qI9+rNvK9aiPfqzbyvWoj36s28r1qI9+rNvK9aiPfqzbyvWoj36s28r1qI9+rNvK9aiPfqzbyvWoj36s28r1qI9+rNvK9aiPfqzbyvWoj36s28r1qI9+rNvK9aiPfqzbyvWoj36s28r1qI9+rNvK9aiPfqzbyvWoj36s28r1qI9+rNvK9aiPfqzbyvWoj36s28r1qI9+rNvK9aiPfqzbyvWoj36s28r1qI9+rNvK9aiPfqzbyvWoj36s28r1qI9+rNvK9aiPfqzbyvWrjE7xqtu5H7Osvjvjr1+41fr52XEN/vfjR+97W+X5/8dS/ePF/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"},{"name":"balance_of_public","is_unconstrained":true,"custom_attributes":[],"abi":{"error_types":{},"param_witnesses":{"owner":[{"end":1,"start":0}]},"parameters":[{"name":"owner","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"},"visibility":"private"}],"return_type":{"abi_type":{"kind":"field"},"visibility":"public"},"return_witnesses":[1]},"bytecode":"H4sIAAAAAAAA/+2cXW/bNhSGJX/Ectwk9bedD0eJ06a7GRS7dTBgA7y/sJvtaoEbO0OArgZiF+j244OVis7ymjvIqPaIEIEQCETR1HkfvqKO7NiU7z0UP/lTpQxteqG2abKNvq1cCMaKfI3zP/xS0CpwSTOEM0ltC0y/X2Gnn2x/vrub/RXefpwvPofLT+tweRO+X376OF/hgb/DzkGyvZ59+BCul+FstVrcra/+nH2+en+7vlrd/r34V3SdVAJv04yphCFvo9GW9+iIbkgNTKA+lS9/W/C6n7RTvzq0UTzFXpZmj6KR0i9qzPoYplAvA09Jnucio3FGAXh+78leDBXNq6Lm1S702QL/Khn454MuxaZ90kvLXMgBM86L0JOdF4H8mEZ7X2Jsg6+B5i+OazupC87LSMWogibpbYPui6Tue7J3oVoSq5TEJo4XoL0n7vn4WunueJvlqVy2Bzy74jwPuUx+nA9z9iWwy8R9N1Ze1TWvdjSvdqEPMtQz8M8HXYpN+3VGW86Ly7dKu2HgRYPhaVj2osFoy3kxuVHaTQMvmgxP07IXTUZbcF6MlHbLwIsWw9Oy7EWL0RacF7F228CLNsPTtuxFm9EW9OJSaXcMvOgwPB3LXnQYbUEv3introEXXYana9mLLqMt58Uofj/UM/Cix/D0LHvRY7QFc2f8/qJv4EWf4elb9qLPaAteI9dKe9/Ai32GZ9+yF6SXlrnhIHPdQeZuDpgDrS6jPY7z54GBFwcMz4FlL0gvLXM3B8yBVpfRniyU9qGBF4cMz6FlL0gvLXPDQea6g8xdB5lbDjL3n5mtMOchbwRaXUb7Mv48fGTgxRHDc2TZC9JLy9zJAXOg1WW0J/H/PwcGXgwYnoFlLwaMtuBn+Pg9zLGBF8cMz7FlL0gvLXPXQeaXDjLXHWRuOMjcdJC55SBz20HmjoPMLubnnoPMfQeZXczPLt4HXZzPecgbgVaX0Z7MlXZo4EXI8ISWvQgZbcHP2/F3ricGXpwwPCeWvSC9tMw9B5nrDjJ3HWR+nht2mFsOMjcdZH7OG1/HHGh1Ge3JRGmfGnhxyvCcWvaC9NIyNx1kbjjIfOwgczcHzIFWl9Eex9pDAy+GDM/Qshekl5Z5kANmtR6E1ob86GfJM57XNB7yzNMYPY2xBvU98OxMnDGK8PycgdYreS12jtP+q0y1x9cq7rn8mOLfhr1JYpWTuOfMmL5L6r6wn28grg861F6C+g/+Y1/qR37QdUvsav91Ukd2/bihdtwu9HnNjH/qyY7/XOM515jVOfkervMs5pbJvFbfE9K1/BN4RQXX4lXFGR+88jRGKlWGx88BT83j1zJXNc9wfTO+dus/vk65rQDH0DkqMrHPoI3uF1x+Rp8yyM8bOZNyh56vd4BjmBOeCsOT1bpdOj8Um/Yr2XoRZbS2Mh4T5Q26pxA/6ZWgz2/JyaffImDBWMSpz3E8X9S3wPh4723mgzRrhW/+p6B2BbSrzHivnhgvxz1N2jGvED/u+3AM9cV7xjesjb7QG5CvCAx4rmowpgrzOq6f18dWY3zAPIn+Bt5jDpR8LoGKS88amArGVewlb7M8dT/B5x1k8FyHi23wc7Ve3s3+WPyymM19QNOfVYJbRL+H/QK0Y73ItN3DtgZDJl3VRtOgDG0FzSJ8FAdeCv8AMDZ9CKVGAAA=","debug_symbols":"5dzdahtXGIXhe9GxKXutb//mVkopTuIUgZFDrBSKyb133GpkhyhValx3v/jMSkbS2ibMaznw3G3eX739/Nuv292Hm9vNm5/vNtc37y7325vd8uhuk36qf/3h7cfL3f3j2/3lp/3mjWvUi83V7v39l9VfLjYfttdXy4O8fP3N1UNxuHjUOF4r68S1sn24WG7pzNVllHG4uiY/vLZTfPnlYlnf0Os7ev1Ar1dizxd7vtnzgz0/s+cX9nx2csVurtjRFbu6ZlfX7OqaXV0/Q3WVoq+T0ihnJqXDpenMq9a2Tqjj8TdlHZ6pwwt1eKUOb9ThnTp8QIdHog4Xdbipw6nlDGo5g1rOoJYzqOUMajmDWs5MLWemljNTy5mp5czUcmZqOTO1nJlazkwtZ6aWs1DLWajlLNRyFmo5C7WchVrOQi1noZazUMtZqOWs1HJWajkrtZyVWs5KLWellrNSy1mp5azUclZqORu1nI1azkYtZ6OWs1HL2ajlbNRyNmo5G7WcjVrOTi1np5azU8vZqeXs1HJ2ajk7tZydWs5OLWenlnNQyzmo5RzUcg5qOQe1nINazkEt56CWc1DLOajlVKKmU4naTiVqPJc3xS6n5lOJ2k8lakCVqAVVoiZ0eSfqcmEbKmxDhW2osA19Dojof1qObaiwDRW2ocI2VNiGGttQYxtqbEOxtpCwuJCwupCwvJCwvpCwwJCwwpCwxJCwxpCwyJCwypCwzJCwzpCw0JCw0pCw1JCw1pCw2JCw2pCw3JCw3pCw4JCw4pCw5JCw5pCw6JCw6pCw7JCw7pCw8JCw8pCw9JCw9pCw+JCw+pCw/JCw/pCwAJGwApGwBJGwBpGwCJGwCpGwDJGwDpGwEJGwEpGwFJGwFpGwGJGwGpGwHJGwHpGwIJGwIpGwJJGwJpGwKJGwKpGwLJGwLpGwMJGwMpGwNJGwNpGwOJGwOpGwPJGwPpGwQJGwQpGwRJGwRpGwSJGwSpGwTJGwTpGxTpGxTpGxTpGxTpETtaHGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkXGOkWBdYoC6xQF1ikKrFMUidrQwDpFgXWKAusUBdYpCqxTFFinKLBOUWCdosA6RYF1igLrFMWPOEXj3HKprMuV61fv8u3V0Xy4OOvRotTWRW26RX26RWO2RT/iAL3wIk23yNMtiukW5ekWlekWTXfP9nT3bE93z/Z09+yY7p4d092zY7p7dkx3z47p7tkx3T07prtnx398zz68S3+Rd3mWe2upx3dp/cx3V7WtH8GWLx9eWyMfNuU04SZNuMkTbooJN+UJN5UJN9WX31R03NTTV5tO3JeX34oerl5a3o5X51Mv3cr6O6F2/2LraK9nba/orP0VnXW8nrOW9IrOqtnPenzt5SfW/PishwOYfoCY/QAjjgcY48QB8vQHWD93LD8C9xMHKPQDnP8Bo5/7bxm1hx9jWm+PJpVTk8rxA9DyDzidmNReflL650nf4yTa+qyUT3wo/R7lcOZZ8aRn5Sc9qzzpWfVfPmt59Pvlp+3l2+ur2+UZ93/5efduv73ZHR7u//j4998s1/4J"},{"name":"pay_fee","is_unconstrained":true,"custom_attributes":["aztec(public)"],"abi":{"error_types":{},"param_witnesses":{"fee_limit":[{"end":41,"start":40}],"inputs":[{"end":40,"start":0}]},"parameters":[{"name":"inputs","type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}},{"name":"side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"tx_tree_height","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"public_global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"transaction_fee","type":{"kind":"field"}}],"kind":"struct","path":"aztec::context::inputs::public_context_inputs::PublicContextInputs"},"visibility":"private"},{"name":"fee_limit","type":{"kind":"field"},"visibility":"private"}],"return_type":{"abi_type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}},{"name":"side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"nullifier_read_requests","type":{"kind":"array","length":2,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"nullifier_non_existent_read_requests","type":{"kind":"array","length":2,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"contract_storage_update_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"storage_slot","type":{"kind":"field"}},{"name":"new_value","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::contrakt::storage_update_request::StorageUpdateRequest"}}},{"name":"contract_storage_reads","type":{"kind":"array","length":16,"type":{"fields":[{"name":"storage_slot","type":{"kind":"field"}},{"name":"current_value","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::contrakt::storage_read::StorageRead"}}},{"name":"public_call_stack_hashes","type":{"kind":"array","length":16,"type":{"kind":"field"}}},{"name":"new_note_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::note_hash::NoteHash"}}},{"name":"new_nullifiers","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::nullifier::Nullifier"}}},{"name":"new_l2_to_l1_msgs","type":{"kind":"array","length":2,"type":{"fields":[{"name":"recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"content","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"}}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"unencrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::side_effect::SideEffect"}}},{"name":"unencrypted_log_preimages_length","type":{"kind":"field"}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"tx_tree_height","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"prover_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"revert_code","type":{"kind":"integer","sign":"unsigned","width":8}},{"name":"start_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"end_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"transaction_fee","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_circuit_public_inputs::PublicCircuitPublicInputs"},"visibility":"public"},"return_witnesses":[41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270]},"bytecode":"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","debug_symbols":"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qr2Hq/Yertp7uGrv4aq9h6v2Hk6e9iLu9RHpf0T7H7H+R7z/kdP/SPQ/kv2P3P5H+q8v/deX/utL//Wl//rSf33pv770X1/6ry/915f+62v/9bX/+tp/fe2/vvZfX/uvr/3X1/7ra//1tf/61n9967++9V/f+q9v/de3/utb//Wt//rWf33rv773X9/7r+/91/f+63v/9b3/+t5/fe+/vvdf3/uvf/qvf/qvf/qvf/qvf/qvf/qvf/qvf/qvf/qvf/qvH/3Xj/7rR//1o//60X/96L9+9F8/+q8f/deP/utn//Wz//rZf/3sv372Xz/7r5/918/+62f/9bP/+rf/+rf/+rf/+rf/+rf/+rf/+rf/+rf/+rf/+rf/+tV//eq/fvVfv/qvX/3Xr/7rV//1q//61X/9/q5P+rs+6e/6pL/rk/6u7/VPvf2PnP5Hov+R7H/k9j/Sf/3+rk/6uz7p7/qkv+uT/q5P+rs+6e/6pL/rk/6uT/q7Punv+qS/65P+rk/6uz7p7/qkv+uT/q5P+rs+6e/6pL/rk/6uT/q7Punv+qS/65P+rk/6uz7p7/qkv+uT/q5P+rs+6e/6pL/rk/6uT/q7Punv+qS/65P+rk/6uz7p7/qkv+uT/q5P+rs+6e/6pL/rk/6uT/q7Punv+qS/65P+rk/6uz7p7/qkv+uT/q5P+rs+6e/6pL/rk/6uT/q7Punv+qS/65P+rk/6uz7p7/qkv+uT/q5P+rs+6e/6pL/rk/6uT/q7Punv+qS/65P+rk/6uz7p7/qkv+uT/q5P+rs+6e/6pL/rk/6uT/q7Punv+qS/65P+rk/6uz7p7/qkv+uT/q5P+rs+7e/6tL/r0/6uT/u7Pu3v+rS/69P+rk/7uz7t7/q0v+vT/q5PO7u+v0yPuPWRO14iP/5W/vy/Luov/lbz42/t+fVcOz8qUZpKjKYSp6nk0FQSNJUkTSWXppJiqeT3/e93+amV0Gis0mis0mis0mis0mis0mis0mis0mis0mis0Wis0Wis0Wis0Wis0Wis0Wis0Wis0Wis0Wis0Wis02is02is02is02is02is02is02is02is02is02jsodHYQ6Oxh0ZjD43GHhqNPTQae2g09tBo7KHR2EOjsUGjsUGjsUGjsUGjsUGjsUGjsUGjsUGjsUGjsUGjsUmjsUmjsUmjsUmjsUmjsUmjsUmjsUmjsUmjsUmjsZdGYy+Nxl4ajb00GntpNPbSaOyl0dhLo7GXRmMvjcYWjcYWjcYWjcYWjcYWjcYWjcYWjcYWjcYWjcYWi8baw6Kx9rBorD0sGmsPi8baw6Kx9rBorD0sGmsPi8baw6Kx9tBorNBoLI3Py2h8Xkbj8zIan5fR+LyMxudlND4vo/F5GY3Py2h8Xkbj8zIan5fR+LyMxudlND4vo/F5GY3Py2h8Xkbj8zIan5fR+LyMxudlND4vo/F5GY3Py2h8Xkbj8zIan5fR+LyMxudlND4vo/F5GY3Py2h8Xkbj8zIan5fR+LyMxudlND4vo/F5GY3Py2h8Xkbj8zIan5fR+LyMxudlND4vo/F5GY3Py2h8Xkbj8zIan5fR+LyMxudlND4vo/F5GY3Py2h8Xkbj8zIan5fR+LyMxudlND4vo/F5GY3Py2h8Xkbj8zIan5fR+LyMxudlND4vo/F5GY3Py2h8Xkbj8zIan5fR+LyMxudlND4vo/F5GY3Py2h8Xkbj8zIan5fR+LyMxudlND4vo/F5GY3Py2l8Xk7j83Ian5fT+Lz8YdFYp/F5OY3Py2l8Xk7j83Ian5fT+LycxuflND4vp/F5OY3Py2l8Xk7j83Ian5fT+LycxuflND4vp/F5OY3Py2l8Xk7j83Ian5fT+LycxuflND4vp/F5OY3Py2l8Xk7j83Ian5fT+LycxuflND4vp/F5OY3Py2l8Xk7j83Ian5fT+LycxuflND4vp/F5OY3Py2l8Xk7j83Ian5fT+LycxuflND4vp/F5OY3Py2l8Xk7j83Ian5fT+LycxuflND4vp/F5OY3Py2l8Xk7j83Ian5fT+LycxuflND4vp/F5OY3Py2l8Xk7j83Ian5fT+LycxuflND4vp/F5OY3Py2l8Xk7j83Ian5fT+LycxuflND4vp/F5OY3Py2l8Xk7j83Ian5fT+LycxuflND4vp/F5OY3Py2l8Xk7j83Ian5fT+Lycxud1aHxeh8bndWh8XofG53UeFo09ND6vQ+PzOjQ+r0Pj8zo0Pq9D4/M6ND6vQ+PzOjQ+r0Pj8zo0Pq9D4/M6ND6vQ+PzOjQ+r0Pj8zo0Pq9D4/M6ND6vQ+PzOjQ+r0Pj8zo0Pq9D4/M6ND6vQ+PzOjQ+r0Pj8zo0Pq9D4/M6ND6vQ+PzOjQ+r0Pj8zo0Pq9D4/M6ND6vQ+PzOjQ+r0Pj8zo0Pq9D4/M6ND6vQ+PzOjQ+r0Pj8zo0Pq9D4/M6ND6vQ+PzOjQ+r0Pj8zo0Pq9D4/M6ND6vQ+PzOjQ+r0Pj8zo0Pq9D4/M6ND6vQ+PzOjQ+r0Pj8zo0Pq9D4/M6ND6vQ+PzOjQ+r0Pj8zo0Pq9D4/M6ND6vQ+PzOjQ+r0Pj8zo0Pq9D4/M6v8/nVXI/KjH9vZU4TSWHppKgqSRpKrk0lRRLJb/P5/VTK2lo7MdHtP8R63/E+x85/Y9E/yPZ/8jtf6S6H4mOseXjI9L/iPY/Yv2PeP8jp/+R6H8k+x+5/Y/0X1/6ry/915f+60v/9aX/+tJ/fem/vvRfX/qvL/3X1/7ra//1tf/62n997b++9l9f+6+v/dfX/utr//Wt//rWf33rv771X9/6r2/917f+61v/9a3/+tZ/fe+/vvdf3/uv7/3X9/7re//1vf/63n9977++91//9F//9F//9F//9F//9F//9F//9F//9F//9F//9F8/+q8f/deP/utH//Wj//rRf/3ov370Xz/6rx/918/+62f/9bP/+tl//ey/fvZfP/uvn/3Xz/7rZ//1b//1b//1b//1b//1b//1b//1b//1b//1b//1b//1q//6/V1f9Hd90d/1RX/XF/1dX/R3fdHf9UV/1xf9XV/2d33Z3/Vlf9eX/V1f9nd92d/1ZX/Xl/1dX/Z3fdnf9WV/15f9XV/2d33Z3/Vlf9eX/V1f9nd92d/1ZX/Xl/1dX/Z3fdnf9WV/15f9XV/2d33Z3/Vlf9eX/V1f9nd92d/1ZX/Xl/1dX/Z3fdnf9WV/15f9XV/2d33Z3/Vlf9eX/V1f9nd92d/1ZX/Xl/1dX/Z3fdnf9WV/15f9XV/2d33Z3/Vlf9eX/V1f9nd92d/1ZX/Xl/1dX/Z3fdnf9WV/15f9XV/2d33Z3/Vlf9eX/V1f9nd92d/1ZX/Xl/1dX/Z3fdnf9WV/15f9XV/2d33Z3/Vlf9eX/V1f9nd92d/1ZX/Xl/1dX/Z3fdnf9WV/15f9XV/2d33Z3/Vlf9eX/V1f9nd92d/1ZX/Xl/1dX/Z3fdnf9WV/15f9XV/2d33Z3/Vlf9eX/V3f7e/6bn/Xd/u7vtvf9d3+ru/2d323v+u7/V3f7e/6bn/Xd/u7vtvf9d3+ru/2d323v+u7/V3f7e/6bn/Xd/u7vtvf9d3+ru/2d323v+u7/V3f7e/6bn/Xd/u7vtvf9d3+ru/2d323v+u7/V3f7e/6bn/Xd/u7vtvf9d3+ru/2d323v+u7/V3f7e/6bn/Xd/u7vtvf9d3+ru/2d323v+u7/V3f7e/6bn/Xd/u7vtvf9d3+ru/2d323v+u7/V3f7e/6bn/Xd/u7vtvf9d3+ru/2d323v+u7/V3f7e/6bn/Xd/u7vtvf9d3+ru/2d323v+u7/V3f7e/6bn/Xd/u7vtvf9d3+ru/2d323v+u7/V3f7e/6bn/Xd/u7vtvf9d3+ru/2d323v+u7/V3f7e/6bn/Xd/u7vtvf9d3+ru/2d323v+u7/V3f7e/6bn/Xd/u7vtvf9VV/11f9XV/1d33V3/VVf9dX/V1f9Xd91d/1VX/XV/1dX/V3fdXf9VV/11f9XV/1d33V3/VVf9dX/V1f9Xd91d/1VX/XV/1dX/V3fdXf9VV/11f9XV/1d33V3/VVf9dX/V1f9Xd91d/1VX/XV/1dX/V3fdXf9VV/11f9XV/1d33V3/VVf9dX/V1f9Xd91d/1VX/XV/1dX/V3fdXf9VV/11f9XV/1d33V3/VVf9dX/V1f9Xd91d/1VX/XV/1dX/V3fdXf9VV/11f9XV/1d33V3/VVf9dX/V1f9Xd91d/1VX/XV/1dX/V3fdXf9VV/11f9XV/1d33V3/VVf9dX/V1f9Xd91d/1VX/XV/1dX/V3fdXf9VV/11f9XV/1d33V3/VVf9dX/V1f9Xd91d/1VX/XV/1dX/V3fdXf9VV/11f9XV/1d33V3vXp0971vT4i/Y9o/yPW/4j3P3L6H4n+R7L/kdv/SP/1pf/60n996b++9F9f+q8v/deX/utL//Wl//rSf33tv772X1/7r6/919f+62v/9bX/+tp/fe2/vvZf3/qvb/3Xt/7rW//1rf/61n9967++9V/f+q9v/df3/ut7//W9//ref33vv773X9/7r+/91/f+63v/9U//9U//9U//9U//9U//9U//9U//9U//9U//9U//9aP/+tF//ei/fvRfP/qvH/3Xj/7rR//1o//60X/97L9+9l8/+6+f/dfP/utn//Wz//rZf/3sv372X//2X//2X//2X//2X//2X//2X//2X//2X//2X//2X7/6r1/916/+61f/9av/+tV//eq/fvVfv/qv39/1SX/XJ/1dn/R3fdLf9Ul/1yf9XZ/0d33S3/VJf9cn/V2f9Hd90t/1SX/XJ/1dn/R3fdLf9Ul/1yf9XZ/0d33S3/VJf9cn/V2f9Hd90t/1SX/XJ/1dn/R3fdLf9Ul/1yf9XZ/0d33S3/VJf9cn/V2f9Hd90t/1SX/XJ/1dn/R3fdLf9Ul/1yf9XZ/0d33S3/VJf9cn/V2f9Hd90t/1SX/XJ/1dn/R3fdLf9Ul/1yf9XZ/0d33S3/VJf9cn/V2f9Hd90t/1SX/XJ/1dn/R3fdLf9Ul/1yf9XZ/0d33S3/VJf9cn/V2f9Hd90t/1SX/XJ/1dn/R3fdLf9Ul/1yf9XZ/0d33S3/VJf9cn/V2f9Hd90t/1SX/XJ/1dn/R3fdLf9Ul/1yf9XZ/0d33S3/VJf9cn/V2f9Hd90t/1SX/XJ/1dn/R3fdLf9Wl/16f9XZ/2d33a3/W9/g13/yOn/5HofyT7H7n9j/Rfv7/r0/6uT/u7Pu3v+rS/69P+rk/7uz7t7/q0v+vT/q5P+7s+7e/6tL/r0/6uT/u7Pu3v+rS/69P+rk/7uz7t7/q0v+vT/q5P+7s+7e/6tL/r0/6uT/u7Pu3v+rS/69P+rk/7uz7t7/q0v+vT/q5P+7s+7e/6tL/r0/6uT/u7Pu3v+rS/69P+rk/7uz7t7/q0v+vT/q5P+7s+7e/6tL/r0/6uT/u7Pu3v+rS/69P+rk/7uz7t7/q0v+vT/q5P+7s+7e/6tL/r0/6uT/u7Pu3v+rS/69P+rk/7uz7t7/q0v+vT/q5P+7s+7e/6tL/r0/6uT/u7Pu3v+rS/69P+rk/7uz7t7/q0v+vT/q5P+7s+7e/6tL/r0/6uT/u7Pu3v+rS/69P+rs/6uz7r7/qsv+uz/q7P+rs+6+/6rL/rs/6uz/q7Puvv+qy/67P+rs/6uz7r7/qsv+uz/q7P+rs+6+/6rL/rs/6uz/q7Puvv+qy/67P+rs/6uz7r7/qsv+uz/q7P+rs+6+/6rL/rs/6uz/q7Puvv+qy/67P+rs/6uz7r7/qsv+uz/q7P+rs+6+/6rL/rs/6uz/q7Puvv+qy/67P+rs/6uz7r7/qsv+uz/q7P+rs+6+/6rL/rs/6uz/q7Puvv+qy/67P+rs/6uz7r7/qsv+uz/q7P+rs+6+/6rL/rs/6uz/q7Puvv+qy/67P+rs/6uz7r7/qsv+uz/q7P+rs+6+/6rL/rs/6uz/q7Puvv+qy/67P+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SLk3Cyn3ZiHl3iyk3JuFlHuzkHJvFlLuzULKvVlIuTcLKfdmIeXeLKTcm4WUe7OQcm8WUu7NQsq9WUi5Nwsp92Yh5d4spNybhZR7s5BybxZS7s1Cyr1ZSLk3Cyn3ZiHl3iyk3JuFlHuzkHJvFlLuzULKvVlIuTcLKfdmIeXeLKTcm4WUe7OQcm8WUu7NQsq9WUi5Nwsp92Yh5d4spNybhZR7s5BybxZS7s1Cyr1ZSLk3Cyn3ZiHl3iyk3JuFlHuzkHJvFlLuzULKvVlIuTcLKfdmIeXeLKTcm4WUe7OQcm8WUu7NQsq9WUi5Nwsp92Yh5d4spNybhZR7s5BybxZS7s1CunuzkO7eLKS7Nwvp7s1Cus/aaXr3ZiHdvVlId28W0t2bhXT3ZiHdvVlId28W0t2bhXT3ZiHdvVlId28W0t2bhXT3ZiHdvVlId28W0t2bhXT3ZiHdvVlId28W0t2bhXT3ZiHdvVlId28W0t2bhXT3ZiHdvVlId28W0t2bhXT3ZiHdvVlId28W0t2bhXT3ZiHdvVlId28W0t2bhXT3ZiHdvVlId28W0t2bhXT3ZiHdvVlId28W0t2bhXT3ZiHdvVlId28W0t2bhXT3ZiHdvVlId28W0t2bhXT3ZiHdvVlId28W0t2bhXT3ZiHdvVlId28W0v1CFtI570oXOR+li8e/uuYv/9pSf/ljl9+U9OSPkg5fScFXUvKVdPlKKrqSvpANNF6S8JWkfCUZX0l86p186p186p186p186p186n351PvyqfflU+/Lp96XT70vn3pfPvW+fOp9+dT78ql38al38al38al38al38al38al38al38al38al30al3PXTqXQ+detdDp9710Kl3PXTqXQ+detdDp9710Kl3PXTqXQ+fegufegufegufegufegufegufegufegufegufegufeiufeiufeiufeiufeiufeiufeiufeiufeiufeiufehufehufehufehufehufehufehufehufehufehufejufejufejufejufejufejufejufejufejufejufeh8+9T586n341PvwqffhU+/Dp96HT70Pn3ofPvU+fOodfOodfOodfOodfOrN57UsPq9l8Xkti89rWXxey+LzWhaf17L4vJbF57UsPq9l8Xkti89rWXxey+LzWhaf17L4vJbF57UsPq9l8Xkti89rWXxey+LzWhaf17L4vJbF57UsPq9l8Xkti89rWXxey+LzWhaf17L4vJbF57UsPq9l8Xkti85r6Q+d1/JVEpt6v0piU+9XSWzq/SqJTb1fJbGp96skNvV+lcSm3q+S2NT7VRKfetN5LV8l8ak3ndfyVRKfetN5LV8l8ak3ndfyVRKfetN5LV8l8ak3ndfyVRKfetN5LV8l8ak3ndfyVRKfetN5LV8l8ak3ndfyVRKfetN5LV8l8ak3ndfyVRKfetN5LV8l8ak3ndfyVRKfetN5LV8l8ak3ndfyVRKfetN5LV8l8ak3ndfyVRKfetN5LV8l8ak3ndfyVRKfetN5LV8l8ak3ndfyVRKfetN5LV8l8ak3ndfyVRKfetN5LV8l8ak3ndfyVRKfetN5LV8l8ak3ndfyVRKfetN5LV8l8ak3ndfyVRKfetN5LV8l8ak3ndfyVRKfetN5LV8l8ak3ndfyVRKfetN5LV8l8ak3ndfyVRKfetN5LV8l8ak3ndfyVRKfetN5LV8l8ak3ndfyVRKfetN5LV8l8ak3ndfyVRKfetN5LV8l8ak3ndfyVRKfetN5LV8l0am38Hkthc9rKXxeS+HzWspDp97C57UUPq+l8Hkthc9rKXxeS+HzWgqf11L4vJbC57UUPq+l8Hkthc9rKXxeS+HzWgqf11L4vJbC57UUPq+l8Hkthc9rKXxeS+HzWgqf11L4vJbC57UUPq+l8Hkthc9rKXxeS+HzWgqf11L4vJbC57UUPq+l8Hkthc9rKXxeS+HzWgqf11L4vJbC57UUPq+l8Hkthc9rKXxeS+HzWgqf11L4vJbC57UUPq+l8Hkthc9rKXxeS+HzWgqf11L4vJbC57UUPq+l8Hkthc9rKXxeS+HzWgqf11L4vJbC57UUPq+l8Hkthc9rKXxeS+HzWgqf11L4vJbC57UUPq+l8Hkthc9rKXxeS+HzWgqf11L4vJbC57UUPq+l8Hkthc9rKXxeS+HzWgqf11L4vJbC57UUPq+l8Hkthc9rKXxeS+HzWgqf11L5vJbK57VUPq+l8nkt9aFTb+XzWiqf11L5vJbK57VUPq+l8nktlc9rqXxeS+XzWiqf11L5vJbK57VUPq+l8nktlc9rqXxeS+XzWiqf11L5vJbK57VUPq+l8nktlc9rqXxeS+XzWiqf11L5vJbK57VUPq+l8nktlc9rqXxeS+XzWiqf11L5vJbK57VUPq+l8nktlc9rqXxeS+XzWiqf11L5vJbK57VUPq+l8nktlc9rqXxeS+XzWiqf11L5vJbK57VUPq+l8nktlc9rqXxeS+XzWiqf11L5vJbK57VUPq+l8nktlc9rqXxeS+XzWiqf11L5vJbK57VUPq+l8nktlc9rqXxeS+XzWiqf11L5vJbK57VUPq+l8nktlc9rqXxeS+XzWiqf11L5vJbK57VUPq+l8nktlc9rqXxeS+XzWiqf11L5vJbK57VUPq+l8nktlc9raXxeS+PzWhqf19L4vJb20Km38Xktjc9raXxeS+PzWhqf19L4vJbG57U0Pq+l8Xktjc9raXxeS+PzWhqf19L4vJbG57U0Pq+l8Xktjc9raXxeS+PzWhqf19L4vJbG57U0Pq+l8Xktjc9raXxeS+PzWhqf19L4vJbG57U0Pq+l8Xktjc9raXxeS+PzWhqf19L4vJbG57U0Pq+l8Xktjc9raXxeS+PzWhqf19L4vJbG57U0Pq+l8Xktjc9raXxeS+PzWhqf19L4vJbG57U0Pq+l8Xktjc9raXxeS+PzWhqf19L4vJbG57U0Pq+l8Xktjc9raXxeS+PzWhqf19L4vJbG57U0Pq+l8Xktjc9raXxeS+PzWhqf19L4vJbG57U0Pq+l8Xktjc9raXxeS+PzWhqf19L4vJbG57U0Pq+l8Xktjc9raXxeS+PzWhqf19L4vJbG57V0Pq+l83ktnc9r6XxeS3/o1Nv5vJbO57V0Pq+l83ktnc9r6XxeS+fzWjqf19L5vJbO57V0Pq+l83ktnc9r6XxeS+fzWjqf19L5vJbO57V0Pq+l83ktnc9r6XxeS+fzWjqf19L5vJbO57V0Pq+l83ktnc9r6XxeS+fzWjqf19L5vJbO57V0Pq+l83ktnc9r6XxeS+fzWjqf19L5vJbO57V0Pq+l83ktnc9r6XxeS+fzWjqf19L5vJbO57V0Pq+l83ktnc9r6XxeS+fzWjqf19L5vJbO57V0Pq+l83ktnc9r6XxeS+fzWjqf19L5vJbO57V0Pq+l83ktnc9r6XxeS+fzWjqf19L5vJbO57V0Pq+l83ktnc9r6XxeS+fzWjqf19L5vJbO57V0Pq+l83ktnc9r6XxeS+fzWjqf19L5vJbO57V0Pq+l83ktnc9r6XxeS+fzWh4+r+Xh81oe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Wszku3tVQ6XFTL67VzVUWszku3tVQ6XFTL67VzVUWszku3tVQ6XFTL67VzVUWszku3tVQ6XFTL67VzVUWszku3tVQ6XFTL67VzVUWszku3tVQ6XFTL67VzVUWszku3tVQ6XFTL67VzVUWszku3tVQ6XFTL67VzVUWszku3tVQ6XFTL67VzVUWszku3tVQ6XFTL67VzVUWszku3tVQ6XFTL67VzVUWszku3tVQ6XFTL67VzVUWszku3tVQ6XFTL67VzVUWszku3tVQ6XFTL67VzVMWixUvjuh8t0Jle9OqHx38jBpsVD57oTKdydUvjuh8t0Jle9OqHx3QuW7EyrfnVD57oTKdydUvjuh8t0Jle9OqHx3QuW7EyrfnVD57oTKdydUvjuh8t0Jle9OqHx3QuW7EyrfnVD57oTKdydUvjuh8t0Jle9ORn138fyo5uqn1RyqaoKqmkEtLq2PasqeT6u5TNVMOt2+UI1QVaNU1RhVNU5VzacdrpEflzz+42OvleWvn7vf/Fx973Ofe5m+8Dn55uf0m5/79H8uoR8zMeJ+/rn63uc+9xV84XPyzc/pNz/36a9ejv3yObnym8/Zv/zH1//t//nb//H3f/uf/tvf/dPrE3/+//yf//Cf//nv//Effvm//vP/+9////+f19/+fw=="},{"name":"mint_public","is_unconstrained":true,"custom_attributes":["aztec(public)"],"abi":{"error_types":{},"param_witnesses":{"amount":[{"end":42,"start":41}],"inputs":[{"end":40,"start":0}],"to":[{"end":41,"start":40}]},"parameters":[{"name":"inputs","type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}},{"name":"side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"tx_tree_height","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"public_global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"transaction_fee","type":{"kind":"field"}}],"kind":"struct","path":"aztec::context::inputs::public_context_inputs::PublicContextInputs"},"visibility":"private"},{"name":"to","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"},"visibility":"private"},{"name":"amount","type":{"kind":"field"},"visibility":"private"}],"return_type":{"abi_type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}},{"name":"side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"nullifier_read_requests","type":{"kind":"array","length":2,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"nullifier_non_existent_read_requests","type":{"kind":"array","length":2,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"contract_storage_update_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"storage_slot","type":{"kind":"field"}},{"name":"new_value","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::contrakt::storage_update_request::StorageUpdateRequest"}}},{"name":"contract_storage_reads","type":{"kind":"array","length":16,"type":{"fields":[{"name":"storage_slot","type":{"kind":"field"}},{"name":"current_value","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::contrakt::storage_read::StorageRead"}}},{"name":"public_call_stack_hashes","type":{"kind":"array","length":16,"type":{"kind":"field"}}},{"name":"new_note_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::note_hash::NoteHash"}}},{"name":"new_nullifiers","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::nullifier::Nullifier"}}},{"name":"new_l2_to_l1_msgs","type":{"kind":"array","length":2,"type":{"fields":[{"name":"recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"content","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"}}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"unencrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::side_effect::SideEffect"}}},{"name":"unencrypted_log_preimages_length","type":{"kind":"field"}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"tx_tree_height","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"prover_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"revert_code","type":{"kind":"integer","sign":"unsigned","width":8}},{"name":"start_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"end_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"transaction_fee","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_circuit_public_inputs::PublicCircuitPublicInputs"},"visibility":"public"},"return_witnesses":[42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271]},"bytecode":"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","debug_symbols":"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68v7WV/ez/ryftaX97O+vJ/15f2sL+9nfXk/68v7WV/ez/ryftaX97O+vJ/15f2sL+9nfXk/68v7WV/ez/ryftaX97O+vJ/15f2sL+9nfXk/68v7WV/ez/ryftaX97O+vJ/15f2sL+9nfXk/68v7WV/ez/ryftaX97O+vJ/15f2sL+9nfXk/68v7WV/ez/ryftaX97O+vJ/15f2sL+9nfXk/68v7WV/ez/ryftaX97O+vJ/15f2sL+9nfXk/68v7WV/ez/ryftaX97O+vJ/15f2sL+9nfXk/68v7WV/ez/ryftaX97O+vJ/15f2sL+9nfft+1rfvZ337fta372d9+37Wt+9nfft+1rfvZ337fta372d9+37Wt+9nfft+1rfvZ337fta372d9+37Wt+9nfft+1rfvZ337fta372d9+37Wt+9nfft+1rfvZ337fta372d9+37Wt+9nfft+1rfvZ337fta372d9+37Wt+9nfft+1rfvZ337fta372d9+37Wt+9nfft+1rfvZ337fta372d9+37Wt+9nfft+1rfvZ337fta372d9+37Wt+9nfft+1rfvZ337fta372d9+37Wt+9nfft+1rfvZ337fta3f9s/76NP/emTZ62vz651vvms1edn/fnluZ5flYRMJSlTyZappGQqaZlKjkolv+0f7fFTK1kylZhMJTIZWzIZWzIZWzIZWzIZWzIZWzIZ2zIZ2zIZ2zIZ2zIZ2zIZ2zIZ2zIZ2zIZ2zIZ2zIZe2Qy9shk7JHJ2COTsUcmY49Mxh6ZjD0yGXtkMvaoZGw9Khlbj0rG1qOSsfWoZGw9Khlbj0rG1qOSsfWoZGw9Khlbj0zGLpmMXTIZu2Qydslk7JLJ2CWTsUsmY5dMxi6ZjF0yGWsyGWsyGWsyGWsyGWsyGWsyGWsyGWsyGWsyGWsyGesyGesyGesyGesyGesyGesyGesyGesyGesyGesyGRsyGRsyGRsyGRsyGRsyGRsyGRsyGRsyGRsyGRsyGZsyGZsyGZsyGZsyGZsyGZsyGZsyGZsyGZsyGZsyGbtlMnbLZOyWyVgZz6tkPK+S8bxKxvMqGc+rZDyvkvG8SsbzKhnPq2Q8r5LxvErG8yoZz6tkPK+S8bxKxvMqGc+rZDyvkvG8SsbzKhnPq2Q8r5LxvErG8yoZz6tkPK+S8bxKxvMqGc+rZDyvkvG8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zkcuvfORS+985NI7H7n0zkcuvfORS+985NI7H730XnrpvfTSe+ml99JL76WX3ksvvZdeei+99F566b300tv00tv00tv00tv00tv00tv00tv00tv00tv00tv00tv10tv10tv10tv10tv10tv10tv10tv10tv10tv10jv00jv00jv00jv00jv00jv00jv00jv00jv00jv00jv10jv10jv10jv10jv10jv10jv10jv10jv10jv10nvrpffWS++tl95bL723XnpvvfTeeum99dJ766X31kvv0ktvPdcy9VzL1HMtU8+1TD3XMvVcy9RzLVPPtUw91zL1XMvUcy1Tz7VMPdcy9VzL1HMtU8+1TD3XMvVcy9RzLVPPtUw91zL1XMvUcy1Tz7VMPdcy9VzL1HMtU8+1TD3Xcuu5llvPtdx6ruXWcy33I5feW8+13Hqu5dZzLbeea7n1XMut51puPddy67mWW8+13Hqu5dZzLbeea7n1XMut51puPddy67mWW8+13Hqu5dZzLbeea7n1XMut51puPddy67mWW8+13Hqu5dZzLbeea7n1XMut51puPddy67mWW8+13Hqu5dZzLbeea7n1XMut51puPddy67mWW8+13Hqu5dZzLbeea7n1XMut51puPddy67mWW8+13Hqu5dZzLbeea7n1XMut51puPddy67mWW8+13Hqu5dZzLbeea7n1XMut51puPddy67mWW8+13Hqu5dZzLbeea7n1XMut51puPddy67mWW8+13Hqu5dZzLbeea7n1XMut51puPddy67mWW8+13Hqu5dZzLbeea7n1XMut51puPddy67mWW8+13Hqu5dZzLbeea7n1XMut51puPdey9FzL0nMtS8+1LD3Xsh659C4917L0XMvScy1Lz7UsPdey9FzL0nMtS8+1LD3XsvRcy9JzLUvPtSw917L0XMvScy1Lz7UsPdey9FzL0nMtS8+1LD3XsvRcy9JzLUvPtSw917L0XMvScy1Lz7UsPdey9FzL0nMtS8+1LD3XsvRcy9JzLUvPtSw917L0XMvScy1Lz7UsPdey9FzL0nMtS8+1LD3XsvRcy9JzLUvPtSw917L0XMvScy1Lz7UsPdey9FzL0nMtS8+1LD3XsvRcy9JzLUvPtSw917L0XMvScy1Lz7UsPdey9FzL0nMtS8+1LD3XsvRcy9JzLUvPtSw9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"},{"name":"check_balance","is_unconstrained":true,"custom_attributes":["aztec(public)"],"abi":{"error_types":{},"param_witnesses":{"fee_limit":[{"end":41,"start":40}],"inputs":[{"end":40,"start":0}]},"parameters":[{"name":"inputs","type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}},{"name":"side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"tx_tree_height","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"public_global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"transaction_fee","type":{"kind":"field"}}],"kind":"struct","path":"aztec::context::inputs::public_context_inputs::PublicContextInputs"},"visibility":"private"},{"name":"fee_limit","type":{"kind":"field"},"visibility":"private"}],"return_type":{"abi_type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}},{"name":"side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"nullifier_read_requests","type":{"kind":"array","length":2,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"nullifier_non_existent_read_requests","type":{"kind":"array","length":2,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"contract_storage_update_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"storage_slot","type":{"kind":"field"}},{"name":"new_value","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::contrakt::storage_update_request::StorageUpdateRequest"}}},{"name":"contract_storage_reads","type":{"kind":"array","length":16,"type":{"fields":[{"name":"storage_slot","type":{"kind":"field"}},{"name":"current_value","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::contrakt::storage_read::StorageRead"}}},{"name":"public_call_stack_hashes","type":{"kind":"array","length":16,"type":{"kind":"field"}}},{"name":"new_note_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::note_hash::NoteHash"}}},{"name":"new_nullifiers","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::nullifier::Nullifier"}}},{"name":"new_l2_to_l1_msgs","type":{"kind":"array","length":2,"type":{"fields":[{"name":"recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"content","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"}}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"unencrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::side_effect::SideEffect"}}},{"name":"unencrypted_log_preimages_length","type":{"kind":"field"}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"tx_tree_height","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"prover_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"revert_code","type":{"kind":"integer","sign":"unsigned","width":8}},{"name":"start_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"end_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"transaction_fee","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_circuit_public_inputs::PublicCircuitPublicInputs"},"visibility":"public"},"return_witnesses":[41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270]},"bytecode":"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","debug_symbols":"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zuQ3MdbW8/H1tvpntk1/9uHnMfv49PNkfP14789mvuLju5f/4rvX4598Oifnp0/Xs/zffPrjp64f56f6j/NT48f5qfnj/NT6cX5q/zg/df84P3V+lJ9avy2ovOun/jB/Wqrnh/nTUj0/zJ+W6okf56f+MH9aqueH+dNSPdI/LVV8/an25C9/6sd03vUnmo/vn/d+vz1v/n578/evN3+/v/n7483fn2/+/nrz9/ebv//Nz6+9+fldb35+15uf3/Xm53e9+fldb35+15uf3/Xm53e9+fldb35+15ufX3/z8+tvfn79zc+vv/n59Tc/v/7m59ff/Pz6m59ff/Pz629+fuPNz2+8+fmNNz+/8ebnN978/Mabn9948/Mbb35+483Pb7z5+c03P7/55uc33/z85puf33zz85tvfn7zzc9vvvn5zTc/v/nm57fe/PzWm5/fevPzW29+fuvNz2+9+fmtNz+/9ebnt978/Nabn99+8/Pbb35++83Pb7/5+e03P7/95ue33/z89puf337z89tvfn73m5/f/ebnd7/5+d1vfn73m5/f/ebnd7/5+d1vfn73m5/f/ebnd978/M6bn9958/M7b35+583P77z5+Z03P7/z5ud33vz8znuf336eN3+/vfn715u/39/8/fHm7883f3+9+fv7zd+/3/z9b35+3+xf9ef+1Z//d+vHdV8e8W+M4v7V+HP3/vrp+Ezh6/xo03p+dgPX+jqhRZuQ0yYUtAklbUL1PSaU9XVCFb+c0McoLRllf49Rxr+OMvPZKPNdRvn4tMezPxnlcxntu4/yOdL6axRrnfONUcY+/gub+lkztmWfQnatnyH7fOPT31aY+3Pn7aYf4Lf/gLj9B+TtP6Bu/wF9+w/Yt/+AufwHfO5+3vQDbn8T++1vYr/9Tey3v4n99jexf4c3sT3+9dPP5Dcm9dfubnz5y92Puc8v/2v5eep979T3vVOfa6cez71Tt3unvu6dut879bh36nnv1O99m8a9b9O4920a975N8963ad77Ns1736Z579s0732b5r1v07z3bZr3vk3z3rdp3vs2rXvfpnXv27TufZvWvW/TuvdtWve+Tevet2nd+zate9+mde/btO99m/a9b9O+923a975N+963ad/7Nu1736Z979u0732b9r1v033v23Tf+zbd975N971v033v23Tf+zbd975N971v033v23Tf+zade9+mc+/bdO59m869b9O59206975N59636dz7Np1736Zz7dt0P9e+Tfdz7dt0P9e+Tfdz7dt0P9e+Tfdz7dt0P9e+Tfdz7dt0P9e+Tfdz79vU7n2b2r1vU7v3bWr3vk3t3rep3fs2tXvfpnbv29TufZvavW/Tde/bdN37Nl33vk3XvW/T73Gm0t9q6ve+Tde9b9N179t03fs2Xfe+Tf3et6nf+zb1e9+mfu/b9Huci/S3mvq9b9N7z0La956FtO89C2nfexbSvvcspH3vWUj73rOQ9r1nIe17z0La956FtO89C2nfexbSvvcspH3vWUj73rOQ9r1nIe17z0La956FtO89C2nfexbSvvcspH3vWUj73rOQ9r1nIe17z0La956FtO89C2nfexbSvvcspH3vWUj73rOQ9r1nIe17z0La956FtO89C2nfexbSvvcspH3vWUj73rOQ9r1nIe17z0La956FtO89C2nfexbSvvcspH3vWUj73rOQ9r1nIe17z0La956FtO89C2nfexbSvvcspH3vWUj73rOQ9r1nIe17z0La956FtO89C2nfexbSvvcspH3vWUj73rOQ9r1nIc29ZyHNvWchzb1nIc29ZyHNc+3bdO49C2nuPQtp7j0Lae49C2nuPQtp7j0Lae49C2nuPQtp7j0Lae49C2nuPQtp7j0Lae49C2nuPQtp7j0Lae49C2nuPQtp7j0Lae49C2nuPQtp7j0Lae49C2nuPQtp7j0Lae49C2nuPQtp7j0Lae49C2nuPQtp7j0Lae49C2nuPQtp7j0Lae49C2nuPQtp7j0Lae49C2nuPQtp7j0Lae49C2nuPQtp7j0Lae49C2nuPQtp7j0Lae49C2nuPQtp7j0Lae49C2nuPQtp7j0Lae49C2nuPQtp7j0Lae49C2nuPQtp7j0Lae49C2nuPQtp7j0Lae49C2nuPQtp7j0Lae49C2nuPQtp7j0Lae49C2nuPQtp7j0Lae49C2nuPQtp7j0Lae49C2nuPQtp7j0Lae49C2nuPQtp7j0Lae49C2nuPQtp7j0Lae49C2nuPQtp7j0Lae49C2nuPQtp7j0Lae49C2nuPQtp7j0Lae49C2nuPQtp7j0Lae49C2muPQtpPdeehfRl6re+Tb9M/da36Zep3/o2/TL1W9+mX6Z+69v0y9RvfZt+mfqtb9MvU7/1bfpl6ve+Ta89C+nL1O99m157FtKXqd/7Nr32LKQvU7/3bXrtWUhfpn7v2/Tas5C+TP3bb9Oqb03dLD8+bVH/Zphff9p7/fThsF9M6emPKf0VZxzJp2S8KS3elJw3peBNKXlTKt6UmjelzZsSj97Oo7fz6O08ejuP3s6jt/Po7Tx6O4/ezqO38+gdPHoHj97Bo3fw6B08egeP3sGjd/DoHTx6B4/eyaN38uidPHonj97Jo3fy6J08eieP3smjd/LoXTx6F4/exaN38ehdPHoXj97Fo3fx6F08eheP3s2jd/Po3Tx6N4/ezaN38+jdPHo3j97No3fz6L159N48em8evTeP3ptH782j9+bRe/PovXn03jx6D4/ew6P38Og9PHoPj97Do/fw6D08eg+P3oOjtz04etuDo7c9OHrbg6O3PTh624Ojtz04etuDo7c9OHrbw6O38ehtPHobj97Go7fx6G08ehuP3sajt/HozWstjddaGq+1NF5rabzW0nitpfFaS+O1lsZrLY3XWhqvtTRea2m81tJ4raXxWkvjtZbGay2N11oar7U0XmtpvNbSeK2l8VpL47WWxmstjddaGq+1NF5rabzW0nitpfFaS+O1lsZrLY3XWhqvtTRea2m81tJ4raXxWkvjtZbGay2N11oar7U0XmtpvNbSeK2l8VpL47WWxmstjddaGq+1NF5rabzW0nitpfFaS+O1lsZrLY3XWhqvtTRea2m81tJ4raXxWkvjtZbGay2N11oar7U0XmtpvNbSeK2l8VpL47WWxmstjddaGq+1NF5rabzW0nitpfFaS+O1lsZrLRevtVy81nLxWsvFay3Xg6P34rWWi9daLl5ruXit5eK1lovXWi5ea7l4reXitZaL11ouXmu5eK3l4rWWi9daLl5ruXit5eK1lovXWi5ea7l4reXitZaL11ouXmu5eK3l4rWWi9daLl5ruXit5eK1lovXWi5ea7l4reXitZaL11ouXmu5eK3l4rWWi9daLl5ruXit5eK1lovXWi5ea7l4reXitZaL11ouXmu5eK3l4rWWi9daLl5ruXit5eK1lovXWi5ea7l4reXitZaL11ouXmu5eK3l4rWWi9daLl5ruXit5eK1lovXWi5ea7l4reXitZaL11ouXmu5eK3l4rWWi9daLl5ruXit5eK1lovXWi5ea7l4reXi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d9A07qBp3EHTuIOmcQdN4w6axh00jTtoGnfQNO6gadxB07iDpnEHTeMOmsYdNI07aBp30DTuoGncQdO4g6ZxB03jDprGHTSNO2gad9A07qBp3EHTuIOmcQdN4w6axh00jTtoGnfQNO6gadxB07iDpnEHTeMOmsYdNI07aBp30DTuoGncQdO4g6ZxB03jDprGHTSNO2gad9A07qBp3EHTuIOmcQdN4w6axh00jTtoGnfQNO7g0riDS+MOLo07uDTu4HpCM0xqhinNMK0ZZmuG0VBA4w4ujTu4NO7g0riDS+MOLo07uDTu4NK4g0vjDi6NO7g07uDSuINL4w4ujTu4NO7g0riDS+MOLo07uDTu4NK4g0vjDi6NO7g07uDSuINL4w4ujTu4NO7g0riDS+MOLo07uDTu4NK4g0vjDi6NO7g07uDSuINL4w4ujTu4NO7g0riDS+MOLo07uDTu4NK4g0vjDi6NO7g07uDSuINL4w4ujTu4NO7g0riDS+MOLo07uDTu4NK4g0vjDi6NO7g07uDSuINL4w4ujTu4NO7g0riDS+MOLo07uDTu4NK4g0vjDi6NO7g07uDSuINL4w4ujTu4NO7g0riDS+MOLo07uDTu4NK4g0vjDi6NO7g07uDSuINL4w4ujTu4NO7g0riDS+MOLo076Bp30DXuoGvcQde4g/6EZpjUDFOaYVozzNYMo6GAxh10jTvoGnfQNe6ga9xB17iDrnEHXeMOusYddI076Bp30DXuoGvcQde4g65xB13jDrrGHXSNO+gad9A17qBr3EHXuIOucQdd4w66xh10jTvoGnfQNe6ga9xB17iDrnEHXeMOusYddI076Bp30DXuoGvcQde4g65xB13jDrrGHXSNO+gad9A17qBr3EHXuIOucQdd4w66xh10jTvoGnfQNe6ga9xB17iDrnEHXeMOusYddI076Bp30DXuoGvcQde4g65xB13jDrrGHXSNO+gad9A17qBr3EHXuIOucQdd4w66xh10jTvoGnfQNe6ga9xB17iDrnEHXeMOusYddI076Bp30DXuoGvcQde4g65xB13jDrrGHXSNOxgadzA07mBo3MHQuIPxhGaY1AxTmmFaM8zWDKOhgMYdDI07GBp3MDTuYGjcwdC4g6FxB0PjDobGHQyNOxgadzA07mBo3MHQuIOhcQdD4w6Gxh0MjTsYGncwNO5gaNzB0LiDoXEHQ+MOhsYdDI07GBp3MDTuYGjcwdC4g6FxB0PjDobGHQyNOxgadzA07mBo3MHQuIOhcQdD4w6Gxh0MjTsYGncwNO5gaNzB0LiDoXEHQ+MOhsYdDI07GBp3MDTuYGjcwdC4g6FxB0PjDobGHQyNOxgadzA07mBo3MHQuIOhcQdD4w6Gxh0MjTsYGncwNO5gaNzB0LiDoXEHQ+MOhsYdDI07GBp3MDTuYGjcwdC4g6FxB0PjDobGHQyNOxgadzA07mBo3MHQuIOhcQdD4w6Gxh0MjTuYGncwNe5gatzB1LiD+YRmmNQMU5phWjPM1gyjoYDGHUyNO5gadzA17mBq3MHUuIOpcQdT4w6mxh1MjTuYGncwNe5gatzB1LiDqXEHU+MOpsYdTI07mBp3MDXuYGrcwdS4g6lxB1PjDqbGHUyNO5gadzA17mBq3MHUuIOpcQdT4w6mxh1MjTuYGncwNe5gatzB1LiDqXEHU+MOpsYdTI07mBp3MDXuYGrcwdS4g6lxB1PjDqbGHUyNO5gadzA17mBq3MHUuIOpcQdT4w6mxh1MjTuYGncwNe5gatzB1LiDqXEHU+MOpsYdTI07mBp3MDXuYGrcwdS4g6lxB1PjDqbGHUyNO5gadzA17mBq3MHUuIOpcQdT4w6mxh1MjTuYGncwNe5gatzB1LiDqXEHU+MOpsYdTI07WBp3sDTuYGncwdK4g/WEZpjUDFOaYVozzNYMo6GAxh0sjTtYGnewNO5gadzB0riDpXEHS+MOlsYdLI07WBp3sDTuYGncwdK4g6VxB0vjDpbGHSyNO1gad7A07mBp3MHSuIOlcQdL4w6Wxh0sjTtYGnewNO5gadzB0riDpXEHS+MOlsYdLI07WBp3sDTuYGncwdK4g6VxB0vjDpbGHSyNO1gad7A07mBp3MHSuIOlcQdL4w6Wxh0sjTtYGnewNO5gadzB0riDpXEHS+MOlsYdLI07WBp3sDTuYGncwdK4g6VxB0vjDpbGHSyNO1gad7A07mBp3MHSuIOlcQdL4w6Wxh0sjTtYGnewNO5gadzB0riDpXEHS+MOlsYdLI07WBp3sDTuYGncwdK4g6VxB0vjDpbGHSyNO9gad7A17mBr3MHWuIP9hGaY1AxTmmFaM8zWDKOhgMYdbI072Bp3sDXuYGvcwda4g61xB1vjDrbGHWyNO9gad7A17mBr3MHWuIOtcQdb4w62xh1sjTvYGnewNe5ga9zB1riDrXEHW+MOtsYdbI072Bp3sDXuYGvcwda4g61xB1vjDrbGHWyNO9gad7A17mBr3MHWuIOtcQdb4w62xh1sjTvYGnewNe5ga9zB1riDrXEHW+MOtsYdbI072Bp3sDXuYGvcwda4g61xB1vjDrbGHWyNO9gad7A17mBr3MHWuIOtcQdb4w62xh1sjTvYGnewNe5ga9zB1riDrXEHW+MOtsYdbI072Bp3sDXuYGvcwda4g61xB1vjDrbGHWyNO9gad7A17mBr3MHWuIOtcQdb4w62xh1sjTu4Ne7g1riDW+MObo07uJ/QDJOaYUozTGuG2ZphNBTQuINb4w5ujTu4Ne7g1riDW+MObo07uDXu4Na4g1vjDm6NO7g17uDWuINb4w5ujTu4Ne7g1riDW+MObo07uDXu4Na4g1vjDm6NO7g17uDWuINb4w5ujTu4Ne7g1riDW+MObo07uDXu4Na4g1vjDm6NO7g17uDWuINb4w5ujTu4Ne7g1riDW+MObo07uDXu4Na4g1vjDm6NO7g17uDWuINb4w5ujTu4Ne7g1riDW+MObo07uDXu4Na4g1vjDm6NO7g17uDWuINb4w5ujTu4Ne7g1riDW+MObo07uDXu4Na4g1vjDm6NO7g17uDWuINb4w5ujTu4Ne7g1riDW+MObo07uDXu4Na4g1vjDm6NO7g17uDWuINb4w5ujTu4Ne7g1riDW+MOjsYdHI07OBp3cDTu4DyhGSY1w5RmmNYMszXDaCigcQdH4w6Oxh0cjTs4GndwNO7gaNzB0biDo3EHR+MOjsYdHI07OBp3cDTu4GjcwdG4g6NxB0fjDo7GHRyNOzgad3A07uBo3MHRuIOjcQdH4w6Oxh0cjTs4GndwNO7gaNzB0biDo3EHR+MOjsYdHI07OBp3cDTu4GjcwdG4g6NxB0fjDo7GHRyNOzgad3A07uBo3MHRuIOjcQdH4w6Oxh0cjTs4GndwNO7gaNzB0biDo3EHR+MOjsYdHI07OBp3cDTu4GjcwdG4g6NxB0fjDo7GHRyNOzgad3A07uBo3MHRuIOjcQdH4w6Oxh0cjTs4GndwNO7gaNzB0biDo3EHR+MOjsYdHI07OBp3cDTu4GjcwdG4g6NxB0fiDsYjcQe/DGOaYZZmGNcME5phUjNMaYZpzTBbM4yGAqahgGkoYBoKmIYCpqGAaShgGgqYhgKmoYBpKLA0FFgaCiwNBZaGAktDgaWhwNJQYGkosDQUWBoKuIYCrqGAayjgGgq4hgKuoYBrKOAaCriGAq6hQGgoEBoKhIYCoaFAaCgQGgqEhgKhoUBoKBAaCqSGAqmhQGookBoKpIYCqaFAaiiQGgqkhgKpoUBpKFAaCpSGAqWhQGkoUBoKlIYCpaFAaShQGgq0hgKtoUBrKNAaCrSGAq2hQGso0BoKtIYCraHA1lBgayiwNRTYGgpsDQW2hgJbQ4GtocDWUGBrKDAaCoyGAqOhwGgoMBoKjIYCo6HAaCgwGgpo3EHTuIOmcQdN4w6axh20JzTDpGaY0gzTmmG2ZhgNBTTuoGncQdO4g6ZxB03jDprGHTSNO2gad9A07qBp3EHTuIOmcQdN4w6axh00jTtoGnfQNO6gadxB07iDpnEHTeMOmsYdNI07aBp30DTuoGncQdO4g6ZxB03jDprGHTSNO2gad9A07qBp3EHTuIOmcQdN4w6axh00jTtoGnfQNO6gadxB07iDpnEHTeMOmsYdNI07aBp30DTuoP0V7mDPN4ap54mfPl2P/TxMfB3lr1AHv8coJhllfY9RVn4dJZ7PRnHJKCEZJb/LuvjPo6xfjvLrD/uXG+6nD7v1zx/+eUZbPaO11seMlsevZ7S/y13V9nVGOz9Zif1d7qr5+Cn15a9KPhvlu9xV/fw8yvzG9f4r7I7vPKNvrPd6vgervuyAfJ1R+b8/o/VlHj99eHk+n8xo4WZ0/G766UJ7Xr3QXr1wvXqhv3phvHphvnphvXphv3rhfvXCV++c9eqds169c9ard8569c5Zr94569U7Z71656xX75z16p2zXr1z/NU7x1+9c/zVO8dfvXP81TvHX71z/NU7x1+9c/zVO8dfvXPi1TsnXr1z4tU7J169c+LVOydevXPi1TsnXr1z4tU7J169c/LVOydfvXPy1TsnX71z8tU7J1+9c/LVOydfvXPy1TsnX71z6tU7p169c+rVO6devXPq1TunXr1z6tU7p169c+rVO6devXP61TunX71z+tU7p1+9c/rVO6dfvXP61TunX71z+tU7p1+9c/ard85+9c7Zr945+9U7Z7965+xX75z96p2zX71z9qt3zn71zplX75x59c6ZV++cefXOmVfvnHn1zplX75x59c6ZV++cefHO8ed59UJ79cL16oX+6oXx6oX56oX16oX96oX71QtfvXNe3UP2V/eQ/cU95PwLW4gff1nx/Ou/v2fvuT/+/s7rF3+fM/XJhyO+/o1yxC/+/vnLhz8m46TJBGkySZpMkSbTpMls3WTSP/6W8Ms/nc8mM6DJfL7F/beajJEmoyTwtq+TWZ9OxkmTCdJkkjSZIk2mSZPZpMkMaDLxkCZjpMmQCBwkAgeJwEEicJAIHCQCB4nAQSJwkgicJAInicBJInCSCJwkAieJwEkicJIInCQCF4nARSJwkQhcJAIXicBFInCRCFxCAmf618ns9dlkNmkyA5pMP6TJGGkyizQZIYFz5mMylfbZZII0mSZNZpMmM6DJ7Ic0GSNNZpEmI+RMP/0xme749z+ckx8zr2f9HCOux79OPe6det479SJM/WMywndBfS2Iv8zr08ls0mQGNJl5SJMx0mQWaTJOmkyQJpOkyRRpMiQCD4nAAyLwX1Cp/1aTARH4Lyjff6vJgAj8F9T0v9VkQAT+Cwr932oyIAL/BdX/bzUZEoGNRGAjEdhIBDYSgY1EYCMR2EgENhKBjURgIxF4kQi8hATe9rWa2dafTWaRJuOkyQRpMkmaTJEm06TJbNJkBjQZZYP27cmQCOwkAjuJwE4isJMI7CQCO4nATiKwkwgcJAIHicBBInCQCBwkAgeJwEEicJAIHCQCB4nASSJwkgicJAInicBJInCSCJwkAieJwEkicJIIXCQCF4nARSJwkQhcJAIXicBFInCRCFwkAheJwE0icJMI3CQCN4nATSJwkwjcJAI3icBNInCTCLxJBN4kAm8SgTeJwJtE4E0i8CYReJMIvEkE3iQCD4nAQyLwkAg8JAIPicBDIvCQCDwkAg+JwAMicDwgAscDInA8IALHAyJwPCACxwMicDwgAscDInA8IALHQyKwkQhsJAIbicBGIrCRCGwkAhuJwEYisJEIbCQCLxKBSU1ckJq4IDVxQWrigtTEBamJC1ITF6QmLkhNXJCauCA1cUFq4oLUxAWpiQtSExekJi5ITVyQmrggNXFBauKC1MQFqYkLUhMXpCYuSE1ckJq4IDVxQWrigtTEBamJC1ITF6QmLkhNXJCauCA1cUFq4oLUxAWpiQtSExekJi5ITVyQmrggNXFBauKC1MQFqYkLUhMXpCYuSE1ckJq4IDVxQWrigtTEBamJC1ITF6QmLkhNXJCauCA1cUFq4oLUxAWpiQtSExekJi5ITVyQmrggNXFBauKC1MQFqYkLUhMXpCYuSE1ckJq4IDVxQWrigtTEBamJC1ITl6QmLklNXJKauCQ1cfmACJykJi5JTVySmrgkNXFJauKS1MQlqYlLUhOXpCYuSU1ckpq4JDVxSWriktTEJamJS1ITl6QmLklNXJKauCQ1cUlq4pLUxCWpiUtSE5ekJi5JTVySmrgkNXFJauKS1MQlqYlLUhOXpCYuSU1ckpq4JDVxSWriktTEJamJS1ITl6QmLklNXJKauCQ1cUlq4pLUxCWpiUtSE5ekJi5JTVySmrgkNXFJauKS1MQlqYlLUhOXpCYuSU1ckpq4JDVxSWriktTEJamJS1ITl6QmLklNXJKauCQ1cUlq4pLUxCWpiUtSE5ekJi5JTVySmrgkNXFJauKS1MQlqYlLUhOXpCYuSU1ckpq4JDVxKW3i6vk6mb0+mYy0ifvmZIw0GSGBZ83HZMafzybjpMkkaTJFmkyTJrNJkxnOZOrz2GpVf4zxxNer7MtwH5f5a5fFa5fla5fVa5f14WVf/tX/+v3/+MPv/9M//sM/f7niz//h//zjf/7TH/7pjz/9yz/97//+//6TL5/9Pw=="}],"outputs":{"globals":{"storage":[{"fields":[{"name":"balances","value":{"fields":[{"name":"slot","value":{"kind":"integer","sign":false,"value":"1"}},{"name":"typ","value":{"kind":"string","value":"Map<AztecAddress, PublicMutable<U128>>"}}],"kind":"struct"}},{"name":"portal_address","value":{"fields":[{"name":"slot","value":{"kind":"integer","sign":false,"value":"2"}},{"name":"typ","value":{"kind":"string","value":"SharedImmutable<EthAddress>"}}],"kind":"struct"}}],"kind":"struct"}]},"structs":{"functions":[{"fields":[{"name":"parameters","type":{"fields":[{"name":"fee_limit","type":{"kind":"field"}}],"kind":"struct","path":"GasToken::pay_fee_parameters"}},{"name":"return_type","type":{"kind":"field"}}],"kind":"struct","path":"GasToken::pay_fee_abi"},{"fields":[{"name":"parameters","type":{"fields":[{"name":"to","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"amount","type":{"kind":"field"}}],"kind":"struct","path":"GasToken::mint_public_parameters"}}],"kind":"struct","path":"GasToken::mint_public_abi"},{"fields":[{"name":"parameters","type":{"fields":[{"name":"fee_limit","type":{"kind":"field"}}],"kind":"struct","path":"GasToken::check_balance_parameters"}}],"kind":"struct","path":"GasToken::check_balance_abi"},{"fields":[{"name":"parameters","type":{"fields":[{"name":"to","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"amount","type":{"kind":"field"}},{"name":"secret","type":{"kind":"field"}},{"name":"leaf_index","type":{"kind":"field"}}],"kind":"struct","path":"GasToken::claim_public_parameters"}}],"kind":"struct","path":"GasToken::claim_public_abi"},{"fields":[{"name":"parameters","type":{"fields":[{"name":"portal_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}}],"kind":"struct","path":"GasToken::constructor_parameters"}}],"kind":"struct","path":"GasToken::constructor_abi"}]}},"file_map":{"103":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/returns.nr","source":"#[oracle(packReturns)]\nfn pack_returns_oracle<N>(_returns: [Field]) -> Field {}\n\nunconstrained pub fn pack_returns(returns: [Field]) {\n let _unused = pack_returns_oracle(returns);\n}\n\n#[oracle(unpackReturns)]\nfn unpack_returns_oracle<N>(_return_hash: Field) -> [Field; N] {}\n\nunconstrained pub fn unpack_returns<N>(return_hash: Field) -> [Field; N] {\n unpack_returns_oracle(return_hash)\n}\n"},"107":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/storage.nr","source":"use dep::protocol_types::traits::{Deserialize, Serialize};\n\n#[oracle(storageRead)]\nfn storage_read_oracle<N>(_storage_slot: Field, _number_of_elements: Field) -> [Field; N] {}\n\nunconstrained fn storage_read_oracle_wrapper<N>(_storage_slot: Field) -> [Field; N] {\n storage_read_oracle(_storage_slot, N)\n}\n\npub fn storage_read<N>(storage_slot: Field) -> [Field; N] {\n storage_read_oracle_wrapper(storage_slot)\n}\n\n#[oracle(storageWrite)]\nfn storage_write_oracle<N>(_storage_slot: Field, _values: [Field; N]) -> [Field; N] {}\n\nunconstrained pub fn storage_write<N>(storage_slot: Field, fields: [Field; N]) {\n let _hash = storage_write_oracle(storage_slot, fields);\n}\n"},"114":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/get_contract_instance.nr","source":"use dep::protocol_types::{\n address::AztecAddress, contract_instance::ContractInstance, utils::arr_copy_slice,\n constants::CONTRACT_INSTANCE_LENGTH, utils::reader::Reader\n};\n\n#[oracle(getContractInstance)]\nfn get_contract_instance_oracle(_address: AztecAddress) -> [Field; CONTRACT_INSTANCE_LENGTH] {}\n\n// Returns a ContractInstance plus a boolean indicating whether the instance was found.\n#[oracle(avmOpcodeGetContractInstance)]\nfn get_contract_instance_oracle_avm(_address: AztecAddress) -> [Field; CONTRACT_INSTANCE_LENGTH + 1] {}\n\nunconstrained fn get_contract_instance_internal(address: AztecAddress) -> [Field; CONTRACT_INSTANCE_LENGTH] {\n get_contract_instance_oracle(address)\n}\n\nunconstrained fn get_contract_instance_internal_avm(address: AztecAddress) -> [Field; CONTRACT_INSTANCE_LENGTH + 1] {\n get_contract_instance_oracle_avm(address)\n}\n\npub fn get_contract_instance(address: AztecAddress) -> ContractInstance {\n let instance = ContractInstance::deserialize(get_contract_instance_internal(address));\n assert(instance.to_address().eq(address));\n instance\n}\n\npub fn get_contract_instance_avm(address: AztecAddress) -> Option<ContractInstance> {\n let mut reader = Reader::new(get_contract_instance_internal_avm(address));\n let found = reader.read();\n if found == 0 {\n Option::none()\n } else {\n Option::some(reader.read_struct(ContractInstance::deserialize))\n }\n}\n"},"118":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/get_l1_to_l2_membership_witness.nr","source":"use dep::protocol_types::{address::AztecAddress};\n\nglobal L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH: u64 = 17;\n\n// Obtains membership witness (index and sibling path) for a message in the L1 to L2 message tree.\n#[oracle(getL1ToL2MembershipWitness)]\nfn get_l1_to_l2_membership_witness_oracle(\n _contract_address: AztecAddress,\n _message_hash: Field,\n _secret: Field\n) -> [Field; L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH] {}\n\nunconstrained pub fn get_l1_to_l2_membership_witness(\n contract_address: AztecAddress,\n message_hash: Field,\n secret: Field\n) -> [Field; L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH] {\n get_l1_to_l2_membership_witness_oracle(contract_address, message_hash, secret)\n}\n"},"119":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/context.nr","source":"mod globals;\nmod inputs;\n\nmod private_context;\nmod public_context;\nmod avm_context;\nmod interface;\nmod gas;\n\nuse interface::{\n ContextInterface, PrivateCallInterface, PublicCallInterface, PrivateVoidCallInterface,\n PublicVoidCallInterface, AvmCallInterface, AvmVoidCallInterface\n};\nuse private_context::PrivateContext;\nuse private_context::PackedReturns;\nuse public_context::PublicContext;\nuse public_context::FunctionReturns;\nuse avm_context::AvmContext;\n\nstruct Context {\n private: Option<&mut PrivateContext>,\n public: Option<&mut PublicContext>,\n avm: Option<&mut AvmContext>,\n}\n\nimpl Context {\n pub fn private(context: &mut PrivateContext) -> Context {\n Context { private: Option::some(context), public: Option::none(), avm: Option::none() }\n }\n\n pub fn public(context: &mut PublicContext) -> Context {\n Context { public: Option::some(context), private: Option::none(), avm: Option::none() }\n }\n\n pub fn avm(context: &mut AvmContext) -> Context {\n Context { avm: Option::some(context), public: Option::none(), private: Option::none() }\n }\n\n pub fn none() -> Context {\n Context { public: Option::none(), private: Option::none(), avm: Option::none() }\n }\n}\n"},"121":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/state_vars/map.nr","source":"use crate::context::{PrivateContext, PublicContext, Context};\nuse dep::protocol_types::{hash::pedersen_hash, traits::ToField};\nuse crate::state_vars::storage::Storage;\n\n// docs:start:map\nstruct Map<K, V> {\n context: Context,\n storage_slot: Field,\n state_var_constructor: fn(Context, Field) -> V,\n}\n// docs:end:map\n\nimpl<K, T> Storage<T> for Map<K, T> {}\n\nimpl<K, V> Map<K, V> {\n // docs:start:new\n pub fn new(\n context: Context,\n storage_slot: Field,\n state_var_constructor: fn(Context, Field) -> V\n ) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n Map { context, storage_slot, state_var_constructor }\n }\n // docs:end:new\n\n // docs:start:at\n pub fn at(self, key: K) -> V where K: ToField {\n // TODO(#1204): use a generator index for the storage slot\n let derived_storage_slot = derive_storage_slot_in_map(self.storage_slot, key);\n\n let state_var_constructor = self.state_var_constructor;\n state_var_constructor(self.context, derived_storage_slot)\n }\n // docs:end:at\n}\n\npub fn derive_storage_slot_in_map<K>(storage_slot: Field, key: K) -> Field where K: ToField {\n pedersen_hash([storage_slot, key.to_field()], 0)\n}\n"},"123":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/state_vars/public_mutable.nr","source":"use crate::context::Context;\nuse crate::oracle::storage::storage_read;\nuse crate::oracle::storage::storage_write;\nuse dep::protocol_types::traits::{Deserialize, Serialize};\nuse crate::state_vars::storage::Storage;\n\n// docs:start:public_mutable_struct\nstruct PublicMutable<T> {\n context: Context,\n storage_slot: Field,\n}\n// docs:end:public_mutable_struct\n\nimpl<T> Storage<T> for PublicMutable<T> {}\n\nimpl<T> PublicMutable<T> {\n // docs:start:public_mutable_struct_new\n pub fn new(\n // Note: Passing the contexts to new(...) just to have an interface compatible with a Map.\n context: Context,\n storage_slot: Field\n ) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n PublicMutable { context, storage_slot }\n }\n // docs:end:public_mutable_struct_new\n\n // docs:start:public_mutable_struct_read\n pub fn read<T_SERIALIZED_LEN>(self) -> T where T: Deserialize<T_SERIALIZED_LEN> {\n assert(self.context.private.is_none(), \"PublicMutable reads only supported in public functions\");\n let fields = storage_read(self.storage_slot);\n T::deserialize(fields)\n }\n // docs:end:public_mutable_struct_read\n\n // docs:start:public_mutable_struct_write\n pub fn write<T_SERIALIZED_LEN>(self, value: T) where T: Serialize<T_SERIALIZED_LEN> {\n assert(self.context.private.is_none(), \"PublicMutable writes only supported in public functions\");\n let fields = T::serialize(value);\n storage_write(self.storage_slot, fields);\n }\n // docs:end:public_mutable_struct_write\n}\n"},"126":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/state_vars/shared_immutable.nr","source":"use crate::{\n context::Context, history::public_storage::public_storage_historical_read,\n oracle::{storage::{storage_read, storage_write}}, state_vars::storage::Storage\n};\nuse dep::protocol_types::{constants::INITIALIZATION_SLOT_SEPARATOR, traits::{Deserialize, Serialize}};\n\n// Just like PublicImmutable but with the ability to read from private functions.\nstruct SharedImmutable<T>{\n context: Context,\n storage_slot: Field,\n}\n\nimpl<T> Storage<T> for SharedImmutable<T> {}\n\nimpl<T> SharedImmutable<T> {\n pub fn new(\n // Note: Passing the contexts to new(...) just to have an interface compatible with a Map.\n context: Context,\n storage_slot: Field\n ) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n Self { context, storage_slot }\n }\n\n // Intended to be only called once. \n pub fn initialize<T_SERIALIZED_LEN>(self, value: T) where T: Serialize<T_SERIALIZED_LEN> {\n assert(\n self.context.private.is_none(), \"SharedImmutable can only be initialized from public functions\"\n );\n // TODO(#4738): Uncomment the following assert\n // assert(\n // self.context.public.unwrap_unchecked().is_deployment(), \"SharedImmutable can only be initialized during contract deployment\"\n // );\n\n // We check that the struct is not yet initialized by checking if the initialization slot is 0\n let initialization_slot = INITIALIZATION_SLOT_SEPARATOR + self.storage_slot;\n let fields_read: [Field; 1] = storage_read(initialization_slot);\n assert(fields_read[0] == 0, \"SharedImmutable already initialized\");\n\n // We populate the initialization slot with a non-zero value to indicate that the struct is initialized\n storage_write(initialization_slot, [0xdead]);\n\n let fields_write = T::serialize(value);\n storage_write(self.storage_slot, fields_write);\n }\n\n pub fn read_public<T_SERIALIZED_LEN>(self) -> T where T: Deserialize<T_SERIALIZED_LEN> {\n assert(self.context.private.is_none(), \"Public read only supported in public functions\");\n let fields = storage_read(self.storage_slot);\n T::deserialize(fields)\n }\n\n pub fn read_private<T_SERIALIZED_LEN>(self) -> T where T: Deserialize<T_SERIALIZED_LEN> {\n assert(self.context.public.is_none(), \"Private read only supported in private functions\");\n let private_context = self.context.private.unwrap();\n\n let mut fields = [0; T_SERIALIZED_LEN];\n\n for i in 0..fields.len() {\n fields[i] =\n public_storage_historical_read(\n (*private_context),\n self.storage_slot + i as Field,\n (*private_context).this_address()\n );\n }\n T::deserialize(fields)\n }\n}\n"},"158":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/function_selector.nr","source":"use crate::utils::field::field_from_bytes;\nuse dep::std::cmp::Eq;\nuse crate::traits::{Serialize, Deserialize, FromField, ToField, Empty};\n\nglobal SELECTOR_SIZE = 4;\n\nstruct FunctionSelector {\n // 1st 4-bytes of abi-encoding of function.\n inner: u32,\n}\n\nimpl Eq for FunctionSelector {\n fn eq(self, function_selector: FunctionSelector) -> bool {\n function_selector.inner == self.inner\n }\n}\n\nimpl Serialize<1> for FunctionSelector {\n fn serialize(self: Self) -> [Field; 1] {\n [self.inner as Field]\n }\n}\n\nimpl Deserialize<1> for FunctionSelector {\n fn deserialize(fields: [Field; 1]) -> Self {\n Self {\n inner: fields[0] as u32\n }\n }\n}\n\nimpl FromField for FunctionSelector {\n fn from_field(field: Field) -> Self {\n Self { inner: field as u32 }\n }\n}\n\nimpl ToField for FunctionSelector {\n fn to_field(self) -> Field {\n self.inner as Field\n }\n}\n\nimpl Empty for FunctionSelector {\n fn empty() -> Self {\n Self { inner: 0 as u32 }\n }\n}\n\nimpl FunctionSelector {\n pub fn from_u32(value: u32) -> Self {\n Self { inner: value }\n }\n\n pub fn from_signature<N>(signature: str<N>) -> Self {\n let bytes = signature.as_bytes();\n let hash = dep::std::hash::keccak256(bytes, bytes.len() as u32);\n\n let mut selector_be_bytes = [0; SELECTOR_SIZE];\n for i in 0..SELECTOR_SIZE {\n selector_be_bytes[i] = hash[i];\n }\n\n FunctionSelector::from_field(field_from_bytes(selector_be_bytes, true))\n }\n\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n}\n"},"186":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/utils.nr","source":"// general util packages/modules are usually bad practice\n// because there is no criteria for what we should not put in here.\n// Reducing the size of this package would be welcome.\n\nmod arrays;\nmod field;\nmod reader;\nmod uint256;\n\n// if predicate == true then return lhs, else return rhs\npub fn conditional_assign(predicate: bool, lhs: Field, rhs: Field) -> Field {\n if predicate { lhs } else { rhs }\n}\n\npub fn arr_copy_slice<T, N, M>(src: [T; N], mut dst: [T; M], offset: u64) -> [T; M] {\n for i in 0..dst.len() {\n dst[i] = src[i + offset];\n }\n dst\n}\n"},"194":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/type_serialization.nr","source":"use crate::traits::{Serialize, Deserialize};\n\nglobal BOOL_SERIALIZED_LEN: Field = 1;\nglobal U8_SERIALIZED_LEN: Field = 1;\nglobal U32_SERIALIZED_LEN: Field = 1;\nglobal U64_SERIALIZED_LEN: Field = 1;\nglobal U128_SERIALIZED_LEN: Field = 1;\nglobal FIELD_SERIALIZED_LEN: Field = 1;\n\nimpl Serialize<BOOL_SERIALIZED_LEN> for bool {\n fn serialize(self) -> [Field; BOOL_SERIALIZED_LEN] {\n [self as Field]\n }\n}\n\nimpl Deserialize<BOOL_SERIALIZED_LEN> for bool {\n fn deserialize(fields: [Field; BOOL_SERIALIZED_LEN]) -> bool {\n fields[0] as bool\n }\n}\n\nimpl Serialize<U8_SERIALIZED_LEN> for u8 {\n fn serialize(self) -> [Field; U32_SERIALIZED_LEN] {\n [self as Field]\n }\n}\n\nimpl Deserialize<U8_SERIALIZED_LEN> for u8 {\n fn deserialize(fields: [Field; U8_SERIALIZED_LEN]) -> Self {\n fields[0] as u8\n }\n}\n\nimpl Serialize<U32_SERIALIZED_LEN> for u32 {\n fn serialize(self) -> [Field; U32_SERIALIZED_LEN] {\n [self as Field]\n }\n}\n\nimpl Deserialize<U32_SERIALIZED_LEN> for u32 {\n fn deserialize(fields: [Field; U32_SERIALIZED_LEN]) -> Self {\n fields[0] as u32\n }\n}\n\nimpl Serialize<U64_SERIALIZED_LEN> for u64 {\n fn serialize(self) -> [Field; U64_SERIALIZED_LEN] {\n [self as Field]\n }\n}\n\nimpl Deserialize<U64_SERIALIZED_LEN> for u64 {\n fn deserialize(fields: [Field; U64_SERIALIZED_LEN]) -> Self {\n fields[0] as u64\n }\n}\n\nimpl Serialize<U128_SERIALIZED_LEN> for U128 {\n fn serialize(self) -> [Field; 1] {\n [self.to_integer()]\n }\n\n}\n\nimpl Deserialize<U128_SERIALIZED_LEN> for U128 {\n fn deserialize(fields: [Field; U128_SERIALIZED_LEN]) -> Self {\n U128::from_integer(fields[0])\n }\n}\n\nimpl Serialize<FIELD_SERIALIZED_LEN> for Field {\n fn serialize(self) -> [Field; U32_SERIALIZED_LEN] {\n [self]\n }\n}\n\nimpl Deserialize<FIELD_SERIALIZED_LEN> for Field {\n fn deserialize(fields: [Field; FIELD_SERIALIZED_LEN]) -> Self {\n fields[0]\n }\n}\n"},"195":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/traits.nr","source":"use dep::std::cmp::Eq;\nuse crate::utils::field::field_from_bytes;\n\n// Trait: is_empty\n//\n// The general is_empty trait checks if a data type is is empty,\n// and it defines empty for the basic data types as 0.\n//\n// If a Field is equal to zero, then it is regarded as zero.\n// We will go with this definition for now, however it can be problematic \n// if a value can actually be zero. In a future refactor, we can \n// use the optional type for safety. Doing it now would lead to a worse devex\n// and would make it harder to sync up with the cpp code.\n// Preferred over Default trait to convey intent, as default doesn't necessarily mean empty.\ntrait Empty {\n fn empty() -> Self;\n}\n\nimpl Empty for Field { fn empty() -> Self {0} }\n\nimpl Empty for u1 { fn empty() -> Self {0} }\nimpl Empty for u8 { fn empty() -> Self {0} }\nimpl Empty for u32 { fn empty() -> Self {0} }\nimpl Empty for u64 { fn empty() -> Self {0} }\nimpl Empty for U128 { fn empty() -> Self {U128::from_integer(0)} }\n\npub fn is_empty<T>(item: T) -> bool where T: Empty + Eq {\n item.eq(T::empty())\n}\n\npub fn is_empty_array<T, N>(array: [T; N]) -> bool where T: Empty + Eq {\n array.all(|elem| is_empty(elem))\n}\n\ntrait Hash {\n fn hash(self) -> Field;\n}\n\ntrait ToField {\n fn to_field(self) -> Field;\n}\n\nimpl ToField for Field {\n fn to_field(self) -> Field {\n self\n }\n}\n\nimpl ToField for bool { fn to_field(self) -> Field { self as Field } }\nimpl ToField for u1 { fn to_field(self) -> Field { self as Field } }\nimpl ToField for u8 { fn to_field(self) -> Field { self as Field } }\nimpl ToField for u32 { fn to_field(self) -> Field { self as Field } }\nimpl ToField for u64 { fn to_field(self) -> Field { self as Field } }\nimpl ToField for U128 {\n fn to_field(self) -> Field {\n self.to_integer()\n }\n}\nimpl<N> ToField for str<N> {\n fn to_field(self) -> Field {\n assert(N < 32, \"String doesn't fit in a field, consider using Serialize instead\");\n field_from_bytes(self.as_bytes(), true)\n }\n}\n\ntrait FromField {\n fn from_field(value: Field) -> Self;\n}\n\nimpl FromField for Field {\n fn from_field(value: Field) -> Self {\n value\n }\n}\n\nimpl FromField for bool { fn from_field(value: Field) -> Self { value as bool } }\nimpl FromField for u1 { fn from_field(value: Field) -> Self { value as u1 } }\nimpl FromField for u8 { fn from_field(value: Field) -> Self { value as u8 } }\nimpl FromField for u32 { fn from_field(value: Field) -> Self { value as u32 } }\nimpl FromField for u64 { fn from_field(value: Field) -> Self { value as u64 } }\nimpl FromField for U128 {\n fn from_field(value: Field) -> Self {\n U128::from_integer(value)\n }\n}\n\n// docs:start:serialize\ntrait Serialize<N> {\n fn serialize(self) -> [Field; N];\n}\n// docs:end:serialize\n\nimpl<N> Serialize<N> for str<N> {\n fn serialize(self) -> [Field; N] {\n let mut result = [0; N];\n let bytes: [u8; N] = self.as_bytes();\n for i in 0..N {\n result[i] = field_from_bytes([bytes[i];1], true);\n }\n result\n }\n}\n\n// docs:start:deserialize\ntrait Deserialize<N> {\n fn deserialize(fields: [Field; N]) -> Self;\n}\n// docs:end:deserialize\n"},"203":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr","source":"use crate::address::{AztecAddress, EthAddress};\nuse crate::recursion::verification_key::VerificationKey;\nuse crate::abis::function_selector::FunctionSelector;\nuse crate::abis::contract_class_function_leaf_preimage::ContractClassFunctionLeafPreimage;\nuse crate::contract_class_id::ContractClassId;\nuse crate::abis::side_effect::SideEffect;\nuse crate::traits::is_empty;\nuse crate::utils::{uint256::U256, field::field_from_bytes_32_trunc};\nuse crate::constants::{\n FUNCTION_TREE_HEIGHT, GENERATOR_INDEX__SILOED_NOTE_HASH, GENERATOR_INDEX__OUTER_NULLIFIER,\n GENERATOR_INDEX__VK, GENERATOR_INDEX__NOTE_HASH_NONCE, GENERATOR_INDEX__UNIQUE_NOTE_HASH,\n MAX_ENCRYPTED_LOGS_PER_TX\n};\nuse crate::traits::Hash;\nuse crate::messaging::l2_to_l1_message::L2ToL1Message;\nuse crate::merkle_tree::root::root_from_sibling_path;\nuse dep::std::hash::{pedersen_hash_with_separator, sha256};\n\npub fn sha256_to_field<N>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = sha256(bytes_to_hash);\n let hash_in_a_field = field_from_bytes_32_trunc(sha256_hashed);\n\n hash_in_a_field\n}\n\npub fn private_functions_root_from_siblings(\n selector: FunctionSelector,\n vk_hash: Field,\n function_leaf_index: Field,\n function_leaf_sibling_path: [Field; FUNCTION_TREE_HEIGHT]\n) -> Field {\n let function_leaf_preimage = ContractClassFunctionLeafPreimage { selector, vk_hash };\n let function_leaf = function_leaf_preimage.hash();\n root_from_sibling_path(function_leaf, function_leaf_index, function_leaf_sibling_path)\n}\n\npub fn compute_note_hash_nonce(first_nullifier: Field, note_hash_index: u64) -> Field {\n pedersen_hash(\n [\n first_nullifier,\n note_hash_index as Field\n ],\n GENERATOR_INDEX__NOTE_HASH_NONCE\n )\n}\n\npub fn compute_unique_note_hash(nonce: Field, note_hash: Field) -> Field {\n pedersen_hash(\n [\n nonce,\n note_hash\n ],\n GENERATOR_INDEX__UNIQUE_NOTE_HASH\n )\n}\n\npub fn silo_note_hash(address: AztecAddress, unique_note_hash: Field) -> Field {\n pedersen_hash(\n [\n address.to_field(),\n unique_note_hash\n ],\n GENERATOR_INDEX__SILOED_NOTE_HASH\n )\n}\n\npub fn silo_nullifier(address: AztecAddress, nullifier: Field) -> Field {\n pedersen_hash(\n [\n address.to_field(),\n nullifier\n ],\n GENERATOR_INDEX__OUTER_NULLIFIER\n )\n}\n\npub fn merkle_hash(left: Field, right: Field) -> Field {\n pedersen_hash([left, right], 0)\n}\n\npub fn stdlib_recursion_verification_key_compress_native_vk(_vk: VerificationKey) -> Field {\n // Original cpp code\n // stdlib::recursion::verification_key<CT::bn254>::compress_native(private_call.vk, GeneratorIndex::VK);\n // The above cpp method is only ever called on verification key, so it has been special cased here\n let _hash_index = GENERATOR_INDEX__VK;\n 0\n}\n\npub fn compute_l2_to_l1_hash(\n contract_address: AztecAddress,\n rollup_version_id: Field,\n chain_id: Field,\n message: L2ToL1Message\n) -> Field {\n let mut bytes: BoundedVec<u8, 160> = BoundedVec::new();\n\n let inputs = [\n contract_address.to_field(), rollup_version_id, message.recipient.to_field(), chain_id, message.content\n ];\n for i in 0..inputs.len() {\n // TODO are bytes be in fr.to_buffer() ?\n let item_bytes = inputs[i].to_be_bytes(32);\n for j in 0..32 {\n bytes.push(item_bytes[j]);\n }\n }\n\n sha256_to_field(bytes.storage)\n}\n\n// Computes sha256 hash of 2 input hashes.\n//\n// NB: This method now takes in two 31 byte fields - it assumes that any input\n// is the result of a sha_to_field hash and => is truncated\n//\n// TODO(Jan and David): This is used for the encrypted_log hashes.\n// Can we check to see if we can just use hash_to_field or pedersen_compress here?\n//\npub fn accumulate_sha256(input: [Field; 2]) -> Field {\n // This is a note about the cpp code, since it takes an array of Fields\n // instead of a U128.\n // 4 Field elements when converted to bytes will usually \n // occupy 4 * 32 = 128 bytes.\n // However, this function is making the assumption that each Field \n // only occupies 128 bits.\n //\n // TODO(David): This does not seem to be getting guaranteed anywhere in the code?\n\n // Concatentate two fields into 32x2 = 64 bytes\n // accumulate_sha256 assumes that the inputs are pre-truncated 31 byte numbers\n let mut hash_input_flattened = [0; 64];\n for offset in 0..input.len() {\n let input_as_bytes = input[offset].to_be_bytes(32);\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n\n sha256_to_field(hash_input_flattened)\n}\n\n// Computes the final logs hash for a tx.\n// NB: this assumes MAX_ENCRYPTED_LOGS_PER_TX == MAX_UNENCRYPTED_LOGS_PER_TX\n// to avoid doubling code, since we can't define the byte len to be 32*N directly. \npub fn compute_tx_logs_hash(logs: [SideEffect; MAX_ENCRYPTED_LOGS_PER_TX]) -> Field {\n // Convert each field element into a byte array and append the bytes to `hash_input_flattened`\n let mut hash_input_flattened = [0; MAX_ENCRYPTED_LOGS_PER_TX * 32];\n for offset in 0..MAX_ENCRYPTED_LOGS_PER_TX {\n let input_as_bytes = logs[offset].value.to_be_bytes(32);\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n // Ideally we would push to a slice then hash, but there is no sha_slice\n // Hardcode to 256 bytes for now\n let mut hash = sha256_to_field(hash_input_flattened);\n // Not having a 0 value hash for empty logs causes issues with empty txs\n // used for padding. Returning early is currently unsupported.\n // We always provide sorted logs here, so 0 being empty means all are empty.\n if is_empty(logs[0]) {\n hash = 0;\n }\n hash\n}\n\npub fn pedersen_hash<N>(inputs: [Field; N], hash_index: u32) -> Field {\n dep::std::hash::pedersen_hash_with_separator(inputs, hash_index)\n}\n\npub fn poseidon2_hash<N>(inputs: [Field; N]) -> Field {\n dep::std::hash::poseidon2::Poseidon2::hash(inputs, N)\n}\n\n#[test]\nfn smoke_sha256_to_field() {\n let full_buffer = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,\n 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,\n 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,\n 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,\n 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,\n 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,\n 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,\n 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159\n ];\n let result = sha256_to_field(full_buffer);\n\n assert(result == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184c7);\n\n // to show correctness of the current ver (truncate one byte) vs old ver (mod full bytes):\n let result_bytes = sha256(full_buffer);\n let truncated_field = crate::utils::field::field_from_bytes_32_trunc(result_bytes);\n assert(truncated_field == result);\n let mod_res = result + (result_bytes[31] as Field);\n assert(mod_res == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184e0);\n}\n\n#[test]\nfn compute_l2_l1_hash() {\n // All zeroes\n let hash_result = compute_l2_to_l1_hash(AztecAddress::from_field(0), 0, 0, L2ToL1Message::empty());\n assert(hash_result == 0xb393978842a0fa3d3e1470196f098f473f9678e72463cb65ec4ab5581856c2);\n\n // Non-zero case\n let message = L2ToL1Message { recipient: EthAddress::from_field(3), content: 5, counter: 1234 };\n let hash_result = compute_l2_to_l1_hash(AztecAddress::from_field(1), 2, 4, message);\n assert(hash_result == 0x3f88c1044a05e5340ed20466276500f6d45ca5603913b9091e957161734e16);\n}\n"},"208":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/contract_instance.nr","source":"use crate::{\n address::{\n aztec_address::AztecAddress, eth_address::EthAddress, partial_address::PartialAddress,\n public_keys_hash::PublicKeysHash\n},\n contract_class_id::ContractClassId,\n constants::{GENERATOR_INDEX__CONTRACT_DEPLOYMENT_DATA, CONTRACT_INSTANCE_LENGTH},\n traits::{Deserialize, Hash, Serialize}\n};\n\nstruct ContractInstance {\n salt : Field,\n deployer: AztecAddress,\n contract_class_id : ContractClassId,\n initialization_hash : Field,\n public_keys_hash : PublicKeysHash,\n}\n\nimpl Eq for ContractInstance {\n fn eq(self, other: Self) -> bool {\n self.public_keys_hash.eq(other.public_keys_hash) &\n self.initialization_hash.eq(other.initialization_hash) &\n self.contract_class_id.eq(other.contract_class_id) &\n self.salt.eq(other.salt)\n }\n}\n\nimpl Serialize<CONTRACT_INSTANCE_LENGTH> for ContractInstance {\n fn serialize(self) -> [Field; CONTRACT_INSTANCE_LENGTH] {\n [\n self.salt,\n self.deployer.to_field(),\n self.contract_class_id.to_field(),\n self.initialization_hash,\n self.public_keys_hash.to_field()\n ]\n }\n}\n\nimpl Deserialize<CONTRACT_INSTANCE_LENGTH> for ContractInstance {\n fn deserialize(serialized: [Field; CONTRACT_INSTANCE_LENGTH]) -> Self {\n Self {\n salt: serialized[0],\n deployer: AztecAddress::from_field(serialized[1]),\n contract_class_id: ContractClassId::from_field(serialized[2]),\n initialization_hash: serialized[3],\n public_keys_hash: PublicKeysHash::from_field(serialized[4]),\n }\n }\n}\n\nimpl Hash for ContractInstance {\n fn hash(self) -> Field {\n self.to_address().to_field()\n }\n}\n\nimpl ContractInstance {\n fn to_address(self) -> AztecAddress {\n AztecAddress::compute(\n self.public_keys_hash,\n PartialAddress::compute(\n self.contract_class_id,\n self.salt,\n self.initialization_hash,\n self.deployer\n )\n )\n }\n}\n"},"22":{"path":"std/field.nr","source":"mod bn254;\nuse bn254::lt as bn254_lt;\n\nimpl Field {\n pub fn to_le_bits(self: Self, bit_size: u32) -> [u1] {\n crate::assert_constant(bit_size);\n self.__to_le_bits(bit_size)\n }\n\n pub fn to_be_bits(self: Self, bit_size: u32) -> [u1] {\n crate::assert_constant(bit_size);\n self.__to_be_bits(bit_size)\n }\n\n #[builtin(to_le_bits)]\n fn __to_le_bits(self, _bit_size: u32) -> [u1] {}\n\n #[builtin(to_be_bits)]\n fn __to_be_bits(self, bit_size: u32) -> [u1] {}\n\n #[builtin(apply_range_constraint)]\n fn __assert_max_bit_size(self, bit_size: u32) {}\n\n pub fn assert_max_bit_size(self: Self, bit_size: u32) {\n crate::assert_constant(bit_size);\n assert(bit_size < modulus_num_bits() as u32);\n self.__assert_max_bit_size(bit_size);\n }\n\n pub fn to_le_bytes(self: Self, byte_size: u32) -> [u8] {\n self.to_le_radix(256, byte_size)\n }\n\n pub fn to_be_bytes(self: Self, byte_size: u32) -> [u8] {\n self.to_be_radix(256, byte_size)\n }\n\n pub fn to_le_radix(self: Self, radix: u32, result_len: u32) -> [u8] {\n crate::assert_constant(radix);\n crate::assert_constant(result_len);\n self.__to_le_radix(radix, result_len)\n }\n\n pub fn to_be_radix(self: Self, radix: u32, result_len: u32) -> [u8] {\n crate::assert_constant(radix);\n crate::assert_constant(result_len);\n self.__to_be_radix(radix, result_len)\n }\n\n // decompose `_self` into a `_result_len` vector over the `_radix` basis\n // `_radix` must be less than 256\n #[builtin(to_le_radix)]\n fn __to_le_radix(self, radix: u32, result_len: u32) -> [u8] {}\n\n #[builtin(to_be_radix)]\n fn __to_be_radix(self, radix: u32, result_len: u32) -> [u8] {}\n\n // Returns self to the power of the given exponent value.\n // Caution: we assume the exponent fits into 32 bits\n // using a bigger bit size impacts negatively the performance and should be done only if the exponent does not fit in 32 bits\n pub fn pow_32(self, exponent: Field) -> Field {\n let mut r: Field = 1;\n let b = exponent.to_le_bits(32);\n\n for i in 1..33 {\n r *= r;\n r = (b[32-i] as Field) * (r * self) + (1 - b[32-i] as Field) * r;\n }\n r\n }\n\n // Parity of (prime) Field element, i.e. sgn0(x mod p) = 0 if x ∈ {0, ..., p-1} is even, otherwise sgn0(x mod p) = 1.\n pub fn sgn0(self) -> u1 {\n self as u1\n }\n\n pub fn lt(self, another: Field) -> bool {\n if crate::compat::is_bn254() {\n bn254_lt(self, another)\n } else {\n lt_fallback(self, another)\n }\n }\n}\n\n#[builtin(modulus_num_bits)]\npub fn modulus_num_bits() -> u64 {}\n\n#[builtin(modulus_be_bits)]\npub fn modulus_be_bits() -> [u1] {}\n\n#[builtin(modulus_le_bits)]\npub fn modulus_le_bits() -> [u1] {}\n\n#[builtin(modulus_be_bytes)]\npub fn modulus_be_bytes() -> [u8] {}\n\n#[builtin(modulus_le_bytes)]\npub fn modulus_le_bytes() -> [u8] {}\n// Convert a 32 byte array to a field element by modding\npub fn bytes32_to_field(bytes32: [u8; 32]) -> Field {\n // Convert it to a field element\n let mut v = 1;\n let mut high = 0 as Field;\n let mut low = 0 as Field;\n\n for i in 0..16 {\n high = high + (bytes32[15 - i] as Field) * v;\n low = low + (bytes32[16 + 15 - i] as Field) * v;\n v = v * 256;\n }\n // Abuse that a % p + b % p = (a + b) % p and that low < p\n low + high * v\n}\n\nfn lt_fallback(x: Field, y: Field) -> bool {\n let num_bytes = (modulus_num_bits() as u32 + 7) / 8;\n let x_bytes = x.to_le_bytes(num_bytes);\n let y_bytes = y.to_le_bytes(num_bytes);\n let mut x_is_lt = false;\n let mut done = false;\n for i in 0..num_bytes {\n if (!done) {\n let x_byte = x_bytes[num_bytes - 1 - i] as u8;\n let y_byte = y_bytes[num_bytes - 1 - i] as u8;\n let bytes_match = x_byte == y_byte;\n if !bytes_match {\n x_is_lt = x_byte < y_byte;\n done = true;\n }\n }\n }\n x_is_lt\n}\n\n"},"224":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/utils/field.nr","source":"pub fn field_from_bytes<N>(bytes: [u8; N], big_endian: bool) -> Field {\n assert(bytes.len() < 32, \"field_from_bytes: N must be less than 32\");\n let mut as_field = 0;\n let mut offset = 1;\n for i in 0..N {\n let mut index = i;\n if big_endian {\n index = N - i - 1;\n }\n as_field += (bytes[index] as Field) * offset;\n offset *= 256;\n }\n\n as_field\n}\n\n// Convert a 32 byte array to a field element by truncating the final byte\npub fn field_from_bytes_32_trunc(bytes32: [u8; 32]) -> Field {\n // Convert it to a field element\n let mut v = 1;\n let mut high = 0 as Field;\n let mut low = 0 as Field;\n\n for i in 0..15 {\n // covers bytes 16..30 (31 is truncated and ignored)\n low = low + (bytes32[15 + 15 - i] as Field) * v;\n v = v * 256;\n // covers bytes 0..14\n high = high + (bytes32[14 - i] as Field) * v;\n }\n // covers byte 15\n low = low + (bytes32[15] as Field) * v;\n\n low + high * v\n}\n\n// TODO to radix returns u8, so we cannot use bigger radixes. It'd be ideal to use a radix of the maximum range-constrained integer noir supports\npub fn full_field_less_than(lhs: Field, rhs: Field) -> bool {\n lhs.lt(rhs)\n}\n\npub fn full_field_greater_than(lhs: Field, rhs: Field) -> bool {\n rhs.lt(lhs)\n}\n\n#[test]\nunconstrained fn bytes_field_test() {\n // Tests correctness of field_from_bytes_32_trunc against existing methods\n // Bytes representing 0x543e0a6642ffeb8039296861765a53407bba62bd1c97ca43374de950bbe0a7\n let inputs = [\n 84, 62, 10, 102, 66, 255, 235, 128, 57, 41, 104, 97, 118, 90, 83, 64, 123, 186, 98, 189, 28, 151, 202, 67, 55, 77, 233, 80, 187, 224, 167\n ];\n let field = field_from_bytes(inputs, true);\n let return_bytes = field.to_be_bytes(31);\n for i in 0..31 {\n assert_eq(inputs[i], return_bytes[i]);\n }\n // 32 bytes - we remove the final byte, and check it matches the field\n let inputs2 = [\n 84, 62, 10, 102, 66, 255, 235, 128, 57, 41, 104, 97, 118, 90, 83, 64, 123, 186, 98, 189, 28, 151, 202, 67, 55, 77, 233, 80, 187, 224, 167, 158\n ];\n let field2 = field_from_bytes_32_trunc(inputs2);\n let return_bytes2 = field.to_be_bytes(31);\n\n for i in 0..31 {\n assert_eq(return_bytes2[i], return_bytes[i]);\n }\n assert_eq(field2, field);\n}\n"},"238":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/eth_address.nr","source":"use crate::{\n constants::ETH_ADDRESS_LENGTH, hash::pedersen_hash,\n traits::{Empty, ToField, Serialize, Deserialize}, utils\n};\n\nstruct EthAddress{\n inner : Field\n}\n\nimpl Eq for EthAddress {\n fn eq(self, other : Self) -> bool {\n self.to_field() == other.to_field()\n }\n}\n\nimpl Empty for EthAddress {\n fn empty() -> Self {\n Self {\n inner : 0\n }\n }\n}\n\nimpl ToField for EthAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl Serialize<ETH_ADDRESS_LENGTH> for EthAddress {\n fn serialize(self: Self) -> [Field; ETH_ADDRESS_LENGTH] {\n [self.inner]\n }\n}\n\nimpl Deserialize<ETH_ADDRESS_LENGTH> for EthAddress {\n fn deserialize(fields: [Field; ETH_ADDRESS_LENGTH]) -> Self {\n EthAddress::from_field(fields[0])\n }\n}\n\nimpl EthAddress {\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n\n pub fn from_field(field: Field) -> Self {\n field.assert_max_bit_size(160);\n Self { inner: field }\n }\n\n pub fn is_zero(self) -> bool {\n self.inner == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n\n pub fn conditional_assign(predicate: bool, lhs: Self, rhs: Self) -> Self {\n let result = utils::conditional_assign(predicate, rhs.to_field(), lhs.to_field());\n Self { inner: result }\n }\n}\n"},"239":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/aztec_address.nr","source":"use crate::{\n crate::address::{eth_address::EthAddress, partial_address::PartialAddress, public_keys_hash::PublicKeysHash},\n constants::{AZTEC_ADDRESS_LENGTH, GENERATOR_INDEX__CONTRACT_ADDRESS_V1},\n contract_class_id::ContractClassId, hash::poseidon2_hash, grumpkin_point::GrumpkinPoint,\n traits::{Empty, FromField, ToField, Serialize, Deserialize}, utils\n};\n\n// Aztec address\nstruct AztecAddress {\n inner : Field\n}\n\nimpl Eq for AztecAddress {\n fn eq(self, other : Self) -> bool {\n self.to_field() == other.to_field()\n }\n}\n\nimpl Empty for AztecAddress {\n fn empty() -> Self {\n Self {\n inner : 0\n }\n }\n}\n\nimpl ToField for AztecAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl FromField for AztecAddress {\n fn from_field(value: Field) -> AztecAddress {\n AztecAddress { inner: value }\n }\n}\n\nimpl Serialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn serialize(self: Self) -> [Field; AZTEC_ADDRESS_LENGTH] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn deserialize(fields: [Field; AZTEC_ADDRESS_LENGTH]) -> Self {\n FromField::from_field(fields[0])\n }\n}\n\nimpl AztecAddress {\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n\n pub fn compute(pub_keys_hash: PublicKeysHash, partial_address: PartialAddress) -> AztecAddress {\n AztecAddress::from_field(\n poseidon2_hash([pub_keys_hash.to_field(), partial_address.to_field(), GENERATOR_INDEX__CONTRACT_ADDRESS_V1])\n )\n }\n\n pub fn is_zero(self) -> bool {\n self.inner == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n\n pub fn conditional_assign(predicate: bool, lhs: Self, rhs: Self) -> Self {\n let result = utils::conditional_assign(predicate, rhs.to_field(), lhs.to_field());\n Self { inner: result }\n }\n}\n\n#[test]\nfn compute_address_from_partial_and_pub_keys_hash() {\n let pub_keys_hash = PublicKeysHash::from_field(1);\n let partial_address = PartialAddress::from_field(2);\n\n let address = AztecAddress::compute(pub_keys_hash, partial_address);\n let expected_computed_address_from_partial_and_pubkey = 0x1b6ead051e7b42665064ca6cf1ec77da0a36d86e00d1ff6e44077966c0c3a9fa;\n assert(address.to_field() == expected_computed_address_from_partial_and_pubkey);\n}\n\n#[test]\nfn from_field_to_field() {\n let address = AztecAddress { inner: 37 };\n assert_eq(FromField::from_field(address.to_field()), address);\n}\n\n#[test]\nfn serde() {\n let address = AztecAddress { inner: 37 };\n assert_eq(Deserialize::deserialize(address.serialize()), address);\n}\n"},"240":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/partial_address.nr","source":"use crate::{\n address::{\n eth_address::EthAddress, salted_initialization_hash::SaltedInitializationHash,\n aztec_address::AztecAddress\n},\n constants::GENERATOR_INDEX__PARTIAL_ADDRESS, contract_class_id::ContractClassId,\n hash::pedersen_hash, traits::{ToField, FromField, Serialize, Deserialize}\n};\n\nglobal PARTIAL_ADDRESS_LENGTH = 1;\n\n// Partial address\nstruct PartialAddress {\n inner : Field\n}\n\nimpl ToField for PartialAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl Serialize<PARTIAL_ADDRESS_LENGTH> for PartialAddress {\n fn serialize(self: Self) -> [Field; PARTIAL_ADDRESS_LENGTH] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<PARTIAL_ADDRESS_LENGTH> for PartialAddress {\n fn deserialize(fields: [Field; PARTIAL_ADDRESS_LENGTH]) -> Self {\n PartialAddress { inner: fields[0] }\n }\n}\n\nimpl PartialAddress {\n pub fn from_field(field: Field) -> Self {\n Self { inner: field }\n }\n\n pub fn compute(\n contract_class_id: ContractClassId,\n salt: Field,\n initialization_hash: Field,\n deployer: AztecAddress\n ) -> Self {\n PartialAddress::compute_from_salted_initialization_hash(\n contract_class_id,\n SaltedInitializationHash::compute(salt, initialization_hash, deployer)\n )\n }\n\n pub fn compute_from_salted_initialization_hash(\n contract_class_id: ContractClassId,\n salted_initialization_hash: SaltedInitializationHash\n ) -> Self {\n PartialAddress::from_field(\n pedersen_hash(\n [\n contract_class_id.to_field(),\n salted_initialization_hash.to_field()\n ],\n GENERATOR_INDEX__PARTIAL_ADDRESS\n )\n )\n }\n\n pub fn to_field(self) -> Field {\n self.inner\n }\n\n pub fn is_zero(self) -> bool {\n self.to_field() == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n"},"241":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/salted_initialization_hash.nr","source":"use crate::{\n address::{eth_address::EthAddress, aztec_address::AztecAddress},\n constants::GENERATOR_INDEX__PARTIAL_ADDRESS, hash::pedersen_hash, traits::ToField\n};\n\n// Salted initialization hash. Used in the computation of a partial address.\nstruct SaltedInitializationHash {\n inner: Field\n}\n\nimpl ToField for SaltedInitializationHash {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl SaltedInitializationHash {\n pub fn from_field(field: Field) -> Self {\n Self { inner: field }\n }\n\n pub fn compute(salt: Field, initialization_hash: Field, deployer: AztecAddress) -> Self {\n SaltedInitializationHash::from_field(\n pedersen_hash(\n [\n salt,\n initialization_hash,\n deployer.to_field()\n ],\n GENERATOR_INDEX__PARTIAL_ADDRESS\n )\n )\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n"},"242":{"path":"/usr/src/noir-projects/noir-contracts/contracts/gas_token_contract/src/main.nr","source":"mod lib;\n\ncontract GasToken {\n use dep::aztec::protocol_types::{abis::function_selector::FunctionSelector, address::{AztecAddress, EthAddress}};\n use dep::aztec::state_vars::{SharedImmutable, PublicMutable, Map};\n\n use crate::lib::{calculate_fee, get_bridge_gas_msg_hash};\n\n #[aztec(storage)]\n struct Storage {\n balances: Map<AztecAddress, PublicMutable<U128>>,\n portal_address: SharedImmutable<EthAddress>,\n }\n\n #[aztec(public)]\n #[aztec(initializer)]\n fn constructor(portal_address: EthAddress) {\n storage.portal_address.initialize(portal_address);\n }\n\n #[aztec(public)]\n fn claim_public(to: AztecAddress, amount: Field, secret: Field, leaf_index: Field) {\n let content_hash = get_bridge_gas_msg_hash(to, amount);\n\n // Consume message and emit nullifier\n context.consume_l1_to_l2_message(\n content_hash,\n secret,\n storage.portal_address.read_public(),\n leaf_index\n );\n\n let new_balance = storage.balances.at(to).read() + U128::from_integer(amount);\n storage.balances.at(to).write(new_balance);\n }\n\n // TODO(@just-mitch): remove this function before mainnet deployment\n // convenience function for testing\n // the true canonical gas token contract will not have this function\n #[aztec(public)]\n fn mint_public(to: AztecAddress, amount: Field) {\n let amount = U128::from_integer(amount);\n let new_balance = storage.balances.at(to).read().add(amount);\n\n storage.balances.at(to).write(new_balance);\n }\n\n #[aztec(public)]\n fn check_balance(fee_limit: Field) {\n let fee_limit = U128::from_integer(fee_limit);\n assert(storage.balances.at(context.msg_sender()).read() >= fee_limit, \"Balance too low\");\n }\n\n #[aztec(public)]\n fn pay_fee(fee_limit: Field) -> Field {\n let fee_limit_u128 = U128::from_integer(fee_limit);\n let fee = U128::from_integer(calculate_fee(context));\n // TODO(6252): implement debug logging in AVM\n //dep::aztec::oracle::debug_log::debug_log_format(\n // \"Gas token: paying fee {0} (limit {1})\",\n // [fee.to_field(), fee_limit]\n //);\n assert(fee <= fee_limit_u128, \"Fee too high\");\n\n let sender_new_balance = storage.balances.at(context.msg_sender()).read() - fee;\n storage.balances.at(context.msg_sender()).write(sender_new_balance);\n\n let rebate = fee_limit_u128 - fee;\n rebate.to_field()\n }\n\n // utility function for testing\n unconstrained fn balance_of_public(owner: AztecAddress) -> pub Field {\n storage.balances.at(owner).read().to_field()\n }\n}\n"},"243":{"path":"/usr/src/noir-projects/noir-contracts/contracts/gas_token_contract/src/lib.nr","source":"use dep::aztec::prelude::{AztecAddress, EthAddress};\nuse dep::aztec::context::interface::PublicContextInterface;\nuse dep::aztec::protocol_types::hash::sha256_to_field;\n\npub fn calculate_fee<TPublicContext>(context: TPublicContext) -> Field where TPublicContext: PublicContextInterface {\n context.transaction_fee()\n}\n\npub fn get_bridge_gas_msg_hash(owner: AztecAddress, amount: Field) -> Field {\n let mut hash_bytes = [0; 68];\n let recipient_bytes = owner.to_field().to_be_bytes(32);\n let amount_bytes = amount.to_be_bytes(32);\n\n for i in 0..32 {\n hash_bytes[i + 4] = recipient_bytes[i];\n hash_bytes[i + 36] = amount_bytes[i];\n }\n\n // Function selector: 0x3e87b9be keccak256('mint_public(bytes32,uint256)')\n hash_bytes[0] = 0x3e;\n hash_bytes[1] = 0x87;\n hash_bytes[2] = 0xb9;\n hash_bytes[3] = 0xbe;\n\n let content_hash = sha256_to_field(hash_bytes);\n content_hash\n}\n"},"28":{"path":"std/hash/poseidon2.nr","source":"use crate::hash::Hasher;\nuse crate::default::Default;\n\nglobal RATE: u32 = 3;\n\nstruct Poseidon2 {\n cache: [Field;3],\n state: [Field;4],\n cache_size: u32,\n squeeze_mode: bool, // 0 => absorb, 1 => squeeze\n}\n\nimpl Poseidon2 {\n\n pub fn hash<N>(input: [Field; N], message_size: u64) -> Field {\n if message_size == N {\n Poseidon2::hash_internal(input, N, false)\n } else {\n Poseidon2::hash_internal(input, message_size, true)\n }\n }\n\n fn new(iv: Field) -> Poseidon2 {\n let mut result = Poseidon2 { cache: [0; 3], state: [0; 4], cache_size: 0, squeeze_mode: false };\n result.state[RATE] = iv;\n result\n }\n\n fn perform_duplex(&mut self) -> [Field; RATE] {\n // zero-pad the cache\n for i in 0..RATE {\n if i >= self.cache_size {\n self.cache[i] = 0;\n }\n }\n // add the cache into sponge state\n for i in 0..RATE {\n self.state[i] += self.cache[i];\n }\n self.state = crate::hash::poseidon2_permutation(self.state, 4);\n // return `RATE` number of field elements from the sponge state.\n let mut result = [0; RATE];\n for i in 0..RATE {\n result[i] = self.state[i];\n }\n result\n }\n\n fn absorb(&mut self, input: Field) {\n if (!self.squeeze_mode) & (self.cache_size == RATE) {\n // If we're absorbing, and the cache is full, apply the sponge permutation to compress the cache\n let _ = self.perform_duplex();\n self.cache[0] = input;\n self.cache_size = 1;\n } else if (!self.squeeze_mode) & (self.cache_size != RATE) {\n // If we're absorbing, and the cache is not full, add the input into the cache\n self.cache[self.cache_size] = input;\n self.cache_size += 1;\n } else if self.squeeze_mode {\n // If we're in squeeze mode, switch to absorb mode and add the input into the cache.\n // N.B. I don't think this code path can be reached?!\n self.cache[0] = input;\n self.cache_size = 1;\n self.squeeze_mode = false;\n }\n }\n\n fn squeeze(&mut self) -> Field {\n if self.squeeze_mode & (self.cache_size == 0) {\n // If we're in squeze mode and the cache is empty, there is nothing left to squeeze out of the sponge!\n // Switch to absorb mode.\n self.squeeze_mode = false;\n self.cache_size = 0;\n }\n if !self.squeeze_mode {\n // If we're in absorb mode, apply sponge permutation to compress the cache, populate cache with compressed\n // state and switch to squeeze mode. Note: this code block will execute if the previous `if` condition was\n // matched\n let new_output_elements = self.perform_duplex();\n self.squeeze_mode = true;\n for i in 0..RATE {\n self.cache[i] = new_output_elements[i];\n }\n self.cache_size = RATE;\n }\n // By this point, we should have a non-empty cache. Pop one item off the top of the cache and return it.\n let result = self.cache[0];\n for i in 1..RATE {\n if i < self.cache_size {\n self.cache[i - 1] = self.cache[i];\n }\n }\n self.cache_size -= 1;\n self.cache[self.cache_size] = 0;\n result\n }\n\n fn hash_internal<N>(input: [Field; N], in_len: u64, is_variable_length: bool) -> Field {\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = Poseidon2::new(iv);\n for i in 0..input.len() {\n if i < in_len {\n sponge.absorb(input[i]);\n }\n }\n\n // In the case where the hash preimage is variable-length, we append `1` to the end of the input, to distinguish\n // from fixed-length hashes. (the combination of this additional field element + the hash IV ensures\n // fixed-length and variable-length hashes do not collide)\n if is_variable_length {\n sponge.absorb(1);\n }\n sponge.squeeze()\n }\n}\n\nstruct Poseidon2Hasher{\n _state: [Field],\n}\n\nimpl Hasher for Poseidon2Hasher {\n fn finish(self) -> Field {\n let iv : Field = (self._state.len() as Field)*18446744073709551616; // iv = (self._state.len() << 64)\n let mut sponge = Poseidon2::new(iv);\n for i in 0..self._state.len() {\n sponge.absorb(self._state[i]);\n }\n sponge.squeeze()\n }\n\n fn write(&mut self, input: Field){\n self._state = self._state.push_back(input);\n }\n}\n\nimpl Default for Poseidon2Hasher {\n fn default() -> Self {\n Poseidon2Hasher {\n _state: &[],\n }\n }\n}\n"},"29":{"path":"std/hash.nr","source":"mod poseidon;\nmod mimc;\nmod poseidon2;\n\nuse crate::default::Default;\nuse crate::uint128::U128;\nuse crate::sha256::{digest, sha256_var};\n\n#[foreign(sha256)]\n// docs:start:sha256\npub fn sha256<N>(input: [u8; N]) -> [u8; 32]\n// docs:end:sha256\n{}\n\n#[foreign(blake2s)]\n// docs:start:blake2s\npub fn blake2s<N>(input: [u8; N]) -> [u8; 32]\n// docs:end:blake2s\n{}\n\n#[foreign(blake3)]\n// docs:start:blake3\npub fn blake3<N>(input: [u8; N]) -> [u8; 32]\n// docs:end:blake3\n{}\n\n// docs:start:pedersen_commitment\nstruct PedersenPoint {\n x : Field,\n y : Field,\n}\n\npub fn pedersen_commitment<N>(input: [Field; N]) -> PedersenPoint {\n // docs:end:pedersen_commitment\n pedersen_commitment_with_separator(input, 0)\n}\n\n#[foreign(pedersen_commitment)]\npub fn __pedersen_commitment_with_separator<N>(input: [Field; N], separator: u32) -> [Field; 2] {}\n\npub fn pedersen_commitment_with_separator<N>(input: [Field; N], separator: u32) -> PedersenPoint {\n let values = __pedersen_commitment_with_separator(input, separator);\n PedersenPoint { x: values[0], y: values[1] }\n}\n\n// docs:start:pedersen_hash\npub fn pedersen_hash<N>(input: [Field; N]) -> Field\n// docs:end:pedersen_hash\n{\n pedersen_hash_with_separator(input, 0)\n}\n\n#[foreign(pedersen_hash)]\npub fn pedersen_hash_with_separator<N>(input: [Field; N], separator: u32) -> Field {}\n\npub fn hash_to_field(inputs: [Field]) -> Field {\n let mut sum = 0;\n\n for input in inputs {\n let input_bytes: [u8; 32] = input.to_le_bytes(32).as_array();\n sum += crate::field::bytes32_to_field(blake2s(input_bytes));\n }\n\n sum\n}\n\n#[foreign(keccak256)]\n// docs:start:keccak256\npub fn keccak256<N>(input: [u8; N], message_size: u32) -> [u8; 32]\n// docs:end:keccak256\n{}\n\n#[foreign(poseidon2_permutation)]\npub fn poseidon2_permutation<N>(_input: [Field; N], _state_length: u32) -> [Field; N] {}\n\n#[foreign(sha256_compression)]\npub fn sha256_compression(_input: [u32; 16], _state: [u32; 8]) -> [u32; 8] {}\n\n// Generic hashing support. \n// Partially ported and impacted by rust.\n\n// Hash trait shall be implemented per type.\ntrait Hash{\n fn hash<H>(self, state: &mut H) where H: Hasher;\n}\n\n// Hasher trait shall be implemented by algorithms to provide hash-agnostic means.\n// TODO: consider making the types generic here ([u8], [Field], etc.)\ntrait Hasher{\n fn finish(self) -> Field;\n \n fn write(&mut self, input: Field);\n}\n\n// BuildHasher is a factory trait, responsible for production of specific Hasher.\ntrait BuildHasher<H> where H: Hasher{\n fn build_hasher(self) -> H;\n}\n\nstruct BuildHasherDefault<H>;\n\nimpl<H> BuildHasher<H> for BuildHasherDefault<H>\nwhere \n H: Hasher + Default\n{\n fn build_hasher(_self: Self) -> H{\n H::default()\n }\n}\n\nimpl<H> Default for BuildHasherDefault<H>\nwhere \n H: Hasher + Default\n{\n fn default() -> Self{\n BuildHasherDefault{}\n } \n}\n\nimpl Hash for Field {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n H::write(state, self);\n }\n}\n\nimpl Hash for u8 {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u32 {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u64 {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for i8 {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for i32 {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for i64 {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for bool {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for () {\n fn hash<H>(_self: Self, _state: &mut H) where H: Hasher {}\n}\n\nimpl Hash for U128 {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n H::write(state, self.lo as Field);\n H::write(state, self.hi as Field);\n }\n}\n\nimpl<T, N> Hash for [T; N] where T: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n for elem in self {\n elem.hash(state);\n }\n }\n}\n\nimpl<T> Hash for [T] where T: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n self.len().hash(state);\n for elem in self {\n elem.hash(state);\n }\n }\n}\n\nimpl<A, B> Hash for (A, B) where A: Hash, B: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n self.0.hash(state);\n self.1.hash(state);\n }\n}\n\nimpl<A, B, C> Hash for (A, B, C) where A: Hash, B: Hash, C: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n self.0.hash(state);\n self.1.hash(state);\n self.2.hash(state);\n }\n}\n\nimpl<A, B, C, D> Hash for (A, B, C, D) where A: Hash, B: Hash, C: Hash, D: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n self.0.hash(state);\n self.1.hash(state);\n self.2.hash(state);\n self.3.hash(state);\n }\n}\n\nimpl<A, B, C, D, E> Hash for (A, B, C, D, E) where A: Hash, B: Hash, C: Hash, D: Hash, E: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n self.0.hash(state);\n self.1.hash(state);\n self.2.hash(state);\n self.3.hash(state);\n self.4.hash(state);\n }\n}\n"},"3":{"path":"std/cmp.nr","source":"// docs:start:eq-trait\ntrait Eq {\n fn eq(self, other: Self) -> bool;\n}\n// docs:end:eq-trait\n\nimpl Eq for Field { fn eq(self, other: Field) -> bool { self == other } }\n\nimpl Eq for u64 { fn eq(self, other: u64) -> bool { self == other } }\nimpl Eq for u32 { fn eq(self, other: u32) -> bool { self == other } }\nimpl Eq for u8 { fn eq(self, other: u8) -> bool { self == other } }\nimpl Eq for u1 { fn eq(self, other: u1) -> bool { self == other } }\n\nimpl Eq for i8 { fn eq(self, other: i8) -> bool { self == other } }\nimpl Eq for i32 { fn eq(self, other: i32) -> bool { self == other } }\nimpl Eq for i64 { fn eq(self, other: i64) -> bool { self == other } }\n\nimpl Eq for () { fn eq(_self: Self, _other: ()) -> bool { true } }\nimpl Eq for bool { fn eq(self, other: bool) -> bool { self == other } }\n\nimpl<T, N> Eq for [T; N] where T: Eq {\n fn eq(self, other: [T; N]) -> bool {\n let mut result = true;\n for i in 0 .. self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl<T> Eq for [T] where T: Eq {\n fn eq(self, other: [T]) -> bool {\n let mut result = self.len() == other.len();\n for i in 0 .. self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl<N> Eq for str<N> {\n fn eq(self, other: str<N>) -> bool {\n let self_bytes = self.as_bytes();\n let other_bytes = other.as_bytes();\n self_bytes == other_bytes\n }\n}\n\nimpl<A, B> Eq for (A, B) where A: Eq, B: Eq {\n fn eq(self, other: (A, B)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1)\n }\n}\n\nimpl<A, B, C> Eq for (A, B, C) where A: Eq, B: Eq, C: Eq {\n fn eq(self, other: (A, B, C)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2)\n }\n}\n\nimpl<A, B, C, D> Eq for (A, B, C, D) where A: Eq, B: Eq, C: Eq, D: Eq {\n fn eq(self, other: (A, B, C, D)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2) & self.3.eq(other.3)\n }\n}\n\nimpl<A, B, C, D, E> Eq for (A, B, C, D, E) where A: Eq, B: Eq, C: Eq, D: Eq, E: Eq {\n fn eq(self, other: (A, B, C, D, E)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2) & self.3.eq(other.3) & self.4.eq(other.4)\n }\n}\n\nimpl Eq for Ordering {\n fn eq(self, other: Ordering) -> bool {\n self.result == other.result\n }\n}\n\n// Noir doesn't have enums yet so we emulate (Lt | Eq | Gt) with a struct\n// that has 3 public functions for constructing the struct.\nstruct Ordering {\n result: Field,\n}\n\nimpl Ordering {\n // Implementation note: 0, 1, and 2 for Lt, Eq, and Gt are built\n // into the compiler, do not change these without also updating\n // the compiler itself!\n pub fn less() -> Ordering {\n Ordering { result: 0 }\n }\n\n pub fn equal() -> Ordering {\n Ordering { result: 1 }\n }\n\n pub fn greater() -> Ordering {\n Ordering { result: 2 }\n }\n}\n\n// docs:start:ord-trait\ntrait Ord {\n fn cmp(self, other: Self) -> Ordering;\n}\n// docs:end:ord-trait\n\n// Note: Field deliberately does not implement Ord\n\nimpl Ord for u64 {\n fn cmp(self, other: u64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u32 {\n fn cmp(self, other: u32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u8 {\n fn cmp(self, other: u8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i8 {\n fn cmp(self, other: i8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i32 {\n fn cmp(self, other: i32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i64 {\n fn cmp(self, other: i64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for () {\n fn cmp(_self: Self, _other: ()) -> Ordering {\n Ordering::equal()\n }\n}\n\nimpl Ord for bool {\n fn cmp(self, other: bool) -> Ordering {\n if self {\n if other {\n Ordering::equal()\n } else {\n Ordering::greater()\n }\n } else {\n if other {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n }\n}\n\nimpl<T, N> Ord for [T; N] where T: Ord {\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T; N]) -> Ordering {\n let mut result = Ordering::equal();\n for i in 0 .. self.len() {\n if result == Ordering::equal() {\n let result_i = self[i].cmp(other[i]);\n\n if result_i == Ordering::less() {\n result = result_i;\n } else if result_i == Ordering::greater() {\n result = result_i;\n }\n }\n }\n result\n }\n}\n\nimpl<T> Ord for [T] where T: Ord {\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T]) -> Ordering {\n let mut result = self.len().cmp(other.len());\n for i in 0 .. self.len() {\n if result == Ordering::equal() {\n let result_i = self[i].cmp(other[i]);\n\n if result_i == Ordering::less() {\n result = result_i;\n } else if result_i == Ordering::greater() {\n result = result_i;\n }\n }\n }\n result\n }\n}\n\nimpl<A, B> Ord for (A, B) where A: Ord, B: Ord {\n fn cmp(self, other: (A, B)) -> Ordering {\n let result = self.0.cmp(other.0);\n\n if result != Ordering::equal() {\n result\n } else {\n self.1.cmp(other.1)\n }\n }\n}\n\nimpl<A, B, C> Ord for (A, B, C) where A: Ord, B: Ord, C: Ord {\n fn cmp(self, other: (A, B, C)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n result\n }\n}\n\nimpl<A, B, C, D> Ord for (A, B, C, D) where A: Ord, B: Ord, C: Ord, D: Ord {\n fn cmp(self, other: (A, B, C, D)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n result\n }\n}\n\nimpl<A, B, C, D, E> Ord for (A, B, C, D, E) where A: Ord, B: Ord, C: Ord, D: Ord, E: Ord {\n fn cmp(self, other: (A, B, C, D, E)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n if result == Ordering::equal() {\n result = self.4.cmp(other.4);\n }\n\n result\n }\n}\n\n// Compares and returns the maximum of two values.\n//\n// Returns the second argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::max(1, 2), 2);\n// assert_eq(cmp::max(2, 2), 2);\n// ```\npub fn max<T>(v1: T, v2: T) -> T where T: Ord {\n if v1 > v2 { v1 } else { v2 }\n}\n\n// Compares and returns the minimum of two values.\n//\n// Returns the first argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::min(1, 2), 1);\n// assert_eq(cmp::min(2, 2), 2);\n// ```\npub fn min<T>(v1: T, v2: T) -> T where T: Ord {\n if v1 > v2 { v2 } else { v1 }\n}\n\nmod cmp_tests {\n use crate::cmp::{min, max};\n\n #[test]\n fn sanity_check_min() {\n assert_eq(min(0 as u64, 1 as u64), 0);\n assert_eq(min(0 as u64, 0 as u64), 0);\n assert_eq(min(1 as u64, 1 as u64), 1);\n assert_eq(min(255 as u8, 0 as u8), 0);\n }\n\n #[test]\n fn sanity_check_max() {\n assert_eq(max(0 as u64, 1 as u64), 1);\n assert_eq(max(0 as u64, 0 as u64), 0);\n assert_eq(max(1 as u64, 1 as u64), 1);\n assert_eq(max(255 as u8, 0 as u8), 255);\n }\n}\n"},"31":{"path":"std/merkle.nr","source":"// Regular merkle tree means a append-only merkle tree (Explain why this is the only way to have privacy and alternatives if you don't want it)\n// Currently we assume that it is a binary tree, so depth k implies a width of 2^k\n// XXX: In the future we can add an arity parameter\n// Returns the merkle root of the tree from the provided leaf, its hashpath, using a pedersen hash function.\npub fn compute_merkle_root<N>(leaf: Field, index: Field, hash_path: [Field; N]) -> Field {\n let n = hash_path.len();\n let index_bits = index.to_le_bits(n as u32);\n let mut current = leaf;\n for i in 0..n {\n let path_bit = index_bits[i] as bool;\n let (hash_left, hash_right) = if path_bit {\n (hash_path[i], current)\n } else {\n (current, hash_path[i])\n };\n current = crate::hash::pedersen_hash([hash_left, hash_right]);\n }\n current\n}\n"},"35":{"path":"std/option.nr","source":"use crate::hash::{Hash, Hasher};\nuse crate::cmp::{Ordering, Ord, Eq};\nuse crate::default::Default;\n\nstruct Option<T> {\n _is_some: bool,\n _value: T,\n}\n\nimpl<T> Option<T> {\n /// Constructs a None value\n pub fn none() -> Self {\n Self { _is_some: false, _value: crate::unsafe::zeroed() }\n }\n\n /// Constructs a Some wrapper around the given value\n pub fn some(_value: T) -> Self {\n Self { _is_some: true, _value }\n }\n\n /// True if this Option is None\n pub fn is_none(self) -> bool {\n !self._is_some\n }\n\n /// True if this Option is Some\n pub fn is_some(self) -> bool {\n self._is_some\n }\n\n /// Asserts `self.is_some()` and returns the wrapped value.\n pub fn unwrap(self) -> T {\n assert(self._is_some);\n self._value\n }\n\n /// Returns the inner value without asserting `self.is_some()`\n /// Note that if `self` is `None`, there is no guarantee what value will be returned,\n /// only that it will be of type `T`.\n pub fn unwrap_unchecked(self) -> T {\n self._value\n }\n\n /// Returns the wrapped value if `self.is_some()`. Otherwise, returns the given default value.\n pub fn unwrap_or(self, default: T) -> T {\n if self._is_some { self._value } else { default }\n }\n\n /// Returns the wrapped value if `self.is_some()`. Otherwise, calls the given function to return\n /// a default value.\n pub fn unwrap_or_else<Env>(self, default: fn[Env]() -> T) -> T {\n if self._is_some {\n self._value\n } else {\n default()\n }\n }\n\n /// Asserts `self.is_some()` with a provided custom message and returns the contained `Some` value\n fn expect<N, MessageTypes>(self, message: fmtstr<N, MessageTypes>) -> T {\n assert(self.is_some(), message);\n self._value\n }\n\n /// If self is `Some(x)`, this returns `Some(f(x))`. Otherwise, this returns `None`.\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> Option<U> {\n if self._is_some {\n Option::some(f(self._value))\n } else {\n Option::none()\n }\n }\n\n /// If self is `Some(x)`, this returns `f(x)`. Otherwise, this returns the given default value.\n pub fn map_or<U, Env>(self, default: U, f: fn[Env](T) -> U) -> U {\n if self._is_some {\n f(self._value)\n } else {\n default\n }\n }\n\n /// If self is `Some(x)`, this returns `f(x)`. Otherwise, this returns `default()`.\n pub fn map_or_else<U, Env1, Env2>(self, default: fn[Env1]() -> U, f: fn[Env2](T) -> U) -> U {\n if self._is_some {\n f(self._value)\n } else {\n default()\n }\n }\n\n /// Returns None if self is None. Otherwise, this returns `other`.\n pub fn and(self, other: Self) -> Self {\n if self.is_none() {\n Option::none()\n } else {\n other\n }\n }\n\n /// If self is None, this returns None. Otherwise, this calls the given function\n /// with the Some value contained within self, and returns the result of that call.\n ///\n /// In some languages this function is called `flat_map` or `bind`.\n pub fn and_then<U, Env>(self, f: fn[Env](T) -> Option<U>) -> Option<U> {\n if self._is_some {\n f(self._value)\n } else {\n Option::none()\n }\n }\n\n /// If self is Some, return self. Otherwise, return `other`.\n pub fn or(self, other: Self) -> Self {\n if self._is_some { self } else { other }\n }\n\n /// If self is Some, return self. Otherwise, return `default()`.\n pub fn or_else<U, Env>(self, default: fn[Env]() -> Self) -> Self {\n if self._is_some { self } else { default() }\n }\n\n // If only one of the two Options is Some, return that option.\n // Otherwise, if both options are Some or both are None, None is returned.\n pub fn xor(self, other: Self) -> Self {\n if self._is_some {\n if other._is_some { Option::none() } else { self }\n } else if other._is_some {\n other\n } else {\n Option::none()\n }\n }\n\n /// Returns `Some(x)` if self is `Some(x)` and `predicate(x)` is true.\n /// Otherwise, this returns `None`\n pub fn filter<Env>(self, predicate: fn[Env](T) -> bool) -> Self {\n if self._is_some {\n if predicate(self._value) {\n self\n } else {\n Option::none()\n }\n } else {\n Option::none()\n }\n }\n\n /// Flattens an Option<Option<T>> into a Option<T>.\n /// This returns None if the outer Option is None. Otherwise, this returns the inner Option.\n pub fn flatten(option: Option<Option<T>>) -> Option<T> {\n if option._is_some {\n option._value\n } else {\n Option::none()\n }\n }\n}\n\nimpl<T> Default for Option<T> {\n fn default() -> Self {\n Option::none()\n }\n}\n\nimpl<T> Eq for Option<T> where T: Eq {\n fn eq(self, other: Self) -> bool {\n if self._is_some == other._is_some {\n if self._is_some {\n self._value == other._value\n } else {\n true\n }\n } else {\n false\n }\n }\n}\n\nimpl<T> Hash for Option<T> where T: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n self._is_some.hash(state);\n if self._is_some {\n self._value.hash(state);\n }\n }\n}\n\n// For this impl we're declaring Option::none < Option::some\nimpl<T> Ord for Option<T> where T: Ord {\n fn cmp(self, other: Self) -> Ordering {\n if self._is_some {\n if other._is_some {\n self._value.cmp(other._value)\n } else {\n Ordering::greater()\n }\n } else {\n if other._is_some {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n }\n}\n"},"4":{"path":"std/collections/bounded_vec.nr","source":"use crate::{cmp::Eq, convert::From};\n\nstruct BoundedVec<T, MaxLen> {\n storage: [T; MaxLen],\n len: u64,\n}\n\nimpl<T, MaxLen> BoundedVec<T, MaxLen> {\n pub fn new() -> Self {\n let zeroed = crate::unsafe::zeroed();\n BoundedVec { storage: [zeroed; MaxLen], len: 0 }\n }\n\n pub fn get(mut self: Self, index: u64) -> T {\n assert(index < self.len);\n self.storage[index]\n }\n\n pub fn get_unchecked(mut self: Self, index: u64) -> T {\n self.storage[index]\n }\n\n pub fn push(&mut self, elem: T) {\n assert(self.len < MaxLen, \"push out of bounds\");\n\n self.storage[self.len] = elem;\n self.len += 1;\n }\n\n pub fn len(self) -> u64 {\n self.len\n }\n\n pub fn max_len(_self: BoundedVec<T, MaxLen>) -> u64 {\n MaxLen\n }\n\n // This is a intermediate method, while we don't have an\n // .extend method\n pub fn storage(self) -> [T; MaxLen] {\n self.storage\n }\n\n pub fn extend_from_array<Len>(&mut self, array: [T; Len]) {\n let new_len = self.len + array.len();\n assert(new_len <= MaxLen, \"extend_from_array out of bounds\");\n for i in 0..array.len() {\n self.storage[self.len + i] = array[i];\n }\n self.len = new_len;\n }\n\n pub fn extend_from_slice(&mut self, slice: [T]) {\n let new_len = self.len + slice.len();\n assert(new_len <= MaxLen, \"extend_from_slice out of bounds\");\n for i in 0..slice.len() {\n self.storage[self.len + i] = slice[i];\n }\n self.len = new_len;\n }\n\n pub fn extend_from_bounded_vec<Len>(&mut self, vec: BoundedVec<T, Len>) {\n let append_len = vec.len();\n let new_len = self.len + append_len;\n assert(new_len <= MaxLen, \"extend_from_bounded_vec out of bounds\");\n\n let mut exceeded_len = false;\n for i in 0..Len {\n exceeded_len |= i == append_len;\n if !exceeded_len {\n self.storage[self.len + i] = vec.get_unchecked(i);\n }\n }\n self.len = new_len;\n }\n\n pub fn from_array<Len>(array: [T; Len]) -> Self {\n assert(Len <= MaxLen, \"from array out of bounds\");\n let mut vec: BoundedVec<T, MaxLen> = BoundedVec::new();\n vec.extend_from_array(array);\n vec\n }\n\n pub fn pop(&mut self) -> T {\n assert(self.len > 0);\n self.len -= 1;\n\n let elem = self.storage[self.len];\n self.storage[self.len] = crate::unsafe::zeroed();\n elem\n }\n\n pub fn any<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n let mut exceeded_len = false;\n for i in 0..MaxLen {\n exceeded_len |= i == self.len;\n if !exceeded_len {\n ret |= predicate(self.storage[i]);\n }\n }\n ret\n }\n}\n\nimpl<T, MaxLen> Eq for BoundedVec<T, MaxLen> where T: Eq {\n fn eq(self, other: BoundedVec<T, MaxLen>) -> bool {\n // TODO: https://github.com/noir-lang/noir/issues/4837\n //\n // We make the assumption that the user has used the proper interface for working with `BoundedVec`s\n // rather than directly manipulating the internal fields as this can result in an inconsistent internal state.\n \n (self.len == other.len) & (self.storage == other.storage)\n }\n}\n\nimpl<T, MaxLen, Len> From<[T; Len]> for BoundedVec<T, MaxLen> {\n fn from(array: [T; Len]) -> BoundedVec<T, MaxLen> {\n BoundedVec::from_array(array)\n }\n}\n\nmod bounded_vec_tests {\n // TODO: Allow imports from \"super\"\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty_equality() {\n let mut bounded_vec1: BoundedVec<Field, 3> = BoundedVec::new();\n let mut bounded_vec2: BoundedVec<Field, 3> = BoundedVec::new();\n\n assert_eq(bounded_vec1, bounded_vec2);\n }\n\n #[test]\n fn inequality() {\n let mut bounded_vec1: BoundedVec<Field, 3> = BoundedVec::new();\n let mut bounded_vec2: BoundedVec<Field, 3> = BoundedVec::new();\n bounded_vec1.push(1);\n bounded_vec2.push(2);\n\n assert(bounded_vec1 != bounded_vec2);\n }\n\n mod from_array {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty() {\n let empty_array: [Field; 0] = [];\n let bounded_vec = BoundedVec::from_array([]);\n\n assert_eq(bounded_vec.max_len(), 0);\n assert_eq(bounded_vec.len(), 0);\n assert_eq(bounded_vec.storage(), empty_array);\n }\n\n #[test]\n fn equal_len() {\n let array = [1, 2, 3];\n let bounded_vec = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 3);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.storage(), array);\n }\n\n #[test]\n fn max_len_greater_then_array_len() {\n let array = [1, 2, 3];\n let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.storage()[0], 1);\n assert_eq(bounded_vec.storage()[1], 2);\n assert_eq(bounded_vec.storage()[2], 3);\n }\n\n #[test(should_fail_with=\"from array out of bounds\")]\n fn max_len_lower_then_array_len() {\n let _: BoundedVec<Field, 2> = BoundedVec::from_array([0; 3]);\n }\n }\n\n mod trait_from {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn simple() {\n let array = [1, 2];\n let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 2);\n assert_eq(bounded_vec.storage()[0], 1);\n assert_eq(bounded_vec.storage()[1], 2);\n }\n }\n}\n"},"43":{"path":"std/uint128.nr","source":"use crate::ops::{Add, Sub, Mul, Div, Rem, Not, BitOr, BitAnd, BitXor, Shl, Shr};\nuse crate::cmp::{Eq, Ord, Ordering};\n\nglobal pow64 : Field = 18446744073709551616; //2^64;\n\nstruct U128 {\n lo: Field,\n hi: Field,\n}\n\nimpl U128 {\n\n pub fn from_u64s_le(lo: u64, hi: u64) -> U128 {\n // in order to handle multiplication, we need to represent the product of two u64 without overflow\n assert(crate::field::modulus_num_bits() as u32 > 128);\n U128 { lo: lo as Field, hi: hi as Field }\n }\n\n pub fn from_u64s_be(hi: u64, lo: u64) -> U128 {\n U128::from_u64s_le(lo, hi)\n }\n\n pub fn from_le_bytes(bytes: [u8; 16]) -> U128 {\n let mut lo = 0;\n let mut base = 1;\n for i in 0..8 {\n lo += (bytes[i] as Field)*base;\n base *= 256;\n }\n let mut hi = 0;\n base = 1;\n for i in 8..16 {\n hi += (bytes[i] as Field)*base;\n base *= 256;\n }\n U128 { lo, hi }\n }\n\n pub fn to_be_bytes(self: Self) -> [u8; 16] {\n let lo = self.lo.to_be_bytes(8);\n let hi = self.hi.to_be_bytes(8);\n let mut bytes = [0; 16];\n for i in 0..8 {\n bytes[i] = hi[i];\n bytes[i+8] = lo[i];\n }\n bytes\n }\n\n pub fn to_le_bytes(self: Self) -> [u8; 16] {\n let lo = self.lo.to_le_bytes(8);\n let hi = self.hi.to_le_bytes(8);\n let mut bytes = [0; 16];\n for i in 0..8 {\n bytes[i] = lo[i];\n bytes[i+8] = hi[i];\n }\n bytes\n }\n\n pub fn from_hex<N>(hex: str<N>) -> U128 {\n let N = N as u32;\n let bytes = hex.as_bytes();\n // string must starts with \"0x\"\n assert((bytes[0] == 48) & (bytes[1] == 120), \"Invalid hexadecimal string\");\n assert(N < 35, \"Input does not fit into a U128\");\n\n let mut lo = 0;\n let mut hi = 0;\n let mut base = 1;\n if N <= 18 {\n for i in 0..N - 2 {\n lo += U128::decode_ascii(bytes[N-i-1])*base;\n base = base*16;\n }\n } else {\n for i in 0..16 {\n lo += U128::decode_ascii(bytes[N-i-1])*base;\n base = base*16;\n }\n base = 1;\n for i in 17..N - 1 {\n hi += U128::decode_ascii(bytes[N-i])*base;\n base = base*16;\n }\n }\n U128 { lo: lo as Field, hi: hi as Field }\n }\n\n fn decode_ascii(ascii: u8) -> Field {\n if ascii < 58 {\n ascii - 48\n } else if ascii < 71 {\n ascii - 55\n } else {\n ascii - 87\n } as Field\n }\n\n unconstrained fn unconstrained_div(self: Self, b: U128) -> (U128, U128) {\n if self < b {\n (U128::from_u64s_le(0, 0), self)\n } else {\n //TODO check if this can overflow?\n let (q,r) = self.unconstrained_div(b * U128::from_u64s_le(2, 0));\n let q_mul_2 = q * U128::from_u64s_le(2, 0);\n if r < b {\n (q_mul_2, r)\n } else {\n (q_mul_2 + U128::from_u64s_le(1, 0), r - b)\n }\n }\n }\n\n pub fn from_integer<T>(i: T) -> U128 {\n let f = crate::as_field(i);\n // Reject values which would overflow a u128\n f.assert_max_bit_size(128);\n let lo = f as u64 as Field;\n let hi = (f - lo) / pow64;\n U128 { lo, hi }\n }\n\n pub fn to_integer<T>(self) -> T {\n crate::from_field(self.lo + self.hi * pow64)\n }\n\n fn wrapping_mul(self: Self, b: U128) -> U128 {\n let low = self.lo * b.lo;\n let lo = low as u64 as Field;\n let carry = (low - lo) / pow64;\n let high = if crate::field::modulus_num_bits() as u32 > 196 {\n (self.lo + self.hi) * (b.lo + b.hi) - low + carry\n } else {\n self.lo * b.hi + self.hi * b.lo + carry\n };\n let hi = high as u64 as Field;\n U128 { lo, hi }\n }\n}\n\nimpl Add for U128 {\n fn add(self: Self, b: U128) -> U128 {\n let low = self.lo + b.lo;\n let lo = low as u64 as Field;\n let carry = (low - lo) / pow64; \n let high = self.hi + b.hi + carry;\n let hi = high as u64 as Field;\n assert(hi == high, \"attempt to add with overflow\");\n U128 {\n lo,\n hi,\n }\n }\n}\n\nimpl Sub for U128 {\n fn sub(self: Self, b: U128) -> U128 {\n let low = pow64 + self.lo - b.lo;\n let lo = low as u64 as Field;\n let borrow = (low == lo) as Field;\n let high = self.hi - b.hi - borrow;\n let hi = high as u64 as Field;\n assert(hi == high, \"attempt to subtract with underflow\");\n U128 {\n lo,\n hi,\n }\n }\n}\n\nimpl Mul for U128 {\n fn mul(self: Self, b: U128) -> U128 {\n assert(self.hi*b.hi == 0, \"attempt to multiply with overflow\");\n let low = self.lo*b.lo;\n let lo = low as u64 as Field;\n let carry = (low - lo) / pow64;\n let high = if crate::field::modulus_num_bits() as u32 > 196 {\n (self.lo+self.hi)*(b.lo+b.hi) - low + carry\n } else {\n self.lo*b.hi + self.hi*b.lo + carry\n };\n let hi = high as u64 as Field;\n assert(hi == high, \"attempt to multiply with overflow\");\n U128 {\n lo,\n hi,\n }\n }\n}\n\nimpl Div for U128 {\n fn div(self: Self, b: U128) -> U128 {\n let (q,r) = self.unconstrained_div(b);\n let a = b * q + r;\n assert_eq(self, a);\n assert(r < b);\n q\n }\n}\n\nimpl Rem for U128 {\n fn rem(self: Self, b: U128) -> U128 {\n let (q,r) = self.unconstrained_div(b);\n let a = b * q + r;\n assert_eq(self, a);\n assert(r < b);\n r\n }\n}\n\nimpl Eq for U128 {\n fn eq(self: Self, b: U128) -> bool {\n (self.lo == b.lo) & (self.hi == b.hi)\n }\n}\n\nimpl Ord for U128 {\n fn cmp(self, other: Self) -> Ordering {\n let hi_ordering = (self.hi as u64).cmp((other.hi as u64));\n let lo_ordering = (self.lo as u64).cmp((other.lo as u64));\n \n if hi_ordering == Ordering::equal() {\n lo_ordering\n } else {\n hi_ordering\n }\n }\n}\n\nimpl Not for U128 { \n fn not(self) -> U128 {\n U128 {\n lo: (!(self.lo as u64)) as Field,\n hi: (!(self.hi as u64)) as Field\n }\n }\n}\n\nimpl BitOr for U128 { \n fn bitor(self, other: U128) -> U128 {\n U128 {\n lo: ((self.lo as u64) | (other.lo as u64)) as Field,\n hi: ((self.hi as u64) | (other.hi as u64)) as Field\n }\n }\n}\n\nimpl BitAnd for U128 {\n fn bitand(self, other: U128) -> U128 { \n U128 {\n lo: ((self.lo as u64) & (other.lo as u64)) as Field,\n hi: ((self.hi as u64) & (other.hi as u64)) as Field\n }\n }\n}\n\nimpl BitXor for U128 {\n fn bitxor(self, other: U128) -> U128 { \n U128 {\n lo: ((self.lo as u64) ^ (other.lo as u64)) as Field,\n hi: ((self.hi as u64) ^ (other.hi as u64)) as Field\n }\n }\n}\n\nimpl Shl for U128 { \n fn shl(self, other: u8) -> U128 { \n assert(other < 128, \"attempt to shift left with overflow\");\n let exp_bits = (other as Field).to_be_bits(7);\n\n let mut r: Field = 2;\n let mut y: Field = 1;\n for i in 1..8 {\n y = (exp_bits[7-i] as Field) * (r * y) + (1 - exp_bits[7-i] as Field) * y;\n r *= r;\n }\n self.wrapping_mul(U128::from_integer(y))\n } \n}\n\nimpl Shr for U128 { \n fn shr(self, other: u8) -> U128 { \n assert(other < 128, \"attempt to shift right with overflow\");\n let exp_bits = (other as Field).to_be_bits(7);\n\n let mut r: Field = 2;\n let mut y: Field = 1;\n for i in 1..8 {\n y = (exp_bits[7-i] as Field) * (r * y) + (1 - exp_bits[7-i] as Field) * y;\n r *= r;\n }\n self / U128::from_integer(y)\n } \n}\n\nmod test {\n use crate::uint128::{U128, pow64};\n\n #[test]\n fn test_not() {\n let num = U128::from_u64s_le(0, 0);\n let not_num = num.not();\n\n let max_u64: Field = pow64 - 1;\n assert_eq(not_num.hi, max_u64);\n assert_eq(not_num.lo, max_u64);\n\n let not_not_num = not_num.not();\n assert_eq(num, not_not_num);\n }\n}\n"},"70":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/messaging.nr","source":"use crate::{\n hash::{compute_secret_hash, compute_message_hash, compute_message_nullifier},\n oracle::get_l1_to_l2_membership_witness::get_l1_to_l2_membership_witness\n};\n\nuse dep::std::merkle::compute_merkle_root;\nuse dep::protocol_types::{constants::L1_TO_L2_MSG_TREE_HEIGHT, address::{AztecAddress, EthAddress}, utils::arr_copy_slice};\n\npub fn process_l1_to_l2_message(\n l1_to_l2_root: Field,\n storage_contract_address: AztecAddress,\n portal_contract_address: EthAddress,\n chain_id: Field,\n version: Field,\n content: Field,\n secret: Field\n) -> Field {\n let secret_hash = compute_secret_hash(secret);\n let message_hash = compute_message_hash(\n portal_contract_address,\n chain_id,\n storage_contract_address,\n version,\n content,\n secret_hash\n );\n\n let returned_message = get_l1_to_l2_membership_witness(storage_contract_address, message_hash, secret);\n let leaf_index = returned_message[0];\n let sibling_path = arr_copy_slice(returned_message, [0; L1_TO_L2_MSG_TREE_HEIGHT], 1);\n\n // Check that the message is in the tree\n // This is implicitly checking that the values of the message are correct\n let root = compute_merkle_root(message_hash, leaf_index, sibling_path);\n assert(root == l1_to_l2_root, \"Message not in state\");\n\n compute_message_nullifier(message_hash, secret, leaf_index)\n}\n"},"78":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/context/public_context.nr","source":"use crate::{\n context::{\n inputs::PublicContextInputs, interface::ContextInterface, interface::PublicContextInterface,\n gas::GasOpts\n},\n messaging::process_l1_to_l2_message,\n oracle::{arguments, public_call::call_public_function_internal, returns, logs_traits::ToBytesForUnencryptedLog},\n hash::{hash_args, ArgsHasher, compute_unencrypted_log_hash}\n};\nuse dep::protocol_types::{\n abis::{\n global_variables::GlobalVariables, function_selector::FunctionSelector,\n private_circuit_public_inputs::PrivateCircuitPublicInputs,\n public_call_stack_item::PublicCallStackItem,\n public_circuit_public_inputs::PublicCircuitPublicInputs, read_request::ReadRequest,\n note_hash::NoteHash, nullifier::Nullifier, side_effect::SideEffect\n},\n hash::silo_nullifier, address::{AztecAddress, EthAddress},\n constants::{\n MAX_NEW_NOTE_HASHES_PER_CALL, MAX_NEW_L2_TO_L1_MSGS_PER_CALL, MAX_NEW_NULLIFIERS_PER_CALL,\n MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL, MAX_PUBLIC_DATA_READS_PER_CALL,\n MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL,\n MAX_NULLIFIER_READ_REQUESTS_PER_CALL, MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL,\n MAX_UNENCRYPTED_LOGS_PER_CALL\n},\n contrakt::{storage_read::StorageRead, storage_update_request::StorageUpdateRequest}, header::Header,\n messaging::l2_to_l1_message::L2ToL1Message, utils::reader::Reader, traits::{Deserialize, Empty}\n};\n\nstruct PublicContext {\n inputs: PublicContextInputs,\n side_effect_counter: u32,\n\n args_hash : Field,\n return_hash : Field,\n\n nullifier_read_requests: BoundedVec<ReadRequest, MAX_NULLIFIER_READ_REQUESTS_PER_CALL>,\n nullifier_non_existent_read_requests: BoundedVec<ReadRequest, MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL>,\n contract_storage_update_requests: BoundedVec<StorageUpdateRequest, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL>,\n contract_storage_reads: BoundedVec<StorageRead, MAX_PUBLIC_DATA_READS_PER_CALL>,\n public_call_stack_hashes: BoundedVec<Field, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL>,\n\n new_note_hashes: BoundedVec<NoteHash, MAX_NEW_NOTE_HASHES_PER_CALL>,\n new_nullifiers: BoundedVec<Nullifier, MAX_NEW_NULLIFIERS_PER_CALL>,\n\n new_l2_to_l1_msgs: BoundedVec<L2ToL1Message, MAX_NEW_L2_TO_L1_MSGS_PER_CALL>,\n\n unencrypted_logs_hashes: BoundedVec<SideEffect, MAX_UNENCRYPTED_LOGS_PER_CALL>,\n unencrypted_log_preimages_length: Field,\n\n // Header of a block whose state is used during public execution. Set by sequencer to be a header of a block\n // previous to the one in which the tx is included.\n historical_header: Header,\n prover_address: AztecAddress,\n}\n\nimpl PublicContext {\n pub fn new(inputs: PublicContextInputs, args_hash: Field) -> PublicContext {\n PublicContext {\n inputs,\n side_effect_counter: inputs.start_side_effect_counter,\n args_hash,\n return_hash: 0,\n nullifier_read_requests: BoundedVec::new(),\n nullifier_non_existent_read_requests: BoundedVec::new(),\n contract_storage_update_requests: BoundedVec::new(),\n contract_storage_reads: BoundedVec::new(),\n public_call_stack_hashes: BoundedVec::new(),\n new_note_hashes: BoundedVec::new(),\n new_nullifiers: BoundedVec::new(),\n new_l2_to_l1_msgs: BoundedVec::new(),\n unencrypted_logs_hashes: BoundedVec::new(),\n unencrypted_log_preimages_length: 0,\n historical_header: inputs.historical_header,\n prover_address: AztecAddress::zero()\n }\n }\n\n pub fn call_public_function_no_args<RETURNS_COUNT>(\n self: &mut Self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> FunctionReturns<RETURNS_COUNT> {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, false, false)\n }\n\n pub fn static_call_public_function_no_args<RETURNS_COUNT>(\n self: &mut Self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> FunctionReturns<RETURNS_COUNT> {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, true, false)\n }\n\n pub fn delegate_call_public_function_no_args<RETURNS_COUNT>(\n self: &mut Self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> FunctionReturns<RETURNS_COUNT> {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, false, true)\n }\n\n pub fn call_public_function_with_packed_args<RETURNS_COUNT>(\n self: &mut Self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) -> FunctionReturns<RETURNS_COUNT> {\n let side_effect_counter = self.side_effect_counter;\n // TODO(6052): get next value from output of `call_public_function_internal`\n self.side_effect_counter += 1;\n\n let raw_returns = call_public_function_internal(\n contract_address,\n function_selector,\n args_hash,\n side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n\n FunctionReturns::new(raw_returns)\n }\n\n pub fn set_return_hash(&mut self, returns_hasher: ArgsHasher) {\n returns::pack_returns(returns_hasher.fields);\n self.return_hash = returns_hasher.hash();\n }\n\n // Keep private or ask the AVM team if you want to change it.\n fn push_nullifier_read_request(&mut self, nullifier: Field) {\n let request = ReadRequest { value: nullifier, counter: self.next_counter() };\n self.nullifier_read_requests.push(request);\n }\n\n // Keep private or ask the AVM team if you want to change it.\n fn push_nullifier_non_existent_read_request(&mut self, nullifier: Field) {\n let request = ReadRequest { value: nullifier, counter: self.next_counter() };\n self.nullifier_non_existent_read_requests.push(request);\n }\n\n pub fn finish(self) -> PublicCircuitPublicInputs {\n // Compute the public call stack hashes\n let pub_circuit_pub_inputs = PublicCircuitPublicInputs {\n call_context: self.inputs.call_context, // Done\n args_hash: self.args_hash, // Done\n nullifier_read_requests: self.nullifier_read_requests.storage,\n nullifier_non_existent_read_requests: self.nullifier_non_existent_read_requests.storage,\n contract_storage_update_requests: self.contract_storage_update_requests.storage,\n contract_storage_reads: self.contract_storage_reads.storage,\n returns_hash: self.return_hash,\n new_note_hashes: self.new_note_hashes.storage,\n new_nullifiers: self.new_nullifiers.storage,\n public_call_stack_hashes: self.public_call_stack_hashes.storage,\n new_l2_to_l1_msgs: self.new_l2_to_l1_msgs.storage,\n start_side_effect_counter: self.inputs.start_side_effect_counter,\n end_side_effect_counter: self.side_effect_counter,\n unencrypted_logs_hashes: self.unencrypted_logs_hashes.storage,\n unencrypted_log_preimages_length: self.unencrypted_log_preimages_length + 4,\n historical_header: self.inputs.historical_header,\n global_variables: self.inputs.public_global_variables,\n prover_address: self.prover_address,\n revert_code: 0,\n start_gas_left: self.inputs.gas_left,\n end_gas_left: self.inputs.gas_left, // AVM should decrease this value\n transaction_fee: self.inputs.transaction_fee\n };\n pub_circuit_pub_inputs\n }\n\n fn next_counter(&mut self) -> u32 {\n let counter = self.side_effect_counter;\n self.side_effect_counter += 1;\n counter\n }\n}\n\nimpl ContextInterface for PublicContext {\n fn msg_sender(self) -> AztecAddress {\n self.inputs.call_context.msg_sender\n }\n\n fn this_address(self) -> AztecAddress {\n self.inputs.call_context.storage_contract_address\n }\n\n fn chain_id(self) -> Field {\n self.inputs.public_global_variables.chain_id\n }\n\n fn version(self) -> Field {\n self.inputs.public_global_variables.version\n }\n\n fn selector(self) -> FunctionSelector {\n self.inputs.call_context.function_selector\n }\n\n fn get_args_hash(self) -> Field {\n self.args_hash\n }\n\n fn push_new_note_hash(&mut self, note_hash: Field) {\n self.new_note_hashes.push(NoteHash { value: note_hash, counter: self.next_counter() });\n }\n\n fn push_new_nullifier(&mut self, nullifier: Field, _nullified_note_hash: Field) {\n self.new_nullifiers.push(Nullifier {\n value: nullifier,\n note_hash: 0, // cannot nullify pending notes in public context\n counter: self.next_counter()\n });\n }\n}\n\nimpl PublicContextInterface for PublicContext {\n fn block_number(self) -> Field {\n self.inputs.public_global_variables.block_number\n }\n\n fn timestamp(self) -> u64 {\n self.inputs.public_global_variables.timestamp\n }\n\n fn coinbase(self) -> EthAddress {\n assert(false, \"'coinbase' not implemented!\");\n EthAddress::zero()\n }\n\n fn fee_recipient(self) -> AztecAddress {\n assert(false, \"'fee_recipient' not implemented!\");\n AztecAddress::zero()\n }\n\n fn fee_per_da_gas(self) -> Field {\n self.inputs.public_global_variables.gas_fees.fee_per_da_gas\n }\n\n fn fee_per_l2_gas(self) -> Field {\n self.inputs.public_global_variables.gas_fees.fee_per_l2_gas\n }\n\n fn transaction_fee(self) -> Field {\n self.inputs.transaction_fee\n }\n\n fn nullifier_exists(self, unsiloed_nullifier: Field, address: AztecAddress) -> bool {\n // Current public can only check for settled nullifiers, so we always silo.\n let siloed_nullifier = silo_nullifier(address, unsiloed_nullifier);\n nullifier_exists_oracle(siloed_nullifier) == 1\n }\n\n fn message_portal(&mut self, recipient: EthAddress, content: Field) {\n let message = L2ToL1Message { recipient, content, counter: self.next_counter() };\n self.new_l2_to_l1_msgs.push(message);\n }\n\n // We can consume message with a secret in public context because the message cannot be modified and therefore\n // there is no front-running risk (e.g. somebody could front run you to claim your tokens to your address).\n // Leaf index is not used in public context, but it is used in the AVMContext which will replace it.\n fn consume_l1_to_l2_message(&mut self, content: Field, secret: Field, sender: EthAddress, _leaf_index: Field) {\n let this = (*self).this_address();\n let nullifier = process_l1_to_l2_message(\n self.historical_header.state.l1_to_l2_message_tree.root,\n this,\n sender,\n self.chain_id(),\n self.version(),\n content,\n secret\n );\n\n // Push nullifier (and the \"commitment\" corresponding to this can be \"empty\")\n self.push_new_nullifier(nullifier, 0)\n }\n\n fn emit_unencrypted_log<T, N, M>(&mut self, log: T) where T: ToBytesForUnencryptedLog<N, M> {\n let event_selector = 5; // TODO: compute actual event selector.\n let contract_address = self.this_address();\n let log_slice = log.to_be_bytes_arr();\n let log_hash = compute_unencrypted_log_hash(\n contract_address,\n event_selector,\n log\n );\n let side_effect = SideEffect { value: log_hash, counter: self.next_counter() };\n self.unencrypted_logs_hashes.push(side_effect);\n // 44 = addr (32) + selector (4) + raw log len (4) + processed log len (4)\n self.unencrypted_log_preimages_length = self.unencrypted_log_preimages_length + 44 + log_slice.len().to_field();\n // Call oracle to broadcast log\n let _void = emit_unencrypted_log_oracle(contract_address, event_selector, log, side_effect.counter);\n }\n\n fn call_public_function<RETURNS_COUNT>(\n self: &mut Self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field],\n _gas: GasOpts\n ) -> FunctionReturns<RETURNS_COUNT> {\n let args_hash = hash_args(args);\n assert(args_hash == arguments::pack_arguments(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n fn static_call_public_function<RETURNS_COUNT>(\n self: &mut Self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field],\n _gas: GasOpts\n ) -> FunctionReturns<RETURNS_COUNT> {\n let args_hash = hash_args(args);\n assert(args_hash == arguments::pack_arguments(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, true, false)\n }\n\n fn delegate_call_public_function<RETURNS_COUNT>(\n self: &mut Self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field]\n ) -> FunctionReturns<RETURNS_COUNT> {\n let args_hash = hash_args(args);\n assert(args_hash == arguments::pack_arguments(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, true)\n }\n}\n\nimpl Empty for PublicContext {\n fn empty() -> Self {\n PublicContext {\n inputs: PublicContextInputs::empty(),\n side_effect_counter: 0 as u32,\n args_hash : 0,\n return_hash : 0,\n nullifier_read_requests: BoundedVec::new(),\n nullifier_non_existent_read_requests: BoundedVec::new(),\n contract_storage_update_requests: BoundedVec::new(),\n contract_storage_reads: BoundedVec::new(),\n public_call_stack_hashes: BoundedVec::new(),\n new_note_hashes: BoundedVec::new(),\n new_nullifiers: BoundedVec::new(),\n new_l2_to_l1_msgs: BoundedVec::new(),\n unencrypted_logs_hashes: BoundedVec::new(),\n unencrypted_log_preimages_length: 0,\n historical_header: Header::empty(),\n prover_address: AztecAddress::zero(),\n }\n }\n}\n\n#[oracle(checkNullifierExists)]\nfn nullifier_exists_oracle(nullifier: Field) -> Field {}\n\n#[oracle(emitUnencryptedLog)]\nfn emit_unencrypted_log_oracle<T>(\n _contract_address: AztecAddress,\n _event_selector: Field,\n _message: T,\n _counter: u32\n) -> Field {}\n\nstruct FunctionReturns<N> {\n values: [Field; N]\n}\n\nimpl<N> FunctionReturns<N> {\n pub fn new(values: [Field; N]) -> FunctionReturns<N> {\n FunctionReturns { values }\n }\n\n pub fn assert_empty(returns: FunctionReturns<0>) {\n assert(returns.values.len() == 0);\n }\n\n pub fn raw(self) -> [Field; N] {\n self.values\n }\n\n pub fn deserialize_into<T>(self) -> T where T: Deserialize<N> {\n Deserialize::deserialize(self.raw())\n }\n}\n"},"96":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/hash.nr","source":"use dep::protocol_types::{\n address::{AztecAddress, EthAddress},\n constants::{\n GENERATOR_INDEX__SECRET_HASH, GENERATOR_INDEX__MESSAGE_NULLIFIER, ARGS_HASH_CHUNK_COUNT,\n GENERATOR_INDEX__FUNCTION_ARGS, ARGS_HASH_CHUNK_LENGTH\n},\n traits::Hash, hash::{pedersen_hash, poseidon2_hash, silo_nullifier, sha256_to_field}\n};\nuse crate::oracle::logs_traits::{LensForEncryptedLog, ToBytesForUnencryptedLog};\n\npub fn compute_secret_hash(secret: Field) -> Field {\n pedersen_hash([secret], GENERATOR_INDEX__SECRET_HASH)\n}\n\npub fn compute_encrypted_log_hash<N, M, L>(encrypted_log: [Field; M]) -> Field where [Field; N]: LensForEncryptedLog<N, M, L> {\n let mut bytes = [0; L];\n // Note that bytes.append(encrypted_log[i].to_be_bytes(31)) results in bound error\n for i in 0..M - 1 {\n let to_add = encrypted_log[i].to_be_bytes(31);\n for j in 0..31 {\n bytes[i*31 + j] = to_add[j];\n }\n }\n // can't assign as L - not in scope error for: L-31*(M-1)\n let num_bytes = bytes.len() as u32 - 31 * (M - 1);\n let to_add_final = encrypted_log[M - 1].to_be_bytes(num_bytes);\n for j in 0..num_bytes {\n bytes[(M-1)*31 + j] = to_add_final[j];\n }\n sha256_to_field(bytes)\n}\n\npub fn compute_unencrypted_log_hash<T, N, M>(\n contract_address: AztecAddress,\n event_selector: Field,\n log: T\n) -> Field where T: ToBytesForUnencryptedLog<N, M> {\n let message_bytes: [u8; N] = log.to_be_bytes_arr();\n // can't use N - not in scope error\n let n = message_bytes.len();\n let mut hash_bytes = [0; M];\n // Address is converted to 32 bytes in ts\n let address_bytes = contract_address.to_be_bytes_arr();\n for i in 0..32 {\n hash_bytes[i] = address_bytes[i];\n }\n let event_bytes = event_selector.to_be_bytes(4);\n for i in 0..4 {\n hash_bytes[32 + i] = event_bytes[i];\n }\n let len_bytes = (n as Field).to_be_bytes(4);\n for i in 0..4 {\n hash_bytes[36 + i] = len_bytes[i];\n }\n for i in 0..n {\n hash_bytes[40 + i] = message_bytes[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\npub fn compute_message_hash(\n sender: EthAddress,\n chain_id: Field,\n recipient: AztecAddress,\n version: Field,\n content: Field,\n secret_hash: Field\n) -> Field {\n let mut hash_bytes = [0 as u8; 192];\n let sender_bytes = sender.to_field().to_be_bytes(32);\n let chain_id_bytes = chain_id.to_be_bytes(32);\n let recipient_bytes = recipient.to_field().to_be_bytes(32);\n let version_bytes = version.to_be_bytes(32);\n let content_bytes = content.to_be_bytes(32);\n let secret_hash_bytes = secret_hash.to_be_bytes(32);\n\n for i in 0..32 {\n hash_bytes[i] = sender_bytes[i];\n hash_bytes[i + 32] = chain_id_bytes[i];\n hash_bytes[i + 64] = recipient_bytes[i];\n hash_bytes[i + 96] = version_bytes[i];\n hash_bytes[i + 128] = content_bytes[i];\n hash_bytes[i + 160] = secret_hash_bytes[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\n// The nullifier of a l1 to l2 message is the hash of the message salted with the secret and index of the message hash\n// in the L1 to L2 message tree\npub fn compute_message_nullifier(message_hash: Field, secret: Field, leaf_index: Field) -> Field {\n pedersen_hash(\n [message_hash, secret, leaf_index],\n GENERATOR_INDEX__MESSAGE_NULLIFIER\n )\n}\n\npub fn compute_siloed_nullifier(address: AztecAddress, nullifier: Field) -> Field {\n silo_nullifier(address, nullifier)\n}\n\nstruct ArgsHasher {\n fields: [Field],\n}\n\nimpl Hash for ArgsHasher {\n fn hash(self) -> Field {\n hash_args(self.fields)\n }\n}\n\nimpl ArgsHasher {\n pub fn new() -> Self {\n Self { fields: [] }\n }\n\n pub fn add(&mut self, field: Field) {\n self.fields = self.fields.push_back(field);\n }\n\n pub fn add_multiple<N>(&mut self, fields: [Field; N]) {\n for i in 0..N {\n self.fields = self.fields.push_back(fields[i]);\n }\n }\n}\n\npub fn hash_args_array<N>(args: [Field; N]) -> Field {\n hash_args(args.as_slice())\n}\n\npub fn hash_args(args: [Field]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n assert(args.len() < ARGS_HASH_CHUNK_COUNT * ARGS_HASH_CHUNK_LENGTH);\n let mut chunks_hashes = [0; ARGS_HASH_CHUNK_COUNT];\n let mut current_chunk_values = [0; ARGS_HASH_CHUNK_LENGTH];\n\n let mut current_chunk_index = 0;\n let mut index_inside_current_chunk = 0;\n for i in 0..args.len() {\n current_chunk_values[index_inside_current_chunk] = args[i];\n index_inside_current_chunk+=1;\n if index_inside_current_chunk == ARGS_HASH_CHUNK_LENGTH {\n chunks_hashes[current_chunk_index] = pedersen_hash(current_chunk_values, GENERATOR_INDEX__FUNCTION_ARGS);\n current_chunk_values = [0; ARGS_HASH_CHUNK_LENGTH];\n current_chunk_index+=1;\n index_inside_current_chunk = 0;\n }\n }\n if index_inside_current_chunk > 0 {\n chunks_hashes[current_chunk_index] = pedersen_hash(current_chunk_values, GENERATOR_INDEX__FUNCTION_ARGS);\n }\n pedersen_hash(chunks_hashes, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\n#[test]\nfn compute_var_args_hash() {\n let mut input = ArgsHasher::new();\n for i in 0..800 {\n input.add(i as Field);\n }\n let hash = input.hash();\n assert(hash == 0x05a1023fef839ac88731f49ae983e172c1b600a3c8f3393ad0ac25d819ac0f0f);\n}\n\n#[test]\nfn compute_enc_log_hash_304() {\n let input = [\n 0x0000000000000000000000000000000000000000000000000000000000000000,\n 0x0021a0d4aa9989656b592187cf6da1965df53ab2ff2277421e663465cf20d3e9,\n 0x00c3969cc350f3474f8187a33ac1317181961f5f94043b07ce888d85a5d20cb5,\n 0x0058198041ed1547b056955b5141a5a8a1551b0c8d094255ec9daaf3604d9348,\n 0x00247ad96df2e4d984cf795ed7316234743a681f824a45c46253de8bfde48850,\n 0x007fc251f4ce44f4e9aba3dbf6567228be28fac85660156f2825ddb0b0577457,\n 0x009315851323c6bc2aaa42e23fe5f3be97208f2d8167eafdfc5742d94f2f4dd4,\n 0x00b938289e563b0fe01982cd9b8d9e33e3069046768ad01c0fb05e429e7b7909,\n 0x00fbcc257a3211f705b471eee763b0f43876a2b2178fab6d2b09bd2b7e086584,\n 0x000000000000008c3289b5793b7448f4d45ecde039d004b6f037cad10b5c2336\n ];\n let hash = compute_encrypted_log_hash(input);\n assert(hash == 0x001e3c013994947fe28957a876bf1b2c3a69ac69cc92909efd4f2ae9b972f893);\n}\n\n#[test]\nfn compute_enc_log_hash_368() {\n let input = [\n 0x0000000000000000000000000000000000000000000000000000000000000000,\n 0x002190697d2a50e229a7a077e0951073f7d51e46679f10466153c308b63b1ea9,\n 0x00543e346facc6799b94514c9d461bcc836c04b083b13c2e4544a39130473c1e,\n 0x000df76d59526f8f953bcc7d9f77cdaefd36435931f0d7348f794bc275b42ded,\n 0x00a6d390ee1723af7f7ac1ae4fc81a266b2370fe07040a36d06dbe242e02413e,\n 0x00acbce15b6af1fbe94bd0f7b70f11768265dff77bfe63398f2a053efdfdf26d,\n 0x00b8b131b9f42c689beb095ba4f4a836d4d15c9068d0422e9add6ca82b786329,\n 0x00661a6a654b38f0f97d404ef5553e0efea9ed670561ae86685b31bbb2824fac,\n 0x00113a6b58edfaec0065b365f66ba8d8aa68254b8690035e8d671a17a843f0a1,\n 0x0023f2d2eae8c4449bac8f268a3e62a3faace1fe1401f0efdc8b0ccfbc8fb271,\n 0x00cf6603f8c61993dd2f662c719671c61727a2f4e925fb988b23d31feccd77d9,\n 0x0000000000a402a84b7294671799c38dd805f6a827a3a12633fdf91a57debe1f\n ];\n let hash = compute_encrypted_log_hash(input);\n assert(hash == 0x00a0d651ac0cbc01b72430fa6a05d91738595af6e0229347b4c9968223387aeb);\n}\n\n#[test]\nfn compute_unenc_log_hash_array() {\n let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6);\n let event_selector = 5;\n let log = [\n 0x20660de09f35f876e3e69d227b2a35166ad05f09d82d06366ec9b6f65a51fec2,\n 0x1b52bfe3b8689761916f76dc3d38aa8810860db325cd39ca611eed980091f01c,\n 0x2e559c4045c378a56ad13b9edb1e8de4e7ad3b3aa35cc7ba9ec77f7a68fa43a4,\n 0x25d0f689c4a4178a29d59306f2675824d19be6d25e44fa03b03f49c263053dd2,\n 0x2d513a722d6f352dc0961f156afdc5e31495b9f0e35cb069261a8e55e2df67fd\n ];\n let hash = compute_unencrypted_log_hash(contract_address, event_selector, log);\n assert(hash == 0x00846d6969c8c2f61d39cd2762efcb0abb14f88d59c2675910251ef2bcffe9a7);\n}\n\n#[test]\nfn compute_unenc_log_hash_addr() {\n let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6);\n let event_selector = 5;\n let log = AztecAddress::from_field(0x26aa302d4715fd8a687453cb26d616b0768027bd54bcae56b09d908ecd9f8303);\n let hash = compute_unencrypted_log_hash(contract_address, event_selector, log);\n assert(hash == 0x00880a801230ea08c98a802a11b4786cba474513875f0fc69a615e81c5f9f21c);\n}\n\n#[test]\nfn compute_unenc_log_hash_str() {\n let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8);\n let event_selector = 5;\n let log = \"dummy\";\n let hash = compute_unencrypted_log_hash(contract_address, event_selector, log);\n assert(hash == 0x00a78b5347813624ecfd26e5b8bc6146f418b0cfcc8296b5112d09b8ebba9496);\n}\n\n#[test]\nfn compute_unenc_log_hash_longer_str() {\n let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8);\n let event_selector = 5;\n let log = \"Hello this is a string\";\n let hash = compute_unencrypted_log_hash(contract_address, event_selector, log);\n assert(hash == 0x001f3390ea242afee7ce46dafdbdc4bd4f1cf20cd63850d12d60ff9956712c4f);\n}\n"},"97":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/initializer.nr","source":"use dep::protocol_types::{\n address::AztecAddress, hash::{silo_nullifier, pedersen_hash},\n constants::GENERATOR_INDEX__CONSTRUCTOR, abis::function_selector::FunctionSelector\n};\n\nuse crate::{\n context::{PrivateContext, PublicContext, AvmContext, ContextInterface},\n oracle::get_contract_instance::get_contract_instance,\n oracle::get_contract_instance::get_contract_instance_avm,\n history::nullifier_inclusion::prove_nullifier_inclusion\n};\n\npub fn mark_as_initialized_public(context: &mut PublicContext) {\n mark_as_initialized(context);\n}\n\npub fn mark_as_initialized_avm(context: &mut AvmContext) {\n mark_as_initialized(context);\n}\n\npub fn mark_as_initialized_private(context: &mut PrivateContext) {\n mark_as_initialized(context);\n}\n\nfn mark_as_initialized<TContext>(context: &mut TContext) where TContext: ContextInterface {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier((*context).this_address());\n ContextInterface::push_new_nullifier(context, init_nullifier, 0);\n}\n\npub fn assert_is_initialized_public(context: &mut PublicContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier(context.this_address());\n assert(context.nullifier_exists(init_nullifier, context.this_address()), \"Not initialized\");\n}\n\npub fn assert_is_initialized_avm(context: &mut AvmContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier(context.this_address());\n assert(context.nullifier_exists(init_nullifier, context.this_address()), \"Not initialized\");\n}\n\npub fn assert_is_initialized_private(context: &mut PrivateContext) {\n let init_nullifier = compute_contract_initialization_nullifier(context.this_address());\n prove_nullifier_inclusion(init_nullifier, *context);\n}\n\nfn compute_contract_initialization_nullifier(address: AztecAddress) -> Field {\n silo_nullifier(\n address,\n compute_unsiloed_contract_initialization_nullifier(address)\n )\n}\n\nfn compute_unsiloed_contract_initialization_nullifier(address: AztecAddress) -> Field {\n address.to_field()\n}\n\npub fn assert_initialization_matches_address_preimage_public(context: PublicContext) {\n assert_initialization_matches_address_preimage(context);\n}\n\npub fn assert_initialization_matches_address_preimage_avm(context: AvmContext) {\n let address = context.this_address();\n let instance = get_contract_instance_avm(address).unwrap();\n let expected_init = compute_initialization_hash(context.selector(), context.get_args_hash());\n assert(instance.initialization_hash == expected_init, \"Initialization hash does not match\");\n assert(\n (instance.deployer.is_zero()) | (instance.deployer == context.msg_sender()), \"Initializer address is not the contract deployer\"\n );\n}\n\npub fn assert_initialization_matches_address_preimage_private(context: PrivateContext) {\n assert_initialization_matches_address_preimage(context);\n}\n\nfn assert_initialization_matches_address_preimage<TContext>(context: TContext) where TContext: ContextInterface {\n let address = context.this_address();\n let instance = get_contract_instance(address);\n let expected_init = compute_initialization_hash(context.selector(), context.get_args_hash());\n assert(instance.initialization_hash == expected_init, \"Initialization hash does not match\");\n assert(\n (instance.deployer.is_zero()) | (instance.deployer == context.msg_sender()), \"Initializer address is not the contract deployer\"\n );\n}\n\npub fn compute_initialization_hash(init_selector: FunctionSelector, init_args_hash: Field) -> Field {\n pedersen_hash(\n [init_selector.to_field(), init_args_hash],\n GENERATOR_INDEX__CONSTRUCTOR\n )\n}\n"}}}
1
+ {"transpiled":true,"noir_version":"0.30.0+c363d6fb324a83b35cf5aa1bfd39f62b9198f0b6","name":"GasToken","functions":[{"name":"check_balance","is_unconstrained":true,"custom_attributes":["aztec(public)","aztec(view)"],"abi":{"error_types":{},"param_witnesses":{"fee_limit":[{"end":4,"start":3}],"inputs":[{"end":3,"start":0}]},"parameters":[{"name":"inputs","type":{"fields":[{"name":"selector","type":{"kind":"field"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"aztec::context::inputs::public_context_inputs::PublicContextInputs"},"visibility":"private"},{"name":"fee_limit","type":{"kind":"field"},"visibility":"private"}],"return_type":null,"return_witnesses":[]},"bytecode":"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","debug_symbols":"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"},{"name":"compute_note_hash_and_nullifier","is_unconstrained":true,"custom_attributes":[],"abi":{"error_types":{},"param_witnesses":{"contract_address":[{"end":1,"start":0}],"nonce":[{"end":2,"start":1}],"note_type_id":[{"end":4,"start":3}],"serialized_note":[],"storage_slot":[{"end":3,"start":2}]},"parameters":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"},"visibility":"private"},{"name":"nonce","type":{"kind":"field"},"visibility":"private"},{"name":"storage_slot","type":{"kind":"field"},"visibility":"private"},{"name":"note_type_id","type":{"kind":"field"},"visibility":"private"},{"name":"serialized_note","type":{"kind":"array","length":0,"type":{"kind":"field"}},"visibility":"private"}],"return_type":{"abi_type":{"kind":"array","length":4,"type":{"kind":"field"}},"visibility":"public"},"return_witnesses":[4,5,6,7]},"bytecode":"H4sIAAAAAAAA/+2b227iMBCGE8ohNMshIYTzobQ3exdYCvSOl9l9671fad9htZ3UUwZrWjnqxIolLKFMjOP/m9+HppXre2+l9frxVdzQrrRgm7O6Zl8rW8G+sjI5fUc4a45w3gly+gwnXOsqhivM5aZ3Pc/fy1lwklBRCgUDc0fqPoK7eghKUwWBBnyWgD5lpybpnEJDCRU4BQhJIj6pw2drpA53kLvg0kVTPod9QMwT6/d1QMNL2u/cIYnxO9Cekrp6STk25HMsy7t8VaI/DdVvi9yjV20VC+6wW6rtq0+baHpqjDCekLbYDv2okTGG0vEu49/+5Lm69lyXtGky+Z892fxbGk9LY24oJigR8Gp7QEljk0G/9/L9Xo15XRuTe5JTR9zv3Qn2hNC7LvpPmTOJO4TnmzhPti0nz7ex6xJ2mX6f9+BVT/Mq1LzqkjaUoVeCfz7Rxb7xvsdoy3lxOIF238CLPsPTt+xFn9EW9OIFtCMDLyKGJ7LsRcRoy3lx/AHasYEXMcMTW/YiZrTlvNjl7xYDAy8GDM/AshcDRltwjeTzIjHwImF4EsteJIy2oBe/QHto4MWQ4Rla9mLIaAt68RO0UwMvUoYntexFymgL7p35+8XIwIsRwzOy7MWI0Rb0YgfaYwMvxgzP2LIXY0ZbcI3k2hMDLyYMz8SyF/R31CLMAweZUweZ4wowB1oso33I98+pgRdThmdq2QvUK8qcVIA50GIZ7cMzaM8MvJgxPDPLXqBeUebIQebYQeahg8yJg8ypg8xVmM+BFstoH/M9dG7gxZzhmVv2AvWKMkcOMk8dZI4rwBxosYz2Mf/b3MLAiwXDs7DsBeoVZR45yNyvAHOgxTLaxwNoLw28WDI8S8teoF5R5rGDzKmDzFMHmWMHmYcOMicOMt/WoB3mqALM9EzT31J5di+hxoOeeRqjpzGGJKbnYFbijFlGx2dFtNbyWltuvuD9ulTt3Qn63cjnlL/LP6q+8AzfhsnpScXS57keSb8+0cH6Oon/kLbYDv3AdYvsMO8eVPz0yXNL7bkuafPA5H/2ZPPfaDwbjRnG5DfhWItz7E4m87rvXdbyd8JTwj64p2dysZjsOyXtMduS8szoGb5/nuyaXmteBZpXXdKG7tHrEvwzmV835hvzR8z0fSIgdfj9itTVtFzo/zJgezgz/B/4fzqFFjUAAA==","debug_symbols":"ndpBattQGIXRvWgciu+vpycpWymlOIlTDMYOsVMoJnuv3dIF9Mz0JN3ZNzq86/Cye/r48X1/fD2dh8ev1+Fwet5e9qfj7XQdNl+q/3l7ftse7y/Ol+37ZXgcKw/D7vhyf+qfD8Pr/rAbHqu3z28P99Eso0VGK4zGjYwio5LRKKMmo0lGUsQoRYxSxChFNCmiSRFNimhSRJMimhTRpIgmRTQpokkRkxQxSRGTFDFJEZMUMUkRkxQxSRGTFDFJEV2K6FJElyK6FNGliC5FdCmiSxFdiuhSxCxFzFLELEXMUsQsRcxSxCxFzFLELEXMUsQiRSxSxCJFLFLEIkUsUsQiRSxSxCJFLFLEKkWsUsQqRaxSxCpFrFLEKkWsUsQqRaxSRDYbWoVWRauRVo1WE606rWZaLbSiNkJthNoItRFqI9RGqI1QG6E2Qm2E2ihqo6iNojaK2ihqo6gN4syQZ4ZAMySaIdIMmWYINUOqGWLNkGuGYDMkmyHaDNlmCDdDuhnizZBvhoAzJJwh4gwZZwg5Q8oZYs6Qc4agMySdIeoMWWcIO0PaGeLOkHeGwDMkniHyDJlnCD1D6hliz5B7huAzJJ8h+gzZZwg/Q/oZ4s+Qf4YANCSgIQINGWgIQUMKGmLQkIOGIDQkoSEKDVloCENDGhri0JCHhkA0JKIhEg2ZaAhFQyoaYtGQixa5aJGLFrlokYsWuWiRixa5aJGLFrlokYsWuWiRixa5aJGLFrlokYsWuWiRixa5aJGLFrlokYsWuWiRixa5aJGLll3ztHuedtGTXLTIRYtctMhFi1y0/ttFb6ef2/f99umwu9/svX/8OD7/u+h7O15+vf39cvv3Nw=="},{"name":"set_portal","is_unconstrained":true,"custom_attributes":["aztec(public)"],"abi":{"error_types":{},"param_witnesses":{"inputs":[{"end":3,"start":0}],"portal_address":[{"end":4,"start":3}]},"parameters":[{"name":"inputs","type":{"fields":[{"name":"selector","type":{"kind":"field"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"aztec::context::inputs::public_context_inputs::PublicContextInputs"},"visibility":"private"},{"name":"portal_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"},"visibility":"private"}],"return_type":null,"return_witnesses":[]},"bytecode":"H4sIAAAAAAAC/92YzY4bRRDHu+fDY3vtSezEH7vrb8/484YEl4DEFXFB4glAIIEEHBAc4MRz8AKcOOWUV8hD5FWSruqurq0ZO25ZSQ4ZaTzVNf9fV3d19e7MFCpReDTxOlXuMK2mylXDXCI4P1dkGQNOnStNrhJuAmUt41dx6QCVoBWbn3Rlfm4+9cEKlSp5gL6BUe1ZUjSjdeOEqCpTvpnBD+qSQF0cqEsDdTpARxPUaMHcspLuRiYt+r+S5t9CCwbZRqvlxW3IXEkx2jJkS2Oz7Yh2qV1LB+rSQF0cqEsCdVFFZ1PXdLom34XjRoo7DWzegGnO7hJuPAPrM81Q4hINsi7G7ULvts5cEFGJr80BKqsAcdcoXlcOCGoVELvDfTwIrXKryOGMfHfQ7Faayjc7kssyNJtuFjlO8muweJL1rYR7OvdkM+XZQkfYyTdgne3k2b8vI5mn1ke6H1tv248dvx+7aHW8GJfO78dupTRtvdN6ct3pQF0aqIsDdUmgrrIfOzZ1OdWl3I+PpPix3Y+PwDRnD6vsH7BO7UeQ9TBuT26gh0dmyw/0Wep3WyaHsjZn3y9qj1e7X6+Fx3IG/ULpb831iYV6DnqKpfQELIk/tbq+NRH/id2EDxAHwUDiA8YHDv+O3YQPEQfBUOJDxocO/53dhI8QB8FI4iPGRw7/kd2EjxEHwVjiY8bHDv+B3YTfIg6CW4nfMn7r8K/YTfgd4iC4k/gd43cO/5XdhN8jDoJ7id8zfm+vV2Em6p/sJnyCOAgmEp8wPnH4H+wmfIo4CKYSnzI+rQ966svkAmaifs9uwmeIg2Am8RnjM4f/wm7C54iDYC7xOePz+qDnvrouYCbqgt2ELxAHwULiC8YX9agLn6orsNl12PA6bPRB5za+jJmF+IvdhC8RB8FS4kvGl/WoS79+FzAT9Wd2E75CHAQria8YXzn8N3YTvkYcBGuJrxlf1we99lGvwCYfNNrgOmz23gZpFuJvdhNeIA6CQuIF40U9auF3yBXY+DIG89FfyoeLAjvwzwtK3LCPkn3ZM/oxZFkPubEdFNZ8eBeysZG97OwD1c6J9yaZ0MdBY1cHcMGJw/7CtmjewBxKkm05qr0RWac6yNEdlA8I2G5h3J9UhliZAD7auQyceoGQL0ki+z6reSWrUlfKpBS1J8VX/8MQbJw+L1JOw8TZ9mV6T63FufeborroZ95vTuriQF0aqNMBOkqM9q8sNtc5ZoMk25II/HCDOcAPN1gZCbwHPffvN9tK6uz7w9ZhW6w0aOlAXRqoiwN1SaAuOv3ZaWOrZ1Mvkr3P5oM07+uLsJNVuufa2vsdl57dcXvaz+dqcF8Jfq4GT+riQF0aqNMBOlmDG5/JArOh3F+ZY0mErcGDr8Ej1eALX4PHSursGh8ddsQ1PtZr8KwuDdTFgbokUBet60WIX01tEcb1kA2fzoTz3KivQrpNXPlAC7+94n3LQ8zMf4KM/CePuPI/PPPR0sqXk8qodtoNV7tZvYteABu/hPMNRxLFaZ4WAAA=","debug_symbols":"5Z3tSqNnEIbPJb+lvHPPPB/jqZRS3F23CKLL6haKeO6NNVGWBkLfxouB/DP6TO55DNcdAhfkafPl+tOPP36/uft6/7C5/PVpc3v/+erx5v5u++hps/xi9s9vH75d3b384uHx6vvj5jK9X2yu775sfxp6vth8vbm93lyqx/PFv85q0f6wljbeTpu3A6d9aHc4zN/P2nj+7eJlHa+1TtRap9Vap9daZ9RaZ9ZaJ0uto6XWOrVqUKq1Tq1WVq1WVq1WVq1WVq1WVq1WVq1W9lqt7LVa2Wu1stdqZa/Vyl6rlb1WK3utVvZarey1WjlqtXLUauWo1cpRq5WjVitHrVaOWq0ctVo5arVy1GrlVquVW61Wbh/ayq8R/vERJ2jPPt4iZh75p465f+aR7f2ZW+7WabXW6bXWGbXWmbXWyVLr9KXWOgav0/1tnf7TOhcHtsj9Fj2PnB1tvj1vvJ/V7pY6i1vGWdyyn8Ut51ncMs/hlmM5i1uexTvJOIt3kuFnccuzeL8cxz47zZ9v+To01gzNNUO5YmgebtTc/39tiWMvnTXtP8dba+3/feifKraPF9sniu3Tiu3Ti+0ziu0zi+2TtfbJYn2YVmyfYv2cxfo5i/VzFuvnLNbPWayfs1g/Z7F+tqVYQdtSrKFtKVbRthTr6G1etYWKtbQtxWralmI9bUuxoralWlNbtaa2ak1t1ZraqjW1VWtqq9bUVq2prVpTW7WmtmpNrWpNrY9t6l2IiJBTNOp4D5n9UEgQIY0I6UTIIEImEZJAiC+nDUk7FCIixImQIEIaEdKJkEGETCIkgZAgYAwjQgjigyA+COKDID4I4oMgPgjigyC+EcQ3gvhGEN8I4htBfCOIbwTxjSC+EcQ3gvhOEN8J4jtBfCeI7wTxnSC+E8R3gvhOEN8J4gdB/CCIHwTxgyB+EMQPgvhBED8I4gdB/CCInwTxkyB+EsRPgvhJED8J4idB/CSInwTxkyA+CeKTID4J4pMgPgnikyA+CeKTID4J4hMgXstChBgRIiLEiZAgQhoR0omQQYRMIoQg3gjijSDeCOKNIN4I4o0g3gjijSDeCOKNIF4E8SKIF0G8COJFEC+CeBHEiyBeBPEiiCd0ODlBPOHciXDuRDh3Ipw7Ec6dCOdOhHMnwrkT4dyJcO5EOHcinDsRzp0I506EcyfCuRPh3Ilw7kQ4dyKcOxHOnQjnToRzJ8K5E+HciXDuRDh3Ipw7Ec6dCOdOhHMnwrkT4dyJcO5EOHcinDsRzp0I506EcyfCuRPh3Ilw7kQ4dyKcOxHOnQjnToRzJ8K5E+HciXDuRDh3Ipw7Ec6dCOdOhHMnwrkT4dyJcO5EOHcinDsRzp0I506EcyfCuRPh3Ilw7kQ4dyKcOyecOyecOyecOyecO1+CCGlESCdCBhEyiRCCeMK5c8K5c8K5c8K5c8K5c8K5c8K5c8K5c8K5c8K581M4d6PF/vTIeShERIgTIUGENCKkEyGDCEkgxAlOTmGqHQ8hYHQCRidgdAJGJ2B0AsZTmGrHQwjigyA+COKDID4I4oMgPgjigyA+COKDID4I4htBfCOIbwTxjSC+EcQ3gvhGEN8I4htBfCOI7wTxnSC+E8R3gvhOEN8J4jtBfCeI7wTxnSB+EMQPgvhTmGqz7b8o2nLxQyFBhDQipBMhgwiZREgCIaeQyI6HGBFCwHgKiex4CEH8JIifBPGTIH4SxE+C+CSIT4L4JIhPgvgkiE+C+CSIT4L4JIhPgPhYFiLEiBARIU6EBBHSiJBOhAwiZBIhBPFGEG8E8UYQbwTxRhBvBPFGEG8E8UYQbwTxIogXQfxhiUx9P+ZLvE/tv2I1DgtbR6f6qqmxamqumso1U4eNma6+m+p9Hprqq6bGqqm5airXTB02PI5OadWUr5qKVVP/9VXePvrz6vvN1afb64ftxMsff9x9fry5v9s9fPzr2+tftmf/Bg=="},{"name":"claim_public","is_unconstrained":true,"custom_attributes":["aztec(public)"],"abi":{"error_types":{},"param_witnesses":{"amount":[{"end":5,"start":4}],"inputs":[{"end":3,"start":0}],"leaf_index":[{"end":7,"start":6}],"secret":[{"end":6,"start":5}],"to":[{"end":4,"start":3}]},"parameters":[{"name":"inputs","type":{"fields":[{"name":"selector","type":{"kind":"field"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"aztec::context::inputs::public_context_inputs::PublicContextInputs"},"visibility":"private"},{"name":"to","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"},"visibility":"private"},{"name":"amount","type":{"kind":"field"},"visibility":"private"},{"name":"secret","type":{"kind":"field"},"visibility":"private"},{"name":"leaf_index","type":{"kind":"field"},"visibility":"private"}],"return_type":null,"return_witnesses":[]},"bytecode":"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","debug_symbols":"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"},{"name":"balance_of_public","is_unconstrained":true,"custom_attributes":["aztec(public)","aztec(view)"],"abi":{"error_types":{},"param_witnesses":{"inputs":[{"end":3,"start":0}],"owner":[{"end":4,"start":3}]},"parameters":[{"name":"inputs","type":{"fields":[{"name":"selector","type":{"kind":"field"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"aztec::context::inputs::public_context_inputs::PublicContextInputs"},"visibility":"private"},{"name":"owner","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"},"visibility":"private"}],"return_type":{"abi_type":{"kind":"field"},"visibility":"public"},"return_witnesses":[4]},"bytecode":"H4sIAAAAAAAC/9WaaW/jNhCGKdtyUjeWb8fxkVixGd/Hpm7RRZuvRYF+7A8oeqNAL/RAUfR7f9z+qV3OkMMxzQAyCKyAFSCbGr0P3+GQTkLFU1ESeFzG8DoS5lDRS5GIsnorwPmpoJZqwBklIqKQhJtA6ZaKi6I0gChhq6he4nv1ciWF7uGy9CHcAPtoKiKALmLoEzO6UGd5SsmJj9VZkZTcpbA3KvDCOsDf40tUqM4/U+/va+jSQFeyoIPiysWvtK6im4j/zWHCq4iDoOriVcarBv+Vw4QniIMgcfGE8cTg33KY8BriIKi5eI3xmsH/4jDhdcRBUHfxOuN1g//EYcIbiIOg4eINxhsG/43DhDcRB0HTxZuMN/W7j1WzMeU65jDhLcRB0HLxFuMtg3/DYcLbiIOg7eJtxtsG/5rDhHcQB0HHxTuMdwz+M4cJ7yIOgq6Ldxnv+iXrWtcArBqGJdmYGuP3HCb8GnEQXLv4NePXBv+Kw4T3EAdBz8V7jPf8pHt2MWZgyvUHDhN+gzgIblz8hvEb3/XGJpuBKdffOUx4H3EQ9F28z3jfd+3bn1kBWCsM64Rh9TAsCcOaubq1w7BqrmNr5JrkGatEfRL+5TDhA8RBMHDxAeMD33VgSxOAtcKwbq5JJmFYOwzr5IqdUUm1Wr7jMOFDxEEwdPEh40PfdWgnIgNTrn9ymPAR4iAYufiI8ZHvOrJ/pAVg7Vzd6mFYkuvYOrli/WwshfitcPY5L7EDc0E9C0MIKYh3tzi3aHnrW97pDka6eXwXNlR3bi9pGS9TI743m7JJhF1NIAQnpj3QVzRuiE0kycbsqm8UdFBM3OwmwhoClipJVD9J8WQAH0WmAi9Zh2O3NStxzaAgJ3vD8knhpiIW7oEzhRtfdDWTVjLdVXAsI/1hP+64cqTR7z4WZ2NTUeTUjgd498mxrqRn7zR3OMY6dyj3OMZmxVzGU7QU93qXHZsJTdkINvnSVnLClZR+JaduJaXq/Ev1/qChiYFmOPAHaLn4TOukbsK7j9XCsEY2ppL9g8OEzxEHwdzF54zPfde5/amUgSnXHzlM+AJxECxcfMH4wndd2F+FAVgzDBuGYZ0wrBGG1d5aSdT87TlM+BJxECxdfMn40nddWtcArBqGNcKwWq5ja4dhnVyxMyqpVss/HCZ8hTgIVi6+Ynzlu67spz0AG2RjKtkthwlfIw6CtYuvGV/7rms7/QHYQxhWC8MaYdgsDGuHYfMwrJvrvA3DsE6u81bLdWxnVFJ97n7hMOEbxEGwcfEN4xvfdWOf7wVgwzCsFoY134Uk22HY7F2oZC/XsTXCsPVbK4n63L3gMOFbxEGwdfEt41vfdWt/TWZgsNMtfCGcPdcTdmAuqGdhCL3xkm7PcOzQcudb7nUHW908vgubu73by6Pe8T8a8Qdmx3/QO/4DhODEtD/XVzRuYA6SZC/YVd8o6KA4uNkdhDUE7HGsOn46SfFkALjjhwo8SfrX88lONOaa4YYYdcUzdZUzddEZOiprZJ/TxJLuFtRWu/A//e9bzZ8wSeq531kxDDyVdgW5lrvIFgfnXppVBv9BP0tXOVNXPFNXePZxRmqGn54sWlcs9erbmdLtcZnB89M9zrk5SqaAINtLs8RFJbGPNpRJ/PrkAEYrAI0vsJmaS230n2uU2GdzacLqyLrExukofzr2GoC09ji+lJIsWHyvw5QRFsiuEj3dmNXk+QdSRW1R9Gem/NyDr/Izi3VWMksPv2EhqbRlu0IvJKH4LQ78BkZxAs3eKzjfAI43y8gqIgAA","debug_symbols":"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"},{"name":"claim","is_unconstrained":false,"custom_attributes":["aztec(private)"],"abi":{"error_types":{},"param_witnesses":{"amount":[{"end":41,"start":40}],"inputs":[{"end":39,"start":0}],"secret":[{"end":42,"start":41}],"to":[{"end":40,"start":39}]},"parameters":[{"name":"inputs","type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}},{"name":"side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"tx_tree_height","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"tx_context","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"gas_settings","type":{"fields":[{"name":"gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"teardown_gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"max_fees_per_gas","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}},{"name":"inclusion_fee","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_settings::GasSettings"}}],"kind":"struct","path":"authwit::aztec::protocol_types::transaction::tx_context::TxContext"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"aztec::context::inputs::private_context_inputs::PrivateContextInputs"},"visibility":"private"},{"name":"to","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"},"visibility":"private"},{"name":"amount","type":{"kind":"field"},"visibility":"private"},{"name":"secret","type":{"kind":"field"},"visibility":"private"}],"return_type":{"abi_type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}},{"name":"side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"min_revertible_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"is_fee_payer","type":{"kind":"boolean"}},{"name":"max_block_number","type":{"fields":[{"name":"_opt","type":{"fields":[{"name":"_is_some","type":{"kind":"boolean"}},{"name":"_value","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"std::option::Option"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::max_block_number::MaxBlockNumber"}},{"name":"note_hash_read_requests","type":{"kind":"array","length":32,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"nullifier_read_requests","type":{"kind":"array","length":32,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"key_validation_requests_and_generators","type":{"kind":"array","length":16,"type":{"fields":[{"name":"request","type":{"fields":[{"name":"pk_m","type":{"fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::grumpkin_point::GrumpkinPoint"}},{"name":"sk_app","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"}},{"name":"sk_app_generator","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::validation_requests::key_validation_request_and_generator::KeyValidationRequestAndGenerator"}}},{"name":"new_note_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::note_hash::NoteHash"}}},{"name":"new_nullifiers","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::nullifier::Nullifier"}}},{"name":"private_call_requests","type":{"kind":"array","length":4,"type":{"fields":[{"name":"hash","type":{"kind":"field"}},{"name":"caller_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::caller_context::CallerContext"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::private_call_request::PrivateCallRequest"}}},{"name":"public_call_stack_hashes","type":{"kind":"array","length":16,"type":{"kind":"field"}}},{"name":"public_teardown_function_hash","type":{"kind":"field"}},{"name":"new_l2_to_l1_msgs","type":{"kind":"array","length":2,"type":{"fields":[{"name":"recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"content","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"}}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_encrypted_logs_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}},{"name":"note_hash_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::NoteLogHash"}}},{"name":"encrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}},{"name":"randomness","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::EncryptedLogHash"}}},{"name":"unencrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::LogHash"}}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"tx_tree_height","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"tx_context","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"gas_settings","type":{"fields":[{"name":"gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"teardown_gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"max_fees_per_gas","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}},{"name":"inclusion_fee","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_settings::GasSettings"}}],"kind":"struct","path":"authwit::aztec::protocol_types::transaction::tx_context::TxContext"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"},"visibility":"public"},"return_witnesses":[815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271]},"bytecode":"H4sIAAAAAAAA/+1dB3gVRRfd90IJvVtQIahIUfRN6gs19A6KSFNKKqA0ISBi+bH33nvvith7770X7L13xS7+d8gMmQwvydu3Z8KOk/2+803uy+7dOXPn3pmdshvxKo6/GnveHo0q/o4Q0ghRQoYip4m/pdxAkxtq5zfW5Baa3EqT22hyO03enFCgyJ21/2dochdN3laTdxCyekREWiDSrFhudnZpXmYpy2KFscz8onhOLDunKDfO4iwnnlOSGc/KKo1nx/Pyi/LzYvksO6uUleXkZ5XFKo6eiq5YwIPnrYmirxthHaG7SHuItGd96kS6E2FHr6LOqvVix/rycb5ecKhHVKQFIo0FO9gOHi5G9gLmS8Z2rjND4S2PCLgcuuF0xTKEnp0Ju3B9BEbI5GVMyCbkEHIJeYQ4IZ/Qm9CH0JfQj9CfMEDkayBhEGEwYQhhKGEYYThhBGEkYRRhNGEMYawoJFmOPC/pXqW8iybHNJlpcqYmZ2lytibnaHKuJudpclyT8zW5tyb30eS+mtxPk/tr8gBNLtDkgZo8SJMHa/IQTR6qycM0ebgmj9DkkZo8SpNHa/IYTR4rZPVoINICkcaCHVV8Jmjs2Bmgq7SMHzG2CzBfvzfAxYWabBGEM7dFDKKrwq4suK5MUX4sE2iLP8Jsi+wN+WRZwXTFFM4sO4iuzCrlx3KAtvgznLaIaflkuSnqyi3biDPLS01XPEH5sTjQFn+FzRbxhPlk+f515VXDmfX2qyuv2vJjfYC2+Ds8tsisIZ+srx9deTVyZv2S11VcS/mx/kBb/BMGW+TVmk82IDldsSQ4s4JkdMWSKj82EGiLdZvWFjlJ5pMNqk1XdtKc2eAadWWX+Sg/NgRoi383lS3yfOWTDa1eV9wnZzasGl35Zb7Ljw0H2oIPttexLWIp5JONSKQrlhJnNnJjXSzF8mOjgLaI1KUtSlLOJxtdVVdWAM5sjKIrsyxQ+bGxQFtE68gWsWAHA44PMODzLVOfz4LaIs0SWwCfgxiwH8/+AdqigSW2APb3GLC/wtT2NqgtGlpiC2C7xoBxmaUBbdHIkC3SwLYA+i8D1j+GLD/Tc3Xdcbo2zNWNI4wn7ErYjTCBsDthImEPwiTCZMIUwlTCNMKehL0I0wkzCDMJswiFhCJCMaGEUEooI8wmzCHMJexN2IcwjzBfFJKcu+F5Uedyxmvyrpq8myZP0OTdNXmiJu+hyZM0ebImT9HkqZo8TZP31OS9NHm6Js/Q5JmaPEuTCzW5SJOLNblEk0s1uUyTZ2vyHE2eq8l7a/I+mjxPk+d75ufqVJ8JGmvHAXTJubrxwHxtVvfP0inN1e0K0VVh192C69owVzcBaIvNw2wLZa5u92C6qszVTQyiS5ur2wNoiy3CaYuN5uompagr0Vzd5NR0JZyrmwK0xZZhs0U1c3VT/euqdq5uml9dNczV7Qm0Rcfw2KLGubq9/OiqZa5uevK6ap2rmwG0xVZhsEUSc3Uzk9OV1FzdrGR0JTlXVwi0xdab1hZJz9UV1abLx1xdsYebqysB2mKbTWULn3N1pR5urq7Mw83VzQbaopMlc3VzPNxc3VwPN1e3N9AWnS2Zq9vHw83VzfNwc3XzgbbIsGQcHDg+wIDPt2wL4Dh4F0tsAXwOYsB+PNsKaIttLbEFsL/HgP0V1gloi+0ssQWwXWPAuMy6AG2xvSVzdUD/ZcD6x0yVH3rP9AKYLbJKTeZzISyf8TyT+VwEy2dRvsl87ovLZynPG4+xQ4Q+Xqf4XNlCkS4S6b4ilfve5H44uU9O7p+T++pGiFTuw5P784aKVO7nk/v8Bol0oEgLRCr3Ecr9hXLfodyPKPcpyv2Lcl+j3O8o90HK/ZFy36TcTyn3Wcr9l3JfptyvKfdxyv2dci5RzjHKuUc5JynnKueIVM5tyjlPORcq50jl3KmcU5VzrbNEKudm5ZytnMuVc7xy7lfOCcu5YjmHLOeW5ZyznIuWc9Ry7lrOacu5bjkHLufG5Zz5YsISQjlhKWEZYT/CcsL+hBWEAwgHEg4iHEz4H2El4RDCoYTDCIcTjiAcSTiKcDThGMKxhOMIxxNOIJxIOIlwMuEUr+qB9qtTPVjcz5TvGogqeeV7zk8VKX9Hx2lexbtAGnsb779OxC8W7GCbeWbaNQ+TTyb/UMvidJGeoZQH6oYbbiwXCvCbvedVLhzgN83Q7onuBKlGCTrBfLqHc4YzPDOVJQouPyTnMxPoKooVl+SwotwSGpcrzIkXF+dnMZZZmFuYW5QZLystymHxnDjpLC7MjNPtMguLWWmsMLeUO7ZchKIfaMc+E6crpub3LM+g05kqiLMM6D0bWMlM8T4bb6OEeUUEFp5XVCCQepE2OsfDOhRvNLjOLl5Fi+95ddPimwri6HyeBsxnIyWf54r0PJGeL9ILRHqh4NJdyBcRLiZcQriUcBnhcsIVhCsJVxGuJlxDuJZwHeF6wg2EVYQbCasJNxFuJtxCuJVwG+F2wh2EOwl3Ee4m3EO4l3Af4X7CA4QHCQ8RHiY8QniU8Bjhca8OekAXKjrlofd4gjoX0NjsPGC+nsDlK1aXrT8y32p+n/Qsa/2f0DKN0vuUF+7Wn/N+Cm+j9ZWY57UuWipkC2Ayn+d5ZpztaSWv8C7XUx6+pZAZbigqSF1EOmThq5X6GZE+y/NsovCfNlAYT3tYjzHFO2qQd9A8Pme4DGPBDsYr5nMGbPO8h41iPCBwnSuFTnQ5PGuoHF4wUA4vGCyH8wyVQ3bDcMcSU36Qs2l517oC3FS9z7VkhQCwXjKgrRmy/Bp6lW+Rr+5I9l611SdVp4m2ClUmamfyRa+GnnEs2MGQHQDZAKgZ9plfVts9ntP0S71BA0LvkCzf8tNhC8r5JS+cwQVpC1knOdeVXtXDr21qK2+kbV5WdLGsLPILmn8rKynLysnLzyxiuVm5uWXZZXm58eySspzswpK8UpZdmJWZX5oXK2Px0tK8nKzivNyy/JLi3DI1WLOSrKzskvyiYpaTmVtYFIuXZBXGyrLzsjJjhSVZeSUlWfHc3MKsrJLceFk8P56ZWViWFY/l5OXlx3Izs/IzTdjmZWGbunySRg63qA3XKyJ91bMkaJvK3ysePki/5uEr32ueuaeV57SKgCqH1w2Uw+sGy4E7m4lefN+QP7WZ8oN+IX9qM1Xv+1vy1Aaslwxoa9a//qlNP9grHjaWyuMNz7KnNjXDJp7a3vDwAWGQg09tb3rhDC6DDDwZcK4rvapHmJ/a1ni4p7b+wKc2E7ZZ41U+tVXXEIR5iM1kPk01Km95ljUqaoZNNCpvefhGZUjI3/JmolHJMdRjDZqvoXXU4w+az7c9XPkB6x8baiDwc64rvaoHum6/4+EavyrDnyFqlIcYsM073n9nKPVdka7fkGRiSWOixTnIlWZBdQEXOBlZbirLEB1MTZVhUF3vh9we3GHe9/Adog88fKDiOlcKnehyeM9QOXxooBw+9MwOu5sohxEhH3Y35QcjQz7sbqrej7Jk2B1YLxnQ1mxU/bC7fqxvq1BlonZyP/IMjpAAOwAbGgA1w+gRkvc1/VJv4PfzWzLs/j6Q88deOIPLOANPkZzrSq/qgR52R9rmEw/3hD8K+IRvwjafeHX/hG9q29GnIv3MsyRom8rfpx4+SH/u4Svf5565p5X3tYqAKocvDJTDF57ZLS4mevG7hvypzZQf7BbypzZT9X6CJU9twHrJgLZmE+qf2vSDfephY6k8vvQse2pTM2ziqe1LDx8QJjn41PaVF87gMsnAkwHnutKreoT5qe1rD/fUNgH41GbCNl97db9YCjnEZjKfphqVbzzLGhU1wyYalW88fKMyxZLFUsjANdJQjzVovqZasljqWw9XfsD6x6YaCPyc60qv6oGu2995uMZvVMNwNspTDNjmuwS2QT/dnga08wVAXd/jONbpu/6Q+Vbz+4Nn2bv+vtcyjdL7I7CSmeL9I95Gdfquvws8Mw11mFd2qs71k2fwXX8/AgtAthQyw/+FZbU/i/QXz8C7/n7UrIsqjJ88rMeY4h01yDtoHtcaLsNYsIPxirnWgG1+9bBRjAcErnOl0Ikuh18MlcNvBsrhN8/s8lUT5bBXyCdCTfnB9JBPhJqq9zMsmQgF1ksGtDWbUT8Rqh/r2ypUmaidyd89g2PWyA6AbADUDKPHrNdq+qXeoAGhyJKJ0LVAzn944QwuRQbG9TjXlV7VAz0RirTNnx5uzHUGcMzVhG3+9Op++SpyuEVtuP4S6d+eJUHbVP7+8vBB+h8PX/n+8cw9razVKgKqHNYZKId1BsuBO5uJXnxJyJ/aTPlBacif2kzV+zJLntqA9ZIBbc3K6p/a9IP95WFjqTz+9Sx7alMzbOKp7V8PHxD2dvCpjRciiDM0uOxt4MmAc13pVT3C/NQWieCe2sqAT20mbBOJ1P3yVeQQm8l8mmpUohHLGhU1wyYaFVW/1BvUiedZsnwVGbimG+qxBs3XfEuWr6YBG2Vg/WPzDQT+tIj55asNIrjGb0bDcDbK8wzYpkHkvzOU2lBktFHEw7/rr7rFOciVZkF1ARc4GVluKssQHUxNlWFQXY0j4bYHd5jGBjpE6RF8oEqPmBtubmSoHJoYKIcmEbPD7ibKYVHIh91N+cG+IR92N1XvF1sy7A6slwxoa7a4fthdP9a3VagyUTu5TU2OkDQ20AA0NThCwvPb1EBAWGbJsLtqr6Ccm0XCGVyWGXiKbFYHw+5I2zQHDrsvBj7hm7BN803whG9q21ELkdGWtgRtU/lrYSBItzLQWLUy+LTCy6GlgXJobaAcWkfMbnEx0YtfHvKnNlN+sH/In9pM1fsVljy1AeslA9qarah/atMP1sLQU1sb257a2hh+amtjICAc7OBTW9tIOIPLwQaeDNpa9tTWDvjUtgL41GbCNu02wWIp5BCbyXyaalTa29aotDfcqLQ30KistGSxFDJw7Wuoxxo0X4dYsliqA7BRBtY/doiBwN8hYn6x1GYRXOO3uGE4G+WVBmyzmdIo19W76i70zDR2m0cse1fdhVqmUXq3AAZ6U7y3iMBtVKcvXESu+FPzu6VtlfgCLdMovR1DXok5744GKnGivCJWE/LeXxRcBsge5VYhn6PiAaujgaeHrSPhrjv8q9P8LeHouoN88/g2IS9DXre5ndHzBkCfYVsDfblTyO3B60snA77cOWK2rQ6aPz6v2tkA78Mbhjt2n2eI9xGGRhvQsRZoH3YEeE6wrjrsyI91qvnNsK3Dfp6WaZTeLiHvsHPeXSx/6jzfM1OJt7WtEp+vZRqld7uQV2LOe7s6euqMBTvWB4TtDLS624f8SZE/JW5vgHdX8HxbE69yHJ4HR/76s/NFeqFILxApP3YQhNC8+JN1VwPl1Q3YG5c9Mnmg68y5OF2x7kJPd8pkD0JPwo6EnQi9CDsTdiHwSsA/5ZBJyCJkE3IIuYQ8QpyQT+hN6EPoS+hH6E8YwMuWMJAwiDCYMIQwlDCMMJwwgjCSMIowmjCGMJYwjjA+Url0O03kNaLIPTS5pybvqMk7aXIvTd5Zk3fR5JgmM03O1OQsTc7W5BxNztXkPE2Oa3K+JvfW5D6a3FeT+2lyf00eoMkFmjxQkwdp8mBNHqLJQzV5mCYP1+QRmjxSk0dp8mhNHqPJYzV5nCaPj2zc4fG7UMiPTweNZdw/guoqLas4ekRw+To65GsfBOeSnrjyy98Rp4vtBLTFMVbYopT1gpVfMdsZpivOdgHa4lgrbBFjMVT5lcYYQ+kqjrFMoC2Os8EW8RjLQpUftT3ZIF2lpCsHaIvjLbBFMXHOBZVfnHTlgXQRZRYH2uKE8NuilHPOx5RfMdfVG6MrznX1AdrixPDbgqtmfSHlV7peVz+IruL1uvoDbXFS6G0RX895AKT81meTFSB0lVboGgi0xclht0VxBedBiPKLV+gajNBVQZkNAdrilJDbokRwHgrgXCR0DQPoyhO6hgNtcWq4bZEpd2KOCM6ZSV0jA+uKl0ldo4C2OC3UtogXSc6jg5ffhh22YwLrytugayzQFqeH2hY5GziPC8yZbdA1PoIbszwauBfnjJBstq3lYMBxMwYc92HHAW1xpiW2AI4PMODzLTsRaIuzLLEF8DmIAfvx7BSgLc62xBbA/h4D9lfY6UBbnGOJLYDtGgPGZXYW0BbnWvLmHKD/MmD9Y6bKL6qVXxjmlaWuXYH9UK4jAq4rfP1Stwh+ndFuEayt0bwv8irX1yB5rwr5qn9eH3czwPtGS94xMAHoj0BbsxtDXm+4v+xqoN7cHHLe3Q35yy2W+MvuQH8B2pohy4/blq/7lf0IHiP4+t7dI5XrfCeKCoCuXxd7les6kXa7PeRv9eScJxrgfYclz0sTgX3MPYA+Cqw3zBZbXAysf5MiZnw4TH6hx8s9RJycpMTLyYbi5SVe5bp3D2i3u0MeLznnyQZ432OJj04G+tUUYLwE1htmiy0uAda/qREzPhwmv9Dj5RQRJ6cq8XKaoXh5qVe5L8gD2u3+kMdLznmaAd4PWOKj04B+tScwXgLrDbPFFpcC699eETM+HCa/0OPlniJO7qXEy+mG4uVlXuW+SQ9ot4dDHi855+kGeD9iiY9OB/rVDGC8BNYbZostLgPWv5kRMz4cJr/Q4+UMESdnKvFylqF4eblXua/cA9rt8ZDHS855lgHeT1jio7OAflUIjJfAesNsscXlwPpXFDHjw2HyCz1eFoo4WaTEy2JD8fIKr/K9Gx7Qbk+HPF5yzsUGeD9jiY8WA/2qBBgvgfWG2WKLK4D1rzRixofD5Bd6vCwRcbJUiZdlhuLllV7le4k8oN2eD3m85JzLDPB+wRIfLQP61WxgvATWG2aLLa4E1r85ETM+HCa/0OPlbBEn5yjxcq6heHmVV/neNg9ot5dDHi8557kGeL9iiY/OBfrV3sB4Caw3zBZbXAWsf/tEzPhwmPxCj5d7izi5jxIv5xmKl1d7le+19IB2ez3k8ZJznmeA9xuW+Og8oF/NB8ZLYL1httjiamD9WxAx48Nh8gs9Xs4XcXKBEi8XGoqX13iV7/31gHZ7K+TxknNeaID325b46EKgXy0CxktgvWG22OIaYP3bN2LGh8PkF3q8XCTi5L5KvFxsKF5ey8vCQNx4L+TxknNebID3+5b46GKgXy0BxktgvWG22OJaYP0rj5jx4TD5hR4vl4g4Wa7Ey6WG4uV1XuV3Izyg3T4KebzknJca4P2xJT66FOhXy4DxElhvmC22uA5Y//aLmPHhMPmFHi+XiTi5nxIvlxuKl9d7ld/V8YB2+yzk8ZJzXm6A9+eW+OhyoF/tD4yXwHrDbLHF9cD6tyJixofD5Bd6vNxfxMkVSrw8wFC8vMGr/O6YB7TbVyGPl5zzAQZ4f22Jjx4A9KsDgfESWG+YLba4AVj/DoqY8eEw+YUeLw8UcfIgJV4ebChervIqv8voAe32XcjjJed8sAHe31viowcD/ep/wHgJrDfMFlusAta/lREzPhwmv9Dj5f9EnFypxMtDDMXLG73K79Z6QLv9FPJ4yTkfYoD3z5b46CFAvzoUGC+B9YbZYgvugyhbHBYx48Nh8gs9Xh4q4uRhSrw83FC8XO1VftfbA9rt15DHS875cAO8f7PERw8H+tURwHgJrDfMFlusBta/IyNmfDhMfqHHyyNEnDxSiZdHGYqXN5GO3gbixp8hj5ec81EGeP9liY8eBfSro4HxElhvmC22uAlY/46JmPHhMPmFHi+PFnHyGCVeHmsoXt5MOvoYiBvrQh4vOedjDfD+1xIfPRboV8cB4yWw3jBbbHEzsP4dHzHjw2HyCz1eHifi5PFKvDzBULy8hXT0NRA3oo3CHS855xMM8E5rZIePngD0qxOB8RJYb5gttrgFWP9Oipjx4TD5hR4vTxRx8iQlXp5sKF7eSjr6GYgbjUIeLznnkw3wbmyJj54M9KtTgPESWG+YLba4FVj/To2Y8eEw+YUeL08RcfJUJV6eZihe3kY6+huIG01DHi8559MM8G5miY+eBvSr04HxElhvmC22uA1Y/86ImPHhMPmFHi9PF3HyDCVenmkoXt5OOgYYiBstQx4vOeczDfBuZYmPngn0q7OA8RJYb5gttrgdWP/Ojpjx4TD5hR4vzxJx8mwlXp5jKF7ewXUZiBttQx4vOedzDPBuZ4mPngP0q3OB8RJYb5gttrgDWP/Oi5jx4TD5hR4vzxVx8jwlXp5vKF7eSToGGogbm4U8XnLO5xvgvbklPno+0K8uAMZLYL1httjiTmD9uzBixofD5Bd6vLxAxMkLlXh5kaF4eRfpGGQgbnQMebzknC8ywHsrS3z0IqBfXQyMl8B6w2yxxV3A+ndJxIwPh8kv9Hh5sYiTlyjx8lJD8fJu0jHYQNzoFPJ4yTlfaoB3Z0t89FKgX10GjJfAesNsscXdwPp3ecSMD4fJL/R4eZmIk5cr8fIKQ/HyHtIxxEDc2Dbk8ZJzvsIA7+0s8dErgH51JTBeAusNs8UW9wDr31URMz4cJr/Q4+WVIk5epcTLqw3Fy3tJx1ADcWOHkMdLzvlqA7y7WeKjVwP96hpgvATWG2aLLe4F1r9rI2Z8OEx+ocfLa0ScvFaJl9cZipf3kY5hBuJGz5DHS875OgO8d7TER68D+tX1wHgJrDfMFlvcB6x/N0TM+HCY/EKPl9eLOHmDEi9XGYqX95OO4Qbixs4hj5ec8yoDvHexxEdXAf3qRmC8BNYbZost7gfWv9URMz4cJr/Q4+WNIk6uVuLlTYbi5QOkY4SBuJEZ8njJOd9kgHeWJT56E9CvbgbGS2C9YbbY4gFg/bslYsaHw+QXery8WcTJW5R4eauhePkg6RhpIG7khjxecs63GuCdZ8ueZaBf3QaMl8B6w2yxxYPA+nd7xIwPh8kv9Hh5m4iTtyvx8g5D8fIh0jHKQNzoHfJ4yTnfYYB3H1v2lAD96k5gvATWG2aLLR4C1r+7ImZ8OEx+ocfLO0WcvEuJl3cbipcPk47RBuJG/5DHS875bgO8B9iy5g/oV/cA4yWw3jBbbPEwsP7dGzHjw2HyCz1e3iPi5L1KvLzPULx8hHSMMRA3BoU8XnLO9xngPdiWOVmgX90PjJfAesNsscUjwPr3QMSMD4fJL/R4eb+Ikw8o8fJBQ/HyUdIx1kDcGBbyeMk5P2iA93BbxsyAfvUQMF4C6w2zxRaPAuvfwxEzPhwmv9Dj5UMiTj6sxMtHDMXLx0jHOANxY1TI4yXn/IgB3qNt6dMA/epRYLwE1htmiy0eA9a/xyJmfDhMfqHHy0dFnHxMiZePG4qXj5OO8QbixriQx0vO+XEDvMdb4qOPA/3qCWC8BNYbZo0tgPXvyYgZHw6TX+jx8gkRJ59U4uVTEa/KEQXbrC3QZk9FzMbKWLCDnU86OhuIlU9HsHUijcB1XkxpQ0K6UhbqgS4fNA95PBNJkH9Upk0VxDMRvN5ngUHNFO9nI3AbxUxW2mcj+IAs89jDqwjE7QnPRSqDrzzC7IAZQs/zpPMFwouElwgvE14hvEp4jfA64Q3Cm4Q1hLcIbxPeIbxLeI/wPuEDwoeEjwgfEz4hfEr4jPA54QvCl4SvCF8TviF8G6koJBnUeF5kMOPyC5r8oia/pMkva/IrmvyqJr+mya9r8hua/KYmr9HktzT5bU1+R5Pf1eT3NPl9Tf5Akz/U5I80+WNN/kSTP9XkzzT5c03+QpO/1OSvNPlrTf5Gk78VsnqgO51PA2Pq8wBdpWX8iLEXgPmaUEcPAEE4c1u8CCm/Cru+FFxXpig/9jLQFruH2RbZG/LJXgnGOaZwZq8G0ZVZpfzYa0BbTAynLWJaPtnrKXLOLduIM3sjNV3xBOXH3gTaYo+w2SKeMJ9sjX/OedVwZm/51ZVXbfmxt4G2mBQeW2TWkE/2jh/OeTVyZu8mr6u4lvJj7wFtMTkMtsirNZ/s/eQ4x5LgzD5IRlcsqfJjHwJtMWXT2iInyXyyj2rjnJ00Z/Zxjbqyy3yUH/sEaIupm8oWeb7yyT6tnnPcJ2f2WTW68st8lx/7HGiLaXVvi1gK+WRfJOIcS4kz+3JjXSzF8mNfAW2xZ13aoiTlfLKvq3LOCsCZfaPoyiwLVH7sW6At9rJk4g04PsCAz7dsInDibboltgA+BzFgP55NBtpihiW2APb3GLC/wqYBbTHTElsA2zUGjMtsOtAWswzZIg1sC6D/MmD9Y8jyMz1Xtw1O14a5uu8ok98TfiD8SPiJ8DPhF8Jawq+E3wi/E/4g/En4i/A34R/COsK/nCiRjxCihDRCA0JDQiNCY0I6oQmhKaEZoTmhRdSrMlf3nTaX870m/6DJP2ryT5r8syb/oslrNflXTf5Nk3/X5D80+U9N/kuT/9bkfzR5nSb/q8m8jFU5oslRTU7T5Aaa3FCTG2lyY01O1+QmmtxUk5tpcnNNbhE1P1en+kzQWPsdcK7ue+AzwyJL5up+AM7V/Qicq/sJaIt9LZmr+xk4V/cLcK5uLdAWiy2Zq/sVOFf3G3Cu7negLZZYMlf3B3Cu7k/gXN1fQFuUWzJX9zdwru4f4FzdOqAtlloyV/cvcK6O92Nr1ZXkXF0kirPFMkvm6qK1cfYxV5cWxc3VNQDaYj9L5uoaRnFzdY2iuLm6xkBbLLdkri49ipuraxLFzdU1Bdpif0vm6ppFcXN1zaO4uboWQFussGQcHDg+wIDPt2wxcBz8AEtsAXwOYsB+PFsKtMWBltgC2N9jwP4KWw60xUGW2ALYrjFgXGYHAG1xsCVzdUD/ZcD6xw62aK4ugtO1Ya6uJWW6FaE1oQ2hLaEdoT2hA2EzwuaELQhbEjoStiJsTdiG0InQmZBB6ELYlrAdYXtCV8IOhG6E7oQehJ6EHQk7EXpFvSpzdS2jVedyWmlya01uo8ltNbmdJrfX5A6avJkmb67JW2jylprcUZO30uStNXkbTe6kyZ01OUOTu2jytpq8nSZvr8ldNXkHTe6myd01uYcm99TkHTV5J03uFTU/V6f6TNBY2xLQz5dzda2AzwwnWjJX1xpSfhV2bRNc14a5urZAW5xkyVxdu2Ccq8zVtQ+iS5ur6wC0xcmWzNVtliLnRHN1m6emK+Fc3RZAW5xiyVzdlv45VztX19Gvrhrm6rYC2uJUS+bqtvbDuZa5um2S11XrXF0noC1Os2SurnNynJOaq8tIRleSc3VdgLY43ZK5um1r4+xjrm67KG6ubnugLc6wZK6uaxQ3V7dDFDdX1w1oizMtmavrHsXN1fWI4ubqegJtcZYlc3U7RnFzdTtFcXN1vYC2ONuScXDg+AADPt+yk4Hj4OdYYgvgcxAD9uPZaUBbnGuJLYD9PQbsr7AzgbY4zxJbANs1BozL7BygLc63ZK4O6L8MWP/Y+RbN1XXC6dowV7czZXoXAs88I2QSsgjZhBxCLiGPECfkE3oT+hD6EvoR+hMG8P4PYSBhEGEwYQhhKGEYYThhBGEkYRRhNGEMYWzUqzJXx/OizuXsoskxTWaanKnJWZqcrck5mpyryXmaHNfkfE3urcl9NLmvJvfT5P6aPECTCzR5oCYP0uTBmjxEk4dq8jBNHq7JIzR5pCaP0uTRmjxGk8dGzc/VqT4TNNbuDOjny7m6XYDPDNdbMlcXg5RfhV1ZcF0b5uoygba4wZK5uqxgnKvM1WUH0aXN1eUAbbHKkrm63BQ5J5qry0tNV8K5ujjQFjdaMleX759ztXN1vf3qqmGurg/QFqstmavr64dzLXN1/ZLXVetcXX+gLW6yZK5uQHKck5qrK0hGV5JzdQOBtrjZkrm6QbVx9jFXNziKm6sbArTFLZbM1Q2N4ubqhkVxc3XDgba41ZK5uhFR3FzdyChurm4U0Ba3WTJXNzqKm6sbE8XN1Y0F2uJ2S8bBgeMDDPh8y1YBx8HvsMQWwOcgBuzHs5uAtrjTElsA+3sM2F9htwJtcZcltgC2awwYl9kdQFvcbclcHdB/GbD+sbsNztV13rgMWSzAsVi3RwBtSza2bcrayr0EZZiitqVeQnukpG2ZV41tU9C2n1dtPfGtbblXQ53zqW1/r8b660vbCq8WX/Ch7QCvVr9KWtuBXhI+mqS2g5LRlaS2g5PTlZS2/yWrKwltK5PXVau2Q/zoqkXbof501ajtML+6atB2uH9d1Wo7IhVd1Wg7MjVdCbUdlaquBNqOTl3XRtqOCaJL03ZsMF1VtB0XVJei7fjgujZoOwGhS2g7EaNrvbaTULr4elucrg1rksZR52w8YVfCboQJhN0JEwl7ECYRJhOmEKYSphH2JOxFmE6YQZhJmEUoJBQRigklhFJCGWE2YQ5hLmFvwj6EeYT5BHVNEs+LumZlvCbvqsm7afIETd5dkydq8h6aPEmTJ2vyFE2eqsnTNHlPTd5Lk6dr8gxNnqnJszS5UJOLNLlYk0s0uVSTyzR5tibP0eS5mry3Ju+jyfM0eX40qTVJ//lng6DPuk/X9bjDf/gZJqgtntk0Y0D/yWetoLZ4dlOOx/3HngmD2uK5TT82+p95dg1qi+fDMk79H3jGDmqLF8I1Z2D1WEBQW7wYxvkbS8csgtripfDOpVk3thLUFi+HfV7TojGgoLZ4xZI55pOBnPm4UFBdci/Q+CguX69ashdoV0j5Vdh1t+C6NuwFmgC0xWuW7AXaPRjnKnuBJgbRpe0F2gNoi9ct2Qs0KUXOifYCTU5NV8K9QFOAtnjDkr1AU/1zrnYv0DS/umrYC7Qn0BZvWrIXaC8/nGvZCzQ9eV217gWaAbTFGkv2As1MjnNSe4FmJaMryb1AhUBbvGXJXqCi2jj72AtUXKMuf3uBSoC2eNuSvUCl1XP2vReorBpdqewFmg20xTuW7AWak4hzinuB5m6sK+W9QHsDbfGuJXuB9qnKOdBeoHmKrqB7geYDbfGeJWMgwHl5BpxXZs8C19m/b4ktgPOPDDh/xl4A2uIDS2wBnGdhwHkC9jLQFh9aYgvgeDIDjoey14C2+MgSWwDHzRhw3Ie9CbTFx5bYAjg+wIDPt+xtoC0+scQWwOcgBuzHs/eAtvjUElsA+3sM2F9hHwJt8ZkltgC2awwYl9knQFt8bsk+XqD/MmD9Y8jyi3pVD/Q7d5+L4PKaIfQsoEwvJCwi7EtYTFhCKCcsJSwj7EdYTtifsIJwAOFAwkGEgwn/I6wkHEI4lHAY4XDCEYQjCUcRjiYcQziWcBzheMIJUa/K/haeF3X/w0JNXqTJ+2ryYk1eosnlmrxUk5dp8n6avFyT99fkFZp8gCYfqMkHafLBmvw/TV6pyYdo8qGafJgmH67JR2jykZp8lCYfrcnHaPKxmnycJh+vySdEzb9zV/WZoLF2AWCMTq6zWQgc72vU2I51Nosg5Vdh132D69qwzmYx0BaNw2wLZZ3NkmCcq6yzKQ+iS1tnsxRoi/Rw2mKjdTbLUuScaJ3NfqnpSrjOZjnQFk3CZotq1tns759ztetsVvjVVcM6mwOAtmgaHlvUuM7mQD+ca1lnc1DyumpdZ3Mw0BbNwmCLJNbZ/C85zkmts1mZjK4k19kcArRF801ri6TX2RxaG2cf62wOi+LW2RwOtEWLTWULn+tsjoji1tkcGcWtszkKaIuWdW+LlNbZHB3FrbM5JopbZ3Ms0Bat6tIWAdbZHBfFrbM5PopbZ3MC0Bat68gWsWAHA44PMODzLVOfz4Laoo0ltgA+BzFgP541A9qirSW2APb3GLC/wloCbdHOElsA2zUGjMusDdAW7Q3ZAj1XB/RfBqx/DFl+EVGHHxT6vo1UzEV8I9KvRfqVSL8U6Rci/Vykn4n0U5F+ItKPRfqRSD8U6QcifV+k74n0XZG+I9K3RfqWSNeI9E2RviHS10X6mkhfFekrIn1ZpC+J9EWRviDS50XaQszFNBdpM5E2FWkTkaaLtLFIG4m0oUgbiDRNpFE55yNST6T/ivuuE+k/Iv1bpH+J9E+R/iHS30X6m0h/Felakf4i0p9F+pNIfxTpDyL9XqTfibSXyNdOIt1RpD1F2kOk3UXaTaQ7iLSrSLcX6XYi3VakXUSaIdLOIu0k0m1EurVItxJpR5FuKdItRLq5SDcTaQeRthdpO5G2FWkbkbYWaSuRthSp/P6l/C6m/F6m/I6m/L6m/O6m/B6n/E6n/H6n/K6n/N6n/A6o/D5ogUjl90Tld0bl90fld0nl90rld0zl903ld0/l91Dld1Ll91Pld1Xl91bld1jl91nld1vl91zld17lu/bkO/jku/nkO/vku/zkO/7ku//kOwHluwLlOwTluwXlOwfluwhniVS+u1C+01C+61C+A1G+G1G+M1G+S1G+Y1G+e1G+k1G+q1G+w1G+21G+81G+C1K+I1K+O1K+U1LOxco5Wjl3K+d05VyvnAOWc8NyzljOJcs5Zjn3LOek5Vy1nMOWc9tyzlvOhcs5cjl3LufU5Vy7nIOXc/Nyzl7O5cs5fjn3L9cEyLUCcg2BXFsg1xycSOlJhJMJpxBOJZxGOJ1wBuFMwlmEswnnEM4lnEc4n3AB4ULCRYSLCZcQLiVcRriccAXhSsJVhKsJ1xCuJVxHuJ5wA6GhV9EeybZcPdDrSCKemX4I+r313CZV8hlA20nRjTinrO3kaILyS1HbKdGEtkhJ26nRauyagrbTotXWEd/aTo/WUN98ajsjWmPd9aXtzGgtfuBD21nRWn0qaW1nR5PwzyS1nZOMriS1nZucrqS0nZesriS0nZ+8rlq1XeBHVy3aLvSnq0ZtF/nVVYO2i/3rqlbbJanoqkbbpanpSqjtslR1JdB2eeq6NtJ2RRBdmrYrg+mqou2qoLoUbVcH17VB2zUIXULbtRhd67Vdh9JF2q6PmumPofuNPXC6YhElj23E36uoHG4krCbcRLiZcAvhVsJthNsJdxDuJNxFuJtwD+Fewn2E+6OVnDccKPJRTS+6cFcBK0FroecB0vkg4SHCw4RHCI8SHiM8TniC8CThKcLThGcIzxKeIzwfXT9Ws2Gx7gOicKX8oCY/pMkPa/IjmvyoJj+myY9r8hOa/KQmP6XJT2vyM5r8rCY/p8nPJ6hM6EFv1eZBB5cfAOiqWJxcVvYgMF/bW7A4mY6Sh3Dll/8wThd7BGiLrlbYopQ9Ciu/YvYYTFecPQ60xQ5W2CLGnkCVX2mMPYnSVRxjTwFt0c0GW8Rj7GlU+fEXpoB0lfIXpgBt0d0CWxTzjUWg8ovzF6YAHya2B05Y97Bk8QCwXWPAuMy6AW3R05LFA0D/ZcD6x9DlF9k4ngRa5MgnO+QzlqY3UL3JNM870ELRkwzxzqoL3gEWBZ9siHd23fBOeWH1KYZ459QV7xQXp59qiHdu3fFOaSPCaYZ459Uh71Q2c5xuiHe8bnn73hBzhiHe+XXN2+fmpzMN8e5d57z9bSA7yxDvPpuCt49NeGcb4t130/BOesPlOYZ499tUvJPctHquId79Nx3vpDb+nmeI94BNyTuJTd7nG+JdsGl517pR/gJDvAduat61vGzgQkO8B2163jW+WOIiQ7wHh4F3DS/nuNgQ7yHh4F3tC04uMcR7aFh4V/Mym0sN8R4WHt4JXwh0mSHew0PEO9FLlS43xHtEuHhv9AKtKwzxHhk23tpLyK40xHtU+HhXeZHbVYZ4jw4jb+WlfVcb4j0mnLw3vPjwGkO8x4aWd8XLI681xHtciHnz9TfXGeI9PqS8Zf6uN8R7V8O8Y8EOdqMh3rvV3VqO//ymv6C2mFDX62r+w5sTg9pi902zxuk/uYkyqC0mbsr1Zv+xzZ5BbbHHpl/795/ZlBrUFpPCsg7zP7B5NqgtJodrTazVm3yD2mJKGNcnW7oZOagtpoZ3rbh1m6aD2mJa2NftW7S5O6gt9rRkDwVwEzoDrjlnWcA9FHtZYgvgGm4GXBfNcoG2mG6JLYDrjBlw7S7LB9pihiW2AK6FZcD1pawv0BYzLbEFcL0mA66BZAOAtphliS2AawoZcJ0eGwS0RaEltgCue2PAtWRsKNAWRZbYArg2iwHXO7ERQFsUW2IL4PohBlyTw0YDbVFiiS2Aa1wYcN0IGwe0RakltgCuw2DAtQ1sN6AtyiyxBXBengHnldlEoC1mW2IL4PwjA86fsclAW8yxxBbAeRYGnCdg04C2mGuJLYDjyQw4HsqmA22xtyW2AI6bMeC4D5sFtMU+ltgCOD7AgM+3rBhoi3mW2AL4HMSA/XhWBrTFfEtsAezvMWB/hc0F2mKBJbYAtmsMGJfZPKAtFtaRLYLm8wXgfDcwFjBgXWYLLfGLG4HrLTKBdRm59mCVJX6B7Mcj+8ergPm60RJbzDQ0l4mciwuqa7UltigyNGeDnHMIqusmS2xRGs6xaXYjMF83W2KLF4H9KGAsYMC6zJC24Ps6m3gV31bhB++HrqP0RZHy4yXxT/TeUv5hnQej+L2ld4Z8LzHn/JIB3ndZ0r9+Cdi/fhno78B6w2yxxWqgLV6JmvHhMPmFHi9fFnHyFSVevmooXvKPkD1kIG7cG/J4yTm/aoD3fZb46KtAv3oNGC+B9YbZYoubgLZ4PWrGh8PkF3q8fE3EydeVePmGoXjJP9j4sIG48WDI4yXn/IYB3g9Z4qNvAP3qTWC8BNYbZostbgbaYk3UjA+HyS/0ePmmiJNrlHj5lqF4yT9u+4iBuPFoyOMl5/yWAd6PWeKjbwH96m1gvATWG2aLLW4B2uKdqBkfDpNf6PHybREn31Hi5buG4iX/EPijBuLGkyGPl5zzuwZ4P2WJj74L9Kv3gPESWG+YLba4FWiL96NmfDhMfqHHy/dEnHxfiZcfGIqXt5HexwzEjWdDHi855w8M8H7OEh/9AOhXHwLjJbDeMFtscRvQFh9FzfhwmPxCj5cfijj5kRIvPzYUL28nvY8biBsvhjxecs4fG+D9kiU++jHQrz4BxktgvWG22OJ2oC0+jZrx4TD5hR4vPxFx8lMlXn5mKF7eQXqfMBA3Xg15vOScPzPA+zVLfPQzoF99DoyXwHrDbLHFHUBbfBE148Nh8gs9Xn4u4uQXSrz80lC8vJP0PmkgbrwZ8njJOX9pgPcaS3z0S6BffQWMl8B6w2yxxZ1AW3wdNePDYfILPV5+JeLk10q8/MZQvLyL9D5lIG68E/J4yTl/Y4D3u5b46DdAv/oWGC+B9YbZYou7gLb4LmrGh8PkF3q8/FbEye+UePm9oXh5N+l92kDc+CDk8ZJz/t4A7w8t8dHvgX71AzBeAusNs8UWdwNt8WPUjA+HyS/0ePmDiJM/KvHyJ0Px8h7S+4yBuPFJyOMl5/yTAd6fWuKjPwH96mdgvATWG2aLLe4B2uKXqBkfDpNf6PHyZxEnf1Hi5VpD8fJe0vusgbjxRcjjJee81gDvLy3x0bVAv/oVGC+B9YbZYot7gbb4LWrGh8PkF3q8/FXEyd+UePm7oXh5H+l9zkDc+Cbk8ZJz/t0A728t8dHfgX71BzBeAusNs8UW9wFt8WfUjA+HyS/0ePmHiJN/KvHyL0Px8n7S+7yBuPFDyOMl5/yXAd4/WuKjfwH96m9gvATWG2aLLe4H2uKfqBkfDpNf6PHybxEn/1Hi5bqoV+WIajYLyqc50P7ronbUU+T3ik199yfweJYlMWMisPxMffcnqC3WWmKLycDyM/Xdn8BjSJbYYhqw/JDf/fkFaIvfLHlP7b/A9gIYCxiwLrPfDPRr0oS+f0V/podXka4SckNPOUkcev8mFuxgvYD1IJKGy1dEUOc6M0RZNFT4JzpA986MJLgP+nm8m4f3bXQeu3vYOr+hDqdV5hVtPMYrSSMBz7ARI56ZAI0qk8zCkqycnPxsk2UQTTNTBnBbWZLPBl6465Q8Igr/JuLvNCrjBoSGhEaExoR0QhNCU0Iz045PjXTCFgJupLRQG4nJP9SyaC56Ei1MGkE22/xm72n3SDNohBS7Lpmi68Kap+G6QS0MVQ501w/JuWUCXUWx4pIcVpRbksdKC3PixcX5WYxlFuYW5hZlxstKi3JYPCdOOosLM+N0u8zCYlYaK8wt5Y6c7iWopB7ekVum4SMiP1qZdDJTBaFmGqW3NbCSmeLdOg1uIyNzWS1EXlGBQOpF2qgN2KG4abjOLl7F819dtfCNLWzh24p63K4uWvi2ooWXcjvxoK4e6Ba/MbDFbwus9O0safGRnNtb2uK3N9Tid7CtxecF0cFAi79ZyFt8znszS1r8diKv6BYfaaPNDbT4m2+CFj893C2+PDLVsthC1OMt66LF5zf7R7sHuoVPB1TM0rKKYwtgJd/SkhYeybmjoovFszIz87L4efGSGMsuKc6MZ2aWFGXHimOFxZml+dksvyw7MzuruKS4iHQWsrJYWWFxflm8Il912cJ3NNTCb2VbC88LYisDLfzWIW/hOe+tLWnhtxR5RevdxkCrvI3oidRlq9zEwla5k6h7neuiVe4kWmUpJ7opupVuAmylOwGDSWdLWmkk5wxLW+kMQ610F9taaV4QXQy00tuGvJXmvLe1pJXuLPKK1rudgVZ6u03QSje1cLR8e1H3utZFK729NlretQ5Gy5sCR8u3BwaTrpa00kjOO1g6Wr6DoVa6m22tNC+IbgZa6e4hb6U57+6WtNJdRV7Ro+VIG/Uw0OL3EKPl6oEOhhGgndIMNQDout8CYPfinMziwsLckppsE6Z197Y0zlGgTzazpD7W1SRE0PIELmFmnS3hDNwKwBo5yLmhJXEnAow7PdOw7TPvC/RM8GCJ7mftCMi33Jqi7/Hnuvnet55eRdqUsFNa5TaDaLSS0zolbadd10D+X/we1f5fn9an9Wl9Wp/Wp/VpfVqf1qf1aX1an9an9al96Y6EXso4gZyykuMDO4nn/14ibUvYWZnX4gd6rEjVFXTMZRdbxseAnGO2zEUAOTNLOKcBOWdawrkBkHOWJZwbAjlnW8J5JyDnHEs49wRyznWQc56DnOMOcs53kHNvBzn3cZBzXwc593OQc38HOQ9wkHOBg5wHOsh5kIOcBzvIeYiDnIc6yHmYg5yHO8h5hIOcRzrIeZSDnEc7yHmMg5zHOsh5nIOcxzvIeVcHOe/mIOcJDnLe3UHOEx3kvIeDnCc5yHmyg5ynOMh5qoOcpznIeU8HOe/lIOfpDnKe4SDnmQ5ynuUg50IHORc5yLnYQc4lDnIudZBzmYOcZzvIeY6DnOc6yHlvBznv4yDneQ5ynu8g5wUOcl7oIOdFDnLe10HOix3kvMRBzuUOcl7qIOdlDnLez0HOyx3kvL+DnFc4yPkABzkf6CDngxzkfLCDnP/nIOeVDnI+xEHOhzrI+TAHOR/uIOcjHOR8pIOcj3KQ89EOcj7GQc7HOsj5OAc5H+8g5xMc5Hyig5xPcpDzyQ5yPsVBzqc6yPk0Bzmf7iDnMxzkfKaDnM9ykPPZDnI+x0HO5zrI+TwHOZ/vIOcLHOR8oYOcL3KQ88UOcr7EQc6XOsj5Mgc5X+4g5ysc5Hylg5yvcpDz1Q5yvsZBztc6yPk6Bzlf7yDnGxzkvMpBzjc6yHm1g5xvcpDzzQ5yvsVBzrc6yPk2Bznf7iDnOxzkfKeDnO9ykPPdDnK+x0HO9zrI+T4HOd/vIOcHHOT8oIOcH3KQ88MOcn7EQc6POsj5MQc5P+4g5ycc5Pykg5yfcpDz0w5yfsZBzs86yPk5Bzk/7yDnFxzk/KKDnF9ykPPLDnJ+xUHOrzrI+TUHOb/uIOc3HOT8poOc1zjI+S0HOb/tIOd3HOT8roOc33OQ8/sOcv7AQc4fOsj5Iwc5f+wg508c5Pypg5w/c5Dz5w5y/sJBzl86yPkrBzl/7SDnbxzk/K2DnL9zkPP3DnL+wUHOPzrI+ScHOf/sIOdfHOS81kHOvzrI+TcHOf/uIOc/HOT8p4Oc/3KQ898Ocv7HQc7rHOT8r4OcvQbucY44yDnqIOc0Bzk3cJBzQwc5N3KQc2MHOac7yLmJg5ybOsi5mYOcmzvIuYWDnFs6yLmVg5xbO8i5jYOc2zrIuZ2DnNs7yLmDg5w3c5Dz5g5y3sJBzls6yLmjJZy9NBznrSzh3Ato560drNvbOMi5k4OcOzvIOcNBzl0c5Lytg5y3c5Dz9g5y7uog5x0c5NzNQc7dHeTcw0HOPR3kvKODnHdykHMvBznv7CDnXRzkHHOQM3OQc6aDnLMc5JztIOccBznnOsg5z0HOcQc55zvIubeDnPs4yLmvg5z7Oci5v4OcBzjIucBBzgMd5DzIQc6DHeQ8xEHOQx3kPMxBzsMd5DzCQc4jHeQ8ykHOox3kPMZBzmMd5DzOQc7jHeS8q4Ocd3OQ8wQHOe/uIOeJDnLew0HOkxzkPNlBzlMc5DzVQc7THOS8p4Oc93KQ83QHOc9wkPNMBznPcpBzoYOciyzhvDPw/STFDtq5xEHOpQ5yLnOQ82wHOc9xkPNcBznv7SDnfRzkPM9BzvMd5LzAQc4LHeS8yEHO+zrIebGDnJc4yLncQc5LHeS8zEHO+znIebmDnPe3hPMOQM4rbLEzcHz7AAfr9oEOcj7IQc4HO8j5fw5yXukg50Mc5Hyog5wPc5Dz4Q5yPsJBzkc6yPkoBzkf7SDnYxzkfKyDnI9zkPPxDnI+wUHOJzrI+SQHOZ/sIOdTHOR8qoOcT3OQ8+kOcj7DQc5nOsj5LAc5n+0g53Mc5Hyug5zPc5Dz+Q5yvsBBzhc6yPkiBzlf7CDnSxzkfKmDnC9zkPPlDnK+wkHOVzrI+SoHOV/tIOdrHOR8rYOcr3OQ8/UOcr7BQc6rHOR8o4OcVzvI+SYHOd/sIOdbHOR8q4Ocb3OQ8+0Ocr7DQc53Osj5Lgc53+0g53sc5Hyvg5zvc5Dz/Q5yfsBBzg86yPkhBzk/7CDnRxzk/KiDnB9zkPPjDnJ+wkHOTzrI+SkHOT/tIOdnHOT8rIOcn3OQ8/MOcn7BQc4vOsj5JQc5v+wg51cc5Pyqg5xfc5Dz6w5yfsMSzo2AnN+0hHNjIOc1lnBOB3J+yxLOTYCc37aEc1Mg53cs4dwMyPldSzg3B3J+zxLOLYCc37eEc0sg5w8s4dwKyPlDSzi3BnL+yBLObYCcP7aEc1sg508s4dwOyPlTSzi3B3L+zBLOHYCcP7eE82ZAzl9YwnlzIOcvLeG8BZDzV5Zw3hLI+WtLOHcEcv7GEs5bATl/awnnrYGcv7OE8zZAzt9bwrkTkPMPlnDuDOT8oyWcM4Ccf7KEcxcg558t4bwtkPMvlnDeDsh5rSWctwdy/tUSzl2BnH8Dco6QjgZCV0+Ff0SUQZr4f0MCn0/m86t8vpHPv/H5KD4/w+cr+Pg9H8/m47t8vJOP//HxMD4+xMdL+PgBf57mz5f8eYs/f/D+OO+f8v4a77/w9py3bxkEHv94POD+wesLLz/+neFuhO6EHkpen4pUpLtQZmMERsgkZBGyCTmEXEIeIU7IJ/Qm9CH0JfQj9CcM4N/0JQwkDCIMJgwhDCUMIwwnjCCMJIwijCaMIYwljCOMJ+xK2I0wgbA7YSJhD8IkwmTCFMJUwjTCnoS9CNMJMwgzCbMIhYQiQjGhhFBKKCPMJswhzCXsTdiHMI8wn7CAsJCwiLAvYTFhCaGcsJSwjLAfYTlhf8IKwgGEAwkHEQ4m/I+wknAI4VDCYYTDCUcQjiQcRTiacAzhWMJxhOMJJxBOJJxEOJlwCuFUwmmE0wlnEM4knEU4m3AO4VzCeYTzCRcQLiRcRLiYcAnhUsJlhMsJVxCuJFxFuJpwDeFawnWE6wk3EFYRbiSsJtxEuJlwC+FWwm2E2wl3EO4k3EW4m3AP4V7CfYT7CQ8QHiQ8RHiY8AjhUcJjhMcJTxCeJDxFeJrwDOFZwnOE5wkvEF4kvER4mfAK4VXCa4TXCW8Q3iSsIbxFeJvwDuFdwnuE9wkfED4kfET4mPAJ4VPCZ4TPCV8QviR8Rfia8A3hW8J3hO8JPxB+JPxE+JnwC2Et4VfCb4TfCX8Q/iT8Rfib8A9hHeHftApnjxCihDRCA0JDQiNCY0I6oQmhKaEZoTmhBaEloRWhNaENoS2hHaE9oQNhM8LmhC0IWxI6ErYibE3YhtCJ0JmQQehC2JawHWF7QlfCDoRuhO6EHoSehB0JOxF6EXYm7EKIERghk5BFyCbkEHIJeYQ4IZ/Qm9CH0JfQj9CfMIDHVcJAwiDCYMIQwlDCMMJwwgjCSMIowmjCGMJYwjjCeMKuhN0IEwi7EyYS9iBMIkwmTCFMJUwj7EnYizCdMIMwkzCLUEgoIhQTSgilhDLCbMIcwlzC3oR9CPMI8wkLCAsJiwj7EhYTlhDKCUsJywj7EZYT+Hfl+XfW+XfH+Xe4+Xep+Xea+XeL+Xd8+Xdt+Xde+XdP+XdA+Xcx+Xci+XcT+XcE+Xf1+Hfm+HfX+HfI+He5+Heq+Heb+HeM+Hd9+Hdu+Hdf+HdQ+HdB+Hcy+Hcj+HcU+HcF+Hv2+Xvn+XvY+XvJ+Xu6+Xur+Xuc+XuN+Xt++Xtv+Xtg+XtR+XtC+Xsz+Xsk+XsV+XsG+Xv3+Hvo+HvZ+HvK+Hu7+Hus+Hud+HuO+Ht/+Htw+Hth+HtS+HtD+Hs0+Hsl+HsW+HsH+D58vi+d79Pm+5b5Pl6+r5Xv8+T7Hvk+QL4vju8T4/um+D4ivq+G7zPh+y74PgS+Lp+vU+frtvk6Zr6ul69z5es++TpIvi6Qr5Pj68b4Oiq+roivs+HrTvg6DL4ugc/T83lrPo/L5zX5PB+f9+LzQHxehM8T8HFzPo7Mx1X5OCMfd+PjUHxcho9T8Od2/hzLn+v4cw7v9/N+MO8X8n4S7zfcr7Sb7ZS/txZpYXl56fxF5RnlCzMKS0oy9ptbPidj4bLSxWXzFu7H/3+qcs1WIi0unDdv/QVLlpQuLp85v3D5zKK55TOXzF1Ryv99uv9LLvB/yUX+L7nU/yWX+7/kBv+X3Oj/ktv8X3KH/0vu8X/Jff4vedz/JU/6v+QZ/5c85/+S1/1f8qb/S97zf8kH/i/5yv8l3/i/ZK3/S37zf8mf/i/52/8lDSO+L2ns/5IW/i9p5f+Sdv4v6eD/kk7+L8nwf8l2/i/p6v+Snf1fEvN/Sa7/S+L+LxmiXLKDSHddWjRvbnFGSWF5YcaSeQvLM0oWli5Z0K08Y35hefEc3ndYULpkCT9zaKCrhwW6elq08uqu8urFC5fNXTA7Y1GFlmWF85aWZsxdUDxv6ZK5CxdklBXOnVdawk/cK+q7pPhTgzzai3Qs5aVwdmnGAsro3AUZS8oLy9efO1o5N9ke2FE+r+GFd5TGnx9binTg4sWF+1OuSkqXZyxcWp6xsCyjaOHSBSVL1At3SvXCrFQv7J3qhUNSvbBjJPWCVcOWr5tun+qFg1LI7QnivHGVl64faNOuXbK0qHxxYXF59QomKgrkU8TIxPmVl0z2fBKVF073f69Zqd5rsee/UE8S5/VLPp/ykgK/+ZQXjg2Qz93853NiqvksSSGf54jzdlWu9VVJpYJJyROVl0z1S1ReONP/vYpSvVe5579QLxbn+aik8pICv/mUF6ZSSeW1PiqpvMR3JZUXplJJrxHnpVxJpQIflVRe4ruSygt9VFJ5ie9KKi9MpZKuDlqoq/0X6upUC3W1/0JdnWqhrg5QqHeK83x4vrykwG8+5YWpeL681ofny0t8e768MBXPf1icl3IllQp8VFJ5ie9KKi/0UUnlJb4rqbwwlUr6lDjPRyWVlxT4zae8MJVKKq/1UUnlJb4rqbwwlUr6sjgv5UoqFfiopPIS35VUXuijkspLfFdSeWEqlXRN0EJd479Q16RaqGv8F+qaVAt1TYBC/VScl/IjqVTg45FUXuL7kVRe6OORVF4yK9V7pfJI+rk4z0c4lZcU+M2nvDCVcCqv9RFO5SW+w6m8MJVw+qM4L2XPlwp8eL68xLfnywt9eL68xLfnywtT8fzfxXk+Kqm8pMBvPuWFqVRSea2PSiov8V1J5YWpVNKIGBBMuZJKBT4qqbzEdyWVF/qopPIS35VUXphKJU0PWqjp/gs1PdVCTfdfqOmpFmp6gEJtLa714fnykgK/+ZQXpuL58lofni8v8e358sJUPL9j0Era0X8l7ZhqJe3ov5J2TLWSdgxQSbv4r6RdUq2kXQJU0i7+K2mXVCtplwCVtGfQStrTfyXtmWol7em/kvZMtZL2DFBJWdBCZf4LlaVaqMx/obJUC5WlWqhNxEmjhIJ0RUGBB9p3Ec8sa6QoV9YYVMryxiLN8Cr2Wmw4V/zOf0sTP0XEb3yPRkev8v9R7T7rrxG/pSm/NRC/NVB+ayh+a6j81kj81kjJShN4GcXyuN6maL2xzDjX2xyut2IvTQuvsrwKlPs0Vcqqpfg7grs3U+8dEZD3kb83UP7eUjlXnifLo7H4u7lyfTPxd8sarmuiXddSOadZAv4FHpZ/cy0/aj740VD5m+9Pkn7RS8lbY3jeMkuaeZX+4ynl52n5lUdjJT+N4PmpeI/gFkLX7NLyiqVUQwrLCycuLi2dXLFyKqLkU+a9l5b3iFeVxzrlHDWmqX+nJfgtQ7k+XTmnwMPWj0bKPQsUWd4v3au67w9075ipehXxKpsJGW9k/uX9GijnyLVzrb2ND1WXzKe0u9TZQisrmeK5VbzTFN6miDJrqpWZzH8TpczkOb1qKbOm1ZRZY6XMZFmpbQCeWyyT621mqMyaa2Um899MKTN5TnYtZda8mjJropSZLKvmSpnhucWy0r3KNhGnt6LMWmpl1kzhJ8tMntOnljJrWU2ZqTr19i6q3Evt70S9jfsG68Tvug5+vpkyimVzva3geivKXpajLHuZf3m/Bso5Q0VaXdmrvxd4lWXfQklbajrMcItlNkuQz5r6Eq2U/LSF5ycz3ky5RzL5aavkpw08PxXtBp5nRRsuH1bXAfXysmqvlVUrraxaKue0U8qvvYHyiyj3lbqlLO9Xn+f6PNfnuT7P9Xmuz3N9nuvzXJ/n+jzX57k+z/V5rs9zfZ7r81yf5/o81+e5Ps/1ea7Pc32e6/NcUJ/n+jzX5zmlPPP8yPlemddmynmtQ5JH+VsbJY9yHWlUpHze/DclvwbWXax/s1kr5X4FSj7UdRfynDaRynP/Us5rpZVvM69yrYVa5gbW8awvc3kvqVvK6hqZFkreZH5aG8pPCy0/LRKUj/w7LUGZpSu/SQ5Nld9kvVHXi8o61Vz5Tfqk6gvtlTKRv0UT5E/Nl0xl3VDXM8n1HWpdlmsF2yq/yTVe7ZTfJM/2il6b65OB/OQkyo9uh4hSvo20c9Q1Z/KcrSJVy1I9zKzrrFhnJOuIvsYrquRRntO5hjyqumQ+E63xknzbmOUWV+O+HkdVbvKcrrWUf1sDeTTDvcJf2ikcC7xK31C5y3N6Km3ITuJv1b/V9qhPgv/LI6LJBcrfbZWy7IDnvH4d0mZKPguU+6j33lzJK+jeTL23XFMu7yN/b6D83TtSea48T5aHLGuZd243GYvVvOvXNdOua6mc0z4B/wIPy7+Dlp8OWp65TXZR6pmsR6bW0SXqK6txV5aRPEfds2BgrShT2wOpW+/XqX0/vc1Q18PLcwbXELPUfrfaX9DbcTOxrYJvK41vomeVDf1YJY86Z7XfvVTJt4fOdzyWVdO+Nj/71xqr12j61L07EUVdQzSfWKapvRvr9abD9caY2leVR03tiuTG61EHpYz5RVJPhlLGBtbgxxLtL2im5U+NK+i2p7miV33Wkb+rexs6Kufqz0SyvNT+mtq/9kT5yueeJgq3ZPS1VM5pmqBcCry6eWZQ9zi2VPJhqi+mx6p0pSzN3bvCR5sY0mvAj9b7vrofiR81+b7kJn0/TblI6slQytjAvs1YovGallr+1HENtO+3UvRGvI3H2tT+wi7KufqeEFle6r4aGTPkuVFv49iSnqQ+tT/SIkG5FHjYcmmp5Uff38JttZ2SD1N7NquLQeo+RBPxT+2XyKMmX2qRID/AuhprqeRHvZeJvdTym47JclfrqLpnXM9jBi6PMbWfq+6z62f0vpkb7fHPSJAPdZ/9UOXcgUrZyPZKHZPU90Y3S3CeHE9MFEfUWFYA4Vs1FsgY2UrhIfnKc0YpfBcoecPbgpWptogI3aoNPG/jZ8IML7G95DnjRZromTCagHuBV7XvJtswtU2TZdBGyVMBpAwq7NNa4aHmpY3yuzxnjxr4qbp0Ho0T6JqSpC7Pq9qfVctQn0eoKQ9R5Zy2Sn7Ua1TO8pwZ2j30fLat5n5NEugqTFKX51Vtx1XO8tq2ynVqf0NtQ9RxhnbK+QXi71iwo8r8nvRvfY5F5T9HpLys5ifIf8Nq8q+2X+qeVBMxS22HWiXIr/nYtPGcWYa3cdypKTYlmqtcopWpejRLcK3aHs5W+MqjwDMz7hNJkDfpu141YzwRbYxHHfeR9aZNgvPSFd4FHvYZrZEhvSbel+H3HTNqLNbHfaSeDKWM8e9hqnj2k/15GXubavnj91bHZ0D3rvJsIeOeOs/MjwbK3+q4T3Xvr5B5V9/5Ic/l5as+z8o0GX1qPGuSoFwKPGy56O800d/FUVfjPvp4f2OlLOW9TcyXV4lX4khmHEXND/IdAS2V/Kj3MuCTTF3DkAx3tY6mJ8hjGMa5miXID9A+6/sbTRPcy8Q75tTnRNUfexktc7Y+VjdR7lfgbbyepoFyTlw5l4m/1fULUeU31Z+lPvm32kdopF3brJprZb7k+fKZuYl2faL2J03hIvWanndooOVF7fvJc/qLtLZ3Kuk8GiXQNTBJXZ5XtT1Sx59kXtX2TW8/12nnqj7bsobrVL38aKJdo8ZDdbxJHQuRKb59qPAFfXw0Tcuras9G2jnquIM8Z5xIq7OJXk9rGueoqT7JcybUcr/qxuQbJdBV25iCPo8t65M6Vq6vlYl6G787sqb6VNN16r34oT8bqm2XmqeW2n3U51VY+8FiMTVPav7V/CV6H1pdvUdTr7c11W01pslzSkVa3XNrTe3ZQQpfD813E65XkDxlqo/zNlD+v59ynloX8c+nzNC6BBYz2VdXnxP0Mva8qn1ByS3Rc6/Uo4651fV7gtW2KwzvCd5GOTeZ9wTr85a8fPV4nZ6kvjC+P9jsutuKfDTR8qH3W83cu8JHmxrSa2Kswu8aWnUsXl/vkGgtvoH3N8Zqmt9Q/cP0XJH0/TYab3V+J1M5V1+brvfX1Lkcea7al1Hng5PR19LbeE+IWi4FHrZcqltrqa7v30HJh6n1DtXFIHW9g6k5fz/rHVomyI+p9Q7qvQz45HruLbzkuat1tIXyt57HDFweY+r4vv5sZu6+VZ915XoHPR/q/P9w5dwh4u/q1jsk2h+4QrkmUeyo63VgidYIjFHyu0jJmwG7l+nrLzK8jdcWqPmV84iJbCTPkZ8Kqm6Ng869wKvaX5P1Tr2nLAN1LrkAUwZMbS8aaHlR1wHIcybXwE/VpfNIT6BrWpK6PK9qH1Zdqyfz2iaJPKhjk+oeJPUalbM8Z5Z2Xz2f7aq5X9MEuoqT1OV5VdtulbPMq7pmQe1jqO2G2qdW92oXiL9jwY4q+7mkf7fX8qzy31ukvKwWJsh/w2ryr7ZZap0yEbPUtqd1gvzWQWzaaJ1ohrdx3KkpNqmxVZ6zVOOkHs0SXKu3gRvGZjxs/0C2VWnKfVco+dLnDapbu9dZyas8ClB5jbNsdTwrLUH5yTzVNJ5VpW1Wxrg6KJfC11zEK77FgN/Dw5ihNRfr+0bSjvq3RNR1f+qcAOjeVfZFyJimry9o4G28Hz3R+IKsE+o3S9S5s+qu0/eZtVTOMfptsFrWB6jzlPJvHqPlN8/U9gZfL5jvtTh18b0nuX5ldmn5GDZx4ZjMsaXzi0oXL5kzd1ENX3xqo+U+4lVlsk45R402UeVv9fcGCX5blyBVI5C6C159I4D8LarpViOaWiNUq8ujwINFrxojb1S9cXrlvRNFZCOjC/GKL2PgV8pVfHUIH7Wr7mRMtEpejTAmePG6o74RIy3BrE6aNqvTVLlmUWHxPgMXz146v3RB+RLVaWTGdUdSnSaqpHrXQj2vQMi6LjUEJXIW9ZNL6rCWqrdA/B0LcsRjVT51qW9NXZ93WYgizZC8pTNpv2/4TKVS+Pz3DZ+qVH4P0uVRyzBN+W3DFLjy24ZmX+kuba3c1kB3KdeQ4+XXd5c8byvlXJe6S+o2CvmZV8NLDvNTXXJoqqy4fvl51NIF+y4tXVpa8YnMYUsXFJfPXbhgcOG8eWqPSF/3WFNvSTc4P2rrLfFD7U+q1zZO8JvsSWVUI6v5U4OcuoZOr9CJGo/q1to10n7zvI3XVqi/qTwjCf6OelXHxbwEPPTfmiW4T5sEvyUqP73yqfOtyHW9XIc6nqDnrYGXuLcTweeFqXzTvI3LoE2C8vk/8OlwK1E9BgA=","debug_symbols":"7X3tjiS7cey7nN+CUCSTX3qVi4sL2ZYvBAhHhiUbMAS9uys5Wz0tLXt6d7qSFTmZv7zHqpoIJpvMaDYz42+//Nsf/uW//v//++Ov//7nv/zyu//zt1/+9Od//f1f//jnX/f/+tsvIY//31/+4/e/8n/+5a+//8+//vK77Te//OHXf9v/799/88u///FPf/jld7HQ33/z3XOxlf7t0dh6uD0dttnTlFL69jTRtj15urbQvj1dW4vvTCL9/f/+5pdQtBKvC4lT3G7E26vE2yvEKfV8o5Leibc0/naX+9txm/3tEMoxpyH09gQh9XgA7MF4fzZPnu0tHH94C+kuipNnQ+rleHj/lN0/zMyDWuZRLfOkljmpZZ7VMi9qmVe1zJta5l0r86Q2hya1OTSpzaFJbQ5NanNoUptDk9ocmtTm0KQ2hya1OZTU5lBSm0NJbQ4ltTmU1OZQUptDSW0OJbU5lNTmUFKbQ7PaHJrV5tCsNodmtTk0q82hWW0OzWpzaFabQ7PaHJrV5tCiNocWtTm0qM2hRW0OLWpzaFGbQ4vaHFrU5tCiNoeWE3Io0XEfimpYxrxuapkHtcyjWuZJLXNSyzyrZV7UMq9qmTe1zNXm0KY2hza1ObSpzaFNbQ5tanNoU5tDm9oc2tTm0KY2hza1ObSrzaFdbQ7tanNoV5tDu9oc2tXm0K42h3a1ObSrzaFdbQ4Nm9okur+vl7raNBo2tXk0bGoTadjUZtKwqU2lYVObS8OmNpmGTW82DXqzadCbTYPebBr0ZtOgN5sGvdk06M2mQW82DSdk07YdD7e0PaXe36nfPfytGVHoUHTOaDJ0Jp2ARSdi0ZlnnBhvb8VSntDZgenb07HdLa2QZoRqPv50a/X2LC/f7x990oXrQZsfJeTzavL76U68fRYo3dMfhAoaoYpGqKER6mCEHjTHuZBQQCMU0QglNEKERmj5Tt1LvvFp/Ts+BYzP+n06bzdCudDHiXhXgLeHY7wjQmVGJNORtmO+/1Ix+56QqB3fExL1u2qBGY8U+vENZP9nvX94RLF5FE+IYvcovh5F2jyKJ0QxeBR/JIqxH0NM6f4r6rcoRo/iCVFMHsUfiWKK+RZF2j5+OLay3eJR45OH03Z7OIXv9wry+bl4fkq4zc+dxp0+XPPtaOee8dvpMGWfyq8ylcWn8qtMpX9JvXoq+82ug2J9ZSr9m/KXmUr/un7xVNLt98GY70f4JkuzHwRgz48fMWDPjx9eYM+PH4tcPD8lHj+97ZEOHz8cWr7dkmmVvptM8sn8OpPppyiaJrP321/eQnvhG0H2Ixeb8+7nMzbn3Q9zFM173OIt0luOr8y7n/yYnPfiJ0oC834rV4l9e7IbP/khuviJ0tXzc9ZPXsUPn77MVPo51dVTedZPXsVPqb7MVPoZ1cVT+fHpfvGzJOz58TMf7Pnxsxns+fEzlIvn58QfvKofjHyhyfRTFE2TedqvGdWPXGzOu5/P2Jx38nnXM+/n/YpV/eTH5rz7idL5897rrXJ52+pruttPlLDnx0+ULp6f86SPHz59lalsfvT0ZabSD56+zFT6WdK1U3ne14bmx0NfZirJp/KHpvL2y+U+k/Tsm/95jZSan8xcPT9nXXpsftjyZabSz2W+zFT6Ec7VU3nW/dXmRzhfZSq7H+FcPJUfX9Xrfi6DPT9+2II9P36Cgj0/5PNz7fyceHu1+xnKF5pMP0XRNJmn/XzU/cjF5rz7+YzNeffDHEXzftoPknHzkx+b8+4nSgLzflojpX2ifX4unp+TfvKKmx8+fZmpJJ/Ki6fypJ+89vTpU/lVptLPqC6eyg9P9+PmZ0nY8+NnPtjz42cz0PMT/Azl4vk57wevGPxg5AtNpp+iaJrMs37NiMGPXGzOO/m8m5x3P8xRNO/n/YoV/OTH5rz7idL5835eo54Y/EQJe378ROni+TlN+kQ/fPoyU+lHT19mKv3g6ctMpZ8lXTuV531tiORT+VWmcv2JT9mOW2ShlKxkKkM/SO///O6WaSwexROiWD2KJ0SxeRRPiGL3KP5IFGO/Za0Utn+OYto8iidEMXgUf0huiZm0f1xjkqLPz8Xzc1ZhQko+lV9lKsmn8qtMpX9JvXoqz6oxSf5N+ctMpX9dv3gqP75On/wgAHt+/IgBen7IDy+w58ePRS6enxMrTMjPUL7QZPopiqbJPO2KB5HPu8l59/MZm/PuhzmK5v28S0PkJz82591PlATm/bxmh+QnSlfPz1k/eWU/fPoyU+nnVFdP5Vk/eWU/pfoyU+lnVBdP5cen+5l8fqDnx898sOfHz2aw58fPUC6enxN/8Mp+MPKFJtNPUTRN5mm/ZhQ/crE5734+Y3Pe/TBH0byf9ytW8ZMfm/NOPu+nz/uJzfSKnyhhz4+fKF08P+dJHz98+jJT6UdPX2Yq/eDpq0xl9bOka6fyvK8N1Y+HvsxU+onPj02lmEn7x/dXq5/MXD0/Z116rORT+VWm0s9lvsxU+hHO1VN51v3V6kc4X2Yq/Qjn4qn8+Kpe9XMZ6PlpftiCPT9+goI9P34scvH8nHh7tfkZyheaTPLJVDSZp/181PzIxea8+/mMzXn3wxxF837eD5LNT35szrufKAnM+3mNlLqfKF09P2f95NX98OnLTKWfU109lWf95NX9lOrLTCX5VF47lR+f7nc/S8KeHz/zwZ4fP5vBnh8/Q7l4fk78wav7wciXmcz9iMUnU9FknvVrRtr8yMXmvPv5jM1598McRfN+2q9YaSOfd5Pz7idK58/7eY160uYnStjz4ydKF8/PedLHD5++zFT60dNXmcrgB09fZir9LOnaqTzva0Pw46EvM5UXnPjcdpRQA91P5SBEaIQyGqH1XwpruP3tSvE7QhWNUEMjtF6R1v7+xTV+RyhuaITWq4Na4zuh9B2hiEZo/U7dtyPZ7TKwfEeI0AhlNEIFjdDynTqm9F6eQU+EG/VD5OXtjsZU1fTb6XrYwvYPD4+RNjMj7VZGmrYvM9J9fLevKFuaDDXYGWq0M9T0hZbq+0hz/n6k9CVH2iZzmqFHmvOhKUvenn18dwV6Ix3uJrW/jbSYGekFMim8j7Q+G+mNR75bemk60FvFXmjtn89+UrMxzG5imLTZGGawMcxoY5jJxjDJxjCzjWEWG8O0oYLIhgoiGyoo21BB2YYKyjZUULahgjLZGKYNFZRtqKBsQwVlGyoo21BBxYYKKjZUULGhgooNFVTIxjBtqKBiQwUVGyqo2FBBxYYKqjZUULWhgqoNFVRtqKD1rsLXDNOGCqo2VFC1oYKqDRVUbaigZkMFNRsqqNlQQc2GClrvCnjNMG2ooGZDBTUbKqjZUEHNhgrqNlRQt6GCug0V1G2ooPW+M9cM04YK6jZUULehgjq2CqrhqBivsd0Pc3DHljYfcacNW6+0eHxm7o1Z08/XWtKGrVhOHCi2ZjlxoNiq5cSBkpWBYiuXEweKrV1OHCi2ejlxoNj65cSBYoud8wYarCijYEUZBSvKKFhRRuubuF41UCvKKFhRRsGKMgpWlFGwooyiFWUUrSijaEUZRSvKaH3T5KsGakUZRSvKKFpRRtGKMopWlFGyooySFWWUrCijZEUZXdEy+pqBWlFGyYoyAu8XfeJArSgj8J7R5w0UvGv0iQO1oozAO0efOFArygi8e/SJA7WijMA7SJ84UCvKCLyL9IkDtaKMwDtJnzhQK8oIvJv0iQO1oozAO0qfOFArygi8q/SJA7WijMA7S584UCvKCLy79IkDtaKMwDtMnzhQK8oIvMv0iQO1oozAO02fOFArygi82/SJA7WijMA7Tp84UCvKCLzr9IkDtaKMwDtPnzhQK8oIvPv0iQO1oozAO1CfOFArygi8C/WJA7WijMA7UZ84UCvKCLwb9YkDtaKMwDtSnzhQK8oIvCv1iQO1oozAO1OfOFArygi8O/WJA7WijMA7VJ84UCvKCLxL9YkDtaKMwDtVnzhQI8ooW+mBna30wM5WemBnKz2w80ZWBmpEGWUrPbCzlR7Y2UoP7GylB3a20gM7W+mBna30wM5WemBnKz2ws5Ue2NlKD+xspQd2ttIDO1vpgZ2t9MDOVnpgZys9sLOVHtjZSg/sbKUHdrbSAztb6YGdrfTAzlZ6YGcrPbCzlR7Y2UoP7GylB3a20gM7W+mBna30wM5WemBnKz2ws5Ue2NlKD+xspQd2ttIDO1vpgZ2t9MDOVnpgZys9sLOVHtjZSg/sbKUHdrbSAztb6YGdrfTAzlZ6YGcrPbCzlR7Y2UoP7GylB3a20gM7W+mBna30wM5WemBnKz2ws5Ue2NlKD+xspQd2ttIDO1vpgZ2t9MDOVnpgZys9sLOVHtjZSg/sbKUHdrbSAztb6YGdrfTAzlZ6YGcrPbCzlR7Y2UoP7GylB3a20gM7W+mBna30wM5WemBnKz2ws5Ue2NlKD+xspQd2ttIDO1vpgZ2t9MDOVnpgZys9sLOVHtjZSg/sbKUHdrbSAztb6YFdrPTALlZ6YJcLemDH96f/aaCD0BkKpqV0I5TzE0K1HA/XfveXc58829NBo5f+5Nma2+3v0vuz8W2YZGOYD9RLOz4CIW3tyTDDlo9Pe9jKP1IfGGUBRl2A8SBdtvQIY7w1zz2plOMtSs8+SPse0bfb526j92lsafL4vml8e7jE909HLZNHKedvj+Y77mGbsagt3D5JrcW7j9LbSB+0GRYd6W2ranH7eKShhBuPQv3JWHt7/yjc7Zj7qpn85dTvRpj+eYk9aEpsPizRwzILS/KwzMJCHpZZWLKHZRaW4mGZhaV6WGZhaR6WWVi6h2USlugqdxoWV7nTsLjKnYbFVe40LORhmYXFVe40LK5yp2FxlTsNi6vcaVhc5c7CklzlTsPiKncaFle507C4yp2GhTwss7C4yp2GxVXuNCyucqdhcZU7DYur3FlYyFXuNCyucqdhcZU7DYur3GlYyMMyC4ur3GlYXOVOw+IqdxoWV7nTsLjKnYUlu8qdhsVV7jQsrnKnYXGVOw0LeVhmYXGVOw2Lq9xpWFzlTsPiKncaFnCVW2886ratC0sBV7lXhQVc5V4VFnCVe1VYwFXuVWEhD8ssLOAq96qwgKvcq8ICrnKvCgu4yr0qLK5yZ2GprnKnYXGVOw2Lq9xpWFzlTsNCHpZZWFzlTsPiKncaFle507C4yp2GxVXuLCzNVe40LK5yp2FxlTsNi6vcaVjIwzILi6vcaVhc5U7D4ip3GhZXudOwuMqdhaW7yp2GxVXuNCyucqdhcZU7DQt5WGZhcZU7DYur3GlYXOVOw+IqdxoWV7mTsNTNVe40LK5yp2FxlTsNi6vcaVjIwzILi6vcaVhc5U7D4ip3GhZslVtju4Wl0MKwYKvcq8IC7n12WViwVe5lYcFWuZeFBVvlXhYW8rDMwoKtci8LC7bKvSws2Cr3srC4yp2GxVXuLCzg3meXhcVV7jQsrnKnYXGVOw0LeVhmYXGVOw2Lq9xpWFzlTsPiKncaFle5s7CAe59dFhZXudOwuMqdhsVV7jQs5GGZhcVV7jQsrnKnYXGVOw2Lq9xpWFzlzsIC7n12WVhc5U7D4ip3GhZXudOwkIdlFhZXudOwuMqdhsVV7jQsrnKnYXGVOwsLuPfZZWFxlTsNi6vcaVhc5U7DQh6WWVhc5U7D4ip3GhZwlfv+h9vdSOXDAq5yrwoLuMq9KCzg3meXhQVc5V4VFnCVe1VYwFXuVWEhD8ssLOAq96qwgKvcq8LiKncaFle507C4yp2FBdz77LKwuMqdhsVV7jQsrnKnYSEPyywsrnKnYXGVOw2Lq9xpWFzlTsPiKncWFnDvs8vC4ip3GhZXudOwuMqdhoU8LLOwuMqdhsVV7jQsrnKnYXGVOw2Lq9xZWMC9zy4Li6vcaVhc5U7D4ip3GhbysMzC4ip3GhZXudOwuMqdhsVV7jQsrnInYWng3meXhcVV7jQsrnKnYXGVOw0LeVhmYXGVOw0Ltsptqd/CUuLCsGCr3MvCgq1yLwsLtsq9Kizg3meXhQVb5V4WFmyVe1lYsFXuZWEhD8ssLNgq97KwuMqdhsVV7jQsrnKnYXGVOwsLuPfZZWFxlTsNi6vcaVhc5U7DQh6WWVhc5U7D4ip3GhZXudOwuMqdhsVV7iws4N5nl4XFVe40LK5yp2FxlTsNC3lYZmFxlTsNi6vcaVhc5U7D4ip3GhZXubOwgHufXRYWV7nTsLjKnYbFVe40LORhmYXFVe40LK5yp2FxlTsNi6vcaVhc5c7CAu59dllYXOVOw+IqdxoWV7nTsJCHZRYWV7nTsLjKnYbFVe40LK5yp2FxlTsLC7j32WVhcZU7DYur3GlYXOVOw0IelllYXOVOw+IqdxoWV7nTsLjKnYbFVe4sLODeZ63H4w/30BeGBVzlXhUWcJV7VVjAVe5VYSEPyyws4Cr3qrCAq9yrwgKucq8KC7jKvSos4Cr3orCAe59dFhZXudOwuMqdhsVV7jQs5GGZhcVV7jQsrnKnYXGVOw2Lq9xpWFzlzsIC7n12WVhc5U7D4ip3GhZXudOwkIdlFhZXudOwuMqdhsVV7jQsrnKnYXGVOwlLB/c+uywsrnKnYXGVOw2Lq9xpWMjDMguLq9xpWFzlTsPiKncaFle507C4yp2FBd377KqwuMqdhsVV7jQsrnKnYSEPyywsrnKnYXGVOw2Lq9xpWFzlTsMCrXJjvFWfxVjK07D097BsdyOlMdQL/MxaPh7usd8PdfBZLxn3R9Lt6btqvmnwczzCmXO+PZrC7O+W2weytX/+iF3gDHbNOJORcZKRcWYj4yxGxlmNjLMZGWe3Mc4LHKquGacRPZSM6KFkRA9d4PJ0zTiN6KFkRA8lI3ooGdFDyYgeIiN6iIzoITKih8iIHrrAD+iacRrRQwSuh1o8yLcan4wz1Hr7u+E9KPvh/BgpuCI6caTgmujEkYKrovNGmsF10YkjBVdGJ44UXBudOFJwdXTiSMnMSMEV0okjNaORshmNlM1opGxGIxUzGqmY0UjFjEYqZjTSBT4kV43UjEYqZjRSMaORihmNVMxopGpGI1UzGqma0UjVjEa6wMXiqpGa0UjVjEaqZjRSNaORqhmN1MxopGZGIzUzGqmZ0UgXeCBcNVIzGqmZ0UjNjEZqZjRSM6ORuhmN1M1opG5GI3UzGumCDvpXjdSMRupmNFI3o5G6GY3UrWiksG1WRNI+VCsqaR+qFZm0D9WKTtqHSnaGakUp7UO1IpX2oVrRSvtQrYilfah21FKwo5aCHbUU7KilYEctXdDM+7Kh2lFLwY5aCnbUUrCjloIdtRTtqCX0XtpnDtWOWkLvqH3mUMnOUO2oJfTW2mcO1Y5aQm+wfeZQ7agl9DbbZw7VjlpCb7Z95lDtqCX0lttnDtWOWkJvvH3mUO2oJfT222cO1Y5aQm/CfeZQ7agl9FbcZw7VjlpCb8h95lDtqCUzbbn3odpRS2Yac+9DtaOWzLTm3odqRy2Zac69D9WOWjLTnnsfqh21ZKZB9z5UO2rJTIvufah21JKZJt37UO2oJTNtuveh2lFLZhp170O1o5bMtOreh2pHLZlp1r0P1Y5aMtOuex+qHbVkpmH3PlQ7aslMy+59qHbUkpmm3ftQ7aglM22796HaUUtmGnfvQ7Wjlsy07t6HakctmWnevQ/Vjloy0757H6odtWSmgfc+VDtqyUwL732oV6ilmm9P93I/1DdKF6iaFNvxdGr14+jHHOnbw7Fw0L89HLYZk9rC8adra++zFSN9G26yNVyyNdxsa7jF1nCrreGeoXZioPCekWr7eLglbccISorp44fT9p5F93+neP/42wi68hGEB52zS7ql+Xr31nwEJffj6VLSHaX4DSOcgFHoGEhpVO4xJp/TElu9fVBzoO+HHZdTyqm8U2pPlmVK2yFqUqL3j0SIebbSbvFvW39/th6DTZYGS5YGmy0NtlgabLU02GZpsN3QYMNmabABfLBEhyBP1OOzwd5Oelp413SRZqzjfh598NgPYd7/cv9MGNG1mZIwoqs+JWEkD+MZYURXqkrCiK6BlYQRXV0rCSO6blcSRvRvBDrCGNG/aygJo91vMaGEWxjvfrDgML6Fxu43k6ehsftt42loyEPzKDR2vxU8DY1dpf80NHbV+9PQ2FXkT0NjV2U/C02yq5x3vXzwiHdXF95DY1cNPw2NXTX8NDR21fDT0JCH5lFo7Krhp6Gxq4afhsauGn4aGrtq+Glo7KrhZ6Ehw2q4tFtoWpuExrAafhYaw2r4WWgMq+FnoSEPzaPQGFbDz0JjWA0/C41hNfwsNIbV8LPQGFbDT0KTL1DD/b3KsG3549DEVm9XuPd/U71//G0EAX4E5X0EbVKtliP6CFq8fZpbn40goY+gp/g+gpq+HwGBj6Bv/baSeyjl+xFk9BGEdnu8R2rfj6Cgj6CV26eo99S/H0FFH0Gvt0yzbXWykteriHZ7ev93Dd9T6nCUyvqsua/5G6Ue68fz3PqRcXrc3pN+njdYSXcNVu4lQp+JjydV/6EED82j0ETs0PR0bCU99yeh2bea8q5C6S409VOhSdihuWu6sd1tshwb5p/yb+cXuuqtm0O9D2l4f61+7rX2udf6p16bXyB5/lr43Gvxc69NP0JtOybuH25D371Gn3stf+618rnX6udea597rX/qtfkPK63047W73if3r4XPvRY/91r63Gv0udfy514rn3tt/im59Uppd+3T7l9rn3utf+q1+YHD89fC516Ln3stfe616aekh2Ph9DBdOPNvbs9fK597rX7utfa51/qnXpsL7OevhSevxem8zYXZ89fS516bf0rSsbo7TVf33Fnp+Wvlc6/Vz73WPvda/9Rrc1eX56/NPyXvXb3u26rxe7/5mYcPkLgCJK0AoRUgeQVIWQFSV4C0FSB9Acjca+BskBUrvq1Y8W3Fim8rVnxbseLbihXfVqz4tmLFtxUrvq9Y8X3Fiu8rVnxfseL7ihXfV6z4vmLF9xUrvq9Y8X3Fin/QhvZ0lLAEJS5BSUtQaAlKXoJSlqDUJShtCcqStR+WrP2wZO2HJWs/LFn7YcnaD0vWfliy9sOStR+WrP2wZO3HJWs/Lln7ccnaj0vWflyy9uOStR+XrP24ZO3HJWs/Lln7acnaT0vWflqy9tOStZ+WrP20ZO2nJWs/LVn7acnaT0vWPi1Z+7Rk7dOStU9L1j4tWfu0ZO3TkrVPS9Y+LVn7tGTt5yVrPy9Z+3nJ2s9L1n5esvbzkrWfl6z9vGTt5yVrPy9Z+2XJ2i9L1n5ZsvbLkrVflqz9smTtlyVrvyxZ+2XJ2i9L1n5dsvaX3N0LSy7vhSW398KS63thyf29sOQCX1hygy8sucIXltzhC0su8YUlt/jCkmt8Yck9vrDkIl9YcpMvLLnKF5bc5QtLLvOFJbf5wpLrfGHJfb6w5EJfWHKjLyy50heW3OkLSy71hSW3+sKSa31hyb2+uOReX1xyry8uudcXl9zrixstQclLUMoSlLoEpS1BWbL2l9zri0vu9cUl9/riknt9ccm9vrjkXl9ccq8vLrnXF5fc64tL7vXFJff64pJ7fXHJvb645F5fXHKvLy651xeX3OuLS+71xSX3+uKSe31xyb2+uOReX1xyry8uudcXl9zri0vu9cUl9/riknt9ccm9vrjkXl9ccq8vLrnXF5fc64tL7vXFJff64gl34fJ29GbJ4b03y/4d/x2kLQA54fZYjjeQlOcgcQVIWgFCK0DyCpCfTSy3F+snXzzhR/7nn+cTfuP/AZC8AqSsAFmxkZ3w+36mo910znEO0heAnPDr/g+AhBUgcQXICSs+tRtImoPQCpC8AqSsAKkrQNoKkL4gTZ7wm/4PgKwQYX2FCOsrRNgJv+f/AMgKEXbCr/k/AFJXgLQVIAtWfNq2FSBhBUhcAZJWgNAKkLwCpKwAqStA2gqQFSs+rFjxYcWKDytWfFix4sOKFR9WrPiwYsWHFSs+rFjxYcWKjytWfFyx4uOKFR9XrPi4YsXHFSs+rljxUXrFU/jt3MMt082KKJd3t6AYJhAtH2dErYWPHw2h3bjHePeVPx50GhadjkVnrmIu5BPA+EQwPgmMD4HxyWB8ChgfsN05gG3PAWx/jmD7cwTbnyPY/hzB9ucItj9HsP05Cu7PB0SVh3h9F+1b+PZsT9vLUe1YfNIGxieA8YlgfBIYHwLjk8H4FDA+FYwP2P6cwPZnAtufCWx/JrD9mcD2ZwLbnwlsfyaw/ZkE9+cDoslDdHGIvMlDBHmIKA+R5CFIHiLLQxR5CPnVXV7/0IZtS8fDW4gzkLgC5PUpD5He99syOx8ofcFI6rYCZMXEVzoBpPQbSCszkLwCpKwAqStA2gqQvgCknbFOSngHqTOQsAIkrgBJK0BoBUheAVJWgNQVIG0FSF8A0k9Y8SHQ8XCgmSTqYQVIXAGSVoDQCpC8AqSsAKkrQNoKkBNWfKjxBtLaBOSBY/PpKGEJCi34ivLA5fh0lLIEpa5AOeHu3o+ghCUocQlKWoIiv17S/JZtvb1V65NDWtqOSlmK+eNH222H6Nv77eD9NPfnj37T/DquAt5dKe/5JqGBeNBKPGolnrQSJ63Es1biRStxrXkzaE2cQWvmjFozZ9SaOaPWzBm1Zs6oNXNGrZkzimXOA6BKA7ycifLx+ytlmgF0YYC0SQMEaYAoDfDyjtaORUMtzQBIGiBLAxRpgFdXct6OE6e8tRlAkwbowgC0SQMEaYBXP6Y5Ho/mOAUo0gCvTnJJx42JkuMEIG/SANIhyi+v5NvZcc51BtCkAbowQNmkAYI0QJQGSNIAJA2QpQGKNMCJK7mUGUCTBnh9Jd82uzoDqC+v5Nt2/QAgSANEaYBXV3K5XWEtW58BkDRAlgYo0gBVGuDlldzzARC2GUAXBmibNECQBojSAEkagKQBsjRAkQaoJwLMVnJr0gCvr+Tj1luJM4D+8kq+nWs+AAjSAFEa4OWc/ORbZidpgCwNUKQBqjRAkwaQPgx5cLP0LIT84GZZKOl2r7bkJz+YBNqO/S5QCBOMB1cXfw6E2g2kPvsJ57SeQfnRzSQt5KNm8kkzedJMPmsmXzSTr5rJN83ku2LyUXOGjZozbNScYaPmDBs1Z9ioOcNGzRk2as6wUXOGjSgZ9hufhJI0Dz6L8+B5Tb7yoztqWsgnzeRJM/msmXzRTL5qJt80k++KydOmmbzmDEuaMyxpzrCkOcOS5gxLmjMsac6wpDnDkuYMm1Ey7MEHJWkefFDy4MEHJbUdfFCy1cEHJQEdfFByysEHJU0cfFB2/oMPymb+jU8B25/L4vX+pKNyflT4cSmjxZ/pJx298qOyhitjVCMcowTHqKxm9GF/6fyosOFSRg2OUUdj1DY4RgGO0fL96MPOzvlR+celjAiOUYZjVOAYVThGDY5RR2PUNzhGAY7R6j374wbg+VGhz6WMCI5RhmNU4BhVOEYNjlFHY/SoM/+llFbv2h/3/B+UIh6lhEepoB0iPbIeuJQS3FFb2DocpdWFeT9CKeFRIjxKGY8S1r5UNp12FTtvlV23d94qm27vvHXaVTBxlU23mbjKpttMXGXTbSZOWomrbLrNxFXaVTBxrXlTp10FE9eaOXXaVTBxrZlTp10FE9eaOXXaVTBxrZlT1q6CAao0gKhdBQN0YQBZuwoGCNIAURpA1K6CAUgaIEsDFGkAUbsKBmjSAF0YQNauggGCNICoXQUDFGkA0Q6NO4CsXQUDSIdI1q6CAZo0QBcGkLWrYIAgDRClAZI0AEkDZGmAIg0galfBAE0aQNSugn+ZErWrYIAgDRClAUTtKhiApAGyNECRBqjSAKJ2FQzQhQFk7SoYIEgDRGmAJA1A0gBZGqBIA4jaVTBAkwYQtavg2wuidhUMEKQBojSAqF0FA5A0QJYGKNIAVRqgSQNIH4YI21WULm9XsWPotatg8mqbaTN5tc20mbzaZtpMnjSTV9tMm8mrbabN5NU202byaptpM3m1dhU7eb12FUxec4bVa1fB5DVnWL12FUxec4bVa1fB5DVnWL12FUweya5i5wNlV8F81DbTZvJqm2kzebXNtJk8aSavtpk2k1fbTJvJq22mzeTVNtNm8mqbae/k9dpVMHnNGVavXQWT15xh9dpVMHnNGVavXQWT15xh9dpVMHnNGRbKroL5INlVMB8kuwrmg2RXwXxQstXBB8mugvkg2VUwHyS7CuaDZFfBfJDsKnY+UHYVzGfxen/S1J8ZYdlVMCOsHnp87wrLroIZYdlVMCMsuwpmhGVXwYyw7CqYEZZdBTPCsqvYGYHZVTAjLLsKZoRlV8GMsOwqmBHBMcKyq2BGWHYVzAjLroIZYdlVMCMsu4qdEZhdBTPCsqtgRlh2FcwIy66CGREcIyy7CmaEZVfBjLDsKpgRll0FM8KyqxiVR1h2FYMSll3FoIRlVzEoYdlVDEpgbeE7nF3FoAR31IZmVzGKCrHsKgYlLLuKQYnwKGHZVQxKWPtSLfJFxTuG3qJiJq+25InJqy15YvJqS56YPGkmr7bkicmrLXli8mpLnpi82pInJq+2qHgnr7eomMlrzrB6i4qZvOYMq7eomMlrzrB6i4qZvOYMq7eomMkjFRXvfKCKipmP2pInJq+25InJqy15YvKkmbzakicmr7bkicmrLXli8mpLnpi82pKnnbzeomImrznD6i0qZvKaM6zeomImrznD6i0qZvKaM6zeomImrznDQhUVMx+komLmg1RUzHyQioqZD0q2OvggFRUzH6SiYuaDVFTMfJCKipkPUlHxzgeqqJj5LF7vT0ovmRFWUTEzwrrpyPeusIqKmRFWUTEzwioqZkZYRcXMCKuomBlhFRUzI6yi4p0RWFExM8IqKmZGWEXFzAirqJgZERwjrKJiZoRVVMyMsIqKmRFWUTEzwioq3hmBFRUzI6yiYmaEVVTMjLCKipkRwTHCKipmRlhFxcwIq6iYGWEVFTMjrKLiUXmEVVQ8KGEVFQ9KWEXFgxJWUfGgBFe8h1ZUPCjBHbWhFRWPokKsouJBCauoeFAiPEpYRcWDEta+1Oi3r7pF03awofiETLtt232j90fjz//0vvNuSnl3pbzDppV40Eo8aiWetBInrcSzVuJFK3GteTNoTZxBa+aMWjNn1Jo5o9bMGbVmzqg1c0atmTOKZc4DoEoDvJyJ8nEFiDLNALowQNqkAYI0QJQGeHlHa8eioZZmACQNkKUBijTAqys5b/Xbo3lrM4AmDdCFAWiTBgjSAK9+THM8Hs1xClCkAV6d5JKOa2olxwlA3qQBpEOUX17JdPsU5ToDaNIAXRigbNIAQRogSgMkaQCSBsjSAEUa4MSVXMoMoEkDvL6Sb5tdnQHUl1fybbt+ABCkAaI0wKsrudyqKMrWZwAkDZClAYo0QJUGeHkl96PpcwnbDKALA7RNGiBIA0RpgCQNQNIAWRqgSAPUEwFmK7k1aYDXV/JxEaXEGUB/eSXfzjUfAARpgCgN8HJOfvIts5M0QJYGKNIAVRqgSQNIH4Y8uG59FkInebuKTortKjoptqvopNiuopNiu4pOiu0qOim2q+ik2K6ik2K7ik6K7So6Kbar6KTYrqKTYruKTortKjoptqvopNiuopNiu4pOiu0qOim2q+ik2K6iE5ZdRScsu4pOiu0qOim2q+ik2K6ik2K7ik6K7So6Kbar6KTYrqKTYruKTortKjoptqvopNiugslrzrB67SqYvOYMq9euopNiuwomrznD6rWr6KTYrqITll0F80Gyq2A+SHYVzAfJroL5oGSrgw+SXUUnLLuKTlh2FZ2w7Co6YdlVdMKyq+iEZlfRCc2uohOaXUUnNLuKTmh2FZ3Q7Co6odlVdEKzq+iEZlfRCc2uohOaXUUnNLuKTmh2FZ3Q7Co6odlVdEKzq+iEZlfRCc2uohOaXUUnNLuKTmh2FZ3Q7Co6odlVdEKzq+iEZlfRCc2uohOaXUUnNLuKTmh2FZ3Q7Co6wdlVDEpYdhWDEpZdxaCEZVcxKGG1hR+UsOwqBiW4ozY0u4pRVIhlVzEoYdlVDEqERwnLrmJQgtqX4hZU2lUwb41dt5m3xqbbzFulXcUgrrHp9iCusen2IK6x6fYgTlqJa2y6PYhrtKsYxLXmTZV2FYO41syp0q5iENeaOVXaVQziWjOnSruKQVxr5hS1qxgAVRpA0q5iAHRhAFG7igEQpAGiNICkXcUAIGmALA1QpAEk7SoGQJMG6MIAonYVAyBIA0jaVQyAIg0g2aGRAUTtKgaAdIhE7SoGQJMG6MIAonYVAyBIA0RpgCQNQNIAWRqgSANI2lUMgCYNIGlXMX6ZkrSrGABBGiBKA0jaVQwAkgbI0gBFGqBKA0jaVQyALgwgalcxAII0QJQGSNIAJA2QpQGKNICkXcUAaNIAknYV4/aCpF3FAAjSAFEaQNKuYgCQNECWBijSAFUaoEkDSB+GyNpVxLCJ21Uwhlq7ikFeazPtQV5rM+1BXmsz7UGeNJPX2kx7kNfaTHuQ19pMe5DX2kx7kNdqV8Hk1dpVDPKaM6xau4pBXnOGVWtXMchrzrBq7SoGec0ZVq1dxSAPZFfBfJDsKgYfrc20B3mtzbQHea3NtAd50kxeazPtQV5rM+1BXmsz7UFeazPtQV5rM20mr9auYpDXnGHV2lUM8pozrFq7ikFec4ZVa1cxyGvOsGrtKgZ5zRkWya5i8AGyqxh8gOwqBh8gu4rBByVbHXyA7CoGHyC7isEHyK5i8AGyqxh8gOwqmA+SXcXgs3i9f9zUfzCCsqsYjKB66I17V1B2FYMRlF3FYARlVzEYQdlVDEZQdhWDEZRdxWAEZVfBjLDsKgYjKLuKwQjKrmIwgrKrGIwIjhGUXcVgBGVXMRhB2VUMRlB2FYMRlF0FM8KyqxiMoOwqBiMou4rBCMquYjAiOEZQdhWDEZRdxWAEZVcxGEHZVQxGUHYVb5VHUHYVb5Sg7CreKEHZVbxRgrKreKOE1RZ+UIKyq3ijBHfUBmZX8VZUCGVX8UYJyq7ijRLhUYKyq3ijBLYv1QVFxVVzUXHVXFRcNRcVV81FxVVzUXHVXFRcNRcVV81FxVVzUXHVXFRcNRcVV81FxVVzUXHVXFRcNRcVV81FxVVzUXHVXFRcNRcVV7Ci4gpWVFw1FxVXzUXFVXNRcdVcVFw1FxVXzUXFVXNRcdVcVFw1FxVXzUXFVXNRcdVcVFw1FxVXzUXFVXNRcdVcVFw1FxVXzUXFVXNRcQUrKq5gRcUVrKi4ghUVV7Ci4gpWVFzBioorWFFxBSsqrmBFxRWsqLjCFRVXuKLiCldUXOGKiitcUXGFKyqucEXFFa6ouMIVFVe4ouIKV1Rc4YqKK1xRcYUrKq5wRcUVrqi4whUVV7ii4gpXVFzhioorXFFxhSsqrnBFxRWuqLjCFRVXuKLiCldUXOGKiitcUXGFKyqueEXFFa+ouOIVFVe8ouKKV1Rc8YqKK15RccUrKq54RcUVr6i44hUVV7yi4gpXVBz7g6LiTPV4LZf6McZ5F893Og2LTsei86A6+zo+AYxPBOOTwPgQGJ8MxqeA8QHbnQPY9hzA9ucItj9HsP05gu3PEWx/jmD7cwTbn6Pg/nxAVHmI13fR826xMp+OxSdtYHwCGJ8IxieB8SEwPhmMTwHjU8H4gO3PCWx/JrD9mcD2ZwLbnwlsfyaw/ZnA9mcC259JcH8+IJo8RBeHyJs8RJCHiPIQSR6C5CGyPESRh5Bf3eX1D+2T+/4MEleAvD7lz3+SK33BSOq2AmTFxFc6AeTDG+4MkleAlBUgdQVIWwHSF4C0M9bJh3dxGSSsAIkrQNIKEFoBkleAlBUgdQVIWwHSF4D0E1b8x1dLGSSsAIkrQNIKEFoBkleAlBUgdQVIWwFywor/+LrwuFa1LUEJS1BowVeUsOUlKGUJSl2BcsLdvR9BCUtQ4hKUtARFfL2kML9lW29v1frkkJa2484vxSdXfttth+gb/f3uNPenj3533k0p766U93yT0EA8aCUetRJPWomTVuJZK/GilbjWvBm0Js6gNXNGrZkzas2cUWvmjFozZ9SaOaPWzBnFMucBUKUBXs5E+fj9lTLNALowQNqkAYI0QJQGeHlHa8eioZZmACQNkKUBijTAqys5b8eJU97aDKBJA3RhANqkAYI0wKsf0xyPR3OcAhRpgFcnuaTjxkTJcQKQN2kA6RDll1fy7ew45zoDaNIAXRigbNIAQRogSgMkaQCSBsjSAEUa4MSVXMoMoEkDvL6Sb5tdnQHUl1fybbt+ABCkAaI0wKsrudyusJatzwBIGiBLAxRpgCoN8PJK7vkACNsMoAsDtE0aIEgDRGmAJA1A0gBZGqBIA9QTAWYruTVpgNdX8nHrrcQZQH95Jd/ONR8ABGmAKA3wck5+8i2zkzRAlgYo0gBVGqBJA0gfhjy4WXoWAj24WfaTDSW3Y78LFMIEIyzuzHxezyB6dDNJC/momXzSTJ40k8+ayRfN5Ktm8k0z+a6YfNScYaPmDBs1Z9ioOcNGzRk2as6wUXOGjZozbNScYSNKhv3GJ6EkzYPP4jx4XpMvenRHTQv5pJk8aSafNZMvmslXzeSbZvJdMXnaNJPXnGFJc4YlzRmWNGdY0pxhSXOGJc0ZljRnWNKcYTNKhj34oCTNgw9KHjz4oKS2gw9Ktjr4oCSggw9KTjn4oKSJgw/Kzn/wQdnMv/EpYPtzWbzen3RUpkeFH5cywnKqpkdlDVfGqEY4RgmO0Wr/5Y/7S9OjwoZLGTU4Rh2NUdvgGAU4Rsv3ow87O9Oj8o9LGREcowzHqMAxqnCMGhyjjsaob3CMAhyj1Xv2xw3A6VGhz6WMCI5RhmNU4BhVOEYNjlFHY/SoM/+llFbv2h/3/B+UIh6lhEepoB0iPbIeuJQS3FFb2DocpdWFeT9CKeFRIjxKGY8S2L7UdNpV7LxVdt3eeatsur3z1mlXwcRVNt1m4iqbbjNxlU23mThpJa6y6TYTV2lXwcS15k2ddhVMXGvm1GlXwcS1Zk6ddhVMXGvm1GlXwcS1Zk5ZuwoGqNIAonYVDNCFAWTtKhggSANEaQBRuwoGIGmALA1QpAFE7SoYoEkDdGEAWbsKBgjSAKJ2FQxQpAFEOzTuALJ2FQwgHSJZuwoGaNIAXRhA1q6CAYI0QJQGSNIAJA2QpQGKNICoXQUDNGkAUbsK/mVK1K6CAYI0QJQGELWrYACSBsjSAEUaoEoDiNpVMEAXBpC1q2CAIA0QpQGSNABJA2RpgCINIGpXwQBNGkDUroJvL4jaVTBAkAaI0gCidhUMQNIAWRqgSANUaYAmDSB9GCJsV5GrvF3FjqHXroLJq22mzeTVNtNm8mqbaTN50kxebTNtJq+2mTaTV9tMm8mrbabN5NXaVezk9dpVMHnNGVavXQWT15xh9dpVMHnNGVavXQWT15xh9dpVMHkku4qdD5RdBfNR20ybyattps3k1TbTZvKkmbzaZtpMXm0zbSavtpk2k1fbTJvJq22mvZPXa1fB5DVnWL12FUxec4bVa1fB5DVnWL12FUxec4bVa1fB5DVnWCi7CuaDZFfBfJDsKpgPkl0F80HJVgcfJLsK5oNkV8F8kOwqmA+SXQXzQbKr2PlA2VUwn8Xr/UlTf2aEZVfBjLB66PG9Kyy7CmaEZVfBjLDsKpgRll0FM8Kyq2BGWHYVzAjLrmJnBGZXwYyw7CqYEZZdBTPCsqtgRgTHCMuughlh2VUwIyy7CmaEZVfBjLDsKnZGYHYVzAjLroIZYdlVMCMsuwpmRHCMsOwqmBGWXQUzwrKrYEZYdhXMCMuuYlQeYdlVDEpYdhWDEpZdxaCEZVcxKGG1hR+UsOwqBiW4ozY0u4pRVIhlVzEoYdlVDEqERwnLrmJQwtqXCskXFe8YeouKmbzakicmr7bkicmrLXli8qSZvNqSJyavtuSJyasteWLyakuemLzaouKdvN6iYiavOcPqLSpm8pozrN6iYiavOcPqLSpm8pozrN6iYiaPVFS884EqKmY+akuemLzakicmr7bkicmTZvJqS56YvNqSJyavtuSJyasteWLyakuedvJ6i4qZvOYMq7eomMlrzrB6i4qZvOYMq7eomMlrzrB6i4qZvOYMC1VUzHyQioqZD1JRMfNBKipmPijZ6uCDVFTMfJCKipkPUlEx80EqKmY+SEXFOx+oomLms3i9Pym9ZEZYRcXMCOumI9+7wioqZkZYRcXMCKuomBlhFRUzI6yiYmaEVVTMjLCKindGYEXFzAirqJgZYRUVMyOsomJmRHCMsIqKmRFWUTEzwioqZkZYRcXMCKuoeGcEVlTMjLCKipkRVlExM8IqKmZGBMcIq6iYGWEVFTMjrKJiZoRVVMyMsIqKR+URVlHxoIRVVDwoYRUVD0pYRcWDElzxHlpR8aAEd9SGVlQ8igqxiooHJayi4kGJ8ChhFRUPSlj7Uo2/fdUtmraDDcUnZNpt2+4bvT8af/6n9513U8q7K+UdNq3Eg1biUSvxpJU4aSWetRIvWolrzZtBa+IMWjNn1Jo5o9bMGbVmzqg1c0atmTNqzZxRLHMeAFUa4OVMlI8rQJRpBtCFAdImDRCkAaI0wMs7WjsWDbU0AyBpgCwNUKQBXl3JeavfHs1bmwE0aYAuDECbNECQBnj1Y5rj8WiOU4AiDfDqJJd0XFMrOU4A8iYNIB2i/PJKptunKNcZQJMG6MIAZZMGCNIAURogSQOQNECWBijSACeu5FJmAE0a4PWVfNvs6gygvrySb9v1A4AgDRClAV5dyeVWRVG2PgMgaYAsDVCkAao0wMsruR9Nn0vYZgBdGKBt0gBBGiBKAyRpAJIGyNIARRqgnggwW8mtSQO8vpKPiyglzgD6yyv5dq75ACBIA0RpgJdz8pNvmZ2kAbI0QJEGqNIATRpA+jDkwXXrsxBalLeraFGxXUWLiu0qWlRsV9GiYruKFhXbVbSo2K6iRcV2FS0qtqtoUbFdRYuK7SpaVGxX0aJiu4oWFdtVtKjYrqJFxXYVLSq2q2hRsV1Fi4rtKlpUbFfRIpZdRYtYdhUtKraraFGxXUWLiu0qWlRsV9GiYruKFhXbVbSo2K6iRcV2FS0qtqtoUbFdRYuK7SqYvOYMq9eugslrzrB67SpaVGxXweQ1Z1i9dhUtKraraBHLroL5INlVMB8kuwrmg2RXwXxQstXBB8muokUsu4oWsewqWsSyq2gRy66iRSy7ihbR7CpaRLOraBHNrqJFNLuKFtHsKlpEs6toEc2uokU0u4oW0ewqWkSzq2gRza6iRTS7ihbR7CpaRLOraBHNrqJFNLuKFtHsKlpEs6toEc2uokU0u4oW0ewqWkSzq2gRza6iRTS7ihbR7CpaRLOraBHNrqJFNLuKFtHsKlpEs6toEc6uYlDCsqsYlLDsKgYlLLuKQQmrLfyghGVXMSjBHbWh2VWMokIsu4pBCcuuYlAiPEpYdhWDEti+1HXaVey8VXbd3nmrbLq989ZpV8HEVTbdZuIqm24zcZVNt5k4aSWusuk2E1dpV8HEteZNnXYVTFxr5tRpV8HEtWZOnXYVTFxr5tRpV8HEtWZOWbsKBqjSAKJ2FQzQhQFk7SoYIEgDRGkAUbsKBiBpgCwNUKQBRO0qGKBJA3RhAFm7CgYI0gCidhUMUKQBRDs07gCydhUMIB0iWbsKBmjSAF0YQNauggGCNECUBkjSACQNkKUBijSAqF0FAzRpAFG7Cv5lStSuggGCNECUBhC1q2AAkgbI0gBFGqBKA4jaVTBAFwaQtatggCANEKUBkjQASQNkaYAiDSBqV8EATRpA1K6Cby+I2lUwQJAGiNIAonYVDEDSAFkaoEgDVGmAJg0gfRgibFfRm7xdxY6h166Cyattps3k1TbTZvJqm2kzedJMXm0zbSavtpk2k1fbTJvJq22mzeTV2lXs5PXaVTB5zRlWr10Fk9ecYfXaVTB5zRlWr10Fk9ecYfXaVTB5JLuKnQ+UXQXzUdtMm8mrbabN5NU202bypJm82mbaTF5tM20mr7aZNpNX20ybyattpr2T12tXweQ1Z1i9dhVMXnOG1WtXweQ1Z1i9dhVMXnOG1WtXweQ1Z1gouwrmg2RXwXyQ7CqYD5JdBfNByVYHHyS7CuaDZFfBfJDsKpgPkl0F80Gyq9j5QNlVMJ/F6/1JU39mhGVXwYyweujxvSssuwpmhGVXwYyw7CqYEZZdBTPCsqtgRlh2FcwIy65iZwRmV8GMsOwqmBGWXQUzwrKrYEYExwjLroIZYdlVMCMsuwpmhGVXwYyw7Cp2RmB2FcwIy66CGWHZVTAjLLsKZkRwjLDsKpgRll0FM8Kyq2BGWHYVzAjLrmJUHmHZVQxKWHYVgxKWXcWghGVXMShhtYUflLDsKgYluKM2NLuKUVSIZVcxKGHZVQxKhEcJy65iUILal9KWxYuKGUNtUfEgr7XkaZDXWvI0yGsteRrkSTN5rSVPg7zWkqdBXmvJ0yCvteRpkNdaVMzk1RYVD/KaM6zaouJBXnOGVVtUPMhrzrBqi4oHec0ZVm1R8SAPVFTMfJCKigcfrSVPg7zWkqdBXmvJ0yBPmslrLXka5LWWPA3yWkueBnmtJU+DvNaSJyavtqh4kNecYdUWFQ/ymjOs2qLiQV5zhlVbVDzIa86waouKB3nNGRapqHjwASoqHnyAiooHH6Ci4sEHJVsdfICKigcfoKLiwQeoqHjwASoqHnyAioqZD1JR8eCzeL1/XHo5GEEVFQ9GUDcdx70rqKLiwQiqqHgwgioqHoygiooHI6ii4sEIqqh4MIIqKmZGWEXFgxFUUfFgBFVUPBhBFRUPRgTHCKqoeDCCKioejKCKigcjqKLiwQiqqJgZYRUVD0ZQRcWDEVRR8WAEVVQ8GBEcI6ii4sEIqqh4MIIqKh6MoIqKByOoouK3yiOoouI3SlBFxW+UoIqK3yhBFRW/UYIr3gMrKn6jBHfUBlZU/FZUCFVU/EYJqqj4jRLhUYIqKn6jBLUv9bg9qOgp4fj2UNq70XeI9fZa/Nxr6XOv0edeyz/9WthlyKNq1i3T+1eq91jur3x7Mzy69F/D7bC6b/kOM7+/2T/75oO78T/yZvj0m/Gn39z/679//59//P2//OkPf9nf4f/xv37917/+8c+/fvvPv/7Pf7z9L/uz/ws="},{"name":"_increase_public_balance","is_unconstrained":true,"custom_attributes":["aztec(public)","aztec(internal)"],"abi":{"error_types":{},"param_witnesses":{"amount":[{"end":5,"start":4}],"inputs":[{"end":3,"start":0}],"to":[{"end":4,"start":3}]},"parameters":[{"name":"inputs","type":{"fields":[{"name":"selector","type":{"kind":"field"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"aztec::context::inputs::public_context_inputs::PublicContextInputs"},"visibility":"private"},{"name":"to","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"},"visibility":"private"},{"name":"amount","type":{"kind":"field"},"visibility":"private"}],"return_type":null,"return_witnesses":[]},"bytecode":"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","debug_symbols":"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"},{"name":"mint_public","is_unconstrained":true,"custom_attributes":["aztec(public)"],"abi":{"error_types":{},"param_witnesses":{"amount":[{"end":5,"start":4}],"inputs":[{"end":3,"start":0}],"to":[{"end":4,"start":3}]},"parameters":[{"name":"inputs","type":{"fields":[{"name":"selector","type":{"kind":"field"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"aztec::context::inputs::public_context_inputs::PublicContextInputs"},"visibility":"private"},{"name":"to","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"},"visibility":"private"},{"name":"amount","type":{"kind":"field"},"visibility":"private"}],"return_type":null,"return_witnesses":[]},"bytecode":"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","debug_symbols":"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"}],"outputs":{"globals":{"storage":[{"fields":[{"name":"balances","value":{"fields":[{"name":"slot","value":{"kind":"integer","sign":false,"value":"1"}},{"name":"typ","value":{"kind":"string","value":"Map<AztecAddress, PublicMutable<U128, Context>, Context>"}}],"kind":"struct"}},{"name":"portal_address","value":{"fields":[{"name":"slot","value":{"kind":"integer","sign":false,"value":"2"}},{"name":"typ","value":{"kind":"string","value":"SharedImmutable<EthAddress, Context>"}}],"kind":"struct"}}],"kind":"struct"}]},"structs":{"functions":[{"fields":[{"name":"parameters","type":{"fields":[{"name":"owner","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}}],"kind":"struct","path":"GasToken::balance_of_public_parameters"}},{"name":"return_type","type":{"kind":"field"}}],"kind":"struct","path":"GasToken::balance_of_public_abi"},{"fields":[{"name":"parameters","type":{"fields":[{"name":"to","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"amount","type":{"kind":"field"}}],"kind":"struct","path":"GasToken::_increase_public_balance_parameters"}}],"kind":"struct","path":"GasToken::_increase_public_balance_abi"},{"fields":[{"name":"parameters","type":{"fields":[{"name":"to","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"amount","type":{"kind":"field"}}],"kind":"struct","path":"GasToken::mint_public_parameters"}}],"kind":"struct","path":"GasToken::mint_public_abi"},{"fields":[{"name":"parameters","type":{"fields":[{"name":"fee_limit","type":{"kind":"field"}}],"kind":"struct","path":"GasToken::check_balance_parameters"}}],"kind":"struct","path":"GasToken::check_balance_abi"},{"fields":[{"name":"parameters","type":{"fields":[{"name":"portal_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}}],"kind":"struct","path":"GasToken::set_portal_parameters"}}],"kind":"struct","path":"GasToken::set_portal_abi"},{"fields":[{"name":"parameters","type":{"fields":[{"name":"to","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"amount","type":{"kind":"field"}},{"name":"secret","type":{"kind":"field"}}],"kind":"struct","path":"GasToken::claim_parameters"}}],"kind":"struct","path":"GasToken::claim_abi"},{"fields":[{"name":"parameters","type":{"fields":[{"name":"to","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"amount","type":{"kind":"field"}},{"name":"secret","type":{"kind":"field"}},{"name":"leaf_index","type":{"kind":"field"}}],"kind":"struct","path":"GasToken::claim_public_parameters"}}],"kind":"struct","path":"GasToken::claim_public_abi"}]}},"file_map":{"104":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/hash.nr","source":"use dep::protocol_types::{\n address::{AztecAddress, EthAddress},\n constants::{\n GENERATOR_INDEX__SECRET_HASH, GENERATOR_INDEX__MESSAGE_NULLIFIER, ARGS_HASH_CHUNK_COUNT,\n GENERATOR_INDEX__FUNCTION_ARGS, ARGS_HASH_CHUNK_LENGTH\n},\n traits::Hash, hash::{pedersen_hash, silo_nullifier, sha256_to_field}\n};\nuse crate::oracle::logs_traits::{LensForEncryptedLog, ToBytesForUnencryptedLog};\n\npub fn compute_secret_hash(secret: Field) -> Field {\n pedersen_hash([secret], GENERATOR_INDEX__SECRET_HASH)\n}\n\npub fn compute_unencrypted_log_hash<T, N, M>(\n contract_address: AztecAddress,\n event_selector: Field,\n log: T\n) -> Field where T: ToBytesForUnencryptedLog<N, M> {\n let message_bytes: [u8; N] = log.to_be_bytes_arr();\n // can't use N - not in scope error\n let n = message_bytes.len();\n let mut hash_bytes = [0; M];\n // Address is converted to 32 bytes in ts\n let address_bytes = contract_address.to_be_bytes_arr();\n for i in 0..32 {\n hash_bytes[i] = address_bytes[i];\n }\n let event_bytes = event_selector.to_be_bytes(4);\n for i in 0..4 {\n hash_bytes[32 + i] = event_bytes[i];\n }\n let len_bytes = (n as Field).to_be_bytes(4);\n for i in 0..4 {\n hash_bytes[36 + i] = len_bytes[i];\n }\n for i in 0..n {\n hash_bytes[40 + i] = message_bytes[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\npub fn compute_message_hash(\n sender: EthAddress,\n chain_id: Field,\n recipient: AztecAddress,\n version: Field,\n content: Field,\n secret_hash: Field\n) -> Field {\n let mut hash_bytes = [0 as u8; 192];\n let sender_bytes = sender.to_field().to_be_bytes(32);\n let chain_id_bytes = chain_id.to_be_bytes(32);\n let recipient_bytes = recipient.to_field().to_be_bytes(32);\n let version_bytes = version.to_be_bytes(32);\n let content_bytes = content.to_be_bytes(32);\n let secret_hash_bytes = secret_hash.to_be_bytes(32);\n\n for i in 0..32 {\n hash_bytes[i] = sender_bytes[i];\n hash_bytes[i + 32] = chain_id_bytes[i];\n hash_bytes[i + 64] = recipient_bytes[i];\n hash_bytes[i + 96] = version_bytes[i];\n hash_bytes[i + 128] = content_bytes[i];\n hash_bytes[i + 160] = secret_hash_bytes[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\n// The nullifier of a l1 to l2 message is the hash of the message salted with the secret and index of the message hash\n// in the L1 to L2 message tree\npub fn compute_message_nullifier(message_hash: Field, secret: Field, leaf_index: Field) -> Field {\n pedersen_hash(\n [message_hash, secret, leaf_index],\n GENERATOR_INDEX__MESSAGE_NULLIFIER\n )\n}\n\npub fn compute_siloed_nullifier(address: AztecAddress, nullifier: Field) -> Field {\n silo_nullifier(address, nullifier)\n}\n\nstruct ArgsHasher {\n fields: [Field],\n}\n\nimpl Hash for ArgsHasher {\n fn hash(self) -> Field {\n hash_args(self.fields)\n }\n}\n\nimpl ArgsHasher {\n pub fn new() -> Self {\n Self { fields: [] }\n }\n\n pub fn add(&mut self, field: Field) {\n self.fields = self.fields.push_back(field);\n }\n\n pub fn add_multiple<N>(&mut self, fields: [Field; N]) {\n for i in 0..N {\n self.fields = self.fields.push_back(fields[i]);\n }\n }\n}\n\npub fn hash_args_array<N>(args: [Field; N]) -> Field {\n hash_args(args.as_slice())\n}\n\npub fn hash_args(args: [Field]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n assert(args.len() < ARGS_HASH_CHUNK_COUNT * ARGS_HASH_CHUNK_LENGTH);\n let mut chunks_hashes = [0; ARGS_HASH_CHUNK_COUNT];\n let mut current_chunk_values = [0; ARGS_HASH_CHUNK_LENGTH];\n\n let mut current_chunk_index = 0;\n let mut index_inside_current_chunk = 0;\n for i in 0..args.len() {\n current_chunk_values[index_inside_current_chunk] = args[i];\n index_inside_current_chunk+=1;\n if index_inside_current_chunk == ARGS_HASH_CHUNK_LENGTH {\n chunks_hashes[current_chunk_index] = pedersen_hash(current_chunk_values, GENERATOR_INDEX__FUNCTION_ARGS);\n current_chunk_values = [0; ARGS_HASH_CHUNK_LENGTH];\n current_chunk_index+=1;\n index_inside_current_chunk = 0;\n }\n }\n if index_inside_current_chunk > 0 {\n chunks_hashes[current_chunk_index] = pedersen_hash(current_chunk_values, GENERATOR_INDEX__FUNCTION_ARGS);\n }\n pedersen_hash(chunks_hashes, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\n#[test]\nfn compute_var_args_hash() {\n let mut input = ArgsHasher::new();\n for i in 0..800 {\n input.add(i as Field);\n }\n let hash = input.hash();\n assert(hash == 0x05a1023fef839ac88731f49ae983e172c1b600a3c8f3393ad0ac25d819ac0f0f);\n}\n\n#[test]\nfn compute_unenc_log_hash_array() {\n let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6);\n let event_selector = 5;\n let log = [\n 0x20660de09f35f876e3e69d227b2a35166ad05f09d82d06366ec9b6f65a51fec2,\n 0x1b52bfe3b8689761916f76dc3d38aa8810860db325cd39ca611eed980091f01c,\n 0x2e559c4045c378a56ad13b9edb1e8de4e7ad3b3aa35cc7ba9ec77f7a68fa43a4,\n 0x25d0f689c4a4178a29d59306f2675824d19be6d25e44fa03b03f49c263053dd2,\n 0x2d513a722d6f352dc0961f156afdc5e31495b9f0e35cb069261a8e55e2df67fd\n ];\n let hash = compute_unencrypted_log_hash(contract_address, event_selector, log);\n assert(hash == 0x00846d6969c8c2f61d39cd2762efcb0abb14f88d59c2675910251ef2bcffe9a7);\n}\n\n#[test]\nfn compute_unenc_log_hash_addr() {\n let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6);\n let event_selector = 5;\n let log = AztecAddress::from_field(0x26aa302d4715fd8a687453cb26d616b0768027bd54bcae56b09d908ecd9f8303);\n let hash = compute_unencrypted_log_hash(contract_address, event_selector, log);\n assert(hash == 0x00880a801230ea08c98a802a11b4786cba474513875f0fc69a615e81c5f9f21c);\n}\n\n#[test]\nfn compute_unenc_log_hash_str() {\n let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8);\n let event_selector = 5;\n let log = \"dummy\";\n let hash = compute_unencrypted_log_hash(contract_address, event_selector, log);\n assert(hash == 0x00a78b5347813624ecfd26e5b8bc6146f418b0cfcc8296b5112d09b8ebba9496);\n}\n\n#[test]\nfn compute_unenc_log_hash_longer_str() {\n let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8);\n let event_selector = 5;\n let log = \"Hello this is a string\";\n let hash = compute_unencrypted_log_hash(contract_address, event_selector, log);\n assert(hash == 0x001f3390ea242afee7ce46dafdbdc4bd4f1cf20cd63850d12d60ff9956712c4f);\n}\n"},"110":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/arguments.nr","source":"#[oracle(packArgumentsArray)]\nfn pack_arguments_array_oracle<N>(_args: [Field; N]) -> Field {}\n\n#[oracle(packArguments)]\nfn pack_arguments_oracle(_args: [Field]) -> Field {}\n\n/// - Pack arguments (array version) will notify the simulator that these arguments will be used later at\n/// some point in the call. \n/// - When the external call is made later, the simulator will know what the values unpack to.\n/// - This oracle will not be required in public vm functions, as the vm will keep track of arguments \n/// itself.\nunconstrained pub fn pack_arguments_array<N>(args: [Field; N]) -> Field {\n pack_arguments_array_oracle(args)\n}\n\n/// - Pack arguments (slice version) will notify the simulator that these arguments will be used later at\n/// some point in the call. \n/// - When the external call is made later, the simulator will know what the values unpack to.\n/// - This oracle will not be required in public vm functions, as the vm will keep track of arguments \n/// itself.\nunconstrained pub fn pack_arguments(args: [Field]) -> Field {\n pack_arguments_oracle(args)\n}\n\n"},"113":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/get_public_data_witness.nr","source":"use dep::protocol_types::{\n constants::PUBLIC_DATA_TREE_HEIGHT, hash::pedersen_hash,\n public_data_tree_leaf_preimage::PublicDataTreeLeafPreimage, traits::{Hash, Serialize},\n utils::arr_copy_slice\n};\n\nglobal LEAF_PREIMAGE_LENGTH: u64 = 4;\nglobal PUBLIC_DATA_WITNESS: Field = 45;\n\nstruct PublicDataWitness {\n index: Field,\n leaf_preimage: PublicDataTreeLeafPreimage,\n path: [Field; PUBLIC_DATA_TREE_HEIGHT],\n}\n\n#[oracle(getPublicDataTreeWitness)]\nfn get_public_data_witness_oracle(\n _block_number: u32,\n _leaf_slot: Field\n) -> [Field; PUBLIC_DATA_WITNESS] {}\n\nunconstrained pub fn get_public_data_witness(block_number: u32, leaf_slot: Field) -> PublicDataWitness {\n let fields = get_public_data_witness_oracle(block_number, leaf_slot);\n PublicDataWitness {\n index: fields[0],\n leaf_preimage: PublicDataTreeLeafPreimage { slot: fields[1], value: fields[2], next_index: fields[3] as u64, next_slot: fields[4] },\n path: arr_copy_slice(fields, [0; PUBLIC_DATA_TREE_HEIGHT], 1 + LEAF_PREIMAGE_LENGTH)\n }\n}\n"},"117":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/storage.nr","source":"use dep::protocol_types::traits::{Deserialize, Serialize};\n\n#[oracle(storageRead)]\nfn storage_read_oracle<N>(_storage_slot: Field, _number_of_elements: Field) -> [Field; N] {}\n\nunconstrained fn storage_read_oracle_wrapper<N>(_storage_slot: Field) -> [Field; N] {\n storage_read_oracle(_storage_slot, N)\n}\n\npub fn storage_read<N>(storage_slot: Field) -> [Field; N] {\n storage_read_oracle_wrapper(storage_slot)\n}\n\n#[oracle(storageWrite)]\nfn storage_write_oracle<N>(_storage_slot: Field, _values: [Field; N]) -> [Field; N] {}\n\nunconstrained pub fn storage_write<N>(storage_slot: Field, fields: [Field; N]) {\n let _hash = storage_write_oracle(storage_slot, fields);\n}\n"},"125":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/enqueue_public_function_call.nr","source":"use dep::protocol_types::{\n abis::{\n function_selector::FunctionSelector, public_call_stack_item::PublicCallStackItem,\n function_data::FunctionData, public_circuit_public_inputs::PublicCircuitPublicInputs,\n call_context::CallContext, read_request::ReadRequest, note_hash::NoteHash, nullifier::Nullifier,\n log_hash::LogHash, global_variables::GlobalVariables, gas::Gas\n},\n contrakt::{storage_read::StorageRead, storage_update_request::StorageUpdateRequest},\n messaging::l2_to_l1_message::L2ToL1Message, header::Header, address::AztecAddress,\n utils::reader::Reader,\n constants::{\n MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL,\n MAX_NEW_NOTE_HASHES_PER_CALL, MAX_NEW_L2_TO_L1_MSGS_PER_CALL, MAX_NEW_NULLIFIERS_PER_CALL,\n MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL, MAX_PUBLIC_DATA_READS_PER_CALL,\n MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL, MAX_NULLIFIER_READ_REQUESTS_PER_CALL,\n MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL, MAX_UNENCRYPTED_LOGS_PER_CALL,\n ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_LENGTH\n}\n};\n\n#[oracle(enqueuePublicFunctionCall)]\nfn enqueue_public_function_call_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _side_effect_counter: u32,\n _is_static_call: bool,\n _is_delegate_call: bool\n) -> [Field; ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_LENGTH] {}\n\nunconstrained pub fn enqueue_public_function_call_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n side_effect_counter: u32,\n is_static_call: bool,\n is_delegate_call: bool\n) -> [Field; ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_LENGTH] {\n enqueue_public_function_call_oracle(\n contract_address,\n function_selector,\n args_hash,\n side_effect_counter,\n is_static_call,\n is_delegate_call\n )\n}\n\n#[oracle(setPublicTeardownFunctionCall)]\nfn set_public_teardown_function_call_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _side_effect_counter: u32,\n _is_static_call: bool,\n _is_delegate_call: bool\n) -> [Field; ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_LENGTH] {}\n\nunconstrained pub fn set_public_teardown_function_call_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n side_effect_counter: u32,\n is_static_call: bool,\n is_delegate_call: bool\n) -> [Field; ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_LENGTH] {\n set_public_teardown_function_call_oracle(\n contract_address,\n function_selector,\n args_hash,\n side_effect_counter,\n is_static_call,\n is_delegate_call\n )\n}\n\npub fn parse_public_call_stack_item_from_oracle(fields: [Field; ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_LENGTH]) -> PublicCallStackItem {\n let mut reader = Reader::new(fields);\n\n // Note: Not using PublicCirclePublicInputs::deserialize here, because everything below args_hash is 0 and\n // there is no more data in fields because there is only ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_SIZE fields!\n let item = PublicCallStackItem {\n contract_address: AztecAddress::from_field(reader.read()),\n function_data: FunctionData { selector: FunctionSelector::from_field(reader.read()), is_private: false },\n public_inputs: PublicCircuitPublicInputs {\n call_context: reader.read_struct(CallContext::deserialize),\n args_hash: reader.read(),\n returns_hash: 0,\n note_hash_read_requests: [ReadRequest::empty(); MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n nullifier_read_requests: [ReadRequest::empty(); MAX_NULLIFIER_READ_REQUESTS_PER_CALL],\n nullifier_non_existent_read_requests: [ReadRequest::empty(); MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL],\n l1_to_l2_msg_read_requests: [ReadRequest::empty(); MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL],\n contract_storage_update_requests: [StorageUpdateRequest::empty(); MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL],\n contract_storage_reads: [StorageRead::empty(); MAX_PUBLIC_DATA_READS_PER_CALL],\n public_call_stack_hashes: [0; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL],\n new_note_hashes: [NoteHash::empty(); MAX_NEW_NOTE_HASHES_PER_CALL],\n new_nullifiers: [Nullifier::empty(); MAX_NEW_NULLIFIERS_PER_CALL],\n new_l2_to_l1_msgs: [L2ToL1Message::empty(); MAX_NEW_L2_TO_L1_MSGS_PER_CALL],\n start_side_effect_counter: 0,\n end_side_effect_counter: 0,\n unencrypted_logs_hashes: [LogHash::empty(); MAX_UNENCRYPTED_LOGS_PER_CALL],\n historical_header: Header::empty(),\n global_variables: GlobalVariables::empty(),\n prover_address: AztecAddress::zero(),\n revert_code: 0,\n start_gas_left: Gas::empty(),\n end_gas_left: Gas::empty(),\n transaction_fee: 0\n },\n is_execution_request: true\n };\n reader.finish();\n\n item\n}\n"},"127":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/get_l1_to_l2_membership_witness.nr","source":"use dep::protocol_types::{address::AztecAddress};\n\nglobal L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH: u64 = 17;\n\n// Obtains membership witness (index and sibling path) for a message in the L1 to L2 message tree.\n#[oracle(getL1ToL2MembershipWitness)]\nfn get_l1_to_l2_membership_witness_oracle(\n _contract_address: AztecAddress,\n _message_hash: Field,\n _secret: Field\n) -> [Field; L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH] {}\n\nunconstrained pub fn get_l1_to_l2_membership_witness(\n contract_address: AztecAddress,\n message_hash: Field,\n secret: Field\n) -> [Field; L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH] {\n get_l1_to_l2_membership_witness_oracle(contract_address, message_hash, secret)\n}\n"},"130":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/state_vars/map.nr","source":"use dep::protocol_types::{hash::pedersen_hash, storage::map::derive_storage_slot_in_map, traits::ToField};\nuse crate::state_vars::storage::Storage;\n\n// docs:start:map\nstruct Map<K, V, Context> {\n context: Context,\n storage_slot: Field,\n state_var_constructor: fn(Context, Field) -> V,\n}\n// docs:end:map\n\nimpl<K, T, Context> Storage<T> for Map<K, T, Context> {}\n\nimpl<K, V, Context> Map<K, V, Context> {\n // docs:start:new\n pub fn new(\n context: Context,\n storage_slot: Field,\n state_var_constructor: fn(Context, Field) -> V\n ) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n Map { context, storage_slot, state_var_constructor }\n }\n // docs:end:new\n\n // docs:start:at\n pub fn at(self, key: K) -> V where K: ToField {\n // TODO(#1204): use a generator index for the storage slot\n let derived_storage_slot = derive_storage_slot_in_map(self.storage_slot, key);\n\n let state_var_constructor = self.state_var_constructor;\n state_var_constructor(self.context, derived_storage_slot)\n }\n // docs:end:at\n}\n"},"132":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/state_vars/public_mutable.nr","source":"use crate::context::{PublicContext, UnconstrainedContext};\nuse crate::oracle::storage::storage_read;\nuse crate::oracle::storage::storage_write;\nuse dep::protocol_types::traits::{Deserialize, Serialize};\nuse crate::state_vars::storage::Storage;\n\n// docs:start:public_mutable_struct\nstruct PublicMutable<T, Context> {\n context: Context,\n storage_slot: Field,\n}\n// docs:end:public_mutable_struct\n\nimpl<T, Context> Storage<T> for PublicMutable<T, Context> {}\n\nimpl<T, Context> PublicMutable<T, Context> {\n // docs:start:public_mutable_struct_new\n pub fn new(\n // Note: Passing the contexts to new(...) just to have an interface compatible with a Map.\n context: Context,\n storage_slot: Field\n ) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n PublicMutable { context, storage_slot }\n }\n // docs:end:public_mutable_struct_new\n}\n\nimpl<T> PublicMutable<T, &mut PublicContext> {\n // docs:start:public_mutable_struct_read\n pub fn read<T_SERIALIZED_LEN>(self) -> T where T: Deserialize<T_SERIALIZED_LEN> {\n let fields = storage_read(self.storage_slot);\n T::deserialize(fields)\n }\n // docs:end:public_mutable_struct_read\n\n // docs:start:public_mutable_struct_write\n pub fn write<T_SERIALIZED_LEN>(self, value: T) where T: Serialize<T_SERIALIZED_LEN> {\n let fields = T::serialize(value);\n storage_write(self.storage_slot, fields);\n }\n // docs:end:public_mutable_struct_write\n}\n\nimpl<T> PublicMutable<T, UnconstrainedContext> {\n pub fn read<T_SERIALIZED_LEN>(self) -> T where T: Deserialize<T_SERIALIZED_LEN> {\n // This looks the same as the &mut PublicContext impl, but is actually very different. In public execution the\n // storage read oracle gets transpiled to SLOAD opcodes, whereas in unconstrained execution the PXE returns\n // historical data.\n let fields = storage_read(self.storage_slot);\n T::deserialize(fields)\n }\n}\n"},"135":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/state_vars/shared_immutable.nr","source":"use crate::{\n context::{PrivateContext, PublicContext, UnconstrainedContext},\n oracle::{storage::{storage_read, storage_write}}, state_vars::storage::Storage\n};\nuse dep::protocol_types::{constants::INITIALIZATION_SLOT_SEPARATOR, traits::{Deserialize, Serialize}};\n\n// Just like PublicImmutable but with the ability to read from private functions.\nstruct SharedImmutable<T, Context>{\n context: Context,\n storage_slot: Field,\n}\n\nimpl<T, Context> Storage<T> for SharedImmutable<T, Context> {}\n\nimpl<T, Context> SharedImmutable<T, Context> {\n pub fn new(\n // Note: Passing the contexts to new(...) just to have an interface compatible with a Map.\n context: Context,\n storage_slot: Field\n ) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n Self { context, storage_slot }\n }\n}\n\nimpl<T> SharedImmutable<T, &mut PublicContext> {\n // Intended to be only called once. \n pub fn initialize<T_SERIALIZED_LEN>(self, value: T) where T: Serialize<T_SERIALIZED_LEN> {\n // TODO(#4738): Uncomment the following assert\n // assert(\n // self.context.public.unwrap_unchecked().is_deployment(), \"SharedImmutable can only be initialized during contract deployment\"\n // );\n\n // We check that the struct is not yet initialized by checking if the initialization slot is 0\n let initialization_slot = INITIALIZATION_SLOT_SEPARATOR + self.storage_slot;\n let fields_read: [Field; 1] = storage_read(initialization_slot);\n assert(fields_read[0] == 0, \"SharedImmutable already initialized\");\n\n // We populate the initialization slot with a non-zero value to indicate that the struct is initialized\n storage_write(initialization_slot, [0xdead]);\n\n let fields_write = T::serialize(value);\n storage_write(self.storage_slot, fields_write);\n }\n\n pub fn read_public<T_SERIALIZED_LEN>(self) -> T where T: Deserialize<T_SERIALIZED_LEN> {\n let fields = storage_read(self.storage_slot);\n T::deserialize(fields)\n }\n}\n\nimpl<T> SharedImmutable<T, UnconstrainedContext> {\n pub fn read_public<T_SERIALIZED_LEN>(self) -> T where T: Deserialize<T_SERIALIZED_LEN> {\n let fields = storage_read(self.storage_slot);\n T::deserialize(fields)\n }\n}\n\nimpl<T> SharedImmutable<T, &mut PrivateContext> {\n pub fn read_private<T_SERIALIZED_LEN>(self) -> T where T: Deserialize<T_SERIALIZED_LEN> {\n let header = self.context.get_header();\n let mut fields = [0; T_SERIALIZED_LEN];\n\n for i in 0..fields.len() {\n fields[i] =\n header.public_storage_historical_read(\n self.storage_slot + i as Field,\n (*self.context).this_address()\n );\n }\n T::deserialize(fields)\n }\n}\n"},"153":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_call_stack_item.nr","source":"use crate::abis::{function_data::FunctionData, public_circuit_public_inputs::PublicCircuitPublicInputs};\nuse crate::address::AztecAddress;\nuse crate::constants::GENERATOR_INDEX__CALL_STACK_ITEM;\nuse crate::traits::Hash;\n\nstruct PublicCallStackItem {\n contract_address: AztecAddress,\n public_inputs: PublicCircuitPublicInputs,\n function_data: FunctionData,\n // True if this call stack item represents a request to execute a function rather than a\n // fulfilled execution. Used when enqueuing calls from private to public functions.\n is_execution_request: bool,\n}\n\nimpl Hash for PublicCallStackItem {\n fn hash(self) -> Field {\n let item = if self.is_execution_request {\n self.as_execution_request()\n } else {\n self\n };\n\n dep::std::hash::pedersen_hash_with_separator([\n item.contract_address.to_field(),\n item.function_data.hash(),\n item.public_inputs.hash(),\n ], GENERATOR_INDEX__CALL_STACK_ITEM)\n }\n}\n\nimpl PublicCallStackItem {\n fn as_execution_request(self) -> Self {\n let public_inputs = self.public_inputs;\n let mut request_public_inputs = PublicCircuitPublicInputs::empty();\n request_public_inputs.call_context = public_inputs.call_context;\n request_public_inputs.args_hash = public_inputs.args_hash;\n\n let call_stack_item = PublicCallStackItem {\n contract_address: self.contract_address,\n function_data: self.function_data,\n is_execution_request: true,\n public_inputs: request_public_inputs\n };\n call_stack_item\n }\n}\n\nmod tests {\n use crate::{\n abis::{\n function_data::FunctionData, function_selector::FunctionSelector, note_hash::NoteHash,\n public_circuit_public_inputs::PublicCircuitPublicInputs,\n public_call_stack_item::PublicCallStackItem\n },\n address::AztecAddress, constants::GENERATOR_INDEX__CALL_STACK_ITEM, traits::Hash\n };\n\n #[test]\n fn compute_call_stack_item_request_hash() {\n let contract_address = AztecAddress::from_field(1);\n let function_data = FunctionData { selector: FunctionSelector::from_u32(2), is_private: false };\n\n let mut public_inputs = PublicCircuitPublicInputs::empty();\n public_inputs.new_note_hashes[0] = NoteHash {\n value: 1,\n counter: 0,\n };\n\n let call_stack_item = PublicCallStackItem { contract_address, public_inputs, is_execution_request: true, function_data };\n\n // Value from public_call_stack_item.test.ts \"Computes a callstack item request hash\" test\n let test_data_call_stack_item_request_hash = 0x1f0e71146c5d4a5bdcf517f0063cda7767e51fcb9cebc877feb348a77a7a6b4a;\n assert_eq(call_stack_item.hash(), test_data_call_stack_item_request_hash);\n }\n\n #[test]\n fn compute_call_stack_item_hash() {\n let contract_address = AztecAddress::from_field(1);\n let function_data = FunctionData { selector: FunctionSelector::from_u32(2), is_private: false };\n\n let mut public_inputs = PublicCircuitPublicInputs::empty();\n public_inputs.new_note_hashes[0] = NoteHash {\n value: 1,\n counter: 0,\n };\n\n let call_stack_item = PublicCallStackItem { contract_address, public_inputs, is_execution_request: false, function_data };\n\n // Value from public_call_stack_item.test.ts \"Computes a callstack item hash\" test\n let test_data_call_stack_item_hash = 0x079a2b28b4853de9169d7dc40ac41c6d80b465d82c60195ede91504013f8b11b;\n assert_eq(call_stack_item.hash(), test_data_call_stack_item_hash);\n }\n}\n"},"173":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/function_selector.nr","source":"use crate::utils::field::field_from_bytes;\nuse dep::std::cmp::Eq;\nuse crate::traits::{Serialize, Deserialize, FromField, ToField, Empty};\n\nglobal SELECTOR_SIZE = 4;\n\nstruct FunctionSelector {\n // 1st 4-bytes of abi-encoding of function.\n inner: u32,\n}\n\nimpl Eq for FunctionSelector {\n fn eq(self, function_selector: FunctionSelector) -> bool {\n function_selector.inner == self.inner\n }\n}\n\nimpl Serialize<1> for FunctionSelector {\n fn serialize(self: Self) -> [Field; 1] {\n [self.inner as Field]\n }\n}\n\nimpl Deserialize<1> for FunctionSelector {\n fn deserialize(fields: [Field; 1]) -> Self {\n Self {\n inner: fields[0] as u32\n }\n }\n}\n\nimpl FromField for FunctionSelector {\n fn from_field(field: Field) -> Self {\n Self { inner: field as u32 }\n }\n}\n\nimpl ToField for FunctionSelector {\n fn to_field(self) -> Field {\n self.inner as Field\n }\n}\n\nimpl Empty for FunctionSelector {\n fn empty() -> Self {\n Self { inner: 0 as u32 }\n }\n}\n\nimpl FunctionSelector {\n pub fn from_u32(value: u32) -> Self {\n Self { inner: value }\n }\n\n pub fn from_signature<N>(signature: str<N>) -> Self {\n let bytes = signature.as_bytes();\n let hash = dep::std::hash::keccak256(bytes, bytes.len() as u32);\n\n let mut selector_be_bytes = [0; SELECTOR_SIZE];\n for i in 0..SELECTOR_SIZE {\n selector_be_bytes[i] = hash[i];\n }\n\n FunctionSelector::from_field(field_from_bytes(selector_be_bytes, true))\n }\n\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n}\n"},"195":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/call_context.nr","source":"use crate::{\n abis::function_selector::FunctionSelector, address::{EthAddress, AztecAddress},\n constants::{CALL_CONTEXT_LENGTH, GENERATOR_INDEX__CALL_CONTEXT}, hash::pedersen_hash,\n traits::{Deserialize, Hash, Serialize, Empty}, abis::side_effect::Ordered,\n abis::{gas_settings::GasSettings, gas::Gas}, utils::reader::Reader\n};\n\n// docs:start:call-context\nstruct CallContext {\n msg_sender : AztecAddress,\n storage_contract_address : AztecAddress,\n function_selector : FunctionSelector,\n\n is_delegate_call : bool,\n is_static_call : bool,\n\n side_effect_counter : u32,\n}\n// docs:end:call-context\n\nimpl CallContext {\n fn assert_is_zero(self) {\n let serialized: [Field; CALL_CONTEXT_LENGTH] = self.serialize();\n\n for i in 0..CALL_CONTEXT_LENGTH {\n assert(serialized[i] == 0);\n }\n }\n}\n\nimpl Eq for CallContext {\n fn eq(self, other: CallContext) -> bool {\n self.serialize() == other.serialize()\n }\n}\n\nimpl Hash for CallContext {\n fn hash(self) -> Field {\n pedersen_hash(self.serialize(), GENERATOR_INDEX__CALL_CONTEXT)\n }\n}\n\nimpl Serialize<CALL_CONTEXT_LENGTH> for CallContext {\n fn serialize(self) -> [Field; CALL_CONTEXT_LENGTH] {\n let mut serialized: BoundedVec<Field, CALL_CONTEXT_LENGTH> = BoundedVec::new();\n\n serialized.push(self.msg_sender.to_field());\n serialized.push(self.storage_contract_address.to_field());\n serialized.push(self.function_selector.to_field());\n serialized.push(self.is_delegate_call as Field);\n serialized.push(self.is_static_call as Field);\n serialized.push(self.side_effect_counter as Field);\n \n serialized.storage\n }\n}\n\nimpl Deserialize<CALL_CONTEXT_LENGTH> for CallContext {\n fn deserialize(serialized: [Field; CALL_CONTEXT_LENGTH]) -> CallContext {\n let mut reader = Reader::new(serialized);\n CallContext {\n msg_sender: AztecAddress::from_field(reader.read()),\n storage_contract_address: AztecAddress::from_field(reader.read()),\n function_selector: FunctionSelector::from_field(reader.read()),\n is_delegate_call: reader.read() as bool,\n is_static_call: reader.read() as bool,\n side_effect_counter: reader.read() as u32,\n }\n }\n}\n\nimpl Empty for CallContext {\n fn empty() -> Self {\n CallContext {\n msg_sender: AztecAddress::empty(),\n storage_contract_address: AztecAddress::empty(),\n function_selector: FunctionSelector::empty(),\n is_delegate_call: false,\n is_static_call: false,\n side_effect_counter: 0,\n }\n }\n}\n\n#[test]\nfn serialize_deserialize_of_empty() {\n let context = CallContext::empty();\n let serialized = context.serialize();\n let deserialized = CallContext::deserialize(serialized);\n assert(context.eq(deserialized));\n}\n\n#[test]\nfn assert_is_zero() {\n let context = CallContext::empty();\n context.assert_is_zero();\n}\n\n#[test(should_fail)]\nfn not_zero_assert_is_zero() {\n let mut context = CallContext::empty();\n context.is_delegate_call = true;\n context.assert_is_zero();\n}\n\n#[test]\nfn test_eq() {\n let mut context1 = CallContext::empty();\n let mut context2 = CallContext::empty();\n\n context1.is_delegate_call = true;\n context2.is_delegate_call = true;\n\n let address: AztecAddress = AztecAddress::from_field(69420);\n context1.msg_sender = address;\n context2.msg_sender = address;\n\n assert(context1.eq(context2));\n}\n\n#[test(should_fail)]\nfn not_eq_test_eq() {\n let mut context1 = CallContext::empty();\n let mut context2 = CallContext::empty();\n\n context1.is_delegate_call = true;\n context2.is_delegate_call = false;\n\n let address1: AztecAddress = AztecAddress::from_field(69420);\n let address2: AztecAddress = AztecAddress::from_field(42069);\n\n context1.msg_sender = address1;\n context2.msg_sender = address2;\n\n assert(context1.eq(context2));\n}\n\n#[test]\nfn hash_smoke() {\n let context = CallContext::empty();\n let _hashed = context.hash();\n}\n"},"197":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/public_circuit_public_inputs.nr","source":"use crate::{\n abis::{\n call_context::CallContext, note_hash::NoteHash, nullifier::Nullifier, read_request::ReadRequest,\n gas::Gas, global_variables::GlobalVariables, log_hash::LogHash\n},\n address::AztecAddress,\n constants::{\n MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL, MAX_NEW_L2_TO_L1_MSGS_PER_CALL,\n MAX_NEW_NULLIFIERS_PER_CALL, MAX_NEW_NOTE_HASHES_PER_CALL, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL,\n MAX_NULLIFIER_READ_REQUESTS_PER_CALL, MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL,\n MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL, MAX_PUBLIC_DATA_READS_PER_CALL,\n MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL, GENERATOR_INDEX__PUBLIC_CIRCUIT_PUBLIC_INPUTS,\n PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH, MAX_UNENCRYPTED_LOGS_PER_CALL\n},\n contrakt::{storage_read::StorageRead, storage_update_request::StorageUpdateRequest},\n hash::pedersen_hash, header::Header, messaging::l2_to_l1_message::L2ToL1Message,\n traits::{Hash, Serialize, Deserialize, Empty}, utils::reader::Reader\n};\n\nstruct PublicCircuitPublicInputs {\n call_context: CallContext,\n\n args_hash: Field,\n returns_hash: Field,\n\n note_hash_read_requests: [ReadRequest; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n nullifier_read_requests: [ReadRequest; MAX_NULLIFIER_READ_REQUESTS_PER_CALL],\n nullifier_non_existent_read_requests: [ReadRequest; MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL],\n l1_to_l2_msg_read_requests: [ReadRequest; MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL],\n contract_storage_update_requests: [StorageUpdateRequest; MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL],\n contract_storage_reads: [StorageRead; MAX_PUBLIC_DATA_READS_PER_CALL],\n\n // todo: add sideeffect ranges for the input to these hashes\n public_call_stack_hashes: [Field; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL],\n new_note_hashes: [NoteHash; MAX_NEW_NOTE_HASHES_PER_CALL],\n new_nullifiers: [Nullifier; MAX_NEW_NULLIFIERS_PER_CALL],\n new_l2_to_l1_msgs: [L2ToL1Message; MAX_NEW_L2_TO_L1_MSGS_PER_CALL],\n\n start_side_effect_counter: u32,\n end_side_effect_counter: u32,\n\n unencrypted_logs_hashes: [LogHash; MAX_UNENCRYPTED_LOGS_PER_CALL],\n\n // Header of a block whose state is used during public execution. Set by sequencer to be a header of a block\n // previous to the one in which the tx is included.\n historical_header: Header,\n\n // Global variables injected into this circuit\n global_variables: GlobalVariables,\n\n prover_address: AztecAddress,\n\n revert_code: u8,\n \n start_gas_left: Gas,\n end_gas_left: Gas,\n transaction_fee: Field,\n}\n\nimpl Eq for PublicCircuitPublicInputs {\n fn eq(self, other: Self) -> bool {\n self.serialize() == other.serialize()\n }\n}\n\nimpl Serialize<PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH> for PublicCircuitPublicInputs {\n fn serialize(self) -> [Field; PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH] {\n let mut fields: BoundedVec<Field, PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH> = BoundedVec::new();\n fields.extend_from_array(self.call_context.serialize());\n fields.push(self.args_hash);\n fields.push(self.returns_hash);\n for i in 0..MAX_NOTE_HASH_READ_REQUESTS_PER_CALL {\n fields.extend_from_array(self.note_hash_read_requests[i].serialize());\n }\n for i in 0..MAX_NULLIFIER_READ_REQUESTS_PER_CALL {\n fields.extend_from_array(self.nullifier_read_requests[i].serialize());\n }\n for i in 0..MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL {\n fields.extend_from_array(self.nullifier_non_existent_read_requests[i].serialize());\n }\n for i in 0..MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL {\n fields.extend_from_array(self.l1_to_l2_msg_read_requests[i].serialize());\n }\n for i in 0..MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL {\n fields.extend_from_array(self.contract_storage_update_requests[i].serialize());\n }\n for i in 0..MAX_PUBLIC_DATA_READS_PER_CALL {\n fields.extend_from_array(self.contract_storage_reads[i].serialize());\n }\n fields.extend_from_array(self.public_call_stack_hashes);\n\n for i in 0..MAX_NEW_NOTE_HASHES_PER_CALL {\n fields.extend_from_array(self.new_note_hashes[i].serialize());\n }\n for i in 0..MAX_NEW_NULLIFIERS_PER_CALL {\n fields.extend_from_array(self.new_nullifiers[i].serialize());\n }\n for i in 0..MAX_NEW_L2_TO_L1_MSGS_PER_CALL {\n fields.extend_from_array(self.new_l2_to_l1_msgs[i].serialize());\n }\n\n fields.push(self.start_side_effect_counter as Field);\n fields.push(self.end_side_effect_counter as Field);\n\n for i in 0..MAX_UNENCRYPTED_LOGS_PER_CALL{\n fields.extend_from_array(self.unencrypted_logs_hashes[i].serialize());\n }\n fields.extend_from_array(self.historical_header.serialize());\n fields.extend_from_array(self.global_variables.serialize());\n fields.push(self.prover_address.to_field());\n fields.push(self.revert_code as Field);\n fields.extend_from_array(self.start_gas_left.serialize());\n fields.extend_from_array(self.end_gas_left.serialize());\n fields.push(self.transaction_fee);\n fields.storage\n }\n}\n\nimpl Deserialize<PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH> for PublicCircuitPublicInputs {\n fn deserialize(serialized: [Field; PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH]) -> Self {\n // TODO(#4390): This should accept a reader ^ to avoid copying data.\n let mut reader = Reader::new(serialized);\n let inputs = PublicCircuitPublicInputs {\n call_context: reader.read_struct(CallContext::deserialize),\n args_hash: reader.read(),\n returns_hash: reader.read(),\n note_hash_read_requests: reader.read_struct_array(ReadRequest::deserialize, [ReadRequest::empty(); MAX_NOTE_HASH_READ_REQUESTS_PER_CALL]),\n nullifier_read_requests: reader.read_struct_array(ReadRequest::deserialize, [ReadRequest::empty(); MAX_NULLIFIER_READ_REQUESTS_PER_CALL]),\n nullifier_non_existent_read_requests: reader.read_struct_array(ReadRequest::deserialize, [ReadRequest::empty(); MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL]),\n l1_to_l2_msg_read_requests: reader.read_struct_array(ReadRequest::deserialize, [ReadRequest::empty(); MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL]),\n contract_storage_update_requests: reader.read_struct_array(StorageUpdateRequest::deserialize, [StorageUpdateRequest::empty(); MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL]),\n contract_storage_reads: reader.read_struct_array(StorageRead::deserialize, [StorageRead::empty(); MAX_PUBLIC_DATA_READS_PER_CALL]),\n public_call_stack_hashes: reader.read_array([0; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL]),\n new_note_hashes: reader.read_struct_array(NoteHash::deserialize, [NoteHash::empty(); MAX_NEW_NOTE_HASHES_PER_CALL]),\n new_nullifiers: reader.read_struct_array(Nullifier::deserialize, [Nullifier::empty(); MAX_NEW_NULLIFIERS_PER_CALL]),\n new_l2_to_l1_msgs: reader.read_struct_array(L2ToL1Message::deserialize, [L2ToL1Message::empty(); MAX_NEW_L2_TO_L1_MSGS_PER_CALL]),\n start_side_effect_counter: reader.read() as u32,\n end_side_effect_counter: reader.read() as u32,\n unencrypted_logs_hashes: reader.read_struct_array(LogHash::deserialize, [LogHash::empty(); MAX_UNENCRYPTED_LOGS_PER_CALL]),\n historical_header: reader.read_struct(Header::deserialize),\n global_variables: reader.read_struct(GlobalVariables::deserialize),\n prover_address: reader.read_struct(AztecAddress::deserialize),\n revert_code: reader.read() as u8,\n start_gas_left: reader.read_struct(Gas::deserialize),\n end_gas_left: reader.read_struct(Gas::deserialize),\n transaction_fee: reader.read(),\n };\n\n reader.finish();\n inputs\n }\n}\n\nimpl Hash for PublicCircuitPublicInputs {\n fn hash(self) -> Field {\n pedersen_hash(self.serialize(), GENERATOR_INDEX__PUBLIC_CIRCUIT_PUBLIC_INPUTS)\n }\n}\n\nimpl Empty for PublicCircuitPublicInputs {\n fn empty() -> Self {\n PublicCircuitPublicInputs {\n call_context: CallContext::empty(),\n args_hash: 0,\n returns_hash: 0,\n note_hash_read_requests: [ReadRequest::empty(); MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n nullifier_read_requests: [ReadRequest::empty(); MAX_NULLIFIER_READ_REQUESTS_PER_CALL],\n nullifier_non_existent_read_requests: [ReadRequest::empty(); MAX_NULLIFIER_NON_EXISTENT_READ_REQUESTS_PER_CALL],\n l1_to_l2_msg_read_requests: [ReadRequest::empty(); MAX_L1_TO_L2_MSG_READ_REQUESTS_PER_CALL],\n contract_storage_update_requests: [StorageUpdateRequest::empty(); MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL],\n contract_storage_reads: [StorageRead::empty(); MAX_PUBLIC_DATA_READS_PER_CALL],\n public_call_stack_hashes: [0; MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL],\n new_note_hashes: [NoteHash::empty(); MAX_NEW_NOTE_HASHES_PER_CALL],\n new_nullifiers: [Nullifier::empty(); MAX_NEW_NULLIFIERS_PER_CALL],\n new_l2_to_l1_msgs: [L2ToL1Message::empty(); MAX_NEW_L2_TO_L1_MSGS_PER_CALL],\n start_side_effect_counter: 0 as u32,\n end_side_effect_counter: 0 as u32,\n unencrypted_logs_hashes: [LogHash::empty(); MAX_UNENCRYPTED_LOGS_PER_CALL],\n historical_header: Header::empty(),\n global_variables: GlobalVariables::empty(),\n prover_address: AztecAddress::zero(),\n revert_code: 0 as u8,\n start_gas_left: Gas::empty(),\n end_gas_left: Gas::empty(),\n transaction_fee: 0,\n }\n }\n}\n\n#[test]\nfn serialization_of_empty() {\n let pcpi = PublicCircuitPublicInputs::empty();\n let serialized = pcpi.serialize();\n let deserialized = PublicCircuitPublicInputs::deserialize(serialized);\n assert(pcpi.eq(deserialized));\n}\n\n#[test]\nfn empty_hash() {\n let inputs = PublicCircuitPublicInputs::empty();\n let hash = inputs.hash();\n\n // Value from public_circuit_public_inputs.test.ts \"computes empty item hash\" test\n let test_data_empty_hash = 0x0933cf2bb384c9733d5a8311bfdc089489c2557df2265026579f9ac2b21d2ef9;\n assert_eq(hash, test_data_empty_hash);\n}\n"},"199":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/function_data.nr","source":"use crate::{\n abis::function_selector::FunctionSelector,\n constants::{GENERATOR_INDEX__FUNCTION_DATA, FUNCTION_DATA_LENGTH}, hash::pedersen_hash,\n traits::{Serialize, Hash, Deserialize, Empty}\n};\n\nstruct FunctionData {\n selector : FunctionSelector,\n is_private : bool,\n}\n\nimpl Eq for FunctionData {\n fn eq(self, other: Self) -> bool {\n self.selector.eq(other.selector) &\n (self.is_private == other.is_private)\n }\n}\n\nimpl Serialize<FUNCTION_DATA_LENGTH> for FunctionData {\n // A field is ~256 bits\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/3057): Since, function data can fit into a Field,\n // This method will simply return a bit packed Field instead of hashing\n fn serialize(self) -> [Field; FUNCTION_DATA_LENGTH] {\n [\n self.selector.to_field(),\n self.is_private as Field,\n ]\n }\n}\n\nimpl Deserialize<FUNCTION_DATA_LENGTH> for FunctionData {\n fn deserialize(serialized: [Field; FUNCTION_DATA_LENGTH]) -> Self {\n Self {\n selector: FunctionSelector::from_field(serialized[0]),\n is_private: serialized[1] as bool,\n }\n }\n}\n\nimpl Hash for FunctionData {\n fn hash(self) -> Field {\n pedersen_hash(self.serialize(), GENERATOR_INDEX__FUNCTION_DATA)\n }\n}\n\nimpl Empty for FunctionData {\n fn empty() -> Self {\n FunctionData {\n selector: FunctionSelector::empty(),\n is_private: false\n }\n }\n\n}\n\n#[test]\nfn serialization_of_empty() {\n let data = FunctionData::empty();\n let serialized = data.serialize();\n let deserialized = FunctionData::deserialize(serialized);\n assert(data.eq(deserialized));\n}\n\n#[test]\nfn empty_hash() {\n let data = FunctionData::empty();\n let hash = data.hash();\n\n // Value from function_data.test.ts \"computes empty function data hash\" test\n let test_data_empty_hash = 0x27b1d0839a5b23baf12a8d195b18ac288fcf401afb2f70b8a4b529ede5fa9fed;\n assert_eq(hash, test_data_empty_hash);\n}\n"},"206":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/utils.nr","source":"// general util packages/modules are usually bad practice\n// because there is no criteria for what we should not put in here.\n// Reducing the size of this package would be welcome.\n\nmod arrays;\nmod field;\nmod reader;\nmod uint256;\n\n// if predicate == true then return lhs, else return rhs\npub fn conditional_assign(predicate: bool, lhs: Field, rhs: Field) -> Field {\n if predicate { lhs } else { rhs }\n}\n\npub fn arr_copy_slice<T, N, M>(src: [T; N], mut dst: [T; M], offset: u64) -> [T; M] {\n for i in 0..dst.len() {\n dst[i] = src[i + offset];\n }\n dst\n}\n"},"208":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/storage/map.nr","source":"use crate::{hash::pedersen_hash, traits::ToField};\n\npub fn derive_storage_slot_in_map<K>(storage_slot: Field, key: K) -> Field where K: ToField {\n pedersen_hash([storage_slot, key.to_field()], 0)\n}\n"},"21":{"path":"std/field/bn254.nr","source":"use crate::runtime::is_unconstrained;\n\n// The low and high decomposition of the field modulus\nglobal PLO: Field = 53438638232309528389504892708671455233;\nglobal PHI: Field = 64323764613183177041862057485226039389;\n\nglobal TWO_POW_128: Field = 0x100000000000000000000000000000000;\n\n// Decomposes a single field into two 16 byte fields.\nfn compute_decomposition(x: Field) -> (Field, Field) {\n let x_bytes = x.to_le_bytes(32);\n\n let mut low: Field = 0;\n let mut high: Field = 0;\n\n let mut offset = 1;\n for i in 0..16 {\n low += (x_bytes[i] as Field) * offset;\n high += (x_bytes[i + 16] as Field) * offset;\n offset *= 256;\n }\n\n (low, high)\n}\n\nunconstrained fn decompose_hint(x: Field) -> (Field, Field) {\n compute_decomposition(x)\n}\n\nfn compute_lt(x: Field, y: Field, num_bytes: u32) -> bool {\n let x_bytes = x.to_le_radix(256, num_bytes);\n let y_bytes = y.to_le_radix(256, num_bytes);\n let mut x_is_lt = false;\n let mut done = false;\n for i in 0..num_bytes {\n if (!done) {\n let x_byte = x_bytes[num_bytes - 1 - i];\n let y_byte = y_bytes[num_bytes - 1 - i];\n let bytes_match = x_byte == y_byte;\n if !bytes_match {\n x_is_lt = x_byte < y_byte;\n done = true;\n }\n }\n }\n x_is_lt\n}\n\nfn compute_lte(x: Field, y: Field, num_bytes: u32) -> bool {\n if x == y {\n true\n } else {\n compute_lt(x, y, num_bytes)\n }\n}\n\nunconstrained fn lt_32_hint(x: Field, y: Field) -> bool {\n compute_lt(x, y, 32)\n}\n\nunconstrained fn lte_16_hint(x: Field, y: Field) -> bool {\n compute_lte(x, y, 16)\n}\n\n// Assert that (alo > blo && ahi >= bhi) || (alo <= blo && ahi > bhi)\nfn assert_gt_limbs(a: (Field, Field), b: (Field, Field)) {\n let (alo, ahi) = a;\n let (blo, bhi) = b;\n let borrow = lte_16_hint(alo, blo);\n\n let rlo = alo - blo - 1 + (borrow as Field) * TWO_POW_128;\n let rhi = ahi - bhi - (borrow as Field);\n\n rlo.assert_max_bit_size(128);\n rhi.assert_max_bit_size(128);\n}\n\n/// Decompose a single field into two 16 byte fields.\npub fn decompose(x: Field) -> (Field, Field) {\n if is_unconstrained() {\n compute_decomposition(x)\n } else {\n // Take hints of the decomposition\n let (xlo, xhi) = decompose_hint(x);\n\n // Range check the limbs\n xlo.assert_max_bit_size(128);\n xhi.assert_max_bit_size(128);\n\n // Check that the decomposition is correct\n assert_eq(x, xlo + TWO_POW_128 * xhi);\n\n // Assert that the decomposition of P is greater than the decomposition of x\n assert_gt_limbs((PLO, PHI), (xlo, xhi));\n (xlo, xhi)\n }\n}\n\npub fn assert_gt(a: Field, b: Field) {\n if is_unconstrained() {\n assert(compute_lt(b, a, 32));\n } else {\n // Decompose a and b\n let a_limbs = decompose(a);\n let b_limbs = decompose(b);\n\n // Assert that a_limbs is greater than b_limbs\n assert_gt_limbs(a_limbs, b_limbs)\n }\n}\n\npub fn assert_lt(a: Field, b: Field) {\n assert_gt(b, a);\n}\n\npub fn gt(a: Field, b: Field) -> bool {\n if is_unconstrained() {\n compute_lt(b, a, 32)\n } else if a == b {\n false\n } else {\n // Take a hint of the comparison and verify it\n if lt_32_hint(a, b) {\n assert_gt(b, a);\n false\n } else {\n assert_gt(a, b);\n true\n }\n }\n}\n\npub fn lt(a: Field, b: Field) -> bool {\n gt(b, a)\n}\n\nmod tests {\n // TODO: Allow imports from \"super\"\n use crate::field::bn254::{decompose_hint, decompose, compute_lt, assert_gt, gt, lt, TWO_POW_128, compute_lte, PLO, PHI};\n\n #[test]\n fn check_decompose() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_decompose_unconstrained() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n fn check_compute_lt() {\n assert(compute_lt(0, 1, 16));\n assert(compute_lt(0, 0x100, 16));\n assert(compute_lt(0x100, TWO_POW_128 - 1, 16));\n assert(!compute_lt(0, TWO_POW_128, 16));\n }\n\n #[test]\n fn check_compute_lte() {\n assert(compute_lte(0, 1, 16));\n assert(compute_lte(0, 0x100, 16));\n assert(compute_lte(0x100, TWO_POW_128 - 1, 16));\n assert(!compute_lte(0, TWO_POW_128, 16));\n\n assert(compute_lte(0, 0, 16));\n assert(compute_lte(0x100, 0x100, 16));\n assert(compute_lte(TWO_POW_128 - 1, TWO_POW_128 - 1, 16));\n assert(compute_lte(TWO_POW_128, TWO_POW_128, 16));\n }\n\n #[test]\n fn check_assert_gt() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n unconstrained fn check_assert_gt_unconstrained() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n fn check_gt() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n unconstrained fn check_gt_unconstrained() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n fn check_plo_phi() {\n assert_eq(PLO + PHI * TWO_POW_128, 0);\n let p_bytes = crate::field::modulus_le_bytes();\n let mut p_low: Field = 0;\n let mut p_high: Field = 0;\n\n let mut offset = 1;\n for i in 0..16 {\n p_low += (p_bytes[i] as Field) * offset;\n p_high += (p_bytes[i + 16] as Field) * offset;\n offset *= 256;\n }\n assert_eq(p_low, PLO);\n assert_eq(p_high, PHI);\n }\n}\n"},"215":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/type_serialization.nr","source":"use crate::traits::{Serialize, Deserialize};\n\nglobal BOOL_SERIALIZED_LEN: Field = 1;\nglobal U8_SERIALIZED_LEN: Field = 1;\nglobal U32_SERIALIZED_LEN: Field = 1;\nglobal U64_SERIALIZED_LEN: Field = 1;\nglobal U128_SERIALIZED_LEN: Field = 1;\nglobal FIELD_SERIALIZED_LEN: Field = 1;\n\nimpl Serialize<BOOL_SERIALIZED_LEN> for bool {\n fn serialize(self) -> [Field; BOOL_SERIALIZED_LEN] {\n [self as Field]\n }\n}\n\nimpl Deserialize<BOOL_SERIALIZED_LEN> for bool {\n fn deserialize(fields: [Field; BOOL_SERIALIZED_LEN]) -> bool {\n fields[0] as bool\n }\n}\n\nimpl Serialize<U8_SERIALIZED_LEN> for u8 {\n fn serialize(self) -> [Field; U32_SERIALIZED_LEN] {\n [self as Field]\n }\n}\n\nimpl Deserialize<U8_SERIALIZED_LEN> for u8 {\n fn deserialize(fields: [Field; U8_SERIALIZED_LEN]) -> Self {\n fields[0] as u8\n }\n}\n\nimpl Serialize<U32_SERIALIZED_LEN> for u32 {\n fn serialize(self) -> [Field; U32_SERIALIZED_LEN] {\n [self as Field]\n }\n}\n\nimpl Deserialize<U32_SERIALIZED_LEN> for u32 {\n fn deserialize(fields: [Field; U32_SERIALIZED_LEN]) -> Self {\n fields[0] as u32\n }\n}\n\nimpl Serialize<U64_SERIALIZED_LEN> for u64 {\n fn serialize(self) -> [Field; U64_SERIALIZED_LEN] {\n [self as Field]\n }\n}\n\nimpl Deserialize<U64_SERIALIZED_LEN> for u64 {\n fn deserialize(fields: [Field; U64_SERIALIZED_LEN]) -> Self {\n fields[0] as u64\n }\n}\n\nimpl Serialize<U128_SERIALIZED_LEN> for U128 {\n fn serialize(self) -> [Field; 1] {\n [self.to_integer()]\n }\n\n}\n\nimpl Deserialize<U128_SERIALIZED_LEN> for U128 {\n fn deserialize(fields: [Field; U128_SERIALIZED_LEN]) -> Self {\n U128::from_integer(fields[0])\n }\n}\n\nimpl Serialize<FIELD_SERIALIZED_LEN> for Field {\n fn serialize(self) -> [Field; U32_SERIALIZED_LEN] {\n [self]\n }\n}\n\nimpl Deserialize<FIELD_SERIALIZED_LEN> for Field {\n fn deserialize(fields: [Field; FIELD_SERIALIZED_LEN]) -> Self {\n fields[0]\n }\n}\n"},"216":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/traits.nr","source":"use dep::std::cmp::Eq;\nuse crate::utils::field::field_from_bytes;\n\n// Trait: is_empty\n//\n// The general is_empty trait checks if a data type is is empty,\n// and it defines empty for the basic data types as 0.\n//\n// If a Field is equal to zero, then it is regarded as zero.\n// We will go with this definition for now, however it can be problematic \n// if a value can actually be zero. In a future refactor, we can \n// use the optional type for safety. Doing it now would lead to a worse devex\n// and would make it harder to sync up with the cpp code.\n// Preferred over Default trait to convey intent, as default doesn't necessarily mean empty.\ntrait Empty {\n fn empty() -> Self;\n}\n\nimpl Empty for Field { fn empty() -> Self {0} }\n\nimpl Empty for u1 { fn empty() -> Self {0} }\nimpl Empty for u8 { fn empty() -> Self {0} }\nimpl Empty for u32 { fn empty() -> Self {0} }\nimpl Empty for u64 { fn empty() -> Self {0} }\nimpl Empty for U128 { fn empty() -> Self {U128::from_integer(0)} }\n\npub fn is_empty<T>(item: T) -> bool where T: Empty + Eq {\n item.eq(T::empty())\n}\n\npub fn is_empty_array<T, N>(array: [T; N]) -> bool where T: Empty + Eq {\n array.all(|elem| is_empty(elem))\n}\n\ntrait Hash {\n fn hash(self) -> Field;\n}\n\ntrait ToField {\n fn to_field(self) -> Field;\n}\n\nimpl ToField for Field {\n fn to_field(self) -> Field {\n self\n }\n}\n\nimpl ToField for bool { fn to_field(self) -> Field { self as Field } }\nimpl ToField for u1 { fn to_field(self) -> Field { self as Field } }\nimpl ToField for u8 { fn to_field(self) -> Field { self as Field } }\nimpl ToField for u32 { fn to_field(self) -> Field { self as Field } }\nimpl ToField for u64 { fn to_field(self) -> Field { self as Field } }\nimpl ToField for U128 {\n fn to_field(self) -> Field {\n self.to_integer()\n }\n}\nimpl<N> ToField for str<N> {\n fn to_field(self) -> Field {\n assert(N < 32, \"String doesn't fit in a field, consider using Serialize instead\");\n field_from_bytes(self.as_bytes(), true)\n }\n}\n\ntrait FromField {\n fn from_field(value: Field) -> Self;\n}\n\nimpl FromField for Field {\n fn from_field(value: Field) -> Self {\n value\n }\n}\n\nimpl FromField for bool { fn from_field(value: Field) -> Self { value as bool } }\nimpl FromField for u1 { fn from_field(value: Field) -> Self { value as u1 } }\nimpl FromField for u8 { fn from_field(value: Field) -> Self { value as u8 } }\nimpl FromField for u32 { fn from_field(value: Field) -> Self { value as u32 } }\nimpl FromField for u64 { fn from_field(value: Field) -> Self { value as u64 } }\nimpl FromField for U128 {\n fn from_field(value: Field) -> Self {\n U128::from_integer(value)\n }\n}\n\n// docs:start:serialize\ntrait Serialize<N> {\n fn serialize(self) -> [Field; N];\n}\n// docs:end:serialize\n\nimpl<N> Serialize<N> for str<N> {\n fn serialize(self) -> [Field; N] {\n let mut result = [0; N];\n let bytes: [u8; N] = self.as_bytes();\n for i in 0..N {\n result[i] = field_from_bytes([bytes[i];1], true);\n }\n result\n }\n}\n\n// docs:start:deserialize\ntrait Deserialize<N> {\n fn deserialize(fields: [Field; N]) -> Self;\n}\n// docs:end:deserialize"},"22":{"path":"std/field.nr","source":"mod bn254;\nuse bn254::lt as bn254_lt;\n\nimpl Field {\n pub fn to_le_bits(self: Self, bit_size: u32) -> [u1] {\n crate::assert_constant(bit_size);\n self.__to_le_bits(bit_size)\n }\n\n pub fn to_be_bits(self: Self, bit_size: u32) -> [u1] {\n crate::assert_constant(bit_size);\n self.__to_be_bits(bit_size)\n }\n\n #[builtin(to_le_bits)]\n fn __to_le_bits(self, _bit_size: u32) -> [u1] {}\n\n #[builtin(to_be_bits)]\n fn __to_be_bits(self, bit_size: u32) -> [u1] {}\n\n #[builtin(apply_range_constraint)]\n fn __assert_max_bit_size(self, bit_size: u32) {}\n\n pub fn assert_max_bit_size(self: Self, bit_size: u32) {\n crate::assert_constant(bit_size);\n assert(bit_size < modulus_num_bits() as u32);\n self.__assert_max_bit_size(bit_size);\n }\n\n pub fn to_le_bytes(self: Self, byte_size: u32) -> [u8] {\n self.to_le_radix(256, byte_size)\n }\n\n pub fn to_be_bytes(self: Self, byte_size: u32) -> [u8] {\n self.to_be_radix(256, byte_size)\n }\n\n pub fn to_le_radix(self: Self, radix: u32, result_len: u32) -> [u8] {\n crate::assert_constant(radix);\n crate::assert_constant(result_len);\n self.__to_le_radix(radix, result_len)\n }\n\n pub fn to_be_radix(self: Self, radix: u32, result_len: u32) -> [u8] {\n crate::assert_constant(radix);\n crate::assert_constant(result_len);\n self.__to_be_radix(radix, result_len)\n }\n\n // decompose `_self` into a `_result_len` vector over the `_radix` basis\n // `_radix` must be less than 256\n #[builtin(to_le_radix)]\n fn __to_le_radix(self, radix: u32, result_len: u32) -> [u8] {}\n\n #[builtin(to_be_radix)]\n fn __to_be_radix(self, radix: u32, result_len: u32) -> [u8] {}\n\n // Returns self to the power of the given exponent value.\n // Caution: we assume the exponent fits into 32 bits\n // using a bigger bit size impacts negatively the performance and should be done only if the exponent does not fit in 32 bits\n pub fn pow_32(self, exponent: Field) -> Field {\n let mut r: Field = 1;\n let b = exponent.to_le_bits(32);\n\n for i in 1..33 {\n r *= r;\n r = (b[32-i] as Field) * (r * self) + (1 - b[32-i] as Field) * r;\n }\n r\n }\n\n // Parity of (prime) Field element, i.e. sgn0(x mod p) = 0 if x ∈ {0, ..., p-1} is even, otherwise sgn0(x mod p) = 1.\n pub fn sgn0(self) -> u1 {\n self as u1\n }\n\n pub fn lt(self, another: Field) -> bool {\n if crate::compat::is_bn254() {\n bn254_lt(self, another)\n } else {\n lt_fallback(self, another)\n }\n }\n}\n\n#[builtin(modulus_num_bits)]\npub fn modulus_num_bits() -> u64 {}\n\n#[builtin(modulus_be_bits)]\npub fn modulus_be_bits() -> [u1] {}\n\n#[builtin(modulus_le_bits)]\npub fn modulus_le_bits() -> [u1] {}\n\n#[builtin(modulus_be_bytes)]\npub fn modulus_be_bytes() -> [u8] {}\n\n#[builtin(modulus_le_bytes)]\npub fn modulus_le_bytes() -> [u8] {}\n// Convert a 32 byte array to a field element by modding\npub fn bytes32_to_field(bytes32: [u8; 32]) -> Field {\n // Convert it to a field element\n let mut v = 1;\n let mut high = 0 as Field;\n let mut low = 0 as Field;\n\n for i in 0..16 {\n high = high + (bytes32[15 - i] as Field) * v;\n low = low + (bytes32[16 + 15 - i] as Field) * v;\n v = v * 256;\n }\n // Abuse that a % p + b % p = (a + b) % p and that low < p\n low + high * v\n}\n\nfn lt_fallback(x: Field, y: Field) -> bool {\n let num_bytes = (modulus_num_bits() as u32 + 7) / 8;\n let x_bytes = x.to_le_bytes(num_bytes);\n let y_bytes = y.to_le_bytes(num_bytes);\n let mut x_is_lt = false;\n let mut done = false;\n for i in 0..num_bytes {\n if (!done) {\n let x_byte = x_bytes[num_bytes - 1 - i] as u8;\n let y_byte = y_bytes[num_bytes - 1 - i] as u8;\n let bytes_match = x_byte == y_byte;\n if !bytes_match {\n x_is_lt = x_byte < y_byte;\n done = true;\n }\n }\n }\n x_is_lt\n}\n\n"},"221":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/public_data_tree_leaf_preimage.nr","source":"use crate::{merkle_tree::leaf_preimage::IndexedTreeLeafPreimage, traits::{Empty, Hash}};\n\nstruct PublicDataTreeLeafPreimage {\n slot : Field,\n value: Field,\n next_slot :Field,\n next_index : u64,\n}\n\nimpl Empty for PublicDataTreeLeafPreimage {\n fn empty() -> Self {\n Self {\n slot: 0,\n value: 0,\n next_slot: 0,\n next_index: 0,\n }\n }\n}\n\nimpl Hash for PublicDataTreeLeafPreimage {\n fn hash(self) -> Field {\n if self.is_empty() {\n 0\n } else {\n dep::std::hash::pedersen_hash([self.slot, self.value, (self.next_index as Field), self.next_slot])\n }\n }\n}\n\nimpl IndexedTreeLeafPreimage for PublicDataTreeLeafPreimage {\n fn get_key(self) -> Field {\n self.slot\n }\n\n fn get_next_key(self) -> Field {\n self.next_slot\n }\n\n fn as_leaf(self) -> Field {\n self.hash()\n }\n}\n\nimpl PublicDataTreeLeafPreimage {\n pub fn is_empty(self) -> bool {\n (self.slot == 0) & (self.value == 0) & (self.next_slot == 0) & (self.next_index == 0)\n }\n}\n"},"224":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr","source":"use crate::address::{AztecAddress, EthAddress};\nuse crate::recursion::verification_key::VerificationKey;\nuse crate::abis::function_selector::FunctionSelector;\nuse crate::abis::contract_class_function_leaf_preimage::ContractClassFunctionLeafPreimage;\nuse crate::contract_class_id::ContractClassId;\nuse crate::abis::log_hash::LogHash;\nuse crate::traits::is_empty;\nuse crate::utils::{uint256::U256, field::field_from_bytes_32_trunc};\nuse crate::constants::{\n FUNCTION_TREE_HEIGHT, GENERATOR_INDEX__SILOED_NOTE_HASH, GENERATOR_INDEX__OUTER_NULLIFIER,\n GENERATOR_INDEX__VK, GENERATOR_INDEX__NOTE_HASH_NONCE, GENERATOR_INDEX__UNIQUE_NOTE_HASH,\n MAX_ENCRYPTED_LOGS_PER_TX, MAX_NOTE_ENCRYPTED_LOGS_PER_TX\n};\nuse crate::traits::Hash;\nuse crate::messaging::l2_to_l1_message::L2ToL1Message;\nuse crate::merkle_tree::root::root_from_sibling_path;\nuse dep::std::hash::{pedersen_hash_with_separator, sha256};\n\npub fn sha256_to_field<N>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = sha256(bytes_to_hash);\n let hash_in_a_field = field_from_bytes_32_trunc(sha256_hashed);\n\n hash_in_a_field\n}\n\npub fn private_functions_root_from_siblings(\n selector: FunctionSelector,\n vk_hash: Field,\n function_leaf_index: Field,\n function_leaf_sibling_path: [Field; FUNCTION_TREE_HEIGHT]\n) -> Field {\n let function_leaf_preimage = ContractClassFunctionLeafPreimage { selector, vk_hash };\n let function_leaf = function_leaf_preimage.hash();\n root_from_sibling_path(function_leaf, function_leaf_index, function_leaf_sibling_path)\n}\n\npub fn compute_note_hash_nonce(first_nullifier: Field, note_hash_index: u64) -> Field {\n pedersen_hash(\n [\n first_nullifier,\n note_hash_index as Field\n ],\n GENERATOR_INDEX__NOTE_HASH_NONCE\n )\n}\n\npub fn compute_unique_note_hash(nonce: Field, note_hash: Field) -> Field {\n pedersen_hash(\n [\n nonce,\n note_hash\n ],\n GENERATOR_INDEX__UNIQUE_NOTE_HASH\n )\n}\n\npub fn silo_note_hash(address: AztecAddress, unique_note_hash: Field) -> Field {\n pedersen_hash(\n [\n address.to_field(),\n unique_note_hash\n ],\n GENERATOR_INDEX__SILOED_NOTE_HASH\n )\n}\n\npub fn silo_nullifier(address: AztecAddress, nullifier: Field) -> Field {\n pedersen_hash(\n [\n address.to_field(),\n nullifier\n ],\n GENERATOR_INDEX__OUTER_NULLIFIER\n )\n}\n\npub fn silo_encrypted_log(address: AztecAddress, randomness: Field, log_hash: Field) -> Field {\n // TODO: Using 0 GENERATOR_INDEX here as interim before we move to posiedon\n // NB: A unique separator will be needed for masked_contract_address\n let mut masked_contract_address = pedersen_hash([address.to_field(), randomness], 0);\n if randomness == 0 {\n // In some cases, we actually want to reveal the contract address we are siloing with:\n // e.g. 'handshaking' contract w/ known address\n // An app providing randomness = 0 signals to not mask the address.\n masked_contract_address = address.to_field();\n }\n accumulate_sha256([masked_contract_address, log_hash])\n}\n\npub fn silo_unencrypted_log(address: AztecAddress, log_hash: Field) -> Field {\n accumulate_sha256([address.to_field(), log_hash])\n}\n\npub fn merkle_hash(left: Field, right: Field) -> Field {\n pedersen_hash([left, right], 0)\n}\n\npub fn stdlib_recursion_verification_key_compress_native_vk(_vk: VerificationKey) -> Field {\n // Original cpp code\n // stdlib::recursion::verification_key<CT::bn254>::compress_native(private_call.vk, GeneratorIndex::VK);\n // The above cpp method is only ever called on verification key, so it has been special cased here\n let _hash_index = GENERATOR_INDEX__VK;\n 0\n}\n\npub fn compute_l2_to_l1_hash(\n contract_address: AztecAddress,\n rollup_version_id: Field,\n chain_id: Field,\n message: L2ToL1Message\n) -> Field {\n let mut bytes: BoundedVec<u8, 160> = BoundedVec::new();\n\n let inputs = [\n contract_address.to_field(), rollup_version_id, message.recipient.to_field(), chain_id, message.content\n ];\n for i in 0..inputs.len() {\n // TODO are bytes be in fr.to_buffer() ?\n let item_bytes = inputs[i].to_be_bytes(32);\n for j in 0..32 {\n bytes.push(item_bytes[j]);\n }\n }\n\n sha256_to_field(bytes.storage)\n}\n\n// Computes sha256 hash of 2 input hashes.\n//\n// NB: This method now takes in two 31 byte fields - it assumes that any input\n// is the result of a sha_to_field hash and => is truncated\n//\n// TODO(Jan and David): This is used for the encrypted_log hashes.\n// Can we check to see if we can just use hash_to_field or pedersen_compress here?\n//\npub fn accumulate_sha256(input: [Field; 2]) -> Field {\n // This is a note about the cpp code, since it takes an array of Fields\n // instead of a U128.\n // 4 Field elements when converted to bytes will usually \n // occupy 4 * 32 = 128 bytes.\n // However, this function is making the assumption that each Field \n // only occupies 128 bits.\n //\n // TODO(David): This does not seem to be getting guaranteed anywhere in the code?\n\n // Concatentate two fields into 32x2 = 64 bytes\n // accumulate_sha256 assumes that the inputs are pre-truncated 31 byte numbers\n let mut hash_input_flattened = [0; 64];\n for offset in 0..input.len() {\n let input_as_bytes = input[offset].to_be_bytes(32);\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n\n sha256_to_field(hash_input_flattened)\n}\n\n// Computes the final logs hash for a tx.\n// NB: this assumes MAX_ENCRYPTED_LOGS_PER_TX == MAX_UNENCRYPTED_LOGS_PER_TX\n// to avoid doubling code, since we can't define the byte len to be 32*N directly. \npub fn compute_tx_logs_hash(logs: [LogHash; MAX_ENCRYPTED_LOGS_PER_TX]) -> Field {\n // Convert each field element into a byte array and append the bytes to `hash_input_flattened`\n let mut hash_input_flattened = [0; MAX_ENCRYPTED_LOGS_PER_TX * 32];\n for offset in 0..MAX_ENCRYPTED_LOGS_PER_TX {\n let input_as_bytes = logs[offset].value.to_be_bytes(32);\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n // Ideally we would push to a slice then hash, but there is no sha_slice\n // Hardcode to 256 bytes for now\n let mut hash = sha256_to_field(hash_input_flattened);\n // Not having a 0 value hash for empty logs causes issues with empty txs\n // used for padding. Returning early is currently unsupported.\n // We always provide sorted logs here, so 0 being empty means all are empty.\n if is_empty(logs[0]) {\n hash = 0;\n }\n hash\n}\n\npub fn compute_tx_note_logs_hash(logs: [LogHash; MAX_NOTE_ENCRYPTED_LOGS_PER_TX]) -> Field {\n // Convert each field element into a byte array and append the bytes to `hash_input_flattened`\n let mut hash_input_flattened = [0; MAX_NOTE_ENCRYPTED_LOGS_PER_TX * 32];\n for offset in 0..MAX_NOTE_ENCRYPTED_LOGS_PER_TX {\n let input_as_bytes = logs[offset].value.to_be_bytes(32);\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n // Ideally we would push to a slice then hash, but there is no sha_slice\n // Hardcode to 256 bytes for now\n let mut hash = sha256_to_field(hash_input_flattened);\n // Not having a 0 value hash for empty logs causes issues with empty txs\n // used for padding. Returning early is currently unsupported.\n // We always provide sorted logs here, so 0 being empty means all are empty.\n if is_empty(logs[0]) {\n hash = 0;\n }\n hash\n}\n\npub fn pedersen_hash<N>(inputs: [Field; N], hash_index: u32) -> Field {\n dep::std::hash::pedersen_hash_with_separator(inputs, hash_index)\n}\n\npub fn poseidon2_hash<N>(inputs: [Field; N]) -> Field {\n dep::std::hash::poseidon2::Poseidon2::hash(inputs, N)\n}\n\n#[test]\nfn smoke_sha256_to_field() {\n let full_buffer = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,\n 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,\n 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,\n 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,\n 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,\n 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,\n 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,\n 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159\n ];\n let result = sha256_to_field(full_buffer);\n\n assert(result == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184c7);\n\n // to show correctness of the current ver (truncate one byte) vs old ver (mod full bytes):\n let result_bytes = sha256(full_buffer);\n let truncated_field = crate::utils::field::field_from_bytes_32_trunc(result_bytes);\n assert(truncated_field == result);\n let mod_res = result + (result_bytes[31] as Field);\n assert(mod_res == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184e0);\n}\n\n#[test]\nfn compute_l2_l1_hash() {\n // All zeroes\n let hash_result = compute_l2_to_l1_hash(AztecAddress::from_field(0), 0, 0, L2ToL1Message::empty());\n assert(hash_result == 0xb393978842a0fa3d3e1470196f098f473f9678e72463cb65ec4ab5581856c2);\n\n // Non-zero case\n let message = L2ToL1Message { recipient: EthAddress::from_field(3), content: 5, counter: 1234 };\n let hash_result = compute_l2_to_l1_hash(AztecAddress::from_field(1), 2, 4, message);\n assert(hash_result == 0x3f88c1044a05e5340ed20466276500f6d45ca5603913b9091e957161734e16);\n}\n"},"244":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/utils/reader.nr","source":"struct Reader<N> {\n data: [Field; N],\n offset: u64,\n}\n\nimpl<N> Reader<N> {\n pub fn new(data: [Field; N]) -> Self {\n Self { data, offset: 0 }\n }\n\n pub fn read(&mut self) -> Field {\n let result = self.data[self.offset];\n self.offset += 1;\n result\n }\n\n pub fn read_u32(&mut self) -> u32 {\n self.read() as u32\n }\n\n pub fn read_bool(&mut self) -> bool {\n self.read() as bool\n }\n\n pub fn read_array<K>(&mut self, mut result: [Field; K]) -> [Field; K] {\n for i in 0..K {\n result[i] = self.data[self.offset + i];\n }\n self.offset += K;\n result\n }\n\n // TODO(#4394)\n pub fn read_struct<T, K>(&mut self, deserialise: fn([Field; K]) -> T) -> T {\n let result = deserialise(self.read_array([0; K]));\n result\n }\n\n pub fn read_struct_array<T, K, C>(&mut self, deserialise: fn([Field; K]) -> T, mut result: [T; C]) -> [T; C] {\n for i in 0..C {\n result[i] = self.read_struct(deserialise);\n }\n result\n }\n\n pub fn finish(self) {\n assert(self.offset == self.data.len(), \"Reader did not read all data\");\n }\n}\n"},"246":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/utils/field.nr","source":"pub fn field_from_bytes<N>(bytes: [u8; N], big_endian: bool) -> Field {\n assert(bytes.len() < 32, \"field_from_bytes: N must be less than 32\");\n let mut as_field = 0;\n let mut offset = 1;\n for i in 0..N {\n let mut index = i;\n if big_endian {\n index = N - i - 1;\n }\n as_field += (bytes[index] as Field) * offset;\n offset *= 256;\n }\n\n as_field\n}\n\n// Convert a 32 byte array to a field element by truncating the final byte\npub fn field_from_bytes_32_trunc(bytes32: [u8; 32]) -> Field {\n // Convert it to a field element\n let mut v = 1;\n let mut high = 0 as Field;\n let mut low = 0 as Field;\n\n for i in 0..15 {\n // covers bytes 16..30 (31 is truncated and ignored)\n low = low + (bytes32[15 + 15 - i] as Field) * v;\n v = v * 256;\n // covers bytes 0..14\n high = high + (bytes32[14 - i] as Field) * v;\n }\n // covers byte 15\n low = low + (bytes32[15] as Field) * v;\n\n low + high * v\n}\n\n// TODO to radix returns u8, so we cannot use bigger radixes. It'd be ideal to use a radix of the maximum range-constrained integer noir supports\npub fn full_field_less_than(lhs: Field, rhs: Field) -> bool {\n lhs.lt(rhs)\n}\n\npub fn full_field_greater_than(lhs: Field, rhs: Field) -> bool {\n rhs.lt(lhs)\n}\n\n#[test]\nunconstrained fn bytes_field_test() {\n // Tests correctness of field_from_bytes_32_trunc against existing methods\n // Bytes representing 0x543e0a6642ffeb8039296861765a53407bba62bd1c97ca43374de950bbe0a7\n let inputs = [\n 84, 62, 10, 102, 66, 255, 235, 128, 57, 41, 104, 97, 118, 90, 83, 64, 123, 186, 98, 189, 28, 151, 202, 67, 55, 77, 233, 80, 187, 224, 167\n ];\n let field = field_from_bytes(inputs, true);\n let return_bytes = field.to_be_bytes(31);\n for i in 0..31 {\n assert_eq(inputs[i], return_bytes[i]);\n }\n // 32 bytes - we remove the final byte, and check it matches the field\n let inputs2 = [\n 84, 62, 10, 102, 66, 255, 235, 128, 57, 41, 104, 97, 118, 90, 83, 64, 123, 186, 98, 189, 28, 151, 202, 67, 55, 77, 233, 80, 187, 224, 167, 158\n ];\n let field2 = field_from_bytes_32_trunc(inputs2);\n let return_bytes2 = field.to_be_bytes(31);\n\n for i in 0..31 {\n assert_eq(return_bytes2[i], return_bytes[i]);\n }\n assert_eq(field2, field);\n}\n"},"259":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/eth_address.nr","source":"use crate::{\n constants::ETH_ADDRESS_LENGTH, hash::pedersen_hash,\n traits::{Empty, ToField, Serialize, Deserialize}, utils\n};\n\nstruct EthAddress{\n inner : Field\n}\n\nimpl Eq for EthAddress {\n fn eq(self, other : Self) -> bool {\n self.to_field() == other.to_field()\n }\n}\n\nimpl Empty for EthAddress {\n fn empty() -> Self {\n Self {\n inner : 0\n }\n }\n}\n\nimpl ToField for EthAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl Serialize<ETH_ADDRESS_LENGTH> for EthAddress {\n fn serialize(self: Self) -> [Field; ETH_ADDRESS_LENGTH] {\n [self.inner]\n }\n}\n\nimpl Deserialize<ETH_ADDRESS_LENGTH> for EthAddress {\n fn deserialize(fields: [Field; ETH_ADDRESS_LENGTH]) -> Self {\n EthAddress::from_field(fields[0])\n }\n}\n\nimpl EthAddress {\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n\n pub fn from_field(field: Field) -> Self {\n field.assert_max_bit_size(160);\n Self { inner: field }\n }\n\n pub fn is_zero(self) -> bool {\n self.inner == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n\n pub fn conditional_assign(predicate: bool, lhs: Self, rhs: Self) -> Self {\n let result = utils::conditional_assign(predicate, rhs.to_field(), lhs.to_field());\n Self { inner: result }\n }\n}\n"},"264":{"path":"/usr/src/noir-projects/noir-contracts/contracts/gas_token_contract/src/main.nr","source":"mod lib;\n\ncontract GasToken {\n use dep::aztec::protocol_types::{abis::function_selector::FunctionSelector, address::{AztecAddress, EthAddress}};\n use dep::aztec::state_vars::{SharedImmutable, PublicMutable, Map};\n\n use crate::lib::{calculate_fee, get_bridge_gas_msg_hash};\n\n #[aztec(storage)]\n struct Storage {\n // This map is accessed directly by protocol circuits to check balances for fee payment.\n // Do not change this storage layout unless you also update the base rollup circuits.\n balances: Map<AztecAddress, PublicMutable<U128>>,\n portal_address: SharedImmutable<EthAddress>,\n }\n\n // We purposefully not set this function as an initializer so we do not bind\n // the contract to a specific L1 portal address, since the gas token address\n // is a hardcoded constant in the rollup circuits.\n #[aztec(public)]\n fn set_portal(portal_address: EthAddress) {\n assert(storage.portal_address.read_public().is_zero());\n storage.portal_address.initialize(portal_address);\n }\n\n #[aztec(private)]\n fn claim(to: AztecAddress, amount: Field, secret: Field) {\n let content_hash = get_bridge_gas_msg_hash(to, amount);\n let portal_address = storage.portal_address.read_private();\n assert(!portal_address.is_zero());\n\n // Consume message and emit nullifier\n context.consume_l1_to_l2_message(content_hash, secret, portal_address);\n\n // TODO(palla/gas) Emit an unencrypted log to announce which L1 to L2 message has been claimed\n // Otherwise, we cannot trace L1 deposits to their corresponding claims on L2\n\n GasToken::at(context.this_address())._increase_public_balance(to, amount).enqueue(&mut context);\n }\n\n #[aztec(public)]\n #[aztec(internal)]\n fn _increase_public_balance(to: AztecAddress, amount: Field) {\n let new_balance = storage.balances.at(to).read().add(U128::from_integer(amount));\n storage.balances.at(to).write(new_balance);\n }\n\n // TODO(palla/gas) Remove this function and use the private claim flow only\n #[aztec(public)]\n fn claim_public(to: AztecAddress, amount: Field, secret: Field, leaf_index: Field) {\n let content_hash = get_bridge_gas_msg_hash(to, amount);\n let portal_address = storage.portal_address.read_public();\n assert(!portal_address.is_zero());\n\n // Consume message and emit nullifier\n context.consume_l1_to_l2_message(content_hash, secret, portal_address, leaf_index);\n\n let new_balance = storage.balances.at(to).read() + U128::from_integer(amount);\n storage.balances.at(to).write(new_balance);\n }\n\n // TODO(@just-mitch): remove this function before mainnet deployment\n // convenience function for testing\n // the true canonical gas token contract will not have this function\n #[aztec(public)]\n fn mint_public(to: AztecAddress, amount: Field) {\n let amount = U128::from_integer(amount);\n let new_balance = storage.balances.at(to).read().add(amount);\n\n storage.balances.at(to).write(new_balance);\n }\n\n #[aztec(public)]\n #[aztec(view)]\n fn check_balance(fee_limit: Field) {\n let fee_limit = U128::from_integer(fee_limit);\n assert(storage.balances.at(context.msg_sender()).read() >= fee_limit, \"Balance too low\");\n }\n\n // utility function for testing\n #[aztec(public)]\n #[aztec(view)]\n fn balance_of_public(owner: AztecAddress) -> pub Field {\n storage.balances.at(owner).read().to_field()\n }\n}\n"},"265":{"path":"/usr/src/noir-projects/noir-contracts/contracts/gas_token_contract/src/lib.nr","source":"use dep::aztec::prelude::{AztecAddress, EthAddress};\nuse dep::aztec::context::PublicContext;\nuse dep::aztec::protocol_types::hash::sha256_to_field;\n\npub fn calculate_fee<TPublicContext>(context: PublicContext) -> Field {\n context.transaction_fee()\n}\n\npub fn get_bridge_gas_msg_hash(owner: AztecAddress, amount: Field) -> Field {\n let mut hash_bytes = [0; 68];\n let recipient_bytes = owner.to_field().to_be_bytes(32);\n let amount_bytes = amount.to_be_bytes(32);\n\n for i in 0..32 {\n hash_bytes[i + 4] = recipient_bytes[i];\n hash_bytes[i + 36] = amount_bytes[i];\n }\n\n // Function selector: 0x3e87b9be keccak256('mint_public(bytes32,uint256)')\n hash_bytes[0] = 0x3e;\n hash_bytes[1] = 0x87;\n hash_bytes[2] = 0xb9;\n hash_bytes[3] = 0xbe;\n\n let content_hash = sha256_to_field(hash_bytes);\n content_hash\n}\n"},"29":{"path":"std/hash.nr","source":"mod poseidon;\nmod mimc;\nmod poseidon2;\n\nuse crate::default::Default;\nuse crate::uint128::U128;\nuse crate::sha256::{digest, sha256_var};\n\n#[foreign(sha256)]\n// docs:start:sha256\npub fn sha256<N>(input: [u8; N]) -> [u8; 32]\n// docs:end:sha256\n{}\n\n#[foreign(blake2s)]\n// docs:start:blake2s\npub fn blake2s<N>(input: [u8; N]) -> [u8; 32]\n// docs:end:blake2s\n{}\n\n#[foreign(blake3)]\n// docs:start:blake3\npub fn blake3<N>(input: [u8; N]) -> [u8; 32]\n// docs:end:blake3\n{}\n\n// docs:start:pedersen_commitment\nstruct PedersenPoint {\n x : Field,\n y : Field,\n}\n\npub fn pedersen_commitment<N>(input: [Field; N]) -> PedersenPoint {\n // docs:end:pedersen_commitment\n pedersen_commitment_with_separator(input, 0)\n}\n\n#[foreign(pedersen_commitment)]\npub fn __pedersen_commitment_with_separator<N>(input: [Field; N], separator: u32) -> [Field; 2] {}\n\npub fn pedersen_commitment_with_separator<N>(input: [Field; N], separator: u32) -> PedersenPoint {\n let values = __pedersen_commitment_with_separator(input, separator);\n PedersenPoint { x: values[0], y: values[1] }\n}\n\n// docs:start:pedersen_hash\npub fn pedersen_hash<N>(input: [Field; N]) -> Field\n// docs:end:pedersen_hash\n{\n pedersen_hash_with_separator(input, 0)\n}\n\n#[foreign(pedersen_hash)]\npub fn pedersen_hash_with_separator<N>(input: [Field; N], separator: u32) -> Field {}\n\npub fn hash_to_field(inputs: [Field]) -> Field {\n let mut sum = 0;\n\n for input in inputs {\n let input_bytes: [u8; 32] = input.to_le_bytes(32).as_array();\n sum += crate::field::bytes32_to_field(blake2s(input_bytes));\n }\n\n sum\n}\n\n#[foreign(keccak256)]\n// docs:start:keccak256\npub fn keccak256<N>(input: [u8; N], message_size: u32) -> [u8; 32]\n// docs:end:keccak256\n{}\n\n#[foreign(poseidon2_permutation)]\npub fn poseidon2_permutation<N>(_input: [Field; N], _state_length: u32) -> [Field; N] {}\n\n#[foreign(sha256_compression)]\npub fn sha256_compression(_input: [u32; 16], _state: [u32; 8]) -> [u32; 8] {}\n\n// Generic hashing support. \n// Partially ported and impacted by rust.\n\n// Hash trait shall be implemented per type.\ntrait Hash{\n fn hash<H>(self, state: &mut H) where H: Hasher;\n}\n\n// Hasher trait shall be implemented by algorithms to provide hash-agnostic means.\n// TODO: consider making the types generic here ([u8], [Field], etc.)\ntrait Hasher{\n fn finish(self) -> Field;\n \n fn write(&mut self, input: Field);\n}\n\n// BuildHasher is a factory trait, responsible for production of specific Hasher.\ntrait BuildHasher<H> where H: Hasher{\n fn build_hasher(self) -> H;\n}\n\nstruct BuildHasherDefault<H>;\n\nimpl<H> BuildHasher<H> for BuildHasherDefault<H>\nwhere \n H: Hasher + Default\n{\n fn build_hasher(_self: Self) -> H{\n H::default()\n }\n}\n\nimpl<H> Default for BuildHasherDefault<H>\nwhere \n H: Hasher + Default\n{\n fn default() -> Self{\n BuildHasherDefault{}\n } \n}\n\nimpl Hash for Field {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n H::write(state, self);\n }\n}\n\nimpl Hash for u8 {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u32 {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u64 {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for i8 {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for i32 {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for i64 {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for bool {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for () {\n fn hash<H>(_self: Self, _state: &mut H) where H: Hasher {}\n}\n\nimpl Hash for U128 {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n H::write(state, self.lo as Field);\n H::write(state, self.hi as Field);\n }\n}\n\nimpl<T, N> Hash for [T; N] where T: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n for elem in self {\n elem.hash(state);\n }\n }\n}\n\nimpl<T> Hash for [T] where T: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n self.len().hash(state);\n for elem in self {\n elem.hash(state);\n }\n }\n}\n\nimpl<A, B> Hash for (A, B) where A: Hash, B: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n self.0.hash(state);\n self.1.hash(state);\n }\n}\n\nimpl<A, B, C> Hash for (A, B, C) where A: Hash, B: Hash, C: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n self.0.hash(state);\n self.1.hash(state);\n self.2.hash(state);\n }\n}\n\nimpl<A, B, C, D> Hash for (A, B, C, D) where A: Hash, B: Hash, C: Hash, D: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n self.0.hash(state);\n self.1.hash(state);\n self.2.hash(state);\n self.3.hash(state);\n }\n}\n\nimpl<A, B, C, D, E> Hash for (A, B, C, D, E) where A: Hash, B: Hash, C: Hash, D: Hash, E: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n self.0.hash(state);\n self.1.hash(state);\n self.2.hash(state);\n self.3.hash(state);\n self.4.hash(state);\n }\n}\n"},"3":{"path":"std/cmp.nr","source":"// docs:start:eq-trait\ntrait Eq {\n fn eq(self, other: Self) -> bool;\n}\n// docs:end:eq-trait\n\nimpl Eq for Field { fn eq(self, other: Field) -> bool { self == other } }\n\nimpl Eq for u64 { fn eq(self, other: u64) -> bool { self == other } }\nimpl Eq for u32 { fn eq(self, other: u32) -> bool { self == other } }\nimpl Eq for u8 { fn eq(self, other: u8) -> bool { self == other } }\nimpl Eq for u1 { fn eq(self, other: u1) -> bool { self == other } }\n\nimpl Eq for i8 { fn eq(self, other: i8) -> bool { self == other } }\nimpl Eq for i32 { fn eq(self, other: i32) -> bool { self == other } }\nimpl Eq for i64 { fn eq(self, other: i64) -> bool { self == other } }\n\nimpl Eq for () { fn eq(_self: Self, _other: ()) -> bool { true } }\nimpl Eq for bool { fn eq(self, other: bool) -> bool { self == other } }\n\nimpl<T, N> Eq for [T; N] where T: Eq {\n fn eq(self, other: [T; N]) -> bool {\n let mut result = true;\n for i in 0 .. self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl<T> Eq for [T] where T: Eq {\n fn eq(self, other: [T]) -> bool {\n let mut result = self.len() == other.len();\n for i in 0 .. self.len() {\n result &= self[i].eq(other[i]);\n }\n result\n }\n}\n\nimpl<N> Eq for str<N> {\n fn eq(self, other: str<N>) -> bool {\n let self_bytes = self.as_bytes();\n let other_bytes = other.as_bytes();\n self_bytes == other_bytes\n }\n}\n\nimpl<A, B> Eq for (A, B) where A: Eq, B: Eq {\n fn eq(self, other: (A, B)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1)\n }\n}\n\nimpl<A, B, C> Eq for (A, B, C) where A: Eq, B: Eq, C: Eq {\n fn eq(self, other: (A, B, C)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2)\n }\n}\n\nimpl<A, B, C, D> Eq for (A, B, C, D) where A: Eq, B: Eq, C: Eq, D: Eq {\n fn eq(self, other: (A, B, C, D)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2) & self.3.eq(other.3)\n }\n}\n\nimpl<A, B, C, D, E> Eq for (A, B, C, D, E) where A: Eq, B: Eq, C: Eq, D: Eq, E: Eq {\n fn eq(self, other: (A, B, C, D, E)) -> bool {\n self.0.eq(other.0) & self.1.eq(other.1) & self.2.eq(other.2) & self.3.eq(other.3) & self.4.eq(other.4)\n }\n}\n\nimpl Eq for Ordering {\n fn eq(self, other: Ordering) -> bool {\n self.result == other.result\n }\n}\n\n// Noir doesn't have enums yet so we emulate (Lt | Eq | Gt) with a struct\n// that has 3 public functions for constructing the struct.\nstruct Ordering {\n result: Field,\n}\n\nimpl Ordering {\n // Implementation note: 0, 1, and 2 for Lt, Eq, and Gt are built\n // into the compiler, do not change these without also updating\n // the compiler itself!\n pub fn less() -> Ordering {\n Ordering { result: 0 }\n }\n\n pub fn equal() -> Ordering {\n Ordering { result: 1 }\n }\n\n pub fn greater() -> Ordering {\n Ordering { result: 2 }\n }\n}\n\n// docs:start:ord-trait\ntrait Ord {\n fn cmp(self, other: Self) -> Ordering;\n}\n// docs:end:ord-trait\n\n// Note: Field deliberately does not implement Ord\n\nimpl Ord for u64 {\n fn cmp(self, other: u64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u32 {\n fn cmp(self, other: u32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for u8 {\n fn cmp(self, other: u8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i8 {\n fn cmp(self, other: i8) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i32 {\n fn cmp(self, other: i32) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for i64 {\n fn cmp(self, other: i64) -> Ordering {\n if self < other {\n Ordering::less()\n } else if self > other {\n Ordering::greater()\n } else {\n Ordering::equal()\n }\n }\n}\n\nimpl Ord for () {\n fn cmp(_self: Self, _other: ()) -> Ordering {\n Ordering::equal()\n }\n}\n\nimpl Ord for bool {\n fn cmp(self, other: bool) -> Ordering {\n if self {\n if other {\n Ordering::equal()\n } else {\n Ordering::greater()\n }\n } else {\n if other {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n }\n}\n\nimpl<T, N> Ord for [T; N] where T: Ord {\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T; N]) -> Ordering {\n let mut result = Ordering::equal();\n for i in 0 .. self.len() {\n if result == Ordering::equal() {\n let result_i = self[i].cmp(other[i]);\n\n if result_i == Ordering::less() {\n result = result_i;\n } else if result_i == Ordering::greater() {\n result = result_i;\n }\n }\n }\n result\n }\n}\n\nimpl<T> Ord for [T] where T: Ord {\n // The first non-equal element of both arrays determines\n // the ordering for the whole array.\n fn cmp(self, other: [T]) -> Ordering {\n let mut result = self.len().cmp(other.len());\n for i in 0 .. self.len() {\n if result == Ordering::equal() {\n let result_i = self[i].cmp(other[i]);\n\n if result_i == Ordering::less() {\n result = result_i;\n } else if result_i == Ordering::greater() {\n result = result_i;\n }\n }\n }\n result\n }\n}\n\nimpl<A, B> Ord for (A, B) where A: Ord, B: Ord {\n fn cmp(self, other: (A, B)) -> Ordering {\n let result = self.0.cmp(other.0);\n\n if result != Ordering::equal() {\n result\n } else {\n self.1.cmp(other.1)\n }\n }\n}\n\nimpl<A, B, C> Ord for (A, B, C) where A: Ord, B: Ord, C: Ord {\n fn cmp(self, other: (A, B, C)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n result\n }\n}\n\nimpl<A, B, C, D> Ord for (A, B, C, D) where A: Ord, B: Ord, C: Ord, D: Ord {\n fn cmp(self, other: (A, B, C, D)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n result\n }\n}\n\nimpl<A, B, C, D, E> Ord for (A, B, C, D, E) where A: Ord, B: Ord, C: Ord, D: Ord, E: Ord {\n fn cmp(self, other: (A, B, C, D, E)) -> Ordering {\n let mut result = self.0.cmp(other.0);\n\n if result == Ordering::equal() {\n result = self.1.cmp(other.1);\n }\n\n if result == Ordering::equal() {\n result = self.2.cmp(other.2);\n }\n\n if result == Ordering::equal() {\n result = self.3.cmp(other.3);\n }\n\n if result == Ordering::equal() {\n result = self.4.cmp(other.4);\n }\n\n result\n }\n}\n\n// Compares and returns the maximum of two values.\n//\n// Returns the second argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::max(1, 2), 2);\n// assert_eq(cmp::max(2, 2), 2);\n// ```\npub fn max<T>(v1: T, v2: T) -> T where T: Ord {\n if v1 > v2 { v1 } else { v2 }\n}\n\n// Compares and returns the minimum of two values.\n//\n// Returns the first argument if the comparison determines them to be equal.\n//\n// # Examples\n//\n// ```\n// use std::cmp;\n//\n// assert_eq(cmp::min(1, 2), 1);\n// assert_eq(cmp::min(2, 2), 2);\n// ```\npub fn min<T>(v1: T, v2: T) -> T where T: Ord {\n if v1 > v2 { v2 } else { v1 }\n}\n\nmod cmp_tests {\n use crate::cmp::{min, max};\n\n #[test]\n fn sanity_check_min() {\n assert_eq(min(0 as u64, 1 as u64), 0);\n assert_eq(min(0 as u64, 0 as u64), 0);\n assert_eq(min(1 as u64, 1 as u64), 1);\n assert_eq(min(255 as u8, 0 as u8), 0);\n }\n\n #[test]\n fn sanity_check_max() {\n assert_eq(max(0 as u64, 1 as u64), 1);\n assert_eq(max(0 as u64, 0 as u64), 0);\n assert_eq(max(1 as u64, 1 as u64), 1);\n assert_eq(max(255 as u8, 0 as u8), 255);\n }\n}\n"},"31":{"path":"std/merkle.nr","source":"// Regular merkle tree means a append-only merkle tree (Explain why this is the only way to have privacy and alternatives if you don't want it)\n// Currently we assume that it is a binary tree, so depth k implies a width of 2^k\n// XXX: In the future we can add an arity parameter\n// Returns the merkle root of the tree from the provided leaf, its hashpath, using a pedersen hash function.\npub fn compute_merkle_root<N>(leaf: Field, index: Field, hash_path: [Field; N]) -> Field {\n let n = hash_path.len();\n let index_bits = index.to_le_bits(n as u32);\n let mut current = leaf;\n for i in 0..n {\n let path_bit = index_bits[i] as bool;\n let (hash_left, hash_right) = if path_bit {\n (hash_path[i], current)\n } else {\n (current, hash_path[i])\n };\n current = crate::hash::pedersen_hash([hash_left, hash_right]);\n }\n current\n}\n"},"44":{"path":"std/uint128.nr","source":"use crate::ops::{Add, Sub, Mul, Div, Rem, Not, BitOr, BitAnd, BitXor, Shl, Shr};\nuse crate::cmp::{Eq, Ord, Ordering};\nuse crate::println;\n\nglobal pow64 : Field = 18446744073709551616; //2^64;\nglobal pow63 : Field = 9223372036854775808; // 2^63;\nstruct U128 {\n lo: Field,\n hi: Field,\n}\n\nimpl U128 {\n\n pub fn from_u64s_le(lo: u64, hi: u64) -> U128 {\n // in order to handle multiplication, we need to represent the product of two u64 without overflow\n assert(crate::field::modulus_num_bits() as u32 > 128);\n U128 { lo: lo as Field, hi: hi as Field }\n }\n\n pub fn from_u64s_be(hi: u64, lo: u64) -> U128 {\n U128::from_u64s_le(lo, hi)\n }\n\n pub fn zero() -> U128 {\n U128 { lo: 0, hi: 0 }\n }\n\n pub fn one() -> U128 {\n U128 { lo: 1, hi: 0 }\n }\n pub fn from_le_bytes(bytes: [u8; 16]) -> U128 {\n let mut lo = 0;\n let mut base = 1;\n for i in 0..8 {\n lo += (bytes[i] as Field)*base;\n base *= 256;\n }\n let mut hi = 0;\n base = 1;\n for i in 8..16 {\n hi += (bytes[i] as Field)*base;\n base *= 256;\n }\n U128 { lo, hi }\n }\n\n pub fn to_be_bytes(self: Self) -> [u8; 16] {\n let lo = self.lo.to_be_bytes(8);\n let hi = self.hi.to_be_bytes(8);\n let mut bytes = [0; 16];\n for i in 0..8 {\n bytes[i] = hi[i];\n bytes[i+8] = lo[i];\n }\n bytes\n }\n\n pub fn to_le_bytes(self: Self) -> [u8; 16] {\n let lo = self.lo.to_le_bytes(8);\n let hi = self.hi.to_le_bytes(8);\n let mut bytes = [0; 16];\n for i in 0..8 {\n bytes[i] = lo[i];\n bytes[i+8] = hi[i];\n }\n bytes\n }\n\n pub fn from_hex<N>(hex: str<N>) -> U128 {\n let N = N as u32;\n let bytes = hex.as_bytes();\n // string must starts with \"0x\"\n assert((bytes[0] == 48) & (bytes[1] == 120), \"Invalid hexadecimal string\");\n assert(N < 35, \"Input does not fit into a U128\");\n\n let mut lo = 0;\n let mut hi = 0;\n let mut base = 1;\n if N <= 18 {\n for i in 0..N - 2 {\n lo += U128::decode_ascii(bytes[N-i-1])*base;\n base = base*16;\n }\n } else {\n for i in 0..16 {\n lo += U128::decode_ascii(bytes[N-i-1])*base;\n base = base*16;\n }\n base = 1;\n for i in 17..N - 1 {\n hi += U128::decode_ascii(bytes[N-i])*base;\n base = base*16;\n }\n }\n U128 { lo: lo as Field, hi: hi as Field }\n }\n\n unconstrained fn uconstrained_check_is_upper_ascii(ascii: u8) -> bool {\n ((ascii >= 65) & (ascii <= 90)) // Between 'A' and 'Z'\n }\n\n fn decode_ascii(ascii: u8) -> Field {\n if ascii < 58 {\n ascii - 48\n } else {\n let ascii = ascii + 32 * (U128::uconstrained_check_is_upper_ascii(ascii) as u8);\n assert(ascii >= 97); // enforce >= 'a'\n assert(ascii <= 102); // enforce <= 'f'\n ascii - 87\n } as Field\n }\n\n // TODO: Replace with a faster version. \n // A circuit that uses this function can be slow to compute\n // (we're doing up to 127 calls to compute the quotient)\n unconstrained fn unconstrained_div(self: Self, b: U128) -> (U128, U128) {\n if b == U128::zero() {\n // Return 0,0 to avoid eternal loop\n (U128::zero(), U128::zero())\n } else if self < b {\n (U128::zero(), self)\n } else if self == b {\n (U128::one(), U128::zero())\n } else {\n let (q,r) = if b.hi as u64 >= pow63 as u64 {\n // The result of multiplication by 2 would overflow\n (U128::zero(), self)\n } else {\n self.unconstrained_div(b * U128::from_u64s_le(2, 0))\n };\n let q_mul_2 = q * U128::from_u64s_le(2, 0);\n if r < b {\n (q_mul_2, r)\n } else {\n (q_mul_2 + U128::one(), r - b)\n }\n }\n }\n\n pub fn from_integer<T>(i: T) -> U128 {\n let f = crate::as_field(i);\n // Reject values which would overflow a u128\n f.assert_max_bit_size(128);\n let lo = f as u64 as Field;\n let hi = (f - lo) / pow64;\n U128 { lo, hi }\n }\n\n pub fn to_integer<T>(self) -> T {\n crate::from_field(self.lo + self.hi * pow64)\n }\n\n fn wrapping_mul(self: Self, b: U128) -> U128 {\n let low = self.lo * b.lo;\n let lo = low as u64 as Field;\n let carry = (low - lo) / pow64;\n let high = self.lo * b.hi + self.hi * b.lo + carry;\n let hi = high as u64 as Field;\n U128 { lo, hi }\n }\n}\n\nimpl Add for U128 {\n fn add(self: Self, b: U128) -> U128 {\n let low = self.lo + b.lo;\n let lo = low as u64 as Field;\n let carry = (low - lo) / pow64; \n let high = self.hi + b.hi + carry;\n let hi = high as u64 as Field;\n assert(hi == high, \"attempt to add with overflow\");\n U128 {\n lo,\n hi,\n }\n }\n}\n\nimpl Sub for U128 {\n fn sub(self: Self, b: U128) -> U128 {\n let low = pow64 + self.lo - b.lo;\n let lo = low as u64 as Field;\n let borrow = (low == lo) as Field;\n let high = self.hi - b.hi - borrow;\n let hi = high as u64 as Field;\n assert(hi == high, \"attempt to subtract with underflow\");\n U128 {\n lo,\n hi,\n }\n }\n}\n\nimpl Mul for U128 {\n fn mul(self: Self, b: U128) -> U128 {\n assert(self.hi*b.hi == 0, \"attempt to multiply with overflow\");\n let low = self.lo*b.lo;\n let lo = low as u64 as Field;\n let carry = (low - lo) / pow64;\n let high = if crate::field::modulus_num_bits() as u32 > 196 {\n (self.lo+self.hi)*(b.lo+b.hi) - low + carry\n } else {\n self.lo*b.hi + self.hi*b.lo + carry\n };\n let hi = high as u64 as Field;\n assert(hi == high, \"attempt to multiply with overflow\");\n U128 {\n lo,\n hi,\n }\n }\n}\n\nimpl Div for U128 {\n fn div(self: Self, b: U128) -> U128 {\n let (q,r) = self.unconstrained_div(b);\n let a = b * q + r;\n assert_eq(self, a);\n assert(r < b);\n q\n }\n}\n\nimpl Rem for U128 {\n fn rem(self: Self, b: U128) -> U128 {\n let (q,r) = self.unconstrained_div(b);\n let a = b * q + r;\n assert_eq(self, a);\n assert(r < b);\n r\n }\n}\n\nimpl Eq for U128 {\n fn eq(self: Self, b: U128) -> bool {\n (self.lo == b.lo) & (self.hi == b.hi)\n }\n}\n\nimpl Ord for U128 {\n fn cmp(self, other: Self) -> Ordering {\n let hi_ordering = (self.hi as u64).cmp((other.hi as u64));\n let lo_ordering = (self.lo as u64).cmp((other.lo as u64));\n \n if hi_ordering == Ordering::equal() {\n lo_ordering\n } else {\n hi_ordering\n }\n }\n}\n\nimpl Not for U128 { \n fn not(self) -> U128 {\n U128 {\n lo: (!(self.lo as u64)) as Field,\n hi: (!(self.hi as u64)) as Field\n }\n }\n}\n\nimpl BitOr for U128 { \n fn bitor(self, other: U128) -> U128 {\n U128 {\n lo: ((self.lo as u64) | (other.lo as u64)) as Field,\n hi: ((self.hi as u64) | (other.hi as u64)) as Field\n }\n }\n}\n\nimpl BitAnd for U128 {\n fn bitand(self, other: U128) -> U128 { \n U128 {\n lo: ((self.lo as u64) & (other.lo as u64)) as Field,\n hi: ((self.hi as u64) & (other.hi as u64)) as Field\n }\n }\n}\n\nimpl BitXor for U128 {\n fn bitxor(self, other: U128) -> U128 { \n U128 {\n lo: ((self.lo as u64) ^ (other.lo as u64)) as Field,\n hi: ((self.hi as u64) ^ (other.hi as u64)) as Field\n }\n }\n}\n\nimpl Shl for U128 { \n fn shl(self, other: u8) -> U128 { \n assert(other < 128, \"attempt to shift left with overflow\");\n let exp_bits = (other as Field).to_be_bits(7);\n\n let mut r: Field = 2;\n let mut y: Field = 1;\n for i in 1..8 {\n y = (exp_bits[7-i] as Field) * (r * y) + (1 - exp_bits[7-i] as Field) * y;\n r *= r;\n }\n self.wrapping_mul(U128::from_integer(y))\n } \n}\n\nimpl Shr for U128 { \n fn shr(self, other: u8) -> U128 { \n assert(other < 128, \"attempt to shift right with overflow\");\n let exp_bits = (other as Field).to_be_bits(7);\n\n let mut r: Field = 2;\n let mut y: Field = 1;\n for i in 1..8 {\n y = (exp_bits[7-i] as Field) * (r * y) + (1 - exp_bits[7-i] as Field) * y;\n r *= r;\n }\n self / U128::from_integer(y)\n } \n}\n\nmod tests {\n use crate::uint128::{U128, pow64, pow63};\n\n #[test]\n fn test_not() {\n let num = U128::from_u64s_le(0, 0);\n let not_num = num.not();\n\n let max_u64: Field = pow64 - 1;\n assert_eq(not_num.hi, max_u64);\n assert_eq(not_num.lo, max_u64);\n\n let not_not_num = not_num.not();\n assert_eq(num, not_not_num);\n }\n #[test]\n fn test_construction() {\n // Check little-endian u64 is inversed with big-endian u64 construction\n let a = U128::from_u64s_le(2, 1);\n let b = U128::from_u64s_be(1, 2);\n assert_eq(a, b);\n // Check byte construction is equivalent\n let c = U128::from_le_bytes([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]);\n let d = U128::from_u64s_le(0x0706050403020100, 0x0f0e0d0c0b0a0908);\n assert_eq(c, d);\n }\n #[test]\n fn test_byte_decomposition() {\n let a = U128::from_u64s_le(0x0706050403020100, 0x0f0e0d0c0b0a0908);\n // Get big-endian and little-endian byte decompostions\n let le_bytes_a= a.to_le_bytes();\n let be_bytes_a= a.to_be_bytes();\n\n // Check equivalence\n for i in 0..16 {\n assert_eq(le_bytes_a[i], be_bytes_a[15 - i]);\n }\n // Reconstruct U128 from byte decomposition\n let b= U128::from_le_bytes(le_bytes_a);\n // Check that it's the same element\n assert_eq(a, b);\n }\n #[test]\n fn test_hex_constuction() {\n let a = U128::from_u64s_le(0x1, 0x2);\n let b = U128::from_hex(\"0x20000000000000001\");\n assert_eq(a, b);\n\n let c= U128::from_hex(\"0xffffffffffffffffffffffffffffffff\");\n let d= U128::from_u64s_le(0xffffffffffffffff, 0xffffffffffffffff);\n assert_eq(c, d);\n\n let e= U128::from_hex(\"0x00000000000000000000000000000000\");\n let f= U128::from_u64s_le(0, 0);\n assert_eq(e, f);\n }\n\n // Ascii decode tests\n\n #[test]\n fn test_ascii_decode_correct_range() {\n // '0'..'9' range\n for i in 0..10 {\n let decoded= U128::decode_ascii(48 + i);\n assert_eq(decoded, i as Field);\n }\n // 'A'..'F' range\n for i in 0..6 {\n let decoded = U128::decode_ascii(65 + i);\n assert_eq(decoded, (i + 10) as Field);\n }\n // 'a'..'f' range\n for i in 0..6 {\n let decoded = U128::decode_ascii(97 + i);\n assert_eq(decoded, (i + 10) as Field);\n }\n }\n\n #[test(should_fail)]\n fn test_ascii_decode_range_less_than_48_fails_0() {\n crate::println(U128::decode_ascii(0));\n }\n #[test(should_fail)]\n fn test_ascii_decode_range_less_than_48_fails_1() {\n crate::println(U128::decode_ascii(47));\n }\n\n #[test(should_fail)]\n fn test_ascii_decode_range_58_64_fails_0() {\n let _ = U128::decode_ascii(58);\n }\n #[test(should_fail)]\n fn test_ascii_decode_range_58_64_fails_1() {\n let _ = U128::decode_ascii(64);\n }\n #[test(should_fail)]\n fn test_ascii_decode_range_71_96_fails_0() {\n let _ = U128::decode_ascii(71);\n }\n #[test(should_fail)]\n fn test_ascii_decode_range_71_96_fails_1() {\n let _ = U128::decode_ascii(96);\n }\n #[test(should_fail)]\n fn test_ascii_decode_range_greater_than_102_fails() {\n let _ = U128::decode_ascii(103);\n }\n\n #[test(should_fail)]\n fn test_ascii_decode_regression() {\n // This code will actually fail because of ascii_decode,\n // but in the past it was possible to create a value > (1<<128)\n let a = U128::from_hex(\"0x~fffffffffffffffffffffffffffffff\");\n let b:Field= a.to_integer();\n let c= b.to_le_bytes(17);\n assert(c[16] != 0);\n }\n\n #[test]\n fn test_unconstrained_div() {\n // Test the potential overflow case\n let a= U128::from_u64s_le(0x0, 0xffffffffffffffff);\n let b= U128::from_u64s_le(0x0, 0xfffffffffffffffe);\n let c= U128::one();\n let d= U128::from_u64s_le(0x0, 0x1);\n let (q,r) = a.unconstrained_div(b);\n assert_eq(q, c);\n assert_eq(r, d);\n\n let a = U128::from_u64s_le(2, 0);\n let b = U128::one();\n // Check the case where a is a multiple of b\n let (c,d ) = a.unconstrained_div(b);\n assert_eq((c, d), (a, U128::zero()));\n\n // Check where b is a multiple of a\n let (c,d) = b.unconstrained_div(a);\n assert_eq((c, d), (U128::zero(), b));\n\n // Dividing by zero returns 0,0\n let a = U128::from_u64s_le(0x1, 0x0);\n let b = U128::zero();\n let (c,d)= a.unconstrained_div(b);\n assert_eq((c, d), (U128::zero(), U128::zero()));\n\n // Dividing 1<<127 by 1<<127 (special case)\n let a = U128::from_u64s_le(0x0, pow63 as u64);\n let b = U128::from_u64s_le(0x0, pow63 as u64);\n let (c,d )= a.unconstrained_div(b);\n assert_eq((c, d), (U128::one(), U128::zero()));\n }\n\n #[test]\n fn integer_conversions() {\n // Maximum\n let start:Field = 0xffffffffffffffffffffffffffffffff;\n let a = U128::from_integer(start);\n let end = a.to_integer();\n assert_eq(start, end);\n\n // Minimum\n let start:Field = 0x0;\n let a = U128::from_integer(start);\n let end = a.to_integer();\n assert_eq(start, end);\n\n // Low limb\n let start:Field = 0xffffffffffffffff;\n let a = U128::from_integer(start);\n let end = a.to_integer();\n assert_eq(start, end);\n\n // High limb\n let start:Field = 0xffffffffffffffff0000000000000000;\n let a = U128::from_integer(start);\n let end = a.to_integer();\n assert_eq(start, end);\n }\n #[test]\n fn test_wrapping_mul() {\n // 1*0==0\n assert_eq(U128::zero(), U128::zero().wrapping_mul(U128::one()));\n\n // 0*1==0\n assert_eq(U128::zero(), U128::one().wrapping_mul(U128::zero()));\n\n // 1*1==1\n assert_eq(U128::one(), U128::one().wrapping_mul(U128::one()));\n\n // 0 * ( 1 << 64 ) == 0\n assert_eq(U128::zero(), U128::zero().wrapping_mul(U128::from_u64s_le(0, 1)));\n\n // ( 1 << 64 ) * 0 == 0\n assert_eq(U128::zero(), U128::from_u64s_le(0, 1).wrapping_mul(U128::zero()));\n\n // 1 * ( 1 << 64 ) == 1 << 64\n assert_eq(U128::from_u64s_le(0, 1), U128::from_u64s_le(0, 1).wrapping_mul(U128::one()));\n\n // ( 1 << 64 ) * 1 == 1 << 64\n assert_eq(U128::from_u64s_le(0, 1), U128::one().wrapping_mul(U128::from_u64s_le(0, 1)));\n\n // ( 1 << 64 ) * ( 1 << 64 ) == 1 << 64\n assert_eq(U128::zero(), U128::from_u64s_le(0, 1).wrapping_mul(U128::from_u64s_le(0, 1)));\n // -1 * -1 == 1\n assert_eq(\n U128::one(), U128::from_u64s_le(0xffffffffffffffff, 0xffffffffffffffff).wrapping_mul(U128::from_u64s_le(0xffffffffffffffff, 0xffffffffffffffff))\n );\n }\n}\n"},"71":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/history/public_storage.nr","source":"use dep::protocol_types::{\n constants::GENERATOR_INDEX__PUBLIC_LEAF_INDEX, hash::pedersen_hash, address::AztecAddress,\n header::Header, utils::field::full_field_less_than\n};\nuse dep::std::merkle::compute_merkle_root;\n\nuse crate::{context::PrivateContext, oracle::get_public_data_witness::get_public_data_witness};\n\ntrait PublicStorageHistoricalRead {\n fn public_storage_historical_read(header: Header, storage_slot: Field, contract_address: AztecAddress) -> Field;\n}\n\nimpl PublicStorageHistoricalRead for Header { \n fn public_storage_historical_read(self, storage_slot: Field, contract_address: AztecAddress) -> Field {\n // 1) Compute the leaf slot by siloing the storage slot with the contract address\n let public_value_leaf_slot = pedersen_hash(\n [contract_address.to_field(), storage_slot],\n GENERATOR_INDEX__PUBLIC_LEAF_INDEX\n );\n\n // 2) Get the membership witness of the slot\n let witness = get_public_data_witness(\n self.global_variables.block_number as u32,\n public_value_leaf_slot\n );\n\n // 3) Extract the value from the witness leaf and check that the storage slot is correct\n let preimage = witness.leaf_preimage;\n\n // Here we have two cases. Code based on same checks in `validate_public_data_reads` in `base_rollup_inputs`\n // 1. The value is the same as the one in the witness\n // 2. The value was never initialized and is zero\n let is_less_than_slot = full_field_less_than(preimage.slot, public_value_leaf_slot);\n let is_next_greater_than = full_field_less_than(public_value_leaf_slot, preimage.next_slot);\n let is_max = ((preimage.next_index == 0) & (preimage.next_slot == 0));\n let is_in_range = is_less_than_slot & (is_next_greater_than | is_max);\n\n let value = if is_in_range {\n 0\n } else {\n assert_eq(preimage.slot, public_value_leaf_slot, \"Public data slot doesn't match witness\");\n preimage.value\n };\n\n // 4) Prove that the leaf exists in the public data tree. Note that `hash` returns not just the hash of the value\n // but also the metadata (slot, next index and next slot).\n assert(\n self.state.partial.public_data_tree.root\n == compute_merkle_root(preimage.hash(), witness.index, witness.path), \"Proving public value inclusion failed\"\n );\n\n value\n }\n}\n"},"76":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/messaging.nr","source":"use crate::{\n hash::{compute_secret_hash, compute_message_hash, compute_message_nullifier},\n oracle::get_l1_to_l2_membership_witness::get_l1_to_l2_membership_witness\n};\n\nuse dep::std::merkle::compute_merkle_root;\nuse dep::protocol_types::{constants::L1_TO_L2_MSG_TREE_HEIGHT, address::{AztecAddress, EthAddress}, utils::arr_copy_slice};\n\npub fn process_l1_to_l2_message(\n l1_to_l2_root: Field,\n storage_contract_address: AztecAddress,\n portal_contract_address: EthAddress,\n chain_id: Field,\n version: Field,\n content: Field,\n secret: Field\n) -> Field {\n let secret_hash = compute_secret_hash(secret);\n let message_hash = compute_message_hash(\n portal_contract_address,\n chain_id,\n storage_contract_address,\n version,\n content,\n secret_hash\n );\n\n let returned_message = get_l1_to_l2_membership_witness(storage_contract_address, message_hash, secret);\n let leaf_index = returned_message[0];\n let sibling_path = arr_copy_slice(returned_message, [0; L1_TO_L2_MSG_TREE_HEIGHT], 1);\n\n // Check that the message is in the tree\n // This is implicitly checking that the values of the message are correct\n let root = compute_merkle_root(message_hash, leaf_index, sibling_path);\n assert(root == l1_to_l2_root, \"Message not in state\");\n\n compute_message_nullifier(message_hash, secret, leaf_index)\n}\n"},"82":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/context/call_interfaces.nr","source":"use dep::protocol_types::{abis::function_selector::FunctionSelector, address::AztecAddress, traits::Deserialize};\n\nuse crate::context::private_context::PrivateContext;\nuse crate::context::public_context::PublicContext;\nuse crate::context::gas::GasOpts;\nuse crate::context::public_context::FunctionReturns;\n\nuse crate::oracle::arguments;\n\nstruct PrivateCallInterface<T> {\n target_contract: AztecAddress,\n selector: FunctionSelector,\n args_hash: Field,\n}\n\nimpl<T> PrivateCallInterface<T> {\n pub fn call<N>(self, context: &mut PrivateContext) -> T where T: Deserialize<N> {\n let returns = context.call_private_function_with_packed_args(\n self.target_contract,\n self.selector,\n self.args_hash,\n false,\n false\n );\n let unpacked: T = returns.unpack_into();\n unpacked\n }\n\n pub fn view<N>(self, context: &mut PrivateContext) -> T where T: Deserialize<N> {\n let returns = context.call_private_function_with_packed_args(self.target_contract, self.selector, self.args_hash, true, false);\n returns.unpack_into()\n }\n\n pub fn delegate_call<N>(self, context: &mut PrivateContext) -> T where T: Deserialize<N> {\n let returns = context.call_private_function_with_packed_args(self.target_contract, self.selector, self.args_hash, false, true);\n returns.unpack_into()\n }\n}\n\nstruct PrivateVoidCallInterface {\n target_contract: AztecAddress,\n selector: FunctionSelector,\n args_hash: Field,\n}\n\nimpl PrivateVoidCallInterface {\n pub fn call(self, context: &mut PrivateContext) {\n context.call_private_function_with_packed_args(\n self.target_contract,\n self.selector,\n self.args_hash,\n false,\n false\n ).assert_empty();\n }\n\n pub fn view(self, context: &mut PrivateContext) {\n context.call_private_function_with_packed_args(self.target_contract, self.selector, self.args_hash, true, false).assert_empty();\n }\n\n pub fn delegate_call(self, context: &mut PrivateContext) {\n context.call_private_function_with_packed_args(self.target_contract, self.selector, self.args_hash, false, true).assert_empty();\n }\n}\n\nstruct PrivateStaticCallInterface<T> {\n target_contract: AztecAddress,\n selector: FunctionSelector,\n args_hash: Field,\n}\n\nimpl<T> PrivateStaticCallInterface<T> {\n pub fn view<N>(self, context: &mut PrivateContext) -> T where T: Deserialize<N> {\n let returns = context.call_private_function_with_packed_args(self.target_contract, self.selector, self.args_hash, true, false);\n returns.unpack_into()\n }\n}\n\nstruct PrivateStaticVoidCallInterface {\n target_contract: AztecAddress,\n selector: FunctionSelector,\n args_hash: Field,\n}\n\nimpl PrivateStaticVoidCallInterface {\n pub fn view(self, context: &mut PrivateContext) {\n context.call_private_function_with_packed_args(self.target_contract, self.selector, self.args_hash, true, false).assert_empty();\n }\n}\n\nstruct PublicCallInterface<T> {\n target_contract: AztecAddress,\n selector: FunctionSelector,\n args: [Field],\n gas_opts: GasOpts,\n}\n\nimpl<T> PublicCallInterface<T> {\n pub fn with_gas(self: &mut Self, gas_opts: GasOpts) -> &mut Self {\n self.gas_opts = gas_opts;\n self\n }\n\n pub fn call<N>(self, context: &mut PublicContext) -> T where T: Deserialize<N> {\n let returns = context.call_public_function(self.target_contract, self.selector, self.args, self.gas_opts);\n returns.deserialize_into()\n }\n\n pub fn view<N>(self, context: &mut PublicContext) -> T where T: Deserialize<N> {\n let returns = context.static_call_public_function(self.target_contract, self.selector, self.args, self.gas_opts);\n returns.deserialize_into()\n }\n\n pub fn delegate_call<N>(self, context: &mut PublicContext) -> T where T: Deserialize<N> {\n let returns = context.delegate_call_public_function(self.target_contract, self.selector, self.args);\n returns.deserialize_into()\n }\n\n pub fn enqueue(self, context: &mut PrivateContext) {\n // This packing is only here because PrivateContext's call_public* functions do not accept a slice for the args.\n let args_hash = arguments::pack_arguments(self.args);\n context.call_public_function_with_packed_args(\n self.target_contract,\n self.selector,\n args_hash,\n /*static=*/ false,\n /*delegate=*/ false\n )\n }\n\n pub fn enqueue_view(self, context: &mut PrivateContext) {\n // This packing is only here because PrivateContext's call_public* functions do not accept a slice for the args.\n let args_hash = arguments::pack_arguments(self.args);\n context.call_public_function_with_packed_args(\n self.target_contract,\n self.selector,\n args_hash,\n /*static=*/ true,\n /*delegate=*/ false\n )\n }\n\n pub fn delegate_enqueue(self, context: &mut PrivateContext) {\n // This packing is only here because PrivateContext's call_public* functions do not accept a slice for the args.\n let args_hash = arguments::pack_arguments(self.args);\n context.call_public_function_with_packed_args(\n self.target_contract,\n self.selector,\n args_hash,\n /*static=*/ false,\n /*delegate=*/ true\n )\n }\n}\n\nstruct PublicVoidCallInterface {\n target_contract: AztecAddress,\n selector: FunctionSelector,\n args: [Field],\n gas_opts: GasOpts,\n}\n\nimpl PublicVoidCallInterface {\n pub fn with_gas(self: &mut Self, gas_opts: GasOpts) -> &mut Self {\n self.gas_opts = gas_opts;\n self\n }\n\n pub fn call<N>(self, context: &mut PublicContext) {\n let returns = context.call_public_function(self.target_contract, self.selector, self.args, self.gas_opts);\n returns.assert_empty()\n }\n\n pub fn view<N>(self, context: &mut PublicContext) {\n let returns = context.static_call_public_function(self.target_contract, self.selector, self.args, self.gas_opts);\n returns.assert_empty()\n }\n\n pub fn delegate_call<N>(self, context: &mut PublicContext) {\n let returns = context.delegate_call_public_function(self.target_contract, self.selector, self.args);\n returns.assert_empty()\n }\n\n pub fn enqueue(self, context: &mut PrivateContext) {\n // This packing is only here because PrivateContext's call_public* functions do not accept a slice for the args.\n let args_hash = arguments::pack_arguments(self.args);\n context.call_public_function_with_packed_args(\n self.target_contract,\n self.selector,\n args_hash,\n /*static=*/ false,\n /*delegate=*/ false\n )\n }\n\n pub fn enqueue_view(self, context: &mut PrivateContext) {\n // This packing is only here because PrivateContext's call_public* functions do not accept a slice for the args.\n let args_hash = arguments::pack_arguments(self.args);\n context.call_public_function_with_packed_args(\n self.target_contract,\n self.selector,\n args_hash,\n /*static=*/ true,\n /*delegate=*/ false\n )\n }\n\n pub fn delegate_enqueue(self, context: &mut PrivateContext) {\n // This packing is only here because PrivateContext's call_public* functions do not accept a slice for the args.\n let args_hash = arguments::pack_arguments(self.args);\n context.call_public_function_with_packed_args(\n self.target_contract,\n self.selector,\n args_hash,\n /*static=*/ false,\n /*delegate=*/ true\n )\n }\n}\n\nstruct PublicStaticCallInterface<T> {\n target_contract: AztecAddress,\n selector: FunctionSelector,\n args: [Field],\n gas_opts: GasOpts,\n}\n\nimpl<T> PublicStaticCallInterface<T> {\n pub fn with_gas(self: &mut Self, gas_opts: GasOpts) -> &mut Self {\n self.gas_opts = gas_opts;\n self\n }\n\n pub fn view<N>(self, context: &mut PublicContext) -> T where T: Deserialize<N> {\n let returns = context.static_call_public_function(self.target_contract, self.selector, self.args, self.gas_opts);\n returns.deserialize_into()\n }\n\n pub fn enqueue_view(self, context: &mut PrivateContext) {\n // This packing is only here because PrivateContext's call_public* functions do not accept a slice for the args.\n let args_hash = arguments::pack_arguments(self.args);\n context.call_public_function_with_packed_args(\n self.target_contract,\n self.selector,\n args_hash,\n /*static=*/ true,\n /*delegate=*/ false\n )\n }\n}\n\nstruct PublicStaticVoidCallInterface {\n target_contract: AztecAddress,\n selector: FunctionSelector,\n args: [Field],\n gas_opts: GasOpts,\n}\n\nimpl PublicStaticVoidCallInterface {\n pub fn with_gas(self: &mut Self, gas_opts: GasOpts) -> &mut Self {\n self.gas_opts = gas_opts;\n self\n }\n\n pub fn view<N>(self, context: &mut PublicContext) {\n let returns = context.static_call_public_function(self.target_contract, self.selector, self.args, self.gas_opts);\n returns.assert_empty()\n }\n\n pub fn enqueue_view(self, context: &mut PrivateContext) {\n // This packing is only here because PrivateContext's call_public* functions do not accept a slice for the args.\n let args_hash = arguments::pack_arguments(self.args);\n context.call_public_function_with_packed_args(\n self.target_contract,\n self.selector,\n args_hash,\n /*static=*/ true,\n /*delegate=*/ false\n )\n }\n}\n"},"83":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/context/private_context.nr","source":"use crate::{\n context::{inputs::PrivateContextInputs, packed_returns::PackedReturns},\n messaging::process_l1_to_l2_message,\n hash::{hash_args_array, ArgsHasher, compute_unencrypted_log_hash},\n keys::constants::{NULLIFIER_INDEX, OUTGOING_INDEX, NUM_KEY_TYPES, sk_generators},\n note::{note_interface::NoteInterface, utils::compute_note_hash_for_insertion},\n oracle::{\n key_validation_request::get_key_validation_request, arguments, returns::pack_returns,\n call_private_function::call_private_function_internal, header::get_header_at,\n logs::{\n emit_encrypted_log, emit_encrypted_note_log, compute_encrypted_log,\n emit_contract_class_unencrypted_log_private_internal, emit_unencrypted_log_private_internal\n},\n logs_traits::{LensForEncryptedLog, ToBytesForUnencryptedLog},\n enqueue_public_function_call::{\n enqueue_public_function_call_internal, set_public_teardown_function_call_internal,\n parse_public_call_stack_item_from_oracle\n}\n}\n};\nuse dep::protocol_types::{\n hash::sha256_to_field,\n abis::{\n caller_context::CallerContext, function_selector::FunctionSelector,\n max_block_number::MaxBlockNumber,\n validation_requests::{KeyValidationRequest, KeyValidationRequestAndGenerator},\n private_call_request::PrivateCallRequest, private_circuit_public_inputs::PrivateCircuitPublicInputs,\n public_call_stack_item::PublicCallStackItem, read_request::ReadRequest, note_hash::NoteHash,\n nullifier::Nullifier, log_hash::{LogHash, NoteLogHash, EncryptedLogHash}\n},\n address::{AztecAddress, EthAddress},\n constants::{\n MAX_NEW_NOTE_HASHES_PER_CALL, MAX_NEW_L2_TO_L1_MSGS_PER_CALL, MAX_NEW_NULLIFIERS_PER_CALL,\n MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL,\n MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, MAX_NULLIFIER_READ_REQUESTS_PER_CALL,\n MAX_KEY_VALIDATION_REQUESTS_PER_CALL, MAX_ENCRYPTED_LOGS_PER_CALL, MAX_UNENCRYPTED_LOGS_PER_CALL,\n MAX_NOTE_ENCRYPTED_LOGS_PER_CALL\n},\n contrakt::{storage_read::StorageRead, storage_update_request::StorageUpdateRequest},\n grumpkin_private_key::GrumpkinPrivateKey, grumpkin_point::GrumpkinPoint, header::Header,\n messaging::l2_to_l1_message::L2ToL1Message, utils::reader::Reader, traits::{is_empty, Empty},\n utils::arrays::find_index\n};\n\n// When finished, one can call .finish() to convert back to the abi\nstruct PrivateContext {\n // docs:start:private-context\n inputs: PrivateContextInputs,\n side_effect_counter: u32,\n\n min_revertible_side_effect_counter: u32,\n is_fee_payer: bool,\n\n args_hash: Field,\n return_hash: Field,\n\n max_block_number: MaxBlockNumber,\n\n note_hash_read_requests: BoundedVec<ReadRequest, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>,\n nullifier_read_requests: BoundedVec<ReadRequest, MAX_NULLIFIER_READ_REQUESTS_PER_CALL>,\n key_validation_requests_and_generators: BoundedVec<KeyValidationRequestAndGenerator, MAX_KEY_VALIDATION_REQUESTS_PER_CALL>,\n\n new_note_hashes: BoundedVec<NoteHash, MAX_NEW_NOTE_HASHES_PER_CALL>,\n new_nullifiers: BoundedVec<Nullifier, MAX_NEW_NULLIFIERS_PER_CALL>,\n\n private_call_requests : BoundedVec<PrivateCallRequest, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL>,\n public_call_stack_hashes : BoundedVec<Field, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL>,\n public_teardown_function_hash: Field,\n new_l2_to_l1_msgs : BoundedVec<L2ToL1Message, MAX_NEW_L2_TO_L1_MSGS_PER_CALL>,\n // docs:end:private-context\n\n // Header of a block whose state is used during private execution (not the block the transaction is included in).\n historical_header: Header,\n\n note_encrypted_logs_hashes: BoundedVec<NoteLogHash, MAX_NOTE_ENCRYPTED_LOGS_PER_CALL>,\n encrypted_logs_hashes: BoundedVec<EncryptedLogHash, MAX_ENCRYPTED_LOGS_PER_CALL>,\n unencrypted_logs_hashes: BoundedVec<LogHash, MAX_UNENCRYPTED_LOGS_PER_CALL>,\n\n // Contains the last key validation request for each key type. This is used to cache the last request and avoid\n // fetching the same request multiple times.\n // The index of the array corresponds to the key type (0 nullifier, 1 incoming, 2 outgoing, 3 tagging).\n last_key_validation_requests: [Option<KeyValidationRequest>; NUM_KEY_TYPES],\n}\n\nimpl PrivateContext {\n pub fn new(inputs: PrivateContextInputs, args_hash: Field) -> PrivateContext {\n PrivateContext {\n inputs,\n side_effect_counter: inputs.start_side_effect_counter + 1,\n min_revertible_side_effect_counter: 0,\n is_fee_payer: false,\n args_hash,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n new_note_hashes: BoundedVec::new(),\n new_nullifiers: BoundedVec::new(),\n historical_header: inputs.historical_header,\n private_call_requests: BoundedVec::new(),\n public_call_stack_hashes: BoundedVec::new(),\n public_teardown_function_hash: 0,\n new_l2_to_l1_msgs: BoundedVec::new(),\n note_encrypted_logs_hashes: BoundedVec::new(),\n encrypted_logs_hashes: BoundedVec::new(),\n unencrypted_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES]\n }\n }\n\n fn msg_sender(self) -> AztecAddress {\n self.inputs.call_context.msg_sender\n }\n\n fn this_address(self) -> AztecAddress {\n self.inputs.call_context.storage_contract_address\n }\n\n fn chain_id(self) -> Field {\n self.inputs.tx_context.chain_id\n }\n\n fn version(self) -> Field {\n self.inputs.tx_context.version\n }\n\n fn selector(self) -> FunctionSelector {\n self.inputs.call_context.function_selector\n }\n\n fn get_args_hash(self) -> Field {\n self.args_hash\n }\n\n fn push_new_note_hash(&mut self, note_hash: Field) {\n self.new_note_hashes.push(NoteHash { value: note_hash, counter: self.next_counter() });\n }\n\n fn push_new_nullifier(&mut self, nullifier: Field, nullified_note_hash: Field) {\n self.new_nullifiers.push(Nullifier { value: nullifier, note_hash: nullified_note_hash, counter: self.next_counter() });\n }\n\n // Returns the header of a block whose state is used during private execution (not the block the transaction is\n // included in).\n fn get_header(self) -> Header {\n self.historical_header\n }\n\n // Returns the header of an arbitrary block whose block number is less than or equal to the block number\n // of historical header.\n pub fn get_header_at(self, block_number: u32) -> Header {\n get_header_at(block_number, self)\n }\n\n pub fn set_return_hash(&mut self, returns_hasher: ArgsHasher) {\n pack_returns(returns_hasher.fields);\n self.return_hash = returns_hasher.hash();\n }\n\n pub fn finish(self) -> PrivateCircuitPublicInputs {\n PrivateCircuitPublicInputs {\n call_context: self.inputs.call_context,\n args_hash: self.args_hash,\n returns_hash: self.return_hash,\n min_revertible_side_effect_counter: self.min_revertible_side_effect_counter,\n is_fee_payer: self.is_fee_payer,\n max_block_number: self.max_block_number,\n note_hash_read_requests: self.note_hash_read_requests.storage,\n nullifier_read_requests: self.nullifier_read_requests.storage,\n key_validation_requests_and_generators: self.key_validation_requests_and_generators.storage,\n new_note_hashes: self.new_note_hashes.storage,\n new_nullifiers: self.new_nullifiers.storage,\n private_call_requests: self.private_call_requests.storage,\n public_call_stack_hashes: self.public_call_stack_hashes.storage,\n public_teardown_function_hash: self.public_teardown_function_hash,\n new_l2_to_l1_msgs: self.new_l2_to_l1_msgs.storage,\n start_side_effect_counter: self.inputs.start_side_effect_counter,\n end_side_effect_counter: self.side_effect_counter,\n note_encrypted_logs_hashes: self.note_encrypted_logs_hashes.storage,\n encrypted_logs_hashes: self.encrypted_logs_hashes.storage,\n unencrypted_logs_hashes: self.unencrypted_logs_hashes.storage,\n historical_header: self.historical_header,\n tx_context: self.inputs.tx_context\n }\n }\n\n pub fn set_as_fee_payer(&mut self) {\n dep::protocol_types::debug_log::debug_log_format(\"Setting {0} as fee payer\", [self.this_address().to_field()]);\n self.is_fee_payer = true;\n }\n\n pub fn end_setup(&mut self) {\n dep::protocol_types::debug_log::debug_log_format(\n \"Ending setup at counter {0}\",\n [self.side_effect_counter as Field]\n );\n self.min_revertible_side_effect_counter = self.side_effect_counter;\n }\n\n // docs:start:max-block-number\n pub fn set_tx_max_block_number(&mut self, max_block_number: u32) {\n // docs:end:max-block-number\n self.max_block_number = MaxBlockNumber::min_with_u32(self.max_block_number, max_block_number);\n }\n\n pub fn push_note_hash_read_request(&mut self, note_hash: Field) {\n let side_effect = ReadRequest { value: note_hash, counter: self.next_counter() };\n self.note_hash_read_requests.push(side_effect);\n }\n\n pub fn push_nullifier_read_request(&mut self, nullifier: Field) {\n let request = ReadRequest { value: nullifier, counter: self.next_counter() };\n self.nullifier_read_requests.push(request);\n }\n\n pub fn request_nsk_app(&mut self, npk_m_hash: Field) -> Field {\n self.request_sk_app(npk_m_hash, NULLIFIER_INDEX)\n }\n\n pub fn request_ovsk_app(&mut self, ovpk_m_hash: Field) -> Field {\n self.request_sk_app(ovpk_m_hash, OUTGOING_INDEX)\n }\n\n fn request_sk_app(&mut self, pk_m_hash: Field, key_index: Field) -> Field {\n let cached_request = self.last_key_validation_requests[key_index].unwrap_or(KeyValidationRequest::empty());\n\n if cached_request.pk_m.hash() == pk_m_hash {\n // We get a match so the cached request is the latest one \n cached_request.sk_app\n } else {\n // We didn't get a match meaning the cached result is stale. We fetch new values from oracle and instruct\n // protocol circuits to validate them by storing the validation request in context.\n let request = get_key_validation_request(pk_m_hash, key_index);\n let request_and_generator = KeyValidationRequestAndGenerator { request, sk_app_generator: sk_generators[key_index] };\n // We constrain that the pk_m_hash matches the one in the request (otherwise we could get an arbitrary\n // valid key request and not the one corresponding to pk_m_hash).\n assert(request.pk_m.hash() == pk_m_hash);\n self.key_validation_requests_and_generators.push(request_and_generator);\n self.last_key_validation_requests[key_index] = Option::some(request);\n request.sk_app\n }\n }\n\n // docs:start:context_message_portal\n pub fn message_portal(&mut self, recipient: EthAddress, content: Field) {\n // docs:end:context_message_portal\n let message = L2ToL1Message { recipient, content, counter: self.next_counter() };\n self.new_l2_to_l1_msgs.push(message);\n }\n\n // docs:start:context_consume_l1_to_l2_message\n // docs:start:consume_l1_to_l2_message\n pub fn consume_l1_to_l2_message(&mut self, content: Field, secret: Field, sender: EthAddress) {\n // docs:end:context_consume_l1_to_l2_message\n let nullifier = process_l1_to_l2_message(\n self.historical_header.state.l1_to_l2_message_tree.root,\n self.this_address(),\n sender,\n self.chain_id(),\n self.version(),\n content,\n secret\n );\n\n // Push nullifier (and the \"commitment\" corresponding to this can be \"empty\")\n self.push_new_nullifier(nullifier, 0)\n }\n // docs:end:consume_l1_to_l2_message\n\n // TODO: We might want to remove this since emitting unencrypted logs from private functions is violating privacy.\n // --> might be a better approach to force devs to make a public function call that emits the log if needed then\n // it would be less easy to accidentally leak information.\n // If we decide to keep this function around would make sense to wait for traits and then merge it with emit_unencrypted_log.\n pub fn emit_unencrypted_log<T, N, M>(&mut self, log: T) where T: ToBytesForUnencryptedLog<N, M> {\n let event_selector = 5; // TODO: compute actual event selector.\n let contract_address = self.this_address();\n let counter = self.next_counter();\n let log_slice = log.to_be_bytes_arr();\n let log_hash = compute_unencrypted_log_hash(contract_address, event_selector, log);\n // 44 = addr (32) + selector (4) + raw log len (4) + processed log len (4)\n let len = 44 + log_slice.len().to_field();\n let side_effect = LogHash { value: log_hash, counter, length: len };\n self.unencrypted_logs_hashes.push(side_effect);\n // call oracle\n let _void = emit_unencrypted_log_private_internal(contract_address, event_selector, log, counter);\n }\n\n // This fn exists separately from emit_unencrypted_log because sha hashing the preimage\n // is too large to compile (16,200 fields, 518,400 bytes) => the oracle hashes it\n // It is ONLY used with contract_class_registerer_contract since we already assert correctness:\n // - Contract class -> we will commit to the packed bytecode (currently a TODO)\n // - Private function -> we provide a membership proof\n // - Unconstrained function -> we provide a membership proof\n // Ordinary logs are not protected by the above so this fn shouldn't be called by anything else\n pub fn emit_contract_class_unencrypted_log<N>(&mut self, log: [Field; N]) {\n let event_selector = 5; // TODO: compute actual event selector.\n let contract_address = self.this_address();\n let counter = self.next_counter();\n let log_hash = emit_contract_class_unencrypted_log_private_internal(contract_address, event_selector, log, counter);\n // 44 = addr (32) + selector (4) + raw log len (4) + processed log len (4)\n let len = 44 + N * 32;\n let side_effect = LogHash { value: log_hash, counter, length: len };\n self.unencrypted_logs_hashes.push(side_effect);\n }\n\n // NB: A randomness value of 0 signals that the kernels should not mask the contract address\n // used in siloing later on e.g. 'handshaking' contract w/ known address.\n pub fn encrypt_and_emit_log<N, M>(\n &mut self,\n contract_address: AztecAddress,\n randomness: Field, // Secret random value used later for masked_contract_address\n event_type_id: Field,\n ovpk_m: GrumpkinPoint,\n ivpk_m: GrumpkinPoint,\n preimage: [Field; N]\n ) where [Field; N]: LensForEncryptedLog<N, M> {\n let ovsk_app = self.request_ovsk_app(ovpk_m.hash());\n\n // We are currently just encrypting it EXACTLY the same way as if it was a note.\n let counter = self.next_counter();\n let encrypted_log: [u8; M] = compute_encrypted_log(\n contract_address,\n randomness,\n event_type_id,\n ovsk_app,\n ovpk_m,\n ivpk_m,\n preimage\n );\n emit_encrypted_log(contract_address, randomness, encrypted_log, counter);\n let len = 32 + 32 + 64 + 48 + 48 + 176 + 64 + (preimage.len() as Field * 32) + 16 + 4;\n let log_hash = sha256_to_field(encrypted_log);\n let side_effect = EncryptedLogHash { value: log_hash, counter, length: len, randomness };\n self.encrypted_logs_hashes.push(side_effect);\n }\n\n pub fn encrypt_and_emit_note<Note, N, NB, M>(\n &mut self,\n contract_address: AztecAddress,\n storage_slot: Field,\n note_type_id: Field,\n ovpk_m: GrumpkinPoint,\n ivpk_m: GrumpkinPoint,\n note: Note\n ) where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n let note_hash_counter = note.get_header().note_hash_counter;\n let note_exists_index = find_index(\n self.new_note_hashes.storage,\n |n: NoteHash| n.counter == note_hash_counter\n );\n assert(\n note_exists_index != MAX_NEW_NOTE_HASHES_PER_CALL, \"Can only emit a note log for an existing note.\"\n );\n let preimage = note.serialize_content();\n let counter = self.next_counter();\n\n let ovsk_app = self.request_ovsk_app(ovpk_m.hash());\n\n // TODO(#1139 | #6408): perform encryption in the circuit\n let encrypted_log: [u8; M] = compute_encrypted_log(\n contract_address,\n storage_slot,\n note_type_id,\n ovsk_app,\n ovpk_m,\n ivpk_m,\n preimage\n );\n emit_encrypted_note_log(note_hash_counter, encrypted_log, counter);\n\n // Current unoptimized size of the encrypted log\n // incoming_tag (32 bytes)\n // outgoing_tag (32 bytes)\n // eph_pk (64 bytes)\n // incoming_header (48 bytes)\n // outgoing_header (48 bytes)\n // outgoing_body (176 bytes)\n // incoming_body_fixed (64 bytes)\n // incoming_body_variable (N * 32 bytes + 16 bytes padding) \n // len of processed log (4 bytes)\n let len = 32 + 32 + 64 + 48 + 48 + 176 + 64 + (preimage.len() as Field * 32) + 16 + 4;\n\n let log_hash = sha256_to_field(encrypted_log);\n let side_effect = NoteLogHash { value: log_hash, counter, length: len, note_hash_counter };\n self.note_encrypted_logs_hashes.push(side_effect);\n }\n\n pub fn call_private_function<ARGS_COUNT>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn static_call_private_function<ARGS_COUNT>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, true, false)\n }\n\n pub fn delegate_call_private_function<ARGS_COUNT>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, false, true)\n }\n\n pub fn call_private_function_no_args<RETURNS_COUNT>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, false, false)\n }\n\n pub fn static_call_private_function_no_args<RETURNS_COUNT>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, true, false)\n }\n\n pub fn delegate_call_private_function_no_args<ARGS_COUNT>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, false, true)\n }\n\n pub fn call_private_function_with_packed_args<RETURNS_COUNT>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) -> PackedReturns {\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n let start_side_effect_counter = self.side_effect_counter;\n let item = call_private_function_internal(\n contract_address,\n function_selector,\n args_hash,\n start_side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n\n assert_eq(item.public_inputs.call_context.side_effect_counter, start_side_effect_counter);\n assert_eq(item.public_inputs.start_side_effect_counter, start_side_effect_counter);\n let end_side_effect_counter = item.public_inputs.end_side_effect_counter;\n self.side_effect_counter = end_side_effect_counter + 1;\n\n // TODO (fees) figure out why this crashes the prover and enable it\n // we need this in order to pay fees inside child call contexts\n // assert(\n // (item.public_inputs.min_revertible_side_effect_counter == 0 as u32)\n // | (item.public_inputs.min_revertible_side_effect_counter\n // > self.min_revertible_side_effect_counter)\n // );\n\n // if item.public_inputs.min_revertible_side_effect_counter\n // > self.min_revertible_side_effect_counter {\n // self.min_revertible_side_effect_counter = item.public_inputs.min_revertible_side_effect_counter;\n // }\n\n assert(contract_address.eq(item.contract_address));\n assert(function_selector.eq(item.function_data.selector));\n\n assert(args_hash == item.public_inputs.args_hash);\n\n // Assert that the call context of the call generated by the oracle matches our request.\n assert(item.public_inputs.call_context.is_delegate_call == is_delegate_call);\n assert(item.public_inputs.call_context.is_static_call == is_static_call);\n\n if (is_delegate_call) {\n // For delegate calls, we also constrain the execution context address for the nested call to be equal to our address.\n assert(\n item.public_inputs.call_context.storage_contract_address.eq(self.inputs.call_context.storage_contract_address)\n );\n assert(item.public_inputs.call_context.msg_sender.eq(self.inputs.call_context.msg_sender));\n } else {\n // For non-delegate calls, we also constrain the execution context address for the nested call to be equal to the address we called.\n assert(item.public_inputs.call_context.storage_contract_address.eq(contract_address));\n assert(\n item.public_inputs.call_context.msg_sender.eq(self.inputs.call_context.storage_contract_address)\n );\n }\n\n let mut caller_context = CallerContext::empty();\n caller_context.is_static_call = self.inputs.call_context.is_static_call;\n if is_delegate_call {\n caller_context.msg_sender = self.inputs.call_context.msg_sender;\n caller_context.storage_contract_address = self.inputs.call_context.storage_contract_address;\n }\n self.private_call_requests.push(\n PrivateCallRequest { hash: item.hash(), caller_context, start_side_effect_counter, end_side_effect_counter }\n );\n\n PackedReturns::new(item.public_inputs.returns_hash)\n }\n\n pub fn call_public_function<ARGS_COUNT>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn static_call_public_function<ARGS_COUNT>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, true, false)\n }\n\n pub fn delegate_call_public_function<ARGS_COUNT>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, true)\n }\n\n pub fn call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, false, false)\n }\n\n pub fn static_call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, true, false)\n }\n\n pub fn delegate_call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, false, true)\n }\n\n pub fn call_public_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) {\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n let fields = enqueue_public_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n self.side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n\n let item = parse_public_call_stack_item_from_oracle(fields);\n self.validate_call_stack_item_from_oracle(\n item,\n contract_address,\n function_selector,\n args_hash,\n is_static_call,\n is_delegate_call\n );\n\n self.side_effect_counter = self.side_effect_counter + 1;\n self.public_call_stack_hashes.push(item.hash());\n }\n\n pub fn set_public_teardown_function<ARGS_COUNT>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.set_public_teardown_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn set_public_teardown_function_with_packed_args<ARGS_COUNT>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) {\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n let fields = set_public_teardown_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n self.side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n\n let item = parse_public_call_stack_item_from_oracle(fields);\n self.validate_call_stack_item_from_oracle(\n item,\n contract_address,\n function_selector,\n args_hash,\n is_static_call,\n is_delegate_call\n );\n\n self.side_effect_counter = self.side_effect_counter + 1;\n self.public_teardown_function_hash = item.hash();\n }\n\n fn validate_call_stack_item_from_oracle(\n self,\n item: PublicCallStackItem,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) {\n assert(contract_address.eq(item.contract_address));\n assert(function_selector.eq(item.function_data.selector));\n\n assert_eq(item.public_inputs.call_context.side_effect_counter, self.side_effect_counter);\n\n assert(args_hash == item.public_inputs.args_hash);\n\n // Assert that the call context of the enqueued call generated by the oracle matches our request.\n assert(item.public_inputs.call_context.is_delegate_call == is_delegate_call);\n assert(item.public_inputs.call_context.is_static_call == is_static_call);\n\n if (is_delegate_call) {\n // For delegate calls, we also constrain the execution context address for the nested call to be equal to our address.\n assert(\n item.public_inputs.call_context.storage_contract_address.eq(self.inputs.call_context.storage_contract_address)\n );\n assert(item.public_inputs.call_context.msg_sender.eq(self.inputs.call_context.msg_sender));\n } else {\n // For non-delegate calls, we also constrain the execution context address for the nested call to be equal to the address we called.\n assert(item.public_inputs.call_context.storage_contract_address.eq(contract_address));\n assert(\n item.public_inputs.call_context.msg_sender.eq(self.inputs.call_context.storage_contract_address)\n );\n }\n }\n\n fn next_counter(&mut self) -> u32 {\n let counter = self.side_effect_counter;\n self.side_effect_counter += 1;\n counter\n }\n}\n\nimpl Empty for PrivateContext {\n fn empty() -> Self {\n PrivateContext {\n inputs: PrivateContextInputs::empty(),\n side_effect_counter: 0 as u32,\n min_revertible_side_effect_counter: 0 as u32,\n is_fee_payer: false,\n args_hash: 0,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n new_note_hashes: BoundedVec::new(),\n new_nullifiers: BoundedVec::new(),\n private_call_requests: BoundedVec::new(),\n public_call_stack_hashes: BoundedVec::new(),\n public_teardown_function_hash: 0,\n new_l2_to_l1_msgs: BoundedVec::new(),\n historical_header: Header::empty(),\n note_encrypted_logs_hashes: BoundedVec::new(),\n encrypted_logs_hashes: BoundedVec::new(),\n unencrypted_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES]\n }\n }\n}\n"},"85":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/context/public_context.nr","source":"use crate::hash::{compute_secret_hash, compute_message_hash, compute_message_nullifier};\nuse dep::protocol_types::address::{AztecAddress, EthAddress};\nuse dep::protocol_types::traits::{Deserialize, Empty};\nuse dep::protocol_types::abis::function_selector::FunctionSelector;\nuse crate::context::inputs::public_context_inputs::PublicContextInputs;\nuse crate::context::gas::GasOpts;\n\nstruct PublicContext {\n inputs: PublicContextInputs,\n}\n\nimpl PublicContext {\n pub fn new(inputs: PublicContextInputs) -> Self {\n PublicContext { inputs }\n }\n\n pub fn storage_address(self) -> AztecAddress {\n storage_address()\n }\n pub fn fee_per_l2_gas(self) -> Field {\n fee_per_l2_gas()\n }\n pub fn fee_per_da_gas(self) -> Field {\n fee_per_da_gas()\n }\n /**\n * Emit a log with the given event selector and message.\n *\n * @param event_selector The event selector for the log.\n * @param message The message to emit in the log.\n * Should be automatically convertible to [Field; N]. For example str<N> works with\n * one char per field. Otherwise you can use CompressedString.\n */\n pub fn emit_unencrypted_log_with_selector<T>(&mut self, event_selector: Field, log: T) {\n emit_unencrypted_log(event_selector, log);\n }\n pub fn note_hash_exists(self, note_hash: Field, leaf_index: Field) -> bool {\n note_hash_exists(note_hash, leaf_index) == 1\n }\n pub fn l1_to_l2_msg_exists(self, msg_hash: Field, msg_leaf_index: Field) -> bool {\n l1_to_l2_msg_exists(msg_hash, msg_leaf_index) == 1\n }\n\n fn block_number(self) -> Field {\n block_number()\n }\n\n fn timestamp(self) -> u64 {\n timestamp()\n }\n\n fn transaction_fee(self) -> Field {\n transaction_fee()\n }\n\n fn nullifier_exists(self, unsiloed_nullifier: Field, address: AztecAddress) -> bool {\n nullifier_exists(unsiloed_nullifier, address.to_field()) == 1\n }\n\n fn emit_unencrypted_log<T, N, M>(&mut self, log: T) {\n let event_selector = 5; // Matches current PublicContext.\n self.emit_unencrypted_log_with_selector(event_selector, log);\n }\n\n fn consume_l1_to_l2_message(\n &mut self,\n content: Field,\n secret: Field,\n sender: EthAddress,\n leaf_index: Field\n ) {\n let secret_hash = compute_secret_hash(secret);\n let message_hash = compute_message_hash(\n sender,\n self.chain_id(),\n /*recipient=*/ self.this_address(),\n self.version(),\n content,\n secret_hash\n );\n let nullifier = compute_message_nullifier(message_hash, secret, leaf_index);\n\n assert(\n !self.nullifier_exists(nullifier, self.this_address()), \"L1-to-L2 message is already nullified\"\n );\n assert(\n self.l1_to_l2_msg_exists(message_hash, leaf_index), \"Tried to consume nonexistent L1-to-L2 message\"\n );\n\n // Push nullifier (and the \"commitment\" corresponding to this can be \"empty\")\n self.push_new_nullifier(nullifier, 0);\n }\n\n fn message_portal(&mut self, recipient: EthAddress, content: Field) {\n send_l2_to_l1_msg(recipient, content);\n }\n\n fn call_public_function<RETURNS_COUNT>(\n self: &mut Self,\n contract_address: AztecAddress,\n temporary_function_selector: FunctionSelector,\n args: [Field],\n gas_opts: GasOpts\n ) -> FunctionReturns<RETURNS_COUNT> {\n let results = call(\n gas_for_call(gas_opts),\n contract_address,\n args,\n temporary_function_selector.to_field()\n );\n let data_to_return: [Field; RETURNS_COUNT] = results.0;\n let success: u8 = results.1;\n assert(success == 1, \"Nested call failed!\");\n\n FunctionReturns::new(data_to_return)\n }\n\n fn static_call_public_function<RETURNS_COUNT>(\n self: &mut Self,\n contract_address: AztecAddress,\n temporary_function_selector: FunctionSelector,\n args: [Field],\n gas_opts: GasOpts\n ) -> FunctionReturns<RETURNS_COUNT> {\n let (data_to_return, success): ([Field; RETURNS_COUNT], u8) = call_static(\n gas_for_call(gas_opts),\n contract_address,\n args,\n temporary_function_selector.to_field()\n );\n\n assert(success == 1, \"Nested static call failed!\");\n FunctionReturns::new(data_to_return)\n }\n\n fn delegate_call_public_function<RETURNS_COUNT>(\n self: &mut Self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field]\n ) -> FunctionReturns<RETURNS_COUNT> {\n assert(false, \"'delegate_call_public_function' not implemented!\");\n FunctionReturns::new([0; RETURNS_COUNT])\n }\n\n fn push_new_note_hash(&mut self, note_hash: Field) {\n emit_note_hash(note_hash);\n }\n fn push_new_nullifier(&mut self, nullifier: Field, _nullified_commitment: Field) {\n // Cannot nullify pending commitments in AVM, so `nullified_commitment` is not used\n emit_nullifier(nullifier);\n }\n fn msg_sender(self) -> AztecAddress {\n sender()\n }\n fn this_address(self) -> AztecAddress {\n address()\n }\n fn chain_id(self) -> Field {\n chain_id()\n }\n fn version(self) -> Field {\n version()\n }\n fn selector(self) -> FunctionSelector {\n FunctionSelector::from_field(self.inputs.selector)\n }\n fn get_args_hash(self) -> Field {\n self.inputs.args_hash\n }\n}\n\n// Helper functions\nfn gas_for_call(user_gas: GasOpts) -> [Field; 2] {\n // It's ok to use the max possible gas here, because the gas will be\n // capped by the gas left in the (STATIC)CALL instruction.\n let MAX_POSSIBLE_FIELD: Field = 0 - 1;\n [\n user_gas.l2_gas.unwrap_or(MAX_POSSIBLE_FIELD),\n user_gas.da_gas.unwrap_or(MAX_POSSIBLE_FIELD)\n ]\n}\n\n// Unconstrained opcode wrappers (do not use directly).\n// TODO(https://github.com/AztecProtocol/aztec-packages/issues/6420): reconsider.\nunconstrained fn address() -> AztecAddress {\n address_opcode()\n}\nunconstrained fn storage_address() -> AztecAddress {\n storage_address_opcode()\n}\nunconstrained fn sender() -> AztecAddress {\n sender_opcode()\n}\nunconstrained fn portal() -> EthAddress {\n portal_opcode()\n}\nunconstrained fn fee_per_l2_gas() -> Field {\n fee_per_l2_gas_opcode()\n}\nunconstrained fn fee_per_da_gas() -> Field {\n fee_per_da_gas_opcode()\n}\nunconstrained fn transaction_fee() -> Field {\n transaction_fee_opcode()\n}\nunconstrained fn chain_id() -> Field {\n chain_id_opcode()\n}\nunconstrained fn version() -> Field {\n version_opcode()\n}\nunconstrained fn block_number() -> Field {\n block_number_opcode()\n}\nunconstrained fn timestamp() -> u64 {\n timestamp_opcode()\n}\nunconstrained fn l2_gas_left() -> Field {\n l2_gas_left_opcode()\n}\nunconstrained fn da_gas_left() -> Field {\n da_gas_left_opcode()\n}\nunconstrained fn note_hash_exists(note_hash: Field, leaf_index: Field) -> u8 {\n note_hash_exists_opcode(note_hash, leaf_index)\n}\nunconstrained fn emit_note_hash(note_hash: Field) {\n emit_note_hash_opcode(note_hash)\n}\nunconstrained fn nullifier_exists(nullifier: Field, address: Field) -> u8 {\n nullifier_exists_opcode(nullifier, address)\n}\nunconstrained fn emit_nullifier(nullifier: Field) {\n emit_nullifier_opcode(nullifier)\n}\nunconstrained fn emit_unencrypted_log<T>(event_selector: Field, message: T) {\n emit_unencrypted_log_opcode(event_selector, message)\n}\nunconstrained fn l1_to_l2_msg_exists(msg_hash: Field, msg_leaf_index: Field) -> u8 {\n l1_to_l2_msg_exists_opcode(msg_hash, msg_leaf_index)\n}\nunconstrained fn send_l2_to_l1_msg(recipient: EthAddress, content: Field) {\n send_l2_to_l1_msg_opcode(recipient, content)\n}\nunconstrained fn call<RET_SIZE>(\n gas: [Field; 2],\n address: AztecAddress,\n args: [Field],\n function_selector: Field\n) -> ([Field; RET_SIZE], u8) {\n call_opcode(gas, address, args, function_selector)\n}\nunconstrained fn call_static<RET_SIZE>(\n gas: [Field; 2],\n address: AztecAddress,\n args: [Field],\n function_selector: Field\n) -> ([Field; RET_SIZE], u8) {\n call_static_opcode(gas, address, args, function_selector)\n}\n\nimpl Empty for PublicContext {\n fn empty() -> Self {\n PublicContext::new(PublicContextInputs::empty())\n }\n}\n\n// AVM oracles (opcodes) follow, do not use directly.\n#[oracle(avmOpcodeAddress)]\nfn address_opcode() -> AztecAddress {}\n\n#[oracle(avmOpcodeStorageAddress)]\nfn storage_address_opcode() -> AztecAddress {}\n\n#[oracle(avmOpcodeSender)]\nfn sender_opcode() -> AztecAddress {}\n\n#[oracle(avmOpcodePortal)]\nfn portal_opcode() -> EthAddress {}\n\n#[oracle(avmOpcodeFeePerL2Gas)]\nfn fee_per_l2_gas_opcode() -> Field {}\n\n#[oracle(avmOpcodeFeePerDaGas)]\nfn fee_per_da_gas_opcode() -> Field {}\n\n#[oracle(avmOpcodeTransactionFee)]\nfn transaction_fee_opcode() -> Field {}\n\n#[oracle(avmOpcodeChainId)]\nfn chain_id_opcode() -> Field {}\n\n#[oracle(avmOpcodeVersion)]\nfn version_opcode() -> Field {}\n\n#[oracle(avmOpcodeBlockNumber)]\nfn block_number_opcode() -> Field {}\n\n#[oracle(avmOpcodeTimestamp)]\nfn timestamp_opcode() -> u64 {}\n\n#[oracle(avmOpcodeL2GasLeft)]\nfn l2_gas_left_opcode() -> Field {}\n\n#[oracle(avmOpcodeDaGasLeft)]\nfn da_gas_left_opcode() -> Field {}\n\n#[oracle(avmOpcodeNoteHashExists)]\nfn note_hash_exists_opcode(note_hash: Field, leaf_index: Field) -> u8 {}\n\n#[oracle(avmOpcodeEmitNoteHash)]\nfn emit_note_hash_opcode(note_hash: Field) {}\n\n#[oracle(avmOpcodeNullifierExists)]\nfn nullifier_exists_opcode(nullifier: Field, address: Field) -> u8 {}\n\n#[oracle(avmOpcodeEmitNullifier)]\nfn emit_nullifier_opcode(nullifier: Field) {}\n\n#[oracle(amvOpcodeEmitUnencryptedLog)]\nfn emit_unencrypted_log_opcode<T>(event_selector: Field, message: T) {}\n\n#[oracle(avmOpcodeL1ToL2MsgExists)]\nfn l1_to_l2_msg_exists_opcode(msg_hash: Field, msg_leaf_index: Field) -> u8 {}\n\n#[oracle(avmOpcodeSendL2ToL1Msg)]\nfn send_l2_to_l1_msg_opcode(recipient: EthAddress, content: Field) {}\n\n#[oracle(avmOpcodeCall)]\nfn call_opcode<RET_SIZE>(\n gas: [Field; 2], // gas allocation: [l2_gas, da_gas]\n address: AztecAddress,\n args: [Field],\n // TODO(5110): consider passing in calldata directly\n function_selector: Field\n) -> ([Field; RET_SIZE], u8) {}\n// ^ return data ^ success\n\n#[oracle(avmOpcodeStaticCall)]\nfn call_static_opcode<RET_SIZE>(\n gas: [Field; 2], // gas allocation: [l2_gas, da_gas]\n address: AztecAddress,\n args: [Field],\n // TODO(5110): consider passing in calldata directly\n function_selector: Field\n) -> ([Field; RET_SIZE], u8) {}\n// ^ return data ^ success\n\nstruct FunctionReturns<N> {\n values: [Field; N]\n}\n\nimpl<N> FunctionReturns<N> {\n pub fn new(values: [Field; N]) -> FunctionReturns<N> {\n FunctionReturns { values }\n }\n\n pub fn assert_empty(returns: FunctionReturns<0>) {\n assert(returns.values.len() == 0);\n }\n\n pub fn raw(self) -> [Field; N] {\n self.values\n }\n\n pub fn deserialize_into<T>(self) -> T where T: Deserialize<N> {\n Deserialize::deserialize(self.raw())\n }\n}\n"}}}