@aztec/accounts 0.54.0 → 0.55.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.33.0+8ac81b15cd2a3b57493bfbfe444086deac8f3dc8","name":"EcdsaRAccount","functions":[{"name":"verify_private_authwit","is_unconstrained":false,"custom_attributes":["aztec(private)","aztec(noinitcheck)","aztec(view)"],"abi":{"error_types":{},"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"}}],"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":"num_txs","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":"slot_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":"inner_hash","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"}}],"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":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::read_request::ReadRequest"}}},{"name":"nullifier_read_requests","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::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"}},{"name":"is_infinite","type":{"kind":"boolean"}}],"kind":"struct","path":"std::embedded_curve_ops::EmbeddedCurvePoint"}},{"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":"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":"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":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"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"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"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_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"item","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"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"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"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"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_stack_item_compressed::PublicCallStackItemCompressed"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}}},{"name":"public_teardown_call_request","type":{"fields":[{"name":"item","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"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"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"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"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_stack_item_compressed::PublicCallStackItemCompressed"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}},{"name":"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":"num_txs","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":"slot_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"}},"bytecode":"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","debug_symbols":"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","brillig_names":["get_note_internal","decompose_hint","get_auth_witness","pack_returns","directive_invert","directive_integer_quotient"]},{"name":"constructor","is_unconstrained":false,"custom_attributes":["aztec(private)","aztec(initializer)"],"abi":{"error_types":{},"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"}}],"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":"num_txs","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":"slot_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":"signing_pub_key_x","type":{"kind":"array","length":32,"type":{"kind":"integer","sign":"unsigned","width":8}},"visibility":"private"},{"name":"signing_pub_key_y","type":{"kind":"array","length":32,"type":{"kind":"integer","sign":"unsigned","width":8}},"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"}}],"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":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::read_request::ReadRequest"}}},{"name":"nullifier_read_requests","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::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"}},{"name":"is_infinite","type":{"kind":"boolean"}}],"kind":"struct","path":"std::embedded_curve_ops::EmbeddedCurvePoint"}},{"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":"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":"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":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"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"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"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_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"item","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"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"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"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"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_stack_item_compressed::PublicCallStackItemCompressed"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}}},{"name":"public_teardown_call_request","type":{"fields":[{"name":"item","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"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"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"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"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_stack_item_compressed::PublicCallStackItemCompressed"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}},{"name":"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":"num_txs","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":"slot_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"}},"bytecode":"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","debug_symbols":"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","brillig_names":["get_contract_instance_internal","get_public_data_witness","lt_32_hint","decompose_hint","lte_16_hint","key_registry_get_stored_keys_hint","get_public_keys_and_partial_address","notify_created_note","get_key_validation_request","unsafe_rand","emit_encrypted_note_log","directive_invert","directive_integer_quotient"]},{"name":"compute_note_hash_and_optionally_a_nullifier","is_unconstrained":true,"custom_attributes":[],"abi":{"error_types":{},"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":"compute_nullifier","type":{"kind":"boolean"},"visibility":"private"},{"name":"serialized_note","type":{"kind":"array","length":5,"type":{"kind":"field"}},"visibility":"private"}],"return_type":{"abi_type":{"kind":"array","length":4,"type":{"kind":"field"}},"visibility":"public"}},"bytecode":"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","debug_symbols":"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","brillig_names":["compute_note_hash_and_optionally_a_nullifier"]},{"name":"entrypoint","is_unconstrained":false,"custom_attributes":["aztec(private)"],"abi":{"error_types":{},"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"}}],"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":"num_txs","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":"slot_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":"app_payload","type":{"fields":[{"name":"function_calls","type":{"kind":"array","length":4,"type":{"fields":[{"name":"args_hash","type":{"kind":"field"}},{"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":"target_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"is_public","type":{"kind":"boolean"}},{"name":"is_static","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::function_call::FunctionCall"}}},{"name":"nonce","type":{"kind":"field"}}],"kind":"struct","path":"authwit::entrypoint::app::AppPayload"},"visibility":"private"},{"name":"fee_payload","type":{"fields":[{"name":"function_calls","type":{"kind":"array","length":2,"type":{"fields":[{"name":"args_hash","type":{"kind":"field"}},{"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":"target_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"is_public","type":{"kind":"boolean"}},{"name":"is_static","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::function_call::FunctionCall"}}},{"name":"nonce","type":{"kind":"field"}},{"name":"is_fee_payer","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::fee::FeePayload"},"visibility":"private"},{"name":"cancellable","type":{"kind":"boolean"},"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"}}],"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":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::read_request::ReadRequest"}}},{"name":"nullifier_read_requests","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::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"}},{"name":"is_infinite","type":{"kind":"boolean"}}],"kind":"struct","path":"std::embedded_curve_ops::EmbeddedCurvePoint"}},{"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":"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":"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":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"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"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"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_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"item","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"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"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"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"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_stack_item_compressed::PublicCallStackItemCompressed"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}}},{"name":"public_teardown_call_request","type":{"fields":[{"name":"item","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"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"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"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"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_stack_item_compressed::PublicCallStackItemCompressed"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}},{"name":"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":"num_txs","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":"slot_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"}},"bytecode":"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mjntSac1d1oLp7V02lNOa+W01k5r47S2TmvntPZO6+C0jk7r5LTOTuvitK5O6+a07k7r4bSnndbTab2c1ttpfZzW12n9nNbfaQOcNtBpg5w22GlDnDbUacOcNtxpzzhthNNGOm2U05512minjXHaWKc957RxThvvtAlOe95pE502yWmTnTbFaVOdNs1p0532gtNmOG2m01502ktOe9lps5z2itNmO+1Vp81x2mtOm+u01502z2lvOG2+09502gKnveW0hU5b5LTFTlvitKVOW+a05U5b4bSVTlvltNVOe9tpa5z2jtPWOm2d09Y7bYPTNjptk9M2O22L07Y67V2nbXPadqftcNp7TtvptPedtstpHzhtt9M+dNoep33ktL1O+9hp+5z2idM+ddpnTtvvtM+ddsBpXzjtoNMOOe1Lpx122hGnfeW0r5121GnHnHbcad847YTTTjrtlNO+ddppp51x2lmnfee0c04777TvnfaD0y447aLTLjntR6f95LTLTrvitJ+ddtVp15z2i9N+ddp1p91w2k2n/ea0W0677bQ7TvvdaXedds9pbiEQw2kRTovptFhOi+20OE6L67R4TovvtAROS+i0RE5L7LQkTkvqtGROS+60FE5L6bRUTkvttDROS+u0dE5L77QMTsvotEeclslpmZ2WxWlep2V1WjanZXdaDqfldFoup+V2Wh6n5XVaPqfld9qjTivgtIJOK+S0wk4zTivitKJOc9/N7r5v2n1nsvsOYfeduu47Zt13rrrvIHXfyem+79J9l+Qf72l0mvt+Qffdfe578dx3zrnvc3Pflea+h8x9x5f7/iz33VTue5/cdyq57yty3wXkvmfHfe+M+04X9x0n7vtD3HdzuO+9cN8p4b6vwX0XgvueAfcZ/u7z8d1nz7vPdXefme4+j7yN09znaLvPqHaf/+w+W9l9brH7TGD3ebvus2zd58S6z2B1n2/qPjvUfS6n+8xL93mS7rMa3ecgus8YdJ/f5z4bz33unPtMN/d5ae6zyNznfLnP0HKfT+U++8l9rpL7zCL3eUCjnOY+x8Z9Roz7/BX32Sbuc0Pc2sd93oX7LAn3OQ3uMxDc5wu49+6798W795y793O790q79yG79/i698+696a6932691S69yu69wK699m597C594e591659zW59wy59+O84TT3PhL3Hg33/gf3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","debug_symbols":"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GcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWgGcWkGcWkGcWkGcWkGcW8YEmdNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKOYNKNYNKNYNKNYNKNYNKNYFyypi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUi2YUm2YUm2YUm2YUm2YU+4IlddOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOMYtOM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ZKe5ZKe5ZKe5ZKe5ZKe5ZKe5ZKe5ZKe5ZKe5ZKe5ZKe5ZKe5ZKe5ZKe5ZKe5ZKe5ZKe5ZKe5ZKe5ZKe5ZKe5ZKe5ZKe5ZKe5ZKe5ZKe5ZKe5ZKe5ZKe5ZKe5ZKe5ZKe5ZKe5ZKe5ZKe5ZKe5ZKe5ZKe5ZKe5ZKe5ZKe5ZB9YUgft2bhBezZuXLCkjguW1HHBkjouWFLHBUvquGBJHRcsqeOiJTXNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKCbNKCbNKCbNKCbNKOYFS+qkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWiGcWiGcWiGcWiGcW6YEldNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNYNKNY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FJ1mFJ1mFJ1mFJ1mFJ1mFJ1mFJ1mFJ1mFJ1mFJ1mFJ1mFJ1mFJ1mFJ1mFJ1mFJ1mFJ1mFJ1mFJ1mFJ1mFJ1mFJ1mFJ1mFJ1mFJ1mFJ1mFJ1mFJ1mFJ1mFJ1mFJ1mFJ1mFJ1mFJ1mFJ1mFJ1mFJ1mFJ1mFINmFINmFINmFINmFOOCJXXQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLQjGLSjGLSjGLSjGLSjGJesKROmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlFMmlEsmlEsmlEsmlEsmlGsC5bURTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOKRTOK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RaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRaMZRacZRacZRacZRacZRb9gSe00o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0o+g0oxg0oxg0oxg0oxg0oxgXLKmDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSTZhSTZhSTZhSTZhTzgiV10oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0Yxi0Yxi0Yxi0YxiXbCkLppRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRbJpRbJpRbJpRbJpR7AuW1E0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zikMzikMzikMzikMzinPBknpoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFo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6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSjGDSjGDSjGDSjGDSjGBcsqYNmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFJNmFJNmFJNmFJNmFPOCJXXSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLRjGLRjGLRjGLRjGJdsKQumlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEs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N01QvWmC6k0TVG+aoGbTBDWbJqjZNEHNpgnq4dsdP7TZTRPUbJqgZtMENZsmqFk0Qdm1aIKya9EEZdeiCcquRROUXb6p2UUTlF2LJii7Fk1Qdi2aoOzaNEHJpglKNk1QsmmCkk0T1MO3IX9os5smKNk0QcmmCUo2TVCyaYLSTROUbpqgvti27xvNbpqgvti27xvNbpqgvti27xvNbpqgdNMEpZsmKNs0QbH3jt+72U0TFHvf+L2b9U3NbpqgvtpO8l83u2mC+mo7yX/d7KYJ6qvtJP91s5smqE07yW3TTnLbtJPcNu0kt007yW3TTnLbtJPcNu0kt007yW3TTnLbtJPcNu0kt007yW3TTnLbtJPcNu0kt007yW3TTnLbtJPcNu0kt007yW3TTnLbtJPcNu0kt007yW3TTnLbtJPcNu0kt007yW3TTnLbtJPcNu0kt007yW3TTnLbtJPcNu0kt007yW3TTnLbtJPcNu0kt007yW3TTnLbtJPcNu0kt007yW3TTnLbtJPcNu0kt007yW3TTnLbtJPcNu0kt007yW3TTnLbtJPcNu0kt007yW3TTnLftJPcN+0k9007yX3TTnK/fFOziyYo37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJPdNO8l9005y37ST3DftJI9NO8lj007y2LSTPDbtJI/LNzW7aIKKTTvJY9NO8ti0kzw27SSPTTvJY9NO8ti0kzw27SSPTTvJY9NO8ti0kzw27SSPTTvJY9NO8ti0kzw27SSPTTvJY9NO8ti0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0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0Yyi0Yyi0Yyi0YyiXbCkNppRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRdJpRdJpRdJpRdJpR9AuW1E4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zikEzikEzikEzikEzinHBkjpoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFpRjFpRjFpRjFpRjEvWFInzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgWzSgWzSgWzSgWzSjWBUvqohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFphnFphnFphnFphnFvmBJ3TSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSjODSjODSjODSjODSjOBcsqYdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFAdmFPuCGcVTECupT0GspD4FsZL6FMRK6lMQK6lPQaykPgWxkvoUxErqUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RQES2qhGUWhGUWhGUWhGUW5YEktNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKOoNKOoNKOoNKOoNKOoFyyplWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUjWYUjWYUjWYUjWYU7YIltdGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotOMotOMotOMotOMol+wpHaaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUQyaUQyaUQyaUQyaUYwLltRBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pJM4pJM4pJM4pJM4p5wZI6aUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUaxaEaxHm4U9bL+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1AuW1EozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikozikYzikYzikYzikYzinbBktpoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFoRtFpRtFpRtFpRtFpRtEvWFI7zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSg6zSgGzSgGzSgGzSgGzSjGBUvqoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFoBnFpBnFpBnFpBnFpBnFvGBJnTSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjmDSjWDSjWDSjWDSjWDSjWBcsqYtmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFItmFJtmFJtmFJtmFJtmFPuCJXXTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjGLTjOLQjOLQjOLQjOLQjOJcsKQemlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlEcmlGchxtFvay/X6xX248FvXdxXtfr1WnX6+Ui712f54C/X55j83p1fG+2NzU7i5p9uNv80GZlU7O6qVnQJ/o7F8fMy8Up/laHfv8wIcnXf6Z80LTwz5Sf5H8p8u2JxG/Net74l6J26Uvh58/hf7r+j4bRs8vvaBg9v/yOhtEzzG9o2NFzjHzDfK9Xn4++dxr4WrNJ2+vHdYf9rx/X/rVmkxvN2qZmfVOzsalZ9JT0jzfb9frzxPXTzxP+te7u3Gj2a93dudHs17q78+tm42vd3bnR7BeboH7d7BeboH7d7BeboH7drG9q9otNUL9udtMEFZsmqNg0QcWmCSo3TVC5aYLKTRNUbpqgHr5J5UOb3TRB5aYJKjdNULlpgspNE1RtmqBq0wRVmyao2jRBPXzD0Yc2u2mCqk0TVG2aoGrTBFWbJqjeNEH1pgmqN01QvWmCevjmsQ9tdtME1ZsmqN40QfWmCao3TVCzaYKaTRPUbJqgZtME9fCNgB/a7KYJajZNULNpgppNE9TsmaDkuq49I9S3bvfMUN+63TNEfet2zxT1rVtf1e2eOepbt3sGqW/d7pmkvnW7Z5T61u2qWUpWzVKyapaSVbOUrJqlHr5Q92O7XTVLyapZSlbNUrJqlpJVs5SumqV01Sylq2YpXTVLPXzl9cd2u2qW0lWz1BfbBH6r21Wz1BfbBX6j2y+2DPxWt6tmqS+2DvxWt6tmqYevD//YblfNUuzl5HfvdtUsxV5LfvduV81S7IXkd+921Sz11daX3+h21Sz11RaY3+h21Sy1aIX5t25XzVKLlph/63bVLLVojfm3blfNUosWmX/rdtUstWiV+bduV81Si5aZf+t21Sy1aJ35t25XzVKLFpp/63bVLLVopfm3blfNUouWmn/rdtUstWit+bduV81Sixabf+t21Sy1aLX5t25XzVKLlpt/63bVLLVovfm3blfNUosWnH/rdtUstWjF+bduV81Si5acf+t21Sy1aM35t25XzVKLFp1/63bVLLVo1fm3blfNUouWnX/rdtUstWjd+bduV81Sixaef+t21Sy1aOX5t25XzVKLlp5/63bVLLVo7fm3bjfNUrJq77ms2nsuq/aey6q953L5qm43zVKyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7Lqv2nsuqveeyau+5rNp7rqv2nuuqvee6au+5rtp7rpev6nbTLKWr9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvua7ae66r9p7rqr3numrvuX6xveej+dqtvdPt15qlbnX78FnK6rV+l/x1txLd9vLSKZf/qdvvHfSn72DQHaS4vnWQ804Hj985fvcO5NN3oJ++A0N3UJe8vnRd3jc/Ve01eTvsp+R9/L7vD+02VnWbq7plzxD37pY9b/zD3f569h/2bHLfbu1izzH37pY989y7W/Z8dO9uv9gsdaNbX9XtF5ulbnT7xWapG91+sVnqRrebZim7Vs1SsmqWklWzlKyapWTVLPX4fd8f2u2qWUpWzVKyapaSVbOUrJqldNUspatmKV01S+mqWerx+74/tNtVs5SumqV01Sylq2YpXTVL2apZylbNUrZqlrJVs9Tj931/aLerZilbNUvZqlnKVs1StmqW8lWzlK+apXzVLOWrZqnH7/v+0G5XzVK+apbyVbOUr5qlfNUsFatmqVg1S8WqWSpWzVKP3/f9od2umqVi1SwVq2apWDVLxapZKlfNUrlqlspVs1SumqUev+/7Q7tdNUvlqlkqV81SuWqWylWzVK2apWrVLFWrZqlaNUs9ft/3h3a7apaqVbNUrZqlatUsVatmqV41S/WqWapXzVK9apZ6/L7vD+121SzVq2Yp+L7ve3e7apaC7xG/c7fwneP37nbVLAXfZX7vblfNUl9t7/mNblfNUl9t7/mNblfNUqv2ntuqvee+au+5r9p77qv2nvuqved++apuN81Svmrvua/ae+6r9p77qr3nvmrvua/ae+6r9p77qr3nvmrvua/ae+6r9p77qr3nvmrvua/ae+6r9p77qr3nvmrvua/ae+6r9p77qr3nvmrvua/ae+6r9p77qr3nvmrvua/ae+6r9p77qr3nvmrvua/ae+5fbO/5aL52a+90+7VmqVvdPnyWuqxfur3abnQ7pfPy0lOeN7pVu/Sl8PPn8D9d/73j2dbx4/eff3jHsq5jXdexrevY13Uc6zrOdR3Xuo7XzVwP35EuE9dbD/Vjx39U9PA95rcrElxFiqvoLp/54q8/QP3wE9H7FZXl68URbxe//Px0n73ad60ocBUlrqLCVdS4ioZW0X32Jd+1IsFVpLiKjPYpko/P7Hq9uC9554wC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OUjFOUjFOUjFOUjFOUjFOUjFOUjFOUjFOUjFOUjFOUjFOUjFOUjFOUjFOUjFOUjFOUjFOUjFOUjFOUjFOUjFOUjFOUjFOUjFOUjFOUjFOUjFOUjFOUjFOUjFOUjFOUjFOUjFOUjFOUjFOUjFOUjFOUjFOUjFOUjFOUjDOUjDOUjDOUjDOUi7aJltOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAdpOAfpOAfpOAfpOAfpOAfpFy2zHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgHecgA+cgA+cgA+cgA+cg46JlduAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOAcZOIcZOIcZOIcZOIcZF60zE6cg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycgyycgyycgyycgyycg6yLltmFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CNc5CNc5CNc5CNc5B90TK7cQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6y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l9mBy+zAZXbgMjtxmZ24zE5cZicusxOX2YnL7MRlduIyO3GZnbjMLlxmFy6zC5fZhcvswmV24TK7cJlduMwuXGYXLrMbl9mNy+zGZXbjMrtxmd24zG5cZjcusxuX2Y3L7MFl9uAyG+cgE+cgE+cgE+cgE+cgE+cgE+cgE+cgC+cgC+cgC+cgC+cg66JlduEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOEcZOMcZOMcZOMcZOMcZF+0zG6cg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycg2ycgxycgxycgxycgxycg5yLltmDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5CDc5BDc5B20RzkqQiW2aciWGafimCZfSqCZfapCJbZpyJYZp+KYJl9KoJl9qkIl9k0B3kqwmU2zUGeinCZTXOQpyJcZtMc5KkIl9k0B3kqwmU2zUGeinCZTXOQpyJcZtMc5KkIl9k0B3kqwmU2zUGeinCZTXOQpyJcZtMc5KkIl9k0B3kqwmU2zUGeinCZTXOQpyJcZtMc5KkIl9k0B3kqwmU2zUGeinCZTXOQpyJcZtMc5KkIl9k0B3kqwmU2zUGeinCZTXOQpyJcZtMc5KkIl9k0B3kqwmU2zUGeinCZTXOQpyJcZtMc5KkIl9k0B3kqwmU2zUGeinCZTXOQpyJcZtMc5KkIl9k0B3kqwmU2zUGeinCZTXOQpyJcZtMc5KkIl9k0B3kqwmU2zUGeinCZTXOQpyJcZtMc5KkIl9k0B3kqwmU2zUGeinCZTXOQpyJcZtMc5KkIl9k0B3kqomW24Byk4Byk4Byk4BykXLTMFpyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDFJyDVJyDVJyDVJyDVJyD1IuW2YpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIpzkIZzkIZzkIZzkIZzkHbRMttwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJwDtJxDtJxDtJxDtJxDtIvWmY7zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkE6zkEGzkEGzkEGzkEGzkHGRcvswDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIwDnIxDnIxDnIxDnIxDnIvGiZnTgHmTgHmTgHmTgHmTgHmTgHmTgHmTgHmTgHmTgHmTgHmTgHmTgHmTgHmTgHmTgHmTgHmTgHmTgHmTgHmTgHmTgHmTgHmTgHmTgHmTgHmTgHmQ93kHpZf79Yr7YfK3rv4nOD6/Xq84a+Xi7y3vU5mt8vz7F5vTpeurVV3fqqbmNVt7mq21rVLeiz/Z2Lz7cgLxefWxBvdejrZwpoEvhn6idZ3H+qfiH/azkd6rx163njX4vapS+Fnz+H/+n67x2jp5jf0jF6kvktHfu6jtETjUzH26fe+Qh8r4OvNaW0vX5ud9hPn9v+taaUW932qm5nU7cPl+0f2y16XvrHu+16/eni+vmni/had3xudfu17vjc6tZXdfu17vjc6vaLzVI3uv1is9SNbr/YLHWj2y82S/262/xis9SNblfNUrlqlspVs9TDN3x8bLerZqlcNUvlqlkqV81SuWqWqlWzVK2apWrVLFWrZqmHb9752G5XzVK1apaqVbNUrZqlatUs1atmqV41S/WqWapXzVIP34j1sd2umqV61SzVq2apXjVL9apZalbNUrNqlppVs9SsmqUevqnuY7tdNUvNqllqVs1Ss2qWmk2zVF2bZqm6Ns1SdW2aperaNEvV5au63TRL1bVplqpr0yxV16ZZqq5Vs5SsmqVk1Swlq2YpWTVLPXyz68d2u2qWklWzlKyapWTVLCWrZildNUvpqllKV81SumqWevjG5Y/tdtUspatmKV01S+mqWUpXzVK2apayVbPUF9sofqvbVbPUF9sofqvbVbPUF9sofqvbVbOUrZqlbNUs5atmKfZu87t3u2qWYu80v3u3vqrbVbPUV9t7fqPbVbPUV9t7fqPbVbPUV9t7fqPbVbPUqr3ntWrvea3ae16r9p7Xqr3ntWrvea3ae16r9p7Xqr3ntWrvea3ae16r9p7Xqr3ntWrvea3ae16r9p7Xqr3ntWrvea3ae16r9p7Xqr3ntWrvea3ae16r9p7Xqr3ntWrvea3ae16r9p7Xqr3ntWrvea3ae16r9p7Xqr3ntWrvea3ae16r9p7Xqr3ntWrvea3ae16r9p7Xqr3ntWrvea3ae16r9p7Xqr3ntWrvea3ae16r9p73qr3nvWrvea/ae96r9p735au63TRL9aq9571q73mv2nveq/ae96q9571q73mv2nveq/ae96q9571q73mv2nveq/ae96q9571q73mv2nveq/ae96q9571q73mv2nveq/ae96q9571q73mv2nveq/ae96q9571q73mv2nveq/ae96q9571q73mv2nveq/ae96q9571q73mv2nveq/ae96q9571q73mv2nveq/ae96q9571q73mv2nveq/ae96q9571q73mv2nveq/ae96q9571q73mv2nveq/ae96q9571q73mv2nveq/ae96q9571q73mv2nveq/ae96q9571q73mv2nveq/ae96q9571q73mv2nveq/ae96q9571q73mv2nveq/ae96q9571q73mv2nveq/ae96q9571q73mv2nveq/ae96q9571q73mv2nveq/ae96q9571q73mv2nveq/ae96q9571q73mv2nveq/ae96q9571q7/ms2ns+q/aez6q957Nq7/lcvqrbTbPUrNp7Pqv2ns+qveezau/5rNp7Pqv2ns+qveezau/5rNp7Pqv2ns+qveezau/5rNp7Pqv2ns+qveezau/5rNp7Pqv2ns+qveezau/5rNp7Pqv2ns+qveezau/5rNp7Pqv2ns+qveezau/5rNp7Pqv2ns+qveezau/5rNp7Pqv2ns+qveezau/5rNp7Pqv2ns+qveezau/5rNp7Pqv2ns+qveezau/5rNp7Pqv2ns+qveezau/5rNp7/v+0d7e7kSTZecdvKc/7OVdjSIJhLLCQDGltwB90747ubZLTS25zuqYq+OdEf1nMYKsqn6jJeBhM5i9yjtr3fI7a93yO2vd8jtr3fI7a93yO2vd8jtr3fI7a93yO2vd8jtr3fI7a93yO2vd8jtr3fI7a93yO2vd8jtr3fI7a93yO2vd8jtr3fI7a93yO2vd8jtr3fI7a93yO2vd8jtr3fI7a93yO2vd8jtr3fI7a93yO2vd8jtr3fI7a93yO2vd8jtr3fI7a93z273tu9ZzfJX88Wolue/rolMu/G+23EcinH4GiR5Di+jKCnLdGYJ9+BP7pRxCffgSJHkFd8vzRdXm/27yWT83bYa+bt44abR812jlntH5d7DXEvUfLXm/89Gh/tD5co2WvTe49WvY65t6j9aNGy14f3Xu0f7K11Duj/ZOtpd4Z7Z9sLfXOaP9ka6kfj1b+ZGupd0Z71FpKjlpLyVFrqf37fX/oaI9aS8lRayk5ai0lR62l5Ki1lB61ltKj1lJ61FpKj1pL7d/v+0NHe9RaSo9aS+lRayk9ai2lR62l7Ki1lB21lrKj1lJ21Fpq/37fHzrao9ZSdtRayo5aS9lRayk7ai3lR62l/Ki1lB+1lvKj1lL79/v+0NEetZbyo9ZSftRayo9aS/lRa6k4ai0VR62l4qi1VBy1ltq/3/eHjvaotVQctZaKo9ZScdRaKo5aS+VRa6k8ai2VR62l8qi11P79vj90tEetpfKotVQetZbKo9ZSedRaqo5aS9VRa6k6ai1VR62l9u/3/aGjPWotVUetpeqotVQdtZaqo9ZSfdRaqo9aS/VRa6k+ai21f7/vDx3tUWupPmot1UetpfqotVQftZaC7/d979EetZaC7yN+79EetZaC709+79EetZb6s+17/s5oj1pL/dn2PX9ntCetpeTPtu/5O6M9aS0lR+17Lkftey6XHzXak9ZSctS+53LUvudy1L7nctS+53LUvudy1L7nctS+53LUvudy1L7nctS+53LUvudy1L7nctS+53LUvudy1L7nctS+53LUvudy1L7nctS+53LUvudy1L7nctS+53LUvudy1L7nctS+53LUvudy1L7nctS+53LUvudy1L7nctS+53LUvudy1L7nsn/f88v6abRX2zujndJ5+ugpz3dGq3bpU/D1z+Hfvf7vI96/9/mHj1iOG7EeN2I7bsR+3IjjuBHncSOu40bcx434uDXX9j3SZeJ6GUP9dsTfEgkukeISGS7RXX7miz//AmXzTqKyfH5xxMuLn35/us++2ndNlLhEhUvUuERDS3SfvZjvmkhwiRSXyHCJnPZTJPd3dj2/uC954ztKXKLCJWpcoqElKtw6u3Dr7Nrd2Srz9GJVv377X+2NT466noNEpbzx21TZpx+Bf/oRxKcfQX76ERSuWxqXaGiJGvczqnE/oxp3Legu+0Zm/OZP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pOIcpOIcpOIcpOIcpOIcpOEcpOEcpOEcpOEcpF20zjacgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScgzScg3Scg3Scg3Scg3Scg/SL1tmOc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5COc5CBc5CBc5CBc5CBc5Bx0To7cA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycA4ycQ4ycQ4ycQ4ycQ4yL1pnJ85BJs5BJs5B5kXr7MQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMQ5yMI5yMI5yMI5yMI5yLponV04B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B1k4B9k4B9k4B9k4B9k4B9kXrbMb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb5yAb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pOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcpOMcZOAcZOAcZOAcZOAcZFy0zg6cgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycgwycg0ycg0ycg0ycg0ycg8yL1tmJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CJc5CFc5CFc5CFc5CFc5B10Tq7cA6ycA6ycA6ycA6ycA6ycA6ycA6y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","brillig_names":["get_note_internal","decompose_hint","get_auth_witness","enqueue_public_function_call_internal","call_private_function_internal","debug_log_format","notify_set_min_revertible_side_effect_counter","directive_invert","directive_integer_quotient"]}],"outputs":{"globals":{"notes":[{"fields":[{"kind":"integer","sign":false,"value":"00000000000000000000000000000000000000000000000000000000906cb9c3"},{"kind":"string","value":"EcdsaPublicKeyNote"}],"kind":"tuple"}],"storage":[{"fields":[{"name":"public_key","value":{"fields":[{"name":"slot","value":{"kind":"integer","sign":false,"value":"0000000000000000000000000000000000000000000000000000000000000001"}}],"kind":"struct"}}],"kind":"struct"}]},"structs":{"functions":[{"fields":[{"name":"parameters","type":{"fields":[{"name":"signing_pub_key_x","type":{"kind":"array","length":32,"type":{"kind":"integer","sign":"unsigned","width":8}}},{"name":"signing_pub_key_y","type":{"kind":"array","length":32,"type":{"kind":"integer","sign":"unsigned","width":8}}}],"kind":"struct","path":"EcdsaRAccount::constructor_parameters"}}],"kind":"struct","path":"EcdsaRAccount::constructor_abi"},{"fields":[{"name":"parameters","type":{"fields":[{"name":"inner_hash","type":{"kind":"field"}}],"kind":"struct","path":"EcdsaRAccount::verify_private_authwit_parameters"}},{"name":"return_type","type":{"kind":"field"}}],"kind":"struct","path":"EcdsaRAccount::verify_private_authwit_abi"},{"fields":[{"name":"parameters","type":{"fields":[{"name":"app_payload","type":{"fields":[{"name":"function_calls","type":{"kind":"array","length":4,"type":{"fields":[{"name":"args_hash","type":{"kind":"field"}},{"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":"target_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"is_public","type":{"kind":"boolean"}},{"name":"is_static","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::function_call::FunctionCall"}}},{"name":"nonce","type":{"kind":"field"}}],"kind":"struct","path":"authwit::entrypoint::app::AppPayload"}},{"name":"fee_payload","type":{"fields":[{"name":"function_calls","type":{"kind":"array","length":2,"type":{"fields":[{"name":"args_hash","type":{"kind":"field"}},{"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":"target_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"is_public","type":{"kind":"boolean"}},{"name":"is_static","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::function_call::FunctionCall"}}},{"name":"nonce","type":{"kind":"field"}},{"name":"is_fee_payer","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::fee::FeePayload"}},{"name":"cancellable","type":{"kind":"boolean"}}],"kind":"struct","path":"EcdsaRAccount::entrypoint_parameters"}}],"kind":"struct","path":"EcdsaRAccount::entrypoint_abi"}]}},"file_map":{"107":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/context/unconstrained_context.nr","source":"use dep::protocol_types::{address::AztecAddress, traits::Deserialize};\nuse crate::oracle::{\n execution::{get_chain_id, get_version, get_contract_address, get_block_number},\n storage::{raw_storage_read, storage_read}\n};\n\nstruct UnconstrainedContext {\n block_number: u32,\n contract_address: AztecAddress,\n version: Field,\n chain_id: Field,\n}\n\nimpl UnconstrainedContext {\n unconstrained fn new() -> Self {\n // We could call these oracles on the getters instead of at creation, which makes sense given that they might\n // not even be accessed. However any performance gains are minimal, and we'd rather fail early if a user\n // incorrectly attempts to create an UnconstrainedContext in an environment in which these oracles are not\n // available.\n let block_number = get_block_number();\n let contract_address = get_contract_address();\n let chain_id = get_chain_id();\n let version = get_version();\n Self { block_number, contract_address, version, chain_id }\n }\n\n unconstrained fn at(contract_address: AztecAddress) -> Self {\n let block_number = get_block_number();\n let chain_id = get_chain_id();\n let version = get_version();\n Self { block_number, contract_address, version, chain_id }\n }\n\n unconstrained fn at_historical(contract_address: AztecAddress, block_number: u32) -> Self {\n let chain_id = get_chain_id();\n let version = get_version();\n Self { block_number, contract_address, version, chain_id }\n }\n\n fn block_number(self) -> u32 {\n self.block_number\n }\n\n fn this_address(self) -> AztecAddress {\n self.contract_address\n }\n\n fn version(self) -> Field {\n self.version\n }\n\n fn chain_id(self) -> Field {\n self.chain_id\n }\n\n unconstrained fn raw_storage_read<let N: u32>(self: Self, storage_slot: Field) -> [Field; N] {\n storage_read(self.this_address(), storage_slot, self.block_number())\n }\n\n unconstrained fn storage_read<T, let N: u32>(\n self,\n storage_slot: Field\n ) -> T where T: Deserialize<N> {\n T::deserialize(self.raw_storage_read(storage_slot))\n }\n}\n"},"113":{"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, hash::{hash_args_array, ArgsHasher},\n keys::constants::{NULLIFIER_INDEX, OUTGOING_INDEX, NUM_KEY_TYPES, sk_generators},\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::{emit_encrypted_note_log, emit_encrypted_event_log},\n enqueue_public_function_call::{\n enqueue_public_function_call_internal, notify_set_min_revertible_side_effect_counter,\n set_public_teardown_function_call_internal\n}\n}\n};\nuse dep::protocol_types::{\n abis::{\n call_context::CallContext, function_selector::FunctionSelector, gas::Gas,\n max_block_number::MaxBlockNumber,\n validation_requests::{KeyValidationRequest, KeyValidationRequestAndGenerator},\n private_call_request::PrivateCallRequest, private_circuit_public_inputs::PrivateCircuitPublicInputs,\n public_call_request::PublicCallRequest, public_call_stack_item::PublicCallStackItem,\n public_call_stack_item_compressed::PublicCallStackItemCompressed, read_request::ReadRequest,\n note_hash::NoteHash, nullifier::Nullifier, log_hash::{LogHash, NoteLogHash, EncryptedLogHash}\n},\n address::{AztecAddress, EthAddress},\n constants::{\n MAX_NOTE_HASHES_PER_CALL, MAX_L2_TO_L1_MSGS_PER_CALL, MAX_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 header::Header, messaging::l2_to_l1_message::L2ToL1Message, utils::reader::Reader, traits::Empty\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 note_hashes: BoundedVec<NoteHash, MAX_NOTE_HASHES_PER_CALL>,\n nullifiers: BoundedVec<Nullifier, MAX_NULLIFIERS_PER_CALL>,\n\n private_call_requests : BoundedVec<PrivateCallRequest, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL>,\n public_call_requests : BoundedVec<PublicCallRequest, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL>,\n public_teardown_call_request: PublicCallRequest,\n l2_to_l1_msgs : BoundedVec<L2ToL1Message, MAX_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 note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n historical_header: inputs.historical_header,\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n 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_note_hash(&mut self, note_hash: Field) {\n self.note_hashes.push(NoteHash { value: note_hash, counter: self.next_counter() });\n }\n\n fn push_nullifier(&mut self, nullifier: Field) {\n self.nullifiers.push(Nullifier { value: nullifier, note_hash: 0, counter: self.next_counter() });\n }\n\n fn push_nullifier_for_note_hash(&mut self, nullifier: Field, nullified_note_hash: Field) {\n self.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 note_hashes: self.note_hashes.storage,\n nullifiers: self.nullifiers.storage,\n private_call_requests: self.private_call_requests.storage,\n public_call_requests: self.public_call_requests.storage,\n public_teardown_call_request: self.public_teardown_call_request,\n l2_to_l1_msgs: self.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 notify_set_min_revertible_side_effect_counter(self.min_revertible_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.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_nullifier(nullifier)\n }\n // docs:end:consume_l1_to_l2_message\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 emit_raw_event_log_with_masked_address<let M: u32>(\n &mut self,\n randomness: Field,\n log: [u8; M],\n log_hash: Field\n ) {\n let counter = self.next_counter();\n let contract_address = self.this_address();\n let len = log.len() as Field + 4;\n let side_effect = EncryptedLogHash { value: log_hash, counter, length: len, randomness };\n self.encrypted_logs_hashes.push(side_effect);\n\n emit_encrypted_event_log(contract_address, randomness, log, counter);\n }\n\n pub fn emit_raw_note_log<let M: u32>(&mut self, note_hash_counter: u32, log: [u8; M], log_hash: Field) {\n let counter = self.next_counter();\n let len = log.len() as Field + 4;\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 emit_encrypted_note_log(note_hash_counter, log, counter);\n }\n\n pub fn call_private_function<let ARGS_COUNT: u32>(\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<let ARGS_COUNT: u32>(\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<let ARGS_COUNT: u32>(\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(\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(\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(\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(\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 (end_side_effect_counter, returns_hash) = 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 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 let call_context = self.generate_call_context(\n contract_address,\n function_selector,\n is_static_call,\n is_delegate_call\n );\n\n self.private_call_requests.push(\n PrivateCallRequest {\n contract_address,\n call_context,\n args_hash,\n returns_hash,\n start_side_effect_counter,\n end_side_effect_counter\n }\n );\n\n PackedReturns::new(returns_hash)\n }\n\n pub fn call_public_function<let ARGS_COUNT: u32>(\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<let ARGS_COUNT: u32>(\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<let ARGS_COUNT: u32>(\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 counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n enqueue_public_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n is_delegate_call\n );\n\n let call_context = self.generate_call_context(\n contract_address,\n function_selector,\n is_static_call,\n is_delegate_call\n );\n\n let item = PublicCallStackItemCompressed {\n contract_address,\n call_context,\n args_hash,\n returns_hash: 0,\n revert_code: 0,\n start_gas_left: Gas::empty(),\n end_gas_left: Gas::empty()\n };\n\n let call_request = PublicCallRequest { item, counter };\n self.public_call_requests.push(call_request);\n }\n\n pub fn set_public_teardown_function<let ARGS_COUNT: u32>(\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(\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 counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n set_public_teardown_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n is_delegate_call\n );\n\n let call_context = self.generate_call_context(\n contract_address,\n function_selector,\n is_static_call,\n is_delegate_call\n );\n\n let item = PublicCallStackItemCompressed {\n contract_address,\n call_context,\n args_hash,\n returns_hash: 0,\n revert_code: 0,\n start_gas_left: Gas::empty(),\n end_gas_left: Gas::empty()\n };\n\n self.public_teardown_call_request = PublicCallRequest {\n item,\n counter,\n };\n }\n\n fn generate_call_context(\n self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n is_static_call: bool,\n is_delegate_call: bool\n ) -> CallContext {\n let msg_sender = if is_delegate_call {\n self.msg_sender()\n } else {\n self.this_address()\n };\n let storage_contract_address = if is_delegate_call {\n self.this_address()\n } else {\n contract_address\n };\n CallContext { msg_sender, storage_contract_address, function_selector, is_static_call, is_delegate_call }\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 note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n 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"},"121":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/payload.nr","source":"use dep::protocol_types::{address::AztecAddress, scalar::Scalar, point::Point};\nuse std::{\n embedded_curve_ops::fixed_base_scalar_mul as derive_public_key,\n hash::from_field_unsafe as fr_to_fq_unsafe, field::bn254::decompose\n};\n\nuse crate::{\n event::event_interface::EventInterface, oracle::unsafe_rand::unsafe_rand,\n utils::point::point_to_bytes, note::note_interface::NoteInterface,\n encrypted_logs::{\n header::EncryptedLogHeader, incoming_body::EncryptedLogIncomingBody,\n outgoing_body::EncryptedLogOutgoingBody\n},\n keys::public_keys::{OvpkM, IvpkM}\n};\n\npub fn compute_encrypted_event_log<Event, let NB: u32, let MB: u32, let OB: u32>(\n contract_address: AztecAddress,\n randomness: Field,\n ovsk_app: Field,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress,\n event: Event\n) -> [u8; OB] where Event: EventInterface<NB, MB> {\n let (eph_sk, eph_pk) = generate_ephemeral_key_pair();\n\n let header = EncryptedLogHeader::new(contract_address);\n\n let incoming_header_ciphertext: [u8; 48] = header.compute_ciphertext(eph_sk, ivpk);\n let outgoing_header_ciphertext: [u8; 48] = header.compute_ciphertext(eph_sk, ovpk);\n let incoming_body_ciphertext = EncryptedLogIncomingBody::from_event(event, randomness).compute_ciphertext(eph_sk, ivpk);\n let outgoing_body_ciphertext: [u8; 144] = EncryptedLogOutgoingBody::new(eph_sk, recipient, ivpk).compute_ciphertext(fr_to_fq(ovsk_app), eph_pk);\n\n let mut encrypted_bytes: [u8; OB] = [0; OB];\n // @todo We ignore the tags for now\n\n let eph_pk_bytes = point_to_bytes(eph_pk);\n for i in 0..32 {\n encrypted_bytes[64 + i] = eph_pk_bytes[i];\n }\n for i in 0..48 {\n encrypted_bytes[96 + i] = incoming_header_ciphertext[i];\n encrypted_bytes[144 + i] = outgoing_header_ciphertext[i];\n }\n for i in 0..144 {\n encrypted_bytes[192 + i] = outgoing_body_ciphertext[i];\n }\n // Then we fill in the rest as the incoming body ciphertext\n let size = OB - 336;\n assert_eq(size, incoming_body_ciphertext.len(), \"ciphertext length mismatch\");\n for i in 0..size {\n encrypted_bytes[336 + i] = incoming_body_ciphertext[i];\n }\n\n // Current unoptimized size of the encrypted log\n // incoming_tag (32 bytes)\n // outgoing_tag (32 bytes)\n // eph_pk (32 bytes)\n // incoming_header (48 bytes)\n // outgoing_header (48 bytes)\n // outgoing_body (144 bytes)\n // incoming_body_fixed (64 bytes)\n // incoming_body_variable (N * 32 bytes + 16 bytes padding)\n encrypted_bytes\n}\n\npub fn compute_encrypted_note_log<Note, let N: u32, let NB: u32, let M: u32>(\n contract_address: AztecAddress,\n storage_slot: Field,\n ovsk_app: Field,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress,\n note: Note\n) -> [u8; M] where Note: NoteInterface<N, NB> {\n let (eph_sk, eph_pk) = generate_ephemeral_key_pair();\n\n let header = EncryptedLogHeader::new(contract_address);\n\n let incoming_header_ciphertext: [u8; 48] = header.compute_ciphertext(eph_sk, ivpk);\n let outgoing_header_ciphertext: [u8; 48] = header.compute_ciphertext(eph_sk, ovpk);\n let incoming_body_ciphertext = EncryptedLogIncomingBody::from_note(note, storage_slot).compute_ciphertext(eph_sk, ivpk);\n let outgoing_body_ciphertext: [u8; 144] = EncryptedLogOutgoingBody::new(eph_sk, recipient, ivpk).compute_ciphertext(fr_to_fq(ovsk_app), eph_pk);\n\n let mut encrypted_bytes: [u8; M] = [0; M];\n // @todo We ignore the tags for now\n\n let eph_pk_bytes = point_to_bytes(eph_pk);\n for i in 0..32 {\n encrypted_bytes[64 + i] = eph_pk_bytes[i];\n }\n for i in 0..48 {\n encrypted_bytes[96 + i] = incoming_header_ciphertext[i];\n encrypted_bytes[144 + i] = outgoing_header_ciphertext[i];\n }\n for i in 0..144 {\n encrypted_bytes[192 + i] = outgoing_body_ciphertext[i];\n }\n // Then we fill in the rest as the incoming body ciphertext\n let size = M - 336;\n assert_eq(size, incoming_body_ciphertext.len(), \"ciphertext length mismatch\");\n for i in 0..size {\n encrypted_bytes[336 + i] = incoming_body_ciphertext[i];\n }\n\n // Current unoptimized size of the encrypted log\n // incoming_tag (32 bytes)\n // outgoing_tag (32 bytes)\n // eph_pk (32 bytes)\n // incoming_header (48 bytes)\n // outgoing_header (48 bytes)\n // outgoing_body (144 bytes)\n // incoming_body_fixed (64 bytes)\n // incoming_body_variable (N * 32 bytes + 16 bytes padding)\n encrypted_bytes\n}\n\n/// Converts a base field element to scalar field element.\n/// This is fine because modulus of the base field is smaller than the modulus of the scalar field.\nfn fr_to_fq(r: Field) -> Scalar {\n let (lo, hi) = decompose(r);\n\n Scalar { lo, hi }\n}\n\nfn generate_ephemeral_key_pair() -> (Scalar, Point) {\n // @todo Need to draw randomness from the full domain of Fq not only Fr\n // We use the unsafe version of `fr_to_fq` because multi_scalar_mul (called by derive_public_key) will constrain\n // the scalars.\n let eph_sk = fr_to_fq_unsafe(unsafe_rand());\n let eph_pk = derive_public_key(eph_sk);\n\n (eph_sk, eph_pk)\n}\n\nmod test {\n use crate::{\n encrypted_logs::payload::compute_encrypted_note_log, keys::public_keys::{OvpkM, IvpkM},\n test::mocks::mock_note::MockNoteBuilder\n };\n use dep::protocol_types::{address::AztecAddress, point::Point};\n use std::test::OracleMock;\n\n #[test]\n fn test_encrypted_note_log_matches_typescript() {\n // All the values in this test were copied over from `tagged_log.test.ts`\n let contract_address = AztecAddress::from_field(0x10f48cd9eff7ae5b209c557c70de2e657ee79166868676b787e9417e19260e04);\n let storage_slot = 0x0fe46be583b71f4ab5b70c2657ff1d05cccf1d292a9369628d1a194f944e6599;\n let ovsk_app = 0x03a6513d6def49f41d20373d2cec894c23e7492794b08fc50c0e8a1bd2512612;\n let ovpk_m = OvpkM {\n inner: Point {\n x: 0x1961448682803198631f299340e4206bb12809d4bebbf012b30f59af73ba1a15,\n y: 0x133674060c3925142aceb4f1dcd9f9137d0217d37ff8729ee5ceaa6e2790353d,\n is_infinite: false\n }\n };\n let ivpk_m = IvpkM {\n inner: Point {\n x: 0x260cd3904f6df16e974c29944fdc839e40fb5cf293f03df2eb370851d3a527bc,\n y: 0x0eef2964fe6640e84c82b5d2915892409b38e9e25d39f68dd79edb725c55387f,\n is_infinite: false\n }\n };\n\n let note_value = 0x301640ceea758391b2e161c92c0513f129020f4125256afdae2646ce31099f5c;\n let note = MockNoteBuilder::new(note_value).contract_address(contract_address).storage_slot(storage_slot).build();\n\n let eph_sk = 0x1358d15019d4639393d62b97e1588c095957ce74a1c32d6ec7d62fe6705d9538;\n let _ = OracleMock::mock(\"getRandomField\").returns(eph_sk);\n\n let recipient = AztecAddress::from_field(0x10ee41ee4b62703b16f61e03cb0d88c4b306a9eb4a6ceeb2aff13428541689a2);\n\n let log: [u8; 448] = compute_encrypted_note_log(\n contract_address,\n storage_slot,\n ovsk_app,\n ovpk_m,\n ivpk_m,\n recipient,\n note\n );\n\n // The following value was generated by `tagged_log.test.ts`\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let encrypted_note_log_from_typescript = [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 70, 12, 14, 67, 77, 132, 110, 193, 234, 40, 110, 64, 144, 235, 86, 55, 111, 242, 123, 221, 193, 170, 202, 225, 216, 86, 84, 159, 112, 31, 167, 126, 79, 51, 186, 47, 71, 253, 172, 99, 112, 241, 59, 197, 241, 107, 186, 232, 87, 187, 230, 171, 62, 228, 234, 42, 51, 145, 146, 238, 242, 42, 71, 206, 13, 244, 66, 111, 195, 20, 203, 98, 148, 204, 242, 145, 183, 156, 29, 141, 54, 44, 220, 194, 35, 229, 16, 32, 204, 211, 49, 142, 112, 82, 202, 116, 241, 254, 146, 42, 217, 20, 189, 70, 228, 182, 171, 205, 104, 27, 99, 171, 28, 91, 244, 21, 30, 130, 240, 5, 72, 174, 124, 97, 197, 157, 248, 193, 23, 193, 76, 46, 141, 144, 70, 211, 45, 67, 167, 218, 129, 140, 104, 190, 41, 110, 249, 209, 68, 106, 135, 164, 80, 235, 63, 101, 80, 32, 13, 38, 99, 145, 91, 11, 173, 151, 231, 247, 65, 153, 117, 229, 167, 64, 239, 182, 126, 235, 83, 4, 169, 8, 8, 160, 4, 235, 252, 21, 96, 84, 161, 69, 145, 145, 215, 254, 161, 117, 246, 198, 65, 89, 179, 194, 90, 19, 121, 12, 202, 114, 80, 195, 14, 60, 128, 105, 142, 100, 86, 90, 108, 157, 219, 22, 172, 20, 121, 195, 25, 159, 236, 2, 70, 75, 42, 37, 34, 2, 17, 149, 20, 176, 32, 18, 204, 56, 117, 121, 34, 15, 3, 88, 123, 64, 68, 74, 233, 63, 59, 131, 222, 194, 192, 167, 110, 217, 10, 128, 73, 129, 172, 205, 103, 212, 60, 151, 141, 10, 151, 222, 151, 180, 43, 91, 148, 201, 110, 165, 10, 238, 32, 134, 235, 99, 216, 200, 182, 31, 22, 156, 18, 209, 222, 172, 239, 193, 212, 86, 99, 62, 70, 182, 45, 175, 241, 91, 202, 179, 225, 236, 95, 71, 66, 151, 225, 203, 53, 216, 85, 102, 130, 6, 8, 25, 180, 86, 58, 140, 198, 105, 102, 177, 42, 94, 115, 247, 145, 147, 24, 231, 39, 73, 27, 10, 219, 130, 115, 188, 74, 114, 5, 177, 199, 83, 183, 106, 87, 204, 238, 231, 72, 45, 240, 39, 174, 25, 98, 53, 187, 156, 159, 244, 38\n ];\n for i in 0..encrypted_note_log_from_typescript.len() {\n assert_eq(log[i], encrypted_note_log_from_typescript[i]);\n }\n assert_eq(encrypted_note_log_from_typescript.len(), log.len());\n }\n}\n"},"122":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/encrypted_note_emission.nr","source":"use crate::{\n context::PrivateContext, note::{note_emission::NoteEmission, note_interface::NoteInterface},\n keys::{getters::get_current_public_keys, public_keys::{OvpkM, IvpkM}},\n encrypted_logs::payload::compute_encrypted_note_log, oracle::logs_traits::LensForEncryptedLog\n};\nuse dep::protocol_types::{\n hash::sha256_to_field, address::AztecAddress, point::Point, abis::note_hash::NoteHash,\n constants::MAX_NOTE_HASHES_PER_CALL\n};\n\nunconstrained fn compute_unconstrained<Note, let N: u32, let NB: u32, let M: u32>(\n contract_address: AztecAddress,\n storage_slot: Field,\n ovsk_app: Field,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress,\n note: Note\n) -> ([u8; M], Field) where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n compute(\n contract_address,\n storage_slot,\n ovsk_app,\n ovpk,\n ivpk,\n recipient,\n note\n )\n}\n\nfn compute<Note, let N: u32, let NB: u32, let M: u32>(\n contract_address: AztecAddress,\n storage_slot: Field,\n ovsk_app: Field,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress,\n note: Note\n) -> ([u8; M], Field) where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n let encrypted_log: [u8; M] = compute_encrypted_note_log(\n contract_address,\n storage_slot,\n ovsk_app,\n ovpk,\n ivpk,\n recipient,\n note\n );\n let log_hash = sha256_to_field(encrypted_log);\n (encrypted_log, log_hash)\n}\n\nfn emit_with_keys<Note, let N: u32, let NB: u32, let M: u32>(\n context: &mut PrivateContext,\n note: Note,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress,\n inner_compute: fn(AztecAddress, Field, Field, OvpkM, IvpkM, AztecAddress, Note) -> ([u8; M], Field)\n) where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n let note_header = note.get_header();\n let note_hash_counter = note_header.note_hash_counter;\n let storage_slot = note_header.storage_slot;\n\n let note_exists = context.note_hashes.storage.any(|n: NoteHash| n.counter == note_hash_counter);\n assert(note_exists, \"Can only emit a note log for an existing note.\");\n\n let contract_address: AztecAddress = context.this_address();\n let ovsk_app: Field = context.request_ovsk_app(ovpk.hash());\n\n let (encrypted_log, log_hash) = inner_compute(\n contract_address,\n storage_slot,\n ovsk_app,\n ovpk,\n ivpk,\n recipient,\n note\n );\n\n context.emit_raw_note_log(note_hash_counter, encrypted_log, log_hash);\n}\n\npub fn encode_and_encrypt_note<Note, let N: u32, let NB: u32, let M: u32>(\n context: &mut PrivateContext,\n ov: AztecAddress,\n iv: AztecAddress\n) -> fn[(&mut PrivateContext, AztecAddress, AztecAddress)](NoteEmission<Note>) -> () where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n | e: NoteEmission<Note> | {\n let ovpk = get_current_public_keys(context, ov).ovpk_m;\n let ivpk = get_current_public_keys(context, iv).ivpk_m;\n emit_with_keys(context, e.note, ovpk, ivpk, iv, compute);\n }\n}\n\npub fn encode_and_encrypt_note_unconstrained<Note, let N: u32, let NB: u32, let M: u32>(\n context: &mut PrivateContext,\n ov: AztecAddress,\n iv: AztecAddress\n) -> fn[(&mut PrivateContext, AztecAddress, AztecAddress)](NoteEmission<Note>) -> () where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n | e: NoteEmission<Note> | {\n let ovpk = get_current_public_keys(context, ov).ovpk_m;\n let ivpk = get_current_public_keys(context, iv).ivpk_m;\n emit_with_keys(context, e.note, ovpk, ivpk, iv, compute_unconstrained);\n }\n}\n\npub fn encode_and_encrypt_note_with_keys<Note, let N: u32, let NB: u32, let M: u32>(\n context: &mut PrivateContext,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress\n) -> fn[(&mut PrivateContext, OvpkM, IvpkM, AztecAddress)](NoteEmission<Note>) -> () where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n | e: NoteEmission<Note> | {\n emit_with_keys(context, e.note, ovpk, ivpk, recipient, compute);\n }\n}\n\npub fn encode_and_encrypt_note_with_keys_unconstrained<Note, let N: u32, let NB: u32, let M: u32>(\n context: &mut PrivateContext,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress\n) -> fn[(&mut PrivateContext, OvpkM, IvpkM, AztecAddress)](NoteEmission<Note>) -> () where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n | e: NoteEmission<Note> | {\n emit_with_keys(context, e.note, ovpk, ivpk, recipient, compute_unconstrained);\n }\n}\n"},"123":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/outgoing_body.nr","source":"use dep::protocol_types::{\n address::AztecAddress, scalar::Scalar, point::Point, constants::GENERATOR_INDEX__SYMMETRIC_KEY,\n hash::poseidon2_hash_with_separator\n};\nuse std::aes128::aes128_encrypt;\n\nuse crate::{keys::public_keys::IvpkM, utils::point::point_to_bytes};\n\nstruct EncryptedLogOutgoingBody {\n eph_sk: Scalar,\n recipient: AztecAddress,\n recipient_ivpk: IvpkM,\n}\n\nimpl EncryptedLogOutgoingBody {\n pub fn new(eph_sk: Scalar, recipient: AztecAddress, recipient_ivpk: IvpkM) -> Self {\n Self { eph_sk, recipient, recipient_ivpk }\n }\n\n /// Encrypts ephemeral secret key and recipient's ivpk --> with this information the recipient of outgoing will\n /// be able to derive the key with which the incoming log can be decrypted.\n pub fn compute_ciphertext(self, ovsk_app: Scalar, eph_pk: Point) -> [u8; 144] {\n // Again, we could compute `eph_pk` here, but we keep the interface more similar\n // and also make it easier to optimise it later as we just pass it along\n\n let mut buffer = [0 as u8; 128];\n\n let serialized_eph_sk_high: [u8; 32] = self.eph_sk.hi.to_be_bytes();\n let serialized_eph_sk_low: [u8; 32] = self.eph_sk.lo.to_be_bytes();\n\n let address_bytes: [u8; 32] = self.recipient.to_field().to_be_bytes();\n let serialized_recipient_ivpk = point_to_bytes(self.recipient_ivpk.to_point());\n\n for i in 0..32 {\n buffer[i] = serialized_eph_sk_high[i];\n buffer[i + 32] = serialized_eph_sk_low[i];\n buffer[i + 64] = address_bytes[i];\n }\n for i in 0..32 {\n buffer[i + 96] = serialized_recipient_ivpk[i];\n }\n\n // We compute the symmetric key using poseidon.\n let full_key: [u8; 32] = poseidon2_hash_with_separator(\n [ovsk_app.hi, ovsk_app.lo, eph_pk.x, eph_pk.y],\n GENERATOR_INDEX__SYMMETRIC_KEY as Field\n ).to_be_bytes();\n\n let mut sym_key = [0; 16];\n let mut iv = [0; 16];\n\n for i in 0..16 {\n sym_key[i] = full_key[i];\n iv[i] = full_key[i + 16];\n }\n aes128_encrypt(buffer, iv, sym_key).as_array()\n }\n}\n\nmod test {\n use crate::{encrypted_logs::outgoing_body::EncryptedLogOutgoingBody, keys::public_keys::IvpkM};\n use dep::protocol_types::{\n address::AztecAddress, traits::Empty, constants::GENERATOR_INDEX__NOTE_NULLIFIER,\n scalar::Scalar, point::Point, hash::poseidon2_hash_with_separator\n };\n use std::embedded_curve_ops::fixed_base_scalar_mul as derive_public_key;\n\n use crate::context::PrivateContext;\n\n #[test]\n fn test_encrypted_log_outgoing_body_matches_typescript() {\n let eph_sk = Scalar {\n lo: 0x00000000000000000000000000000000d0d302ee245dfaf2807e604eec4715fe,\n hi: 0x000000000000000000000000000000000f096b423017226a18461115fa8d34bb\n };\n let recipient_ivsk = Scalar {\n lo: 0x000000000000000000000000000000004828f8f95676ebb481df163f87fd4022,\n hi: 0x000000000000000000000000000000000f4d97c25d578f9348251a71ca17ae31\n };\n let sender_ovsk_app = Scalar {\n lo: 0x0000000000000000000000000000000074d2e28c6bc5176ac02cf7c7d36a444e,\n hi: 0x00000000000000000000000000000000089c6887cb1446d86c64e81afc78048b\n };\n\n let eph_pk = derive_public_key(eph_sk);\n let recipient_ivpk = IvpkM { inner: derive_public_key(recipient_ivsk) };\n\n let recipient = AztecAddress::from_field(0xdeadbeef);\n\n let body = EncryptedLogOutgoingBody::new(eph_sk, recipient, recipient_ivpk);\n\n let ciphertext = body.compute_ciphertext(sender_ovsk_app, eph_pk);\n\n // The following value was generated by `encrypted_log_outgoing_body.test.ts`\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let outgoing_body_ciphertext_from_typescript = [\n 127, 182, 227, 75, 192, 197, 54, 47, 168, 134, 233, 148, 251, 46, 86, 12, 73, 50, 238, 50, 31, 174, 27, 202, 110, 77, 161, 197, 244, 124, 17, 100, 143, 150, 232, 14, 156, 248, 43, 177, 16, 82, 244, 103, 88, 74, 84, 200, 15, 65, 187, 14, 163, 60, 91, 22, 104, 31, 211, 190, 124, 121, 79, 92, 239, 65, 185, 106, 51, 178, 168, 137, 84, 43, 79, 158, 151, 152, 83, 42, 170, 13, 106, 209, 254, 74, 39, 145, 73, 215, 17, 234, 196, 89, 30, 58, 120, 127, 88, 69, 121, 61, 18, 206, 89, 118, 243, 238, 177, 71, 73, 47, 147, 4, 155, 25, 173, 248, 206, 52, 17, 180, 122, 186, 106, 191, 252, 102, 197, 91, 16, 39, 94, 91, 224, 30, 168, 177, 26, 144, 5, 124, 128, 6\n ];\n\n for i in 0..outgoing_body_ciphertext_from_typescript.len() {\n assert_eq(ciphertext[i], outgoing_body_ciphertext_from_typescript[i]);\n }\n assert_eq(outgoing_body_ciphertext_from_typescript.len(), ciphertext.len());\n }\n}\n"},"124":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/header.nr","source":"use dep::protocol_types::{address::AztecAddress, scalar::Scalar, point::Point};\n\nuse crate::keys::{point_to_symmetric_key::point_to_symmetric_key, public_keys::ToPoint};\n\nuse std::aes128::aes128_encrypt;\n\nstruct EncryptedLogHeader {\n address: AztecAddress,\n}\n\nimpl EncryptedLogHeader {\n fn new(address: AztecAddress) -> Self {\n EncryptedLogHeader { address }\n }\n\n fn compute_ciphertext<T>(self, secret: Scalar, pk: T) -> [u8; 48] where T: ToPoint {\n let full_key = point_to_symmetric_key(secret, pk.to_point());\n let mut sym_key = [0; 16];\n let mut iv = [0; 16];\n\n for i in 0..16 {\n sym_key[i] = full_key[i];\n iv[i] = full_key[i + 16];\n }\n\n let input: [u8; 32] = self.address.to_field().to_be_bytes();\n aes128_encrypt(input, iv, sym_key).as_array()\n }\n}\n\n#[test]\nfn test_encrypted_log_header_matches_noir() {\n let address = AztecAddress::from_field(0xdeadbeef);\n let header = EncryptedLogHeader::new(address);\n let secret = Scalar {\n lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06\n };\n let point = crate::keys::public_keys::IvpkM {\n inner: Point {\n x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n is_infinite: false\n }\n };\n\n let ciphertext = header.compute_ciphertext(secret, point);\n\n // The following value was generated by `encrypted_log_header.test.ts`.\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let expected_header_ciphertext_from_typescript = [\n 226, 240, 253, 6, 28, 52, 19, 131, 33, 132, 178, 212, 245, 62, 14, 190, 194, 44, 7, 131, 160, 83, 64, 181, 98, 38, 153, 214, 62, 171, 253, 161, 111, 191, 28, 247, 216, 26, 222, 171, 176, 218, 48, 209, 73, 89, 200, 209\n ];\n\n assert_eq(ciphertext, expected_header_ciphertext_from_typescript);\n}\n"},"125":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/incoming_body.nr","source":"use crate::note::note_interface::NoteInterface;\nuse crate::event::event_interface::EventInterface;\nuse dep::protocol_types::{scalar::Scalar, point::Point};\n\nuse std::aes128::aes128_encrypt;\nuse crate::keys::{point_to_symmetric_key::point_to_symmetric_key, public_keys::IvpkM};\n\nstruct EncryptedLogIncomingBody<let M: u32> {\n plaintext: [u8; M]\n}\n\nimpl<let M: u32> EncryptedLogIncomingBody<M> {\n pub fn from_note<T, let N: u32>(note: T, storage_slot: Field) -> Self where T: NoteInterface<N, M> {\n let mut plaintext = note.to_be_bytes(storage_slot);\n EncryptedLogIncomingBody { plaintext }\n }\n\n pub fn from_event<T, let MR: u32>(\n event: T,\n randomness: Field\n ) -> Self where T: EventInterface<M, MR> {\n let mut plaintext = event.private_to_be_bytes(randomness);\n EncryptedLogIncomingBody { plaintext }\n }\n\n pub fn compute_ciphertext(self, eph_sk: Scalar, ivpk: IvpkM) -> [u8] {\n let full_key = point_to_symmetric_key(eph_sk, ivpk.to_point());\n let mut sym_key = [0; 16];\n let mut iv = [0; 16];\n\n for i in 0..16 {\n sym_key[i] = full_key[i];\n iv[i] = full_key[i + 16];\n }\n aes128_encrypt(self.plaintext, iv, sym_key)\n }\n}\n\nmod test {\n use dep::protocol_types::{\n address::AztecAddress, scalar::Scalar, point::Point, traits::Serialize,\n abis::event_selector::EventSelector\n };\n\n use crate::{\n note::{note_header::NoteHeader, note_interface::NoteInterface},\n encrypted_logs::incoming_body::EncryptedLogIncomingBody, event::event_interface::EventInterface,\n context::PrivateContext, keys::public_keys::IvpkM\n };\n\n struct AddressNote {\n address: AztecAddress,\n owner: AztecAddress,\n randomness: Field,\n header: NoteHeader,\n }\n\n global ADDRESS_NOTE_LEN: Field = 3;\n global ADDRESS_NOTE_BYTES_LEN = 32 * 3 + 64;\n\n impl NoteInterface<ADDRESS_NOTE_LEN, ADDRESS_NOTE_BYTES_LEN> for AddressNote {\n fn compute_note_hiding_point(_self: Self) -> Point {\n crate::generators::Ga1\n }\n\n fn get_note_type_id() -> Field {\n 1\n }\n\n fn get_header(self) -> NoteHeader { self.header}\n\n fn set_header(&mut self, header: NoteHeader) {self.header = header; }\n\n fn compute_nullifier(_self: Self, _context: &mut PrivateContext, _note_hash_for_nullify: Field) -> Field {\n 1\n }\n\n fn compute_nullifier_without_context(_self: Self) -> Field {\n 1\n }\n\n fn serialize_content(self) -> [Field; ADDRESS_NOTE_LEN] { [self.address.to_field(), self.owner.to_field(), self.randomness]}\n\n fn deserialize_content(fields: [Field; ADDRESS_NOTE_LEN]) -> Self {\n AddressNote { address: AztecAddress::from_field(fields[0]), owner: AztecAddress::from_field(fields[1]), randomness: fields[2], header: NoteHeader::empty() }\n }\n\n fn to_be_bytes(self, storage_slot: Field) -> [u8; ADDRESS_NOTE_BYTES_LEN] {\n let serialized_note = self.serialize_content();\n\n let mut buffer: [u8; ADDRESS_NOTE_BYTES_LEN] = [0; ADDRESS_NOTE_BYTES_LEN];\n\n let storage_slot_bytes: [u8; 32] = storage_slot.to_be_bytes();\n let note_type_id_bytes: [u8; 32] = AddressNote::get_note_type_id().to_be_bytes();\n\n for i in 0..32 {\n buffer[i] = storage_slot_bytes[i];\n buffer[32 + i] = note_type_id_bytes[i];\n }\n\n for i in 0..serialized_note.len() {\n let bytes: [u8; 32] = serialized_note[i].to_be_bytes();\n for j in 0..32 {\n buffer[64 + i * 32 + j] = bytes[j];\n }\n }\n buffer\n }\n }\n\n impl AddressNote {\n pub fn new(address: AztecAddress, owner: AztecAddress, randomness: Field) -> Self {\n AddressNote { address, owner, randomness, header: NoteHeader::empty() }\n }\n }\n\n #[test]\n fn test_encrypted_note_log_incoming_body_matches_typescript() {\n // All the values in this test were copied over from `encrypted_note_log_incoming_body.test.ts`\n let note = AddressNote::new(\n AztecAddress::from_field(0x1),\n AztecAddress::from_field(0x2),\n 3\n );\n\n let storage_slot = 2;\n\n let eph_sk = Scalar {\n lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06\n };\n let ivpk = IvpkM {\n inner: Point {\n x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n is_infinite: false\n }\n };\n\n // 1. `EncryptedLogIncomingBody::from_note` calls `note.to_be_bytes(storage_slot)` function which serializes\n // the note to bytes - note that in the case of `AddressNote` the `to_be_bytes` function was automatically\n // implemented by Aztec macros.\n let body = EncryptedLogIncomingBody::from_note(note, storage_slot);\n\n // 2. `body.compute_ciphertext(...)` function then derives symmetric key from `eph_sk` and `ivpk` and encrypts\n // the note plaintext using AES-128.\n let ciphertext = body.compute_ciphertext(eph_sk, ivpk);\n\n // The following value was generated by `encrypted_note_log_incoming_body.test.ts`.\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let note_body_ciphertext_from_typescript = [\n 226, 240, 253, 6, 28, 52, 19, 131, 33, 132, 178, 212, 245, 62, 14, 190, 147, 228, 160, 190, 146, 61, 95, 203, 124, 153, 68, 168, 17, 150, 92, 0, 99, 214, 85, 64, 191, 78, 157, 131, 149, 96, 236, 253, 96, 172, 157, 30, 27, 176, 228, 74, 242, 190, 138, 48, 33, 93, 46, 37, 223, 130, 25, 245, 188, 163, 159, 223, 187, 24, 139, 206, 131, 154, 159, 130, 37, 17, 158, 114, 242, 141, 124, 193, 232, 54, 146, 96, 145, 100, 125, 234, 57, 43, 95, 115, 183, 39, 121, 232, 134, 229, 148, 25, 46, 77, 87, 127, 95, 7, 77, 188, 37, 234, 245, 142, 232, 87, 252, 28, 67, 67, 90, 214, 254, 89, 47, 68, 66, 187, 227, 8, 59, 162, 25, 141, 97, 141, 217, 197, 115, 15, 212, 202, 157, 41, 150, 62, 219, 57, 224, 92, 185, 212, 142, 94, 146, 41, 178, 145, 68, 169, 23, 185, 206, 138, 70, 47, 176, 210, 165, 236, 23, 206, 229, 108\n ];\n\n assert_eq(note_body_ciphertext_from_typescript.len(), ciphertext.len());\n\n for i in 0..note_body_ciphertext_from_typescript.len() {\n assert_eq(ciphertext[i], note_body_ciphertext_from_typescript[i]);\n }\n }\n\n struct TestEvent {\n value0: Field,\n value1: Field,\n value2: Field,\n }\n\n impl Serialize<3> for TestEvent {\n fn serialize(self) -> [Field; 3] {\n [self.value0, self.value1, self.value2]\n }\n }\n\n global TEST_EVENT_LEN: Field = 3;\n global TEST_EVENT_BYTES_LEN = 32 * 3 + 64;\n global TEST_EVENT_BYTES_LEN_WITHOUT_RANDOMNESS = 32 * 3 + 32;\n\n impl EventInterface<TEST_EVENT_BYTES_LEN, TEST_EVENT_BYTES_LEN_WITHOUT_RANDOMNESS> for TestEvent {\n fn get_event_type_id() -> EventSelector {\n comptime { EventSelector::from_signature(\"TestEvent(Field,Field,Field)\") }\n }\n\n fn private_to_be_bytes(self, randomness: Field) -> [u8; TEST_EVENT_BYTES_LEN] {\n let mut buffer: [u8; TEST_EVENT_BYTES_LEN] = [0; TEST_EVENT_BYTES_LEN];\n\n let randomness_bytes: [u8; 32] = randomness.to_be_bytes();\n let event_type_id_bytes: [u8; 32] = TestEvent::get_event_type_id().to_field().to_be_bytes();\n\n for i in 0..32 {\n buffer[i] = randomness_bytes[i];\n buffer[32 + i] = event_type_id_bytes[i];\n }\n\n let serialized_event = self.serialize();\n\n for i in 0..serialized_event.len() {\n let bytes: [u8; 32] = serialized_event[i].to_be_bytes();\n for j in 0..32 {\n buffer[64 + i * 32 + j] = bytes[j];\n }\n }\n\n buffer\n }\n\n fn to_be_bytes(self) -> [u8; TEST_EVENT_BYTES_LEN_WITHOUT_RANDOMNESS] {\n let mut buffer: [u8; TEST_EVENT_BYTES_LEN_WITHOUT_RANDOMNESS] = [0; TEST_EVENT_BYTES_LEN_WITHOUT_RANDOMNESS];\n\n let event_type_id_bytes: [u8; 32] = TestEvent::get_event_type_id().to_field().to_be_bytes();\n\n for i in 0..32 {\n buffer[i] = event_type_id_bytes[i];\n }\n\n let serialized_event = self.serialize();\n\n for i in 0..serialized_event.len() {\n let bytes: [u8; 32] = serialized_event[i].to_be_bytes();\n for j in 0..32 {\n buffer[32 + i * 32 + j] = bytes[j];\n }\n }\n\n buffer\n }\n\n fn emit<Env>(self, _emit: fn[Env](Self) -> ()) {\n _emit(self);\n }\n }\n\n #[test]\n fn test_encrypted_log_event_incoming_body() {\n let test_event = TestEvent { value0: 1, value1: 2, value2: 3 };\n\n let eph_sk = Scalar {\n lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06\n };\n\n let ivpk = IvpkM {\n inner: Point {\n x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n is_infinite: false\n }\n };\n\n let randomness = 2;\n\n let body = EncryptedLogIncomingBody::from_event(test_event, randomness);\n\n let ciphertext = body.compute_ciphertext(eph_sk, ivpk);\n\n // The following value was generated by `encrypted_event_log_incoming_body.test.ts`\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let event_body_ciphertext_from_typescript = [\n 226, 240, 253, 6, 28, 52, 19, 131, 33, 132, 178, 212, 245, 62, 14, 190, 147, 228, 160, 190, 146, 61, 95, 203, 124, 153, 68, 168, 17, 150, 92, 0, 99, 214, 85, 64, 191, 78, 157, 131, 149, 96, 236, 253, 96, 172, 157, 30, 185, 29, 14, 152, 216, 130, 219, 151, 80, 185, 43, 223, 167, 8, 89, 189, 88, 188, 101, 137, 255, 136, 84, 252, 79, 18, 52, 3, 110, 54, 54, 206, 244, 209, 246, 226, 207, 247, 143, 253, 211, 75, 160, 224, 172, 41, 45, 7, 208, 137, 90, 56, 59, 4, 234, 48, 53, 23, 130, 230, 49, 249, 142, 243, 170, 72, 183, 242, 49, 124, 46, 52, 198, 75, 55, 102, 56, 89, 254, 67, 59, 157, 249, 120, 184, 67, 154, 16, 148, 227, 93, 37, 120, 199, 93, 166, 80, 127, 173, 52, 80, 135, 87, 1, 168, 164, 51, 48, 126, 120, 47, 102, 211, 227, 234, 170, 208, 99, 111, 198, 170, 226, 156, 244, 241, 174, 206, 30\n ];\n\n assert_eq(event_body_ciphertext_from_typescript.len(), ciphertext.len());\n\n for i in 0..event_body_ciphertext_from_typescript.len() {\n assert_eq(ciphertext[i], event_body_ciphertext_from_typescript[i]);\n }\n }\n}\n"},"129":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/note/note_getter/mod.nr","source":"use dep::protocol_types::{constants::{MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, GET_NOTES_ORACLE_RETURN_LENGTH}};\nuse crate::context::PrivateContext;\nuse crate::note::{\n constants::{GET_NOTE_ORACLE_RETURN_LENGTH, MAX_NOTES_PER_PAGE, VIEW_NOTE_ORACLE_RETURN_LENGTH},\n note_getter_options::{NoteGetterOptions, Select, Sort, SortOrder, NoteStatus, PropertySelector},\n note_interface::NoteInterface, note_viewer_options::NoteViewerOptions,\n utils::compute_note_hash_for_read_request\n};\nuse crate::oracle;\nuse crate::utils::comparison::compare;\n\nmod test;\n\nfn extract_property_value_from_selector<let N: u32>(\n serialized_note: [Field; N],\n selector: PropertySelector\n) -> Field {\n // Selectors use PropertySelectors in order to locate note properties inside the serialized note.\n // This allows easier packing and custom (de)serialization schemas. A note property is located\n // inside the serialized note using the index inside the array, a byte offset and a length.\n let value: [u8; 32] = serialized_note[selector.index].to_be_bytes();\n let offset = selector.offset;\n let length = selector.length;\n let mut value_field = 0 as Field;\n let mut acc: Field = 1;\n for i in 0..32 {\n if i < length {\n value_field += value[31 + offset - i] as Field * acc;\n acc = acc * 256;\n }\n }\n value_field\n}\n\nfn check_note_header<Note, let N: u32, let M: u32>(\n context: PrivateContext,\n storage_slot: Field,\n note: Note\n) where Note: NoteInterface<N, M> {\n let header = note.get_header();\n let contract_address = context.this_address();\n assert(header.contract_address.eq(contract_address), \"Mismatch note header contract address.\");\n assert(header.storage_slot == storage_slot, \"Mismatch note header storage slot.\");\n}\n\nfn check_note_fields<let N: u32>(\n serialized_note: [Field; N],\n selects: BoundedVec<Option<Select>, N>\n) {\n for i in 0..selects.len {\n let select = selects.get_unchecked(i).unwrap_unchecked();\n let value_field = extract_property_value_from_selector(serialized_note, select.property_selector);\n\n assert(\n compare(value_field, select.comparator, select.value.to_field()), \"Mismatch return note field.\"\n );\n }\n}\n\nfn check_notes_order<let N: u32>(\n fields_0: [Field; N],\n fields_1: [Field; N],\n sorts: BoundedVec<Option<Sort>, N>\n) {\n for i in 0..sorts.len {\n let sort = sorts.get_unchecked(i).unwrap_unchecked();\n let field_0 = extract_property_value_from_selector(fields_0, sort.property_selector);\n let field_1 = extract_property_value_from_selector(fields_1, sort.property_selector);\n let eq = field_0 == field_1;\n let lt = field_0.lt(field_1);\n if sort.order == SortOrder.ASC {\n assert(eq | lt, \"Return notes not sorted in ascending order.\");\n } else if !eq {\n assert(!lt, \"Return notes not sorted in descending order.\");\n }\n }\n}\n\npub fn get_note<Note, let N: u32, let M: u32>(\n context: &mut PrivateContext,\n storage_slot: Field\n) -> (Note, Field) where Note: NoteInterface<N, M> {\n let note = unsafe {\n get_note_internal(storage_slot)\n };\n\n // Constraining that we got a valid note from the oracle is fairly straightforward: all we need to do is check that\n // the metadata is correct, and that the note exists.\n check_note_header(*context, storage_slot, note);\n\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n context.push_note_hash_read_request(note_hash_for_read_request);\n\n (note, note_hash_for_read_request)\n}\n\npub fn get_notes<Note, let N: u32, let M: u32, PREPROCESSOR_ARGS, FILTER_ARGS>(\n context: &mut PrivateContext,\n storage_slot: Field,\n options: NoteGetterOptions<Note, N, M, PREPROCESSOR_ARGS, FILTER_ARGS>\n) -> (BoundedVec<Note, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>, BoundedVec<Field, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>) where Note: NoteInterface<N, M> + Eq {\n let opt_notes = unsafe {\n get_notes_internal(storage_slot, options)\n };\n\n // We apply the constraints in a separate function instead of inlining them here to make it easier to test that\n // these checks correctly reject bad notes.\n constrain_get_notes_internal(context, storage_slot, opt_notes, options)\n}\n\nunconstrained fn apply_preprocessor<Note, PREPROCESSOR_ARGS>(\n notes: [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n preprocessor: fn([Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL], PREPROCESSOR_ARGS) -> [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n preprocessor_args: PREPROCESSOR_ARGS\n) -> [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL] {\n preprocessor(notes, preprocessor_args)\n}\n\nfn constrain_get_notes_internal<Note, let N: u32, let M: u32, PREPROCESSOR_ARGS, FILTER_ARGS>(\n context: &mut PrivateContext,\n storage_slot: Field,\n opt_notes: [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n options: NoteGetterOptions<Note, N, M, PREPROCESSOR_ARGS, FILTER_ARGS>\n) -> (BoundedVec<Note, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>, BoundedVec<Field, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>) where Note: NoteInterface<N, M> + Eq {\n // The filter is applied first to avoid pushing note read requests for notes we're not interested in. Note that\n // while the filter function can technically mutate the contents of the notes (as opposed to simply removing some),\n // the private kernel will later validate that these note actually exist, so transformations would cause for that\n // check to fail.\n let filter_fn = options.filter;\n let filter_args = options.filter_args;\n let filtered_notes = filter_fn(opt_notes, filter_args);\n\n let notes = crate::utils::collapse_array(filtered_notes);\n let mut note_hashes: BoundedVec<Field, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL> = BoundedVec::new();\n\n // We have now collapsed the sparse array of Options into a BoundedVec. This is a more ergonomic type and also\n // results in reduced gate counts when setting a limit value, since we guarantee that the limit is an upper bound\n // for the runtime length, and can therefore have fewer loop iterations.\n assert(notes.len() <= options.limit, \"Got more notes than limit.\");\n\n let mut prev_fields = [0; N];\n for i in 0..options.limit {\n if i < notes.len() {\n let note = notes.get_unchecked(i);\n let fields = note.serialize_content();\n check_note_header(*context, storage_slot, note);\n check_note_fields(fields, options.selects);\n if i != 0 {\n check_notes_order(prev_fields, fields, options.sorts);\n }\n prev_fields = fields;\n\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1410): test to ensure\n // failure if malicious oracle injects 0 nonce here for a \"pre-existing\" note.\n context.push_note_hash_read_request(note_hash_for_read_request);\n note_hashes.push(note_hash_for_read_request);\n };\n }\n\n (notes, note_hashes)\n}\n\nunconstrained fn get_note_internal<Note, let N: u32, let M: u32>(storage_slot: Field) -> Note where Note: NoteInterface<N, M> {\n let placeholder_note = [Option::none()];\n let placeholder_fields = [0; GET_NOTE_ORACLE_RETURN_LENGTH];\n let placeholder_note_length = [0; N];\n oracle::notes::get_notes(\n storage_slot,\n 0,\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n 1, // limit\n 0, // offset\n NoteStatus.ACTIVE,\n placeholder_note,\n placeholder_fields,\n placeholder_note_length\n )[0].unwrap() // Notice: we don't allow dummies to be returned from get_note (singular).\n}\n\nunconstrained fn get_notes_internal<Note, let N: u32, let M: u32, PREPROCESSOR_ARGS, FILTER_ARGS>(\n storage_slot: Field,\n options: NoteGetterOptions<Note, N, M, PREPROCESSOR_ARGS, FILTER_ARGS>\n) -> [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL] where Note: NoteInterface<N, M> {\n // This function simply performs some transformations from NoteGetterOptions into the types required by the oracle.\n\n let (num_selects, select_by_indexes, select_by_offsets, select_by_lengths, select_values, select_comparators, sort_by_indexes, sort_by_offsets, sort_by_lengths, sort_order) = flatten_options(options.selects, options.sorts);\n let placeholder_opt_notes = [Option::none(); MAX_NOTE_HASH_READ_REQUESTS_PER_CALL];\n let placeholder_fields = [0; GET_NOTES_ORACLE_RETURN_LENGTH];\n let placeholder_note_length = [0; N];\n\n let opt_notes = oracle::notes::get_notes(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n options.limit,\n options.offset,\n options.status,\n placeholder_opt_notes,\n placeholder_fields,\n placeholder_note_length\n );\n\n apply_preprocessor(opt_notes, options.preprocessor, options.preprocessor_args)\n}\n\nunconstrained pub fn view_notes<Note, let N: u32, let M: u32>(\n storage_slot: Field,\n options: NoteViewerOptions<Note, N, M>\n) -> BoundedVec<Note, MAX_NOTES_PER_PAGE> where Note: NoteInterface<N, M> {\n let (num_selects, select_by_indexes, select_by_offsets, select_by_lengths, select_values, select_comparators, sort_by_indexes, sort_by_offsets, sort_by_lengths, sort_order) = flatten_options(options.selects, options.sorts);\n let placeholder_opt_notes = [Option::none(); MAX_NOTES_PER_PAGE];\n let placeholder_fields = [0; VIEW_NOTE_ORACLE_RETURN_LENGTH];\n let placeholder_note_length = [0; N];\n\n let notes_array = oracle::notes::get_notes(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n options.limit,\n options.offset,\n options.status,\n placeholder_opt_notes,\n placeholder_fields,\n placeholder_note_length\n );\n\n let mut notes = BoundedVec::new();\n for i in 0..notes_array.len() {\n if notes_array[i].is_some() {\n notes.push(notes_array[i].unwrap_unchecked());\n }\n }\n\n notes\n}\n\nunconstrained fn flatten_options<let N: u32>(\n selects: BoundedVec<Option<Select>, N>,\n sorts: BoundedVec<Option<Sort>, N>\n) -> (u8, [u8; N], [u8; N], [u8; N], [Field; N], [u8; N], [u8; N], [u8; N], [u8; N], [u8; N]) {\n let mut num_selects = 0;\n let mut select_by_indexes = [0; N];\n let mut select_by_offsets = [0; N];\n let mut select_by_lengths = [0; N];\n let mut select_values = [0; N];\n let mut select_comparators = [0; N];\n\n for i in 0..selects.len {\n let select = selects.get(i);\n if select.is_some() {\n select_by_indexes[num_selects] = select.unwrap_unchecked().property_selector.index;\n select_by_offsets[num_selects] = select.unwrap_unchecked().property_selector.offset;\n select_by_lengths[num_selects] = select.unwrap_unchecked().property_selector.length;\n select_values[num_selects] = select.unwrap_unchecked().value;\n select_comparators[num_selects] = select.unwrap_unchecked().comparator;\n num_selects += 1;\n };\n }\n\n let mut sort_by_indexes = [0; N];\n let mut sort_by_offsets = [0; N];\n let mut sort_by_lengths = [0; N];\n let mut sort_order = [0; N];\n for i in 0..sorts.len {\n let sort = sorts.get(i);\n if sort.is_some() {\n sort_by_indexes[i] = sort.unwrap_unchecked().property_selector.index;\n sort_by_offsets[i] = sort.unwrap_unchecked().property_selector.offset;\n sort_by_lengths[i] = sort.unwrap_unchecked().property_selector.length;\n sort_order[i] = sort.unwrap_unchecked().order;\n };\n }\n\n (\n num_selects, select_by_indexes, select_by_offsets, select_by_lengths, select_values, select_comparators, sort_by_indexes, sort_by_offsets, sort_by_lengths, sort_order\n )\n}\n"},"131":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/note/utils.nr","source":"use crate::{context::PrivateContext, note::{note_header::NoteHeader, note_interface::NoteInterface}};\n\nuse dep::protocol_types::{\n hash::{\n compute_unique_note_hash, compute_siloed_note_hash as compute_siloed_note_hash,\n compute_siloed_nullifier as compute_siloed_nullifier_from_preimage\n},\n utils::arr_copy_slice\n};\n\npub fn compute_siloed_nullifier<Note, let N: u32, let M: u32>(\n note_with_header: Note,\n context: &mut PrivateContext\n) -> Field where Note: NoteInterface<N, M> {\n let header = note_with_header.get_header();\n let note_hash_for_nullify = compute_note_hash_for_nullify(note_with_header);\n let inner_nullifier = note_with_header.compute_nullifier(context, note_hash_for_nullify);\n\n compute_siloed_nullifier_from_preimage(header.contract_address, inner_nullifier)\n}\n\n// TODO(#7775): make this not impossible to understand\npub fn compute_note_hash_for_read_request<Note, let N: u32, let M: u32>(note: Note) -> Field where Note: NoteInterface<N, M> {\n // TODO(#7771): inject compute_note_hash(...) func to notes with macros.\n let note_hash = note.compute_note_hiding_point().x;\n let nonce = note.get_header().nonce;\n let counter = note.get_header().note_hash_counter;\n\n if counter != 0 {\n note_hash\n } else {\n compute_unique_note_hash(nonce, note_hash)\n }\n}\n\n// TODO(#7775): make this not impossible to understand\npub fn compute_note_hash_for_nullify_internal<Note, let N: u32, let M: u32>(\n note: Note,\n note_hash_for_read_request: Field\n) -> Field where Note: NoteInterface<N, M> {\n let header = note.get_header();\n\n if header.note_hash_counter != 0 {\n if header.nonce == 0 {\n // Case 1: Transient note\n note_hash_for_read_request\n } else {\n // Case 2: Non-revertible note, nullified by a revertible nullifier\n let unique_note_hash = compute_unique_note_hash(header.nonce, note_hash_for_read_request);\n compute_siloed_note_hash(header.contract_address, unique_note_hash)\n }\n } else {\n // Case 3: Note from a previous transaction\n // note_hash_for_read_request is already the unique_note_hash in this case\n compute_siloed_note_hash(header.contract_address, note_hash_for_read_request)\n }\n}\n\n// TODO(#7775): nuke this commented out code - kept it around as it contains comments which might be helpful when tackling #7775\n// pub fn compute_note_hash_for_nullify<Note, let N: u32, let M: u32>(note: Note) -> Field where Note: NoteInterface<N, M> {\n// let header = note.get_header();\n// // There are 3 cases for reading a note intended for consumption:\n// // 1. The note was inserted in this transaction, is revertible, or is not nullified by a revertible nullifier in \n// // the same transaction: (note_hash_counter != 0) & (nonce == 0)\n// // 2. The note was inserted in this transaction, is non-revertible, and is nullified by a revertible nullifier in \n// // the same transaction: (note_hash_counter != 0) & (nonce != 0)\n// // 3. The note was inserted in a previous transaction: (note_hash_counter == 0) & (nonce != 0)\n\n// // TODO(#7771): inject compute_note_hash(...) func to notes with macros.\n// let note_hash = note.compute_note_hiding_point().x;\n\n// if header.nonce == 0 {\n// // Case 1.\n// // If a note is transient, we just read the note_hash (kernel will hash it with nonce and silo by contract address).\n// note_hash\n// } else {\n// // Case 2: If a note is non-revertible, and is nullified by a revertible nullifier, we cannot squash them in the \n// // private reset circuit. Because if the tx reverts, we will have to keep the note hash and throw away the \n// // nullifier.\n// // And if the tx does not revert, both will be emitted. In which case, the nullifier must be created in the app\n// // from the siloed note hash.\n// // The kernel circuit will check that a nullifier with non-zero note_nonce is linked to a note hash, whose\n// // siloed note hash matches the note hash specified in the nullifier.\n\n// // Case 3: If a note is not from the current transaction, that means we are reading a settled note (from \n// // tree) created in a previous TX. So we need the siloed_note_hash which has already been hashed with\n// // nonce and then contract address. This hash will match the existing leaf in the note hash\n// // tree, so the kernel can just perform a membership check directly on this hash/leaf.\n// let unique_note_hash = compute_unique_note_hash(header.nonce, note_hash);\n// compute_siloed_note_hash(header.contract_address, unique_note_hash)\n// // IMPORTANT NOTE ON REDUNDANT SILOING BY CONTRACT ADDRESS: The note hash computed above is\n// // \"siloed\" by contract address. When a note hash is computed solely for the purpose of\n// // nullification, it is not strictly necessary to silo the note hash before computing\n// // its nullifier. In other words, it is NOT NECESSARY for protocol security that a nullifier\n// // be computed from a siloed note hash. After all, persistable note hashes and nullifiers are\n// // siloed by the kernel circuit. That being said, the siloed note hash computed above CAN be\n// // used for nullifier computation, and this achieves the (arguably unnecessary) property that\n// // nullifiers are computed from a note hash's fully-computed note hash tree leaf.\n// }\n// }\n\npub fn compute_note_hash_for_nullify<Note, let N: u32, let M: u32>(note: Note) -> Field where Note: NoteInterface<N, M> {\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n compute_note_hash_for_nullify_internal(note, note_hash_for_read_request)\n}\n\npub fn compute_note_hash_and_optionally_a_nullifier<T, let N: u32, let M: u32, let S: u32>(\n deserialize_content: fn([Field; N]) -> T,\n note_header: NoteHeader,\n compute_nullifier: bool,\n serialized_note: [Field; S]\n) -> [Field; 4] where T: NoteInterface<N, M> {\n let mut note = deserialize_content(arr_copy_slice(serialized_note, [0; N], 0));\n note.set_header(note_header);\n\n // TODO(#7771): inject compute_note_hash(...) func to notes with macros.\n let note_hash = note.compute_note_hiding_point().x;\n let unique_note_hash = compute_unique_note_hash(note_header.nonce, note_hash);\n let siloed_note_hash = compute_siloed_note_hash(note_header.contract_address, unique_note_hash);\n\n let inner_nullifier = if compute_nullifier {\n note.compute_nullifier_without_context()\n } else {\n 0\n };\n // docs:start:compute_note_hash_and_optionally_a_nullifier_returns\n [note_hash, unique_note_hash, siloed_note_hash, inner_nullifier]\n // docs:end:compute_note_hash_and_optionally_a_nullifier_returns\n}\n"},"132":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/note/lifecycle.nr","source":"use crate::context::{PrivateContext, PublicContext};\nuse crate::note::{\n note_header::NoteHeader, note_interface::NoteInterface,\n utils::{compute_note_hash_for_read_request, compute_note_hash_for_nullify_internal},\n note_emission::NoteEmission\n};\nuse crate::oracle::notes::{notify_created_note, notify_nullified_note};\n\npub fn create_note<Note, N, M>(\n context: &mut PrivateContext,\n storage_slot: Field,\n note: &mut Note\n) -> NoteEmission<Note> where Note: NoteInterface<N, M> {\n let contract_address = (*context).this_address();\n let note_hash_counter = context.side_effect_counter;\n\n let header = NoteHeader { contract_address, storage_slot, nonce: 0, note_hash_counter };\n note.set_header(header);\n // TODO(#7771): inject compute_note_hash(...) func to notes with macros.\n let note_hash = note.compute_note_hiding_point().x;\n\n let serialized_note = Note::serialize_content(*note);\n assert(\n notify_created_note(\n storage_slot,\n Note::get_note_type_id(),\n serialized_note,\n note_hash,\n note_hash_counter\n )\n == 0\n );\n\n context.push_note_hash(note_hash);\n\n NoteEmission::new(*note)\n}\n\npub fn create_note_hash_from_public<Note, N, M>(\n context: &mut PublicContext,\n storage_slot: Field,\n note: &mut Note\n) where Note: NoteInterface<N, M> {\n let contract_address = (*context).this_address();\n // Public note hashes are transient, but have no side effect counters, so we just need note_hash_counter != 0\n let header = NoteHeader { contract_address, storage_slot, nonce: 0, note_hash_counter: 1 };\n note.set_header(header);\n // TODO(#7771): inject compute_note_hash(...) func to notes with macros.\n let note_hash = note.compute_note_hiding_point().x;\n\n context.push_note_hash(note_hash);\n}\n\n// Note: This function is currently totally unused.\npub fn destroy_note<Note, N, M>(\n context: &mut PrivateContext,\n note: Note\n) where Note: NoteInterface<N, M> {\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n\n destroy_note_unsafe(context, note, note_hash_for_read_request)\n}\n\npub fn destroy_note_unsafe<Note, N, M>(\n context: &mut PrivateContext,\n note: Note,\n note_hash_for_read_request: Field\n) where Note: NoteInterface<N, M> {\n let note_hash_for_nullify = compute_note_hash_for_nullify_internal(note, note_hash_for_read_request);\n let nullifier = note.compute_nullifier(context, note_hash_for_nullify);\n\n let note_hash_counter = note.get_header().note_hash_counter;\n let notification_note_hash = if (note_hash_counter == 0) {\n // Counter is zero, so we're nullifying a settled note and we don't populate the note_hash with real value.\n 0\n } else {\n // A non-zero note hash counter implies that we're nullifying a pending note (i.e. one that has not yet been\n // persisted in the trees and is instead in the pending new note hashes array). In such a case we populate its\n // hash with real value to inform the kernel which note we're nullifyng so that it can either squash both\n // the note and the nullifier if it's an inner note hash, or check that the it matches a pending note if it's\n // a siloed note hash.\n note_hash_for_nullify\n };\n\n let nullifier_counter = context.side_effect_counter;\n assert(notify_nullified_note(nullifier, notification_note_hash, nullifier_counter) == 0);\n\n context.push_nullifier_for_note_hash(nullifier, notification_note_hash)\n}\n\n"},"133":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/note/note_emission.nr","source":"/**\n * A note emission struct containing the information required for emitting a note.\n * The exact `emit` logic is passed in by the application code\n */\nstruct NoteEmission<Note> {\n note: Note\n}\n\nimpl<Note> NoteEmission<Note> {\n pub fn new(note: Note) -> Self {\n Self { note }\n }\n\n pub fn emit<Env>(self, _emit: fn[Env](Self) -> ()) {\n _emit(self);\n }\n\n pub fn discard(_self: Self) {}\n}\n\n/**\n * A struct wrapping note emission in `Option<T>`.\n * This is the struct provided to application codes, which can be used to emit\n * only when a note was actually inserted.\n * It is fairly common to have cases where a function conditionally inserts,\n * and this allows us to keep the same API for emission in both cases (e.g. inserting \n * a change note in a token's transfer function only when there is \"change\" left).\n */\nstruct OuterNoteEmission<Note> {\n emission: Option<NoteEmission<Note>>,\n}\n\nimpl<Note> OuterNoteEmission<Note> {\n pub fn new(emission: Option<NoteEmission<Note>>) -> Self {\n Self { emission }\n }\n\n pub fn emit<Env>(self, _emit: fn[Env](NoteEmission<Note>) -> ()) {\n if self.emission.is_some() {\n _emit(self.emission.unwrap());\n }\n }\n\n pub fn discard(_self: Self) {}\n}\n"},"141":{"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, MAX_ARGS_LENGTH\n},\n point::Point, traits::Hash, hash::{sha256_to_field, poseidon2_hash_with_separator}\n};\nuse crate::oracle::logs_traits::ToBytesForUnencryptedLog;\n\npub use dep::protocol_types::hash::{compute_siloed_nullifier, pedersen_hash};\n\npub fn pedersen_commitment<let N: u32>(inputs: [Field; N], hash_index: u32) -> Point {\n std::hash::pedersen_commitment_with_separator(inputs, hash_index)\n}\n\npub fn compute_secret_hash(secret: Field) -> Field {\n poseidon2_hash_with_separator([secret], GENERATOR_INDEX__SECRET_HASH)\n}\n\npub fn compute_unencrypted_log_hash<T, let N: u32, let M: u32>(\n contract_address: AztecAddress,\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 len_bytes: [u8; 4] = (n as Field).to_be_bytes();\n for i in 0..4 {\n hash_bytes[32 + i] = len_bytes[i];\n }\n for i in 0..n {\n hash_bytes[36 + 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: [u8; 32] = sender.to_field().to_be_bytes();\n let chain_id_bytes: [u8; 32] = chain_id.to_be_bytes();\n let recipient_bytes: [u8; 32] = recipient.to_field().to_be_bytes();\n let version_bytes: [u8; 32] = version.to_be_bytes();\n let content_bytes: [u8; 32] = content.to_be_bytes();\n let secret_hash_bytes: [u8; 32] = secret_hash.to_be_bytes();\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 poseidon2_hash_with_separator(\n [message_hash, secret, leaf_index],\n GENERATOR_INDEX__MESSAGE_NULLIFIER\n )\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<let N: u32>(&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<let N: u32>(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() <= MAX_ARGS_LENGTH, \"Args length exceeds maximum\");\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] = poseidon2_hash_with_separator(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] = poseidon2_hash_with_separator(current_chunk_values, GENERATOR_INDEX__FUNCTION_ARGS);\n }\n poseidon2_hash_with_separator(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..MAX_ARGS_LENGTH {\n input.add(i as Field);\n }\n let hash = input.hash();\n assert(hash == 0x1cce4dbf69f14c44865919991ee1057922e34d7310ba237d71759aa422621ca9);\n}\n\n#[test]\nfn compute_unenc_log_hash_array() {\n let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6);\n let log = [\n 0x20660de09f35f876e3e69d227b2a35166ad05f09d82d06366ec9b6f65a51fec2,\n 0x1b52bfe3b8689761916f76dc3d38aa8810860db325cd39ca611eed980091f01c,\n 0x2e559c4045c378a56ad13b9edb1e8de4e7ad3b3aa35cc7ba9ec77f7a68fa43a4,\n 0x25d0f689c4a4178a29d59306f2675824d19be6d25e44fa03b03f49c263053dd2,\n 0x2d513a722d6f352dc0961f156afdc5e31495b9f0e35cb069261a8e55e2df67fd\n ];\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x0095b2d17ab72f4b27a341f7ac63e49ec73935ae8c9181a0ac02023eb12f3284);\n}\n\n#[test]\nfn compute_unenc_log_hash_addr() {\n let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6);\n let log = AztecAddress::from_field(0x26aa302d4715fd8a687453cb26d616b0768027bd54bcae56b09d908ecd9f8303);\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x0083ab647dfb26e7ddee90a0f4209d049d4660cab42000c544b986aaa84c55a3);\n}\n\n#[test]\nfn compute_unenc_log_hash_str() {\n let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8);\n let log = \"dummy\";\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x00629e88ebd6374f44aa6cfe07e251ecf07213ebc7267e8f6b578ae57ffd6c20);\n}\n\n#[test]\nfn compute_unenc_log_hash_longer_str() {\n let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8);\n let log = \"Hello this is a string\";\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x0098637962f7d34fa202b7ffad8a07a238c5d1fd897b82a108f7f467fa73b841);\n}\n"},"142":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/initializer.nr","source":"use dep::protocol_types::{\n address::AztecAddress, hash::poseidon2_hash_with_separator, constants::GENERATOR_INDEX__CONSTRUCTOR,\n abis::function_selector::FunctionSelector\n};\n\nuse crate::{\n context::{PrivateContext, PublicContext}, oracle::get_contract_instance::get_contract_instance,\n oracle::get_contract_instance::get_contract_instance_avm\n};\n\npub fn mark_as_initialized_public(context: &mut PublicContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier((*context).this_address());\n context.push_nullifier(init_nullifier);\n}\n\npub fn mark_as_initialized_private(context: &mut PrivateContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier((*context).this_address());\n context.push_nullifier(init_nullifier);\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_private(context: &mut PrivateContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier(context.this_address());\n context.push_nullifier_read_request(init_nullifier);\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 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 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 poseidon2_hash_with_separator(\n [init_selector.to_field(), init_args_hash],\n GENERATOR_INDEX__CONSTRUCTOR\n )\n}\n"},"144":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/logs.nr","source":"use dep::protocol_types::{address::AztecAddress, point::Point};\n\n// = 480 + 32 * N bytes\n#[oracle(emitEncryptedNoteLog)]\nunconstrained fn emit_encrypted_note_log_oracle<let M: u32>(_note_hash_counter: u32, _encrypted_note: [u8; M], _counter: u32) {}\n\nunconstrained pub fn emit_encrypted_note_log<let M: u32>(\n note_hash_counter: u32,\n encrypted_note: [u8; M],\n counter: u32\n) {\n emit_encrypted_note_log_oracle(note_hash_counter, encrypted_note, counter)\n}\n\n#[oracle(emitEncryptedEventLog)]\nunconstrained fn emit_encrypted_event_log_oracle<let M: u32>(_contract_address: AztecAddress, _randomness: Field, _encrypted_event: [u8; M], _counter: u32) {}\n\nunconstrained pub fn emit_encrypted_event_log<let M: u32>(\n contract_address: AztecAddress,\n randomness: Field,\n encrypted_event: [u8; M],\n counter: u32\n) {\n emit_encrypted_event_log_oracle(contract_address, randomness, encrypted_event, counter)\n}\n\n// = 480 + 32 * N bytes\n#[oracle(computeEncryptedNoteLog)]\nunconstrained fn compute_encrypted_note_log_oracle<let N: u32, let M: u32>(\n _contract_address: AztecAddress,\n _storage_slot: Field,\n _note_type_id: Field,\n _ovsk_app: Field,\n _ovpk_m: Point,\n _ivpk_m: Point,\n _recipient: AztecAddress,\n _preimage: [Field; N]\n) -> [u8; M] {}\n\nunconstrained pub fn compute_encrypted_note_log<let N: u32, let M: u32>(\n contract_address: AztecAddress,\n storage_slot: Field,\n note_type_id: Field,\n ovsk_app: Field,\n ovpk_m: Point,\n ivpk_m: Point,\n recipient: AztecAddress,\n preimage: [Field; N]\n) -> [u8; M] {\n compute_encrypted_note_log_oracle(\n contract_address,\n storage_slot,\n note_type_id,\n ovsk_app,\n ovpk_m,\n ivpk_m,\n recipient,\n preimage\n )\n}\n\n// = 480 + 32 * N bytes\n#[oracle(computeEncryptedEventLog)]\nunconstrained fn compute_encrypted_event_log_oracle<let N: u32, let M: u32>(\n _contract_address: AztecAddress,\n _randomness: Field,\n _event_type_id: Field,\n _ovsk_app: Field,\n _ovpk_m: Point,\n _ivpk_m: Point,\n _recipient: AztecAddress,\n _preimage: [Field; N]\n) -> [u8; M] {}\n\nunconstrained pub fn compute_encrypted_event_log<let N: u32, let M: u32>(\n contract_address: AztecAddress,\n randomness: Field,\n event_type_id: Field,\n ovsk_app: Field,\n ovpk_m: Point,\n ivpk_m: Point,\n recipient: AztecAddress,\n preimage: [Field; N]\n) -> [u8; M] {\n compute_encrypted_event_log_oracle(\n contract_address,\n randomness,\n event_type_id,\n ovsk_app,\n ovpk_m,\n ivpk_m,\n recipient,\n preimage\n )\n}\n\n#[oracle(emitUnencryptedLog)]\nunconstrained fn emit_unencrypted_log_oracle_private<T>(_contract_address: AztecAddress, _message: T, _counter: u32) -> Field {}\n\nunconstrained pub fn emit_unencrypted_log_private_internal<T>(\n contract_address: AztecAddress,\n message: T,\n counter: u32\n) -> Field {\n emit_unencrypted_log_oracle_private(contract_address, message, counter)\n}\n\n#[oracle(emitContractClassUnencryptedLog)]\nunconstrained fn emit_contract_class_unencrypted_log_private<let N: u32>(\n contract_address: AztecAddress,\n message: [Field; N],\n counter: u32\n) -> Field {}\n\nunconstrained pub fn emit_contract_class_unencrypted_log_private_internal<let N: u32>(contract_address: AztecAddress, message: [Field; N], counter: u32) -> Field {\n emit_contract_class_unencrypted_log_private(contract_address, message, counter)\n}\n"},"146":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/returns.nr","source":"#[oracle(packReturns)]\nunconstrained fn pack_returns_oracle(_returns: [Field]) -> Field {}\n\nunconstrained pub fn pack_returns(returns: [Field]) {\n let _unused = pack_returns_oracle(returns);\n}\n\n#[oracle(unpackReturns)]\nunconstrained fn unpack_returns_oracle<let N: u32>(_return_hash: Field) -> [Field; N] {}\n\nunconstrained pub fn unpack_returns<let N: u32>(return_hash: Field) -> [Field; N] {\n unpack_returns_oracle(return_hash)\n}\n"},"147":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/get_public_data_witness.nr","source":"use dep::protocol_types::{constants::PUBLIC_DATA_TREE_HEIGHT, data::PublicDataTreeLeafPreimage, utils::arr_copy_slice};\n\nglobal LEAF_PREIMAGE_LENGTH: u32 = 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)]\nunconstrained fn get_public_data_witness_oracle(\n _block_number: u32,\n _public_data_tree_index: Field\n) -> [Field; PUBLIC_DATA_WITNESS] {}\n\nunconstrained pub fn get_public_data_witness(\n block_number: u32,\n public_data_tree_index: Field\n) -> PublicDataWitness {\n let fields = get_public_data_witness_oracle(block_number, public_data_tree_index);\n PublicDataWitness {\n index: fields[0],\n leaf_preimage: PublicDataTreeLeafPreimage { slot: fields[1], value: fields[2], next_index: fields[3] as u32, next_slot: fields[4] },\n path: arr_copy_slice(fields, [0; PUBLIC_DATA_TREE_HEIGHT], 1 + LEAF_PREIMAGE_LENGTH)\n }\n}\n"},"148":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/key_validation_request.nr","source":"use dep::protocol_types::abis::validation_requests::{KeyValidationRequest, key_validation_request::KEY_VALIDATION_REQUEST_LENGTH};\n\n#[oracle(getKeyValidationRequest)]\nunconstrained fn get_key_validation_request_oracle(\n _pk_m_hash: Field,\n _key_index: Field\n) -> [Field; KEY_VALIDATION_REQUEST_LENGTH] {}\n\nunconstrained fn get_key_validation_request_internal(\n npk_m_hash: Field,\n key_index: Field\n) -> KeyValidationRequest {\n let result = get_key_validation_request_oracle(npk_m_hash, key_index);\n KeyValidationRequest::deserialize(result)\n}\n\nunconstrained pub fn get_key_validation_request(\n pk_m_hash: Field,\n key_index: Field\n) -> KeyValidationRequest {\n get_key_validation_request_internal(pk_m_hash, key_index)\n}\n"},"151":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/storage.nr","source":"use dep::protocol_types::{address::AztecAddress, traits::Deserialize};\n\n#[oracle(storageRead)]\nunconstrained fn storage_read_oracle<let N: u32>(address: Field, storage_slot: Field, block_number: Field, length: Field) -> [Field; N] {}\n\nunconstrained pub fn raw_storage_read<let N: u32>(\n address: AztecAddress,\n storage_slot: Field,\n block_number: u32\n) -> [Field; N] {\n storage_read_oracle(\n address.to_field(),\n storage_slot,\n block_number as Field,\n N as Field\n )\n}\n\nunconstrained pub fn storage_read<T, let N: u32>(\n address: AztecAddress,\n storage_slot: Field,\n block_number: u32\n) -> T where T: Deserialize<N> {\n T::deserialize(raw_storage_read(address, storage_slot, block_number))\n}\n\nmod tests {\n use crate::oracle::storage::{raw_storage_read, storage_read};\n use dep::protocol_types::address::AztecAddress;\n\n use std::test::OracleMock;\n use crate::test::mocks::mock_struct::MockStruct;\n\n global address = AztecAddress::from_field(29);\n global slot = 7;\n global block_number = 17;\n\n #[test]\n fn test_raw_storage_read() {\n let written = MockStruct { a: 13, b: 42 };\n\n let _ = OracleMock::mock(\"storageRead\").returns(written.serialize());\n\n let read: [Field; 2] = raw_storage_read(address, slot, block_number);\n assert_eq(read[0], 13);\n assert_eq(read[1], 42);\n }\n\n #[test]\n fn test_storage_read() {\n let written = MockStruct { a: 13, b: 42 };\n\n let _ = OracleMock::mock(\"storageRead\").returns(written.serialize());\n\n let read: MockStruct = storage_read(address, slot, block_number);\n assert_eq(read.a, 13);\n assert_eq(read.b, 42);\n }\n}\n"},"152":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/unsafe_rand.nr","source":"#[oracle(getRandomField)]\nunconstrained fn rand_oracle() -> Field {}\n\n// Called `unsafe_rand` because we do not constrain in circuit that we are dealing with an actual random value.\n// Instead we just trust our PXE.\nunconstrained pub fn unsafe_rand() -> Field {\n rand_oracle()\n}\n"},"154":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/call_private_function.nr","source":"use dep::protocol_types::{abis::function_selector::FunctionSelector, address::AztecAddress, utils::reader::Reader};\n\n#[oracle(callPrivateFunction)]\nunconstrained fn call_private_function_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _start_side_effect_counter: u32,\n _is_static_call: bool,\n _is_delegate_call: bool\n) -> [Field; 2] {}\n\nunconstrained pub fn call_private_function_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n start_side_effect_counter: u32,\n is_static_call: bool,\n is_delegate_call: bool\n) -> (u32, Field) {\n let fields = call_private_function_oracle(\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 let mut reader = Reader::new(fields);\n let end_side_effect_counter = reader.read_u32();\n let returns_hash = reader.read();\n\n (end_side_effect_counter, returns_hash)\n}\n"},"155":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/keys.nr","source":"use crate::keys::{PublicKeys, public_keys::{NpkM, IvpkM, OvpkM, TpkM}};\nuse dep::protocol_types::{address::{AztecAddress, PartialAddress}, point::Point};\n\n#[oracle(getPublicKeysAndPartialAddress)]\nunconstrained fn get_public_keys_and_partial_address_oracle(_address: AztecAddress) -> [Field; 13] {}\n\nunconstrained pub fn get_public_keys_and_partial_address(address: AztecAddress) -> (PublicKeys, PartialAddress) {\n let result = get_public_keys_and_partial_address_oracle(address);\n\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: result[0], y: result[1], is_infinite: result[2] as bool } },\n ivpk_m: IvpkM { inner: Point { x: result[3], y: result[4], is_infinite: result[5] as bool } },\n ovpk_m: OvpkM { inner: Point { x: result[6], y: result[7], is_infinite: result[8] as bool } },\n tpk_m: TpkM { inner: Point { x: result[9], y: result[10], is_infinite: result[11] as bool } }\n };\n\n let partial_address = PartialAddress::from_field(result[12]);\n\n (keys, partial_address)\n}\n"},"157":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/notes.nr","source":"use crate::note::{note_header::NoteHeader, note_interface::NoteInterface};\n\nuse dep::protocol_types::{address::AztecAddress, utils::arr_copy_slice};\n\n#[oracle(notifyCreatedNote)]\nunconstrained fn notify_created_note_oracle<let N: u32>(\n _storage_slot: Field,\n _note_type_id: Field,\n _serialized_note: [Field; N],\n _note_hash: Field,\n _counter: u32\n) -> Field {}\n\nunconstrained pub fn notify_created_note<let N: u32>(\n storage_slot: Field,\n note_type_id: Field,\n serialized_note: [Field; N],\n note_hash: Field,\n counter: u32\n) -> Field {\n notify_created_note_oracle(storage_slot, note_type_id, serialized_note, note_hash, counter)\n}\n\n#[oracle(notifyNullifiedNote)]\nunconstrained fn notify_nullified_note_oracle(_nullifier: Field, _note_hash: Field, _counter: u32) -> Field {}\n\nunconstrained pub fn notify_nullified_note(nullifier: Field, note_hash: Field, counter: u32) -> Field {\n notify_nullified_note_oracle(nullifier, note_hash, counter)\n}\n\n#[oracle(getNotes)]\nunconstrained fn get_notes_oracle<let N: u32, let S: u32>(\n _storage_slot: Field,\n _num_selects: u8,\n _select_by_indexes: [u8; N],\n _select_by_offsets: [u8; N],\n _select_by_lengths: [u8; N],\n _select_values: [Field; N],\n _select_comparators: [u8; N],\n _sort_by_indexes: [u8; N],\n _sort_by_offsets: [u8; N],\n _sort_by_lengths: [u8; N],\n _sort_order: [u8; N],\n _limit: u32,\n _offset: u32,\n _status: u8,\n _return_size: u32,\n _placeholder_fields: [Field; S]\n) -> [Field; S] {}\n\nunconstrained fn get_notes_oracle_wrapper<let N: u32, let S: u32>(\n storage_slot: Field,\n num_selects: u8,\n select_by_indexes: [u8; N],\n select_by_offsets: [u8; N],\n select_by_lengths: [u8; N],\n select_values: [Field; N],\n select_comparators: [u8; N],\n sort_by_indexes: [u8; N],\n sort_by_offsets: [u8; N],\n sort_by_lengths: [u8; N],\n sort_order: [u8; N],\n limit: u32,\n offset: u32,\n status: u8,\n mut placeholder_fields: [Field; S]\n) -> [Field; S] {\n let return_size = placeholder_fields.len() as u32;\n get_notes_oracle(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n limit,\n offset,\n status,\n return_size,\n placeholder_fields\n )\n}\n\nunconstrained pub fn get_notes<Note, let N: u32, let NB: u32, let M: u32, let S: u32, let NS: u32>(\n storage_slot: Field,\n num_selects: u8,\n select_by_indexes: [u8; M],\n select_by_offsets: [u8; M],\n select_by_lengths: [u8; M],\n select_values: [Field; M],\n select_comparators: [u8; M],\n sort_by_indexes: [u8; M],\n sort_by_offsets: [u8; M],\n sort_by_lengths: [u8; M],\n sort_order: [u8; M],\n limit: u32,\n offset: u32,\n status: u8,\n mut placeholder_opt_notes: [Option<Note>; S], // TODO: Remove it and use `limit` to initialize the note array.\n placeholder_fields: [Field; NS], // TODO: Remove it and use `limit` to initialize the note array.\n _placeholder_note_length: [Field; N] // Turbofish hack? Compiler breaks calculating read_offset unless we add this parameter\n) -> [Option<Note>; S] where Note: NoteInterface<N, NB> {\n let fields = get_notes_oracle_wrapper(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n limit,\n offset,\n status,\n placeholder_fields\n );\n let num_notes = fields[0] as u32;\n let contract_address = AztecAddress::from_field(fields[1]);\n for i in 0..placeholder_opt_notes.len() {\n if i < num_notes {\n // lengths named as per typescript.\n let return_header_length: u32 = 2; // num_notes & contract_address.\n let extra_preimage_length: u32 = 2; // nonce & note_hash_counter.\n let read_offset: u32 = return_header_length + i * (N + extra_preimage_length);\n let nonce = fields[read_offset];\n let note_hash_counter = fields[read_offset + 1] as u32;\n let header = NoteHeader { contract_address, nonce, storage_slot, note_hash_counter };\n let serialized_note = arr_copy_slice(fields, [0; N], read_offset + 2);\n let mut note = Note::deserialize_content(serialized_note);\n note.set_header(header);\n placeholder_opt_notes[i] = Option::some(note);\n };\n }\n placeholder_opt_notes\n}\n\n// Only ever use this in private!\n#[oracle(checkNullifierExists)]\nunconstrained fn check_nullifier_exists_oracle(_inner_nullifier: Field) -> Field {}\n\n// Only ever use this in private!\nunconstrained pub fn check_nullifier_exists(inner_nullifier: Field) -> bool {\n check_nullifier_exists_oracle(inner_nullifier) == 1\n}\n"},"158":{"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)]\nunconstrained fn 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)]\nunconstrained fn 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 pub 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 = unsafe {\n ContractInstance::deserialize(get_contract_instance_internal(address))\n };\n // The to_address function combines all values in the instance object to produce an address, so by checking that we\n // get the expected address we validate the entire struct.\n assert_eq(instance.to_address(), address);\n\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"},"159":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/enqueue_public_function_call.nr","source":"use dep::protocol_types::{abis::{function_selector::FunctionSelector}, address::AztecAddress};\n\n#[oracle(enqueuePublicFunctionCall)]\nunconstrained fn 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) {}\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) {\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)]\nunconstrained fn 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) {}\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) {\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\n#[oracle(notifySetMinRevertibleSideEffectCounter)]\nunconstrained fn notify_set_min_revertible_side_effect_counter_oracle(_counter: u32) {}\n\nunconstrained pub fn notify_set_min_revertible_side_effect_counter(counter: u32) {\n notify_set_min_revertible_side_effect_counter_oracle(counter);\n}\n"},"161":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/execution.nr","source":"use dep::protocol_types::address::AztecAddress;\n\n#[oracle(getContractAddress)]\nunconstrained fn get_contract_address_oracle() -> AztecAddress {}\n\n#[oracle(getBlockNumber)]\nunconstrained fn get_block_number_oracle() -> u32 {}\n\n#[oracle(getChainId)]\nunconstrained fn get_chain_id_oracle() -> Field {}\n\n#[oracle(getVersion)]\nunconstrained fn get_version_oracle() -> Field {}\n\nunconstrained pub fn get_contract_address() -> AztecAddress {\n get_contract_address_oracle()\n}\n\nunconstrained pub fn get_block_number() -> u32 {\n get_block_number_oracle()\n}\n\nunconstrained pub fn get_chain_id() -> Field {\n get_chain_id_oracle()\n}\n\nunconstrained pub fn get_version() -> Field {\n get_version_oracle()\n}\n"},"164":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/state_vars/map.nr","source":"use dep::protocol_types::{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\n"},"166":{"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 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, T_SERIALIZED_LEN> PublicMutable<T, &mut PublicContext> where T: Serialize<T_SERIALIZED_LEN> + Deserialize<T_SERIALIZED_LEN> {\n // docs:start:public_mutable_struct_read\n pub fn read(self) -> T {\n self.context.storage_read(self.storage_slot)\n }\n // docs:end:public_mutable_struct_read\n\n // docs:start:public_mutable_struct_write\n pub fn write(self, value: T) {\n self.context.storage_write(self.storage_slot, value);\n }\n // docs:end:public_mutable_struct_write\n}\n\nimpl<T, T_SERIALIZED_LEN> PublicMutable<T, UnconstrainedContext> where T: Deserialize<T_SERIALIZED_LEN> {\n unconstrained pub fn read(self) -> T {\n self.context.storage_read(self.storage_slot)\n }\n}\n"},"182":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/state_vars/private_immutable.nr","source":"use dep::protocol_types::{\n address::AztecAddress, constants::GENERATOR_INDEX__INITIALIZATION_NULLIFIER,\n hash::poseidon2_hash_with_separator\n};\n\nuse crate::context::{PrivateContext, UnconstrainedContext};\nuse crate::note::{\n lifecycle::create_note, note_getter::{get_note, view_notes}, note_interface::NoteInterface,\n note_viewer_options::NoteViewerOptions, note_emission::NoteEmission\n};\nuse crate::oracle::notes::check_nullifier_exists;\nuse crate::state_vars::storage::Storage;\n\n// docs:start:struct\nstruct PrivateImmutable<Note, Context> {\n context: Context,\n storage_slot: Field,\n}\n// docs:end:struct\n\nimpl<T, Context> Storage<T> for PrivateImmutable<T, Context> {}\n\nimpl<Note, Context> PrivateImmutable<Note, Context> {\n // docs:start:new\n pub fn new(context: Context, storage_slot: Field) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n Self { context, storage_slot }\n }\n // docs:end:new\n\n // The following computation is leaky, in that it doesn't hide the storage slot that has been initialized, nor does it hide the contract address of this contract.\n // When this initialization nullifier is emitted, an observer could do a dictionary or rainbow attack to learn the preimage of this nullifier to deduce the storage slot and contract address.\n // For some applications, leaking the details that a particular state variable of a particular contract has been initialized will be unacceptable.\n // Under such circumstances, such application developers might wish to _not_ use this state variable type.\n // This is especially dangerous for initial assignment to elements of a `Map<AztecAddress, PrivateImmutable>` type (for example), because the storage slot often also identifies an actor. \n // e.g. the initial assignment to `my_map.at(msg.sender)` will leak: `msg.sender`, the fact that an element of `my_map` was assigned-to for the first time, and the contract_address.\n pub fn compute_initialization_nullifier(self) -> Field {\n poseidon2_hash_with_separator(\n [self.storage_slot],\n GENERATOR_INDEX__INITIALIZATION_NULLIFIER\n )\n }\n}\n\nimpl<Note> PrivateImmutable<Note, &mut PrivateContext> {\n // docs:start:initialize\n pub fn initialize<N, M>(\n self,\n note: &mut Note\n ) -> NoteEmission<Note> where Note: NoteInterface<N, M> {\n // Nullify the storage slot.\n let nullifier = self.compute_initialization_nullifier();\n self.context.push_nullifier(nullifier);\n\n create_note(self.context, self.storage_slot, note)\n }\n // docs:end:initialize\n\n // docs:start:get_note\n pub fn get_note<N, M>(self) -> Note where Note: NoteInterface<N, M> {\n let storage_slot = self.storage_slot;\n get_note(self.context, storage_slot).0\n }\n // docs:end:get_note\n}\n\nimpl<Note> PrivateImmutable<Note, UnconstrainedContext> {\n // docs:start:is_initialized\n unconstrained pub fn is_initialized(self) -> bool {\n let nullifier = self.compute_initialization_nullifier();\n check_nullifier_exists(nullifier)\n }\n // docs:end:is_initialized\n\n // view_note does not actually use the context, but it calls oracles that are only available in private\n // docs:start:view_note\n unconstrained pub fn view_note<N, M>(self) -> Note where Note: NoteInterface<N, M> {\n let mut options = NoteViewerOptions::new();\n view_notes(self.storage_slot, options.set_limit(1)).get(0)\n }\n // docs:end:view_note\n}\n"},"186":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/utils/point.nr","source":"use dep::protocol_types::point::Point;\n\n// I am storing the modulus divided by 2 plus 1 here because full modulus would throw \"String literal too large\" error\n// Full modulus is 21888242871839275222246405745257275088548364400416034343698204186575808495617\nglobal BN254_FR_MODULUS_DIV_2: Field = 10944121435919637611123202872628637544274182200208017171849102093287904247808;\n\n/// Converts a public key to a byte array.\n///\n/// We don't serialize the point at infinity flag because this function is used in situations where we do not want\n/// to waste the extra byte (encrypted log).\npub fn point_to_bytes(pk: Point) -> [u8; 32] {\n // Note that there is 1 more free bit in the 32 bytes (254 bits currently occupied by the x coordinate, 1 bit for\n // the \"sign\") so it's possible to use that last bit as an \"is_infinite\" flag if desired in the future.\n assert(!pk.is_infinite, \"Cannot serialize point at infinity as bytes.\");\n\n let mut result: [u8; 32] = pk.x.to_be_bytes();\n\n // We store only a \"sign\" of the y coordinate because the rest can be derived from the x coordinate. To get\n // the sign we check if the y coordinate is less or equal than the curve's order minus 1 divided by 2.\n // Ideally we'd do `y <= MOD_DIV_2`, but there's no `lte` function, so instead we do `!(y > MOD_DIV_2)`, which is\n // equivalent, and then rewrite that as `!(MOD_DIV_2 < y)`, since we also have no `gt` function.\n if !BN254_FR_MODULUS_DIV_2.lt(pk.y) {\n // y is <= (modulus - 1) / 2 so we set the sign bit to 1\n // Here we leverage that field fits into 254 bits (log2(Fr.MODULUS) < 254) and given that we serialize Fr to 32\n // bytes and we use big-endian the 2 most significant bits are never populated. Hence we can use one of\n // the bits as a sign bit.\n result[0] += 128;\n }\n\n result\n}\n\nmod test {\n use dep::protocol_types::point::Point;\n use crate::utils::point::point_to_bytes;\n\n #[test]\n fn test_point_to_bytes_positive_sign() {\n let p = Point {\n x: 0x1af41f5de96446dc3776a1eb2d98bb956b7acd9979a67854bec6fa7c2973bd73,\n y: 0x07fc22c7f2c7057571f137fe46ea9c95114282bc95d37d71ec4bfb88de457d4a,\n is_infinite: false\n };\n\n let compressed_point = point_to_bytes(p);\n\n let expected_compressed_point_positive_sign = [\n 154, 244, 31, 93, 233, 100, 70, 220, 55, 118, 161, 235, 45, 152, 187, 149, 107, 122, 205, 153, 121, 166, 120, 84, 190, 198, 250, 124, 41, 115, 189, 115\n ];\n\n assert_eq(expected_compressed_point_positive_sign.len(), compressed_point.len());\n for i in 0..expected_compressed_point_positive_sign.len() {\n assert_eq(compressed_point[i], expected_compressed_point_positive_sign[i]);\n }\n }\n\n #[test]\n fn test_point_to_bytes_negative_sign() {\n let p = Point {\n x: 0x247371652e55dd74c9af8dbe9fb44931ba29a9229994384bd7077796c14ee2b5,\n y: 0x26441aec112e1ae4cee374f42556932001507ad46e255ffb27369c7e3766e5c0,\n is_infinite: false\n };\n\n let compressed_point = point_to_bytes(p);\n\n let expected_compressed_point_negative_sign = [\n 36, 115, 113, 101, 46, 85, 221, 116, 201, 175, 141, 190, 159, 180, 73, 49, 186, 41, 169, 34, 153, 148, 56, 75, 215, 7, 119, 150, 193, 78, 226, 181\n ];\n\n assert_eq(expected_compressed_point_negative_sign.len(), compressed_point.len());\n for i in 0..expected_compressed_point_negative_sign.len() {\n assert_eq(compressed_point[i], expected_compressed_point_negative_sign[i]);\n }\n }\n}\n"},"2":{"path":"std/array.nr","source":"use crate::cmp::Ord;\nuse crate::convert::From;\n\nimpl<T, let N: u32> [T; N] {\n /// Returns the length of the slice.\n #[builtin(array_len)]\n pub fn len(self) -> u32 {}\n\n pub fn sort(self) -> Self where T: Ord {\n self.sort_via(|a: T, b: T| a <= b)\n }\n\n pub fn sort_via<Env>(self, ordering: fn[Env](T, T) -> bool) -> Self {\n let sorted_index = unsafe {\n // Safety: These indices are asserted to be the sorted element indices via `find_index`\n let sorted_index: [u32; N] = self.get_sorting_index(ordering);\n\n for i in 0..N {\n let pos = find_index(sorted_index, i);\n assert(sorted_index[pos] == i);\n }\n\n sorted_index\n };\n\n // Sort the array using the indexes\n let mut result = self;\n for i in 0..N {\n result[i] = self[sorted_index[i]];\n }\n // Ensure the array is sorted\n for i in 0..N - 1 {\n assert(ordering(result[i], result[i + 1]));\n }\n\n result\n }\n\n /// Returns the index of the elements in the array that would sort it, using the provided custom sorting function.\n unconstrained fn get_sorting_index<Env>(self, ordering: fn[Env](T, T) -> bool) -> [u32; N] {\n let mut result = [0; N];\n let mut a = self;\n for i in 0..N {\n result[i] = i;\n }\n for i in 1..N {\n for j in 0..i {\n if ordering(a[i], a[j]) {\n let old_a_j = a[j];\n a[j] = a[i];\n a[i] = old_a_j;\n let old_j = result[j];\n result[j] = result[i];\n result[i] = old_j;\n }\n }\n }\n result\n }\n\n #[builtin(as_slice)]\n pub fn as_slice(self) -> [T] {}\n\n // Apply a function to each element of an array, returning a new array\n // containing the mapped elements.\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> [U; N] {\n let first_elem = f(self[0]);\n let mut ret = [first_elem; N];\n\n for i in 1..self.len() {\n ret[i] = f(self[i]);\n }\n\n ret\n }\n\n // Apply a function to each element of the array and an accumulator value,\n // returning the final accumulated value. This function is also sometimes\n // called `foldl`, `fold_left`, `reduce`, or `inject`.\n pub fn fold<U, Env>(self, mut accumulator: U, f: fn[Env](U, T) -> U) -> U {\n for elem in self {\n accumulator = f(accumulator, elem);\n }\n accumulator\n }\n\n // Apply a function to each element of the array and an accumulator value,\n // returning the final accumulated value. Unlike fold, reduce uses the first\n // element of the given array as its starting accumulator value.\n pub fn reduce<Env>(self, f: fn[Env](T, T) -> T) -> T {\n let mut accumulator = self[0];\n for i in 1..self.len() {\n accumulator = f(accumulator, self[i]);\n }\n accumulator\n }\n\n // Returns true if all elements in the array satisfy the predicate\n pub fn all<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = true;\n for elem in self {\n ret &= predicate(elem);\n }\n ret\n }\n\n // Returns true if any element in the array satisfies the predicate\n pub fn any<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n for elem in self {\n ret |= predicate(elem);\n }\n ret\n }\n}\n\nimpl<let N: u32> [u8; N] {\n /// Convert a sequence of bytes as-is into a string.\n /// This function performs no UTF-8 validation or similar.\n #[builtin(array_as_str_unchecked)]\n pub fn as_str_unchecked(self) -> str<N> {}\n}\n\n// helper function used to look up the position of a value in an array of Field\n// Note that function returns 0 if the value is not found\nunconstrained fn find_index<let N: u32>(a: [u32; N], find: u32) -> u32 {\n let mut result = 0;\n for i in 0..a.len() {\n if a[i] == find {\n result = i;\n }\n }\n result\n}\n\nimpl<let N: u32> From<str<N>> for [u8; N] {\n fn from(s: str<N>) -> Self {\n s.as_bytes()\n }\n}\n"},"203":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/key_validation_request.nr","source":"use crate::{constants::KEY_VALIDATION_REQUEST_LENGTH, traits::{Empty, Serialize, Deserialize}, point::Point};\n\nstruct KeyValidationRequest {\n pk_m: Point,\n sk_app: Field, // not a grumpkin scalar because it's output of poseidon2\n}\n\nimpl Eq for KeyValidationRequest {\n fn eq(self, request: KeyValidationRequest) -> bool {\n (request.pk_m.eq(self.pk_m))\n & (request.sk_app.eq(self.sk_app))\n }\n}\n\nimpl Empty for KeyValidationRequest {\n fn empty() -> Self {\n KeyValidationRequest {\n pk_m: Point::empty(),\n sk_app: 0,\n }\n }\n}\n\nimpl Serialize<KEY_VALIDATION_REQUEST_LENGTH> for KeyValidationRequest {\n fn serialize(self) -> [Field; KEY_VALIDATION_REQUEST_LENGTH] {\n [\n self.pk_m.x,\n self.pk_m.y,\n self.pk_m.is_infinite as Field,\n self.sk_app,\n ]\n }\n}\n\nimpl Deserialize<KEY_VALIDATION_REQUEST_LENGTH> for KeyValidationRequest {\n fn deserialize(fields: [Field; KEY_VALIDATION_REQUEST_LENGTH]) -> Self {\n Self {\n pk_m: Point { x:fields[0], y: fields[1], is_infinite: fields[2] as bool},\n sk_app: fields[3],\n }\n }\n}\n\n"},"22":{"path":"std/embedded_curve_ops.nr","source":"use crate::ops::arith::{Add, Sub, Neg};\nuse crate::cmp::Eq;\n\n/// A point on the embedded elliptic curve\n/// By definition, the base field of the embedded curve is the scalar field of the proof system curve, i.e the Noir Field.\n/// x and y denotes the Weierstrass coordinates of the point, if is_infinite is false.\nstruct EmbeddedCurvePoint {\n x: Field,\n y: Field,\n is_infinite: bool\n}\n\nimpl EmbeddedCurvePoint {\n /// Elliptic curve point doubling operation\n /// returns the doubled point of a point P, i.e P+P\n fn double(self) -> EmbeddedCurvePoint {\n embedded_curve_add(self, self)\n }\n\n /// Returns the null element of the curve; 'the point at infinity'\n fn point_at_infinity() -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: 0, y: 0, is_infinite: true }\n }\n}\n\nimpl Add for EmbeddedCurvePoint {\n /// Adds two points P+Q, using the curve addition formula, and also handles point at infinity\n fn add(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint { \n embedded_curve_add(self, other)\n }\n}\n\nimpl Sub for EmbeddedCurvePoint {\n /// Points subtraction operation, using addition and negation\n fn sub(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint { \n self + other.neg()\n }\n}\n\nimpl Neg for EmbeddedCurvePoint {\n /// Negates a point P, i.e returns -P, by negating the y coordinate.\n /// If the point is at infinity, then the result is also at infinity.\n fn neg(self) -> EmbeddedCurvePoint { \n EmbeddedCurvePoint {\n x: self.x,\n y: -self.y,\n is_infinite: self.is_infinite\n }\n }\n}\n\nimpl Eq for EmbeddedCurvePoint {\n /// Checks whether two points are equal\n fn eq(self: Self, b: EmbeddedCurvePoint) -> bool {\n (self.is_infinite & b.is_infinite) | ((self.is_infinite == b.is_infinite) & (self.x == b.x) & (self.y == b.y))\n }\n}\n\n/// Scalar for the embedded curve represented as low and high limbs\n/// By definition, the scalar field of the embedded curve is base field of the proving system curve.\n/// It may not fit into a Field element, so it is represented with two Field elements; its low and high limbs.\nstruct EmbeddedCurveScalar {\n lo: Field,\n hi: Field,\n}\n\nimpl EmbeddedCurveScalar {\n pub fn new(lo: Field, hi: Field) -> Self {\n EmbeddedCurveScalar { lo, hi }\n }\n\n #[field(bn254)]\n fn from_field(scalar: Field) -> EmbeddedCurveScalar {\n let (a,b) = crate::field::bn254::decompose(scalar);\n EmbeddedCurveScalar { lo: a, hi: b }\n }\n}\n\nimpl Eq for EmbeddedCurveScalar {\n fn eq(self, other: Self) -> bool {\n (other.hi == self.hi) & (other.lo == self.lo)\n }\n}\n\n// Computes a multi scalar multiplication over the embedded curve.\n// For bn254, We have Grumpkin and Baby JubJub.\n// For bls12-381, we have JubJub and Bandersnatch.\n//\n// The embedded curve being used is decided by the \n// underlying proof system.\n// docs:start:multi_scalar_mul\npub fn multi_scalar_mul<let N: u32>(\n points: [EmbeddedCurvePoint; N],\n scalars: [EmbeddedCurveScalar; N]\n) -> EmbeddedCurvePoint\n// docs:end:multi_scalar_mul\n{\n let point_array = multi_scalar_mul_array_return(points, scalars);\n EmbeddedCurvePoint { x: point_array[0], y: point_array[1], is_infinite: point_array[2] as bool }\n}\n\n#[foreign(multi_scalar_mul)]\nfn multi_scalar_mul_array_return<let N: u32>(points: [EmbeddedCurvePoint; N], scalars: [EmbeddedCurveScalar; N]) -> [Field; 3] {}\n\n#[foreign(multi_scalar_mul)]\npub(crate) fn multi_scalar_mul_slice(points: [EmbeddedCurvePoint], scalars: [EmbeddedCurveScalar]) -> [Field; 3] {}\n\n// docs:start:fixed_base_scalar_mul\npub fn fixed_base_scalar_mul(scalar: EmbeddedCurveScalar) -> EmbeddedCurvePoint\n// docs:end:fixed_base_scalar_mul\n{\n let g1 = EmbeddedCurvePoint { x: 1, y: 17631683881184975370165255887551781615748388533673675138860, is_infinite: false };\n multi_scalar_mul([g1], [scalar])\n}\n\n// This is a hack as returning an `EmbeddedCurvePoint` from a foreign function in brillig returns a [BrilligVariable::SingleAddr; 2] rather than BrilligVariable::BrilligArray\n// as is defined in the brillig bytecode format. This is a workaround which allows us to fix this without modifying the serialization format.\n// docs:start:embedded_curve_add\nfn embedded_curve_add(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint\n) -> EmbeddedCurvePoint\n// docs:end:embedded_curve_add\n{\n let point_array = embedded_curve_add_array_return(point1, point2);\n let x = point_array[0];\n let y = point_array[1];\n EmbeddedCurvePoint { x, y, is_infinite: point_array[2] == 1 }\n}\n\n#[foreign(embedded_curve_add)]\nfn embedded_curve_add_array_return(_point1: EmbeddedCurvePoint, _point2: EmbeddedCurvePoint) -> [Field; 3] {}\n"},"23":{"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: [u8; 32] = x.to_le_bytes();\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 pub(crate) 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: [u8; 32] = x.to_le_bytes();\n let y_bytes: [u8; 32] = y.to_le_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 unsafe {\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\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 unsafe {\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}\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 unsafe {\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}\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, compute_lt, assert_gt, gt, 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"},"24":{"path":"std/field/mod.nr","source":"mod bn254;\nuse bn254::lt as bn254_lt;\n\nimpl Field {\n /// Asserts that `self` can be represented in `bit_size` bits.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{bit_size}`.\n // docs:start:assert_max_bit_size\n pub fn assert_max_bit_size(self, bit_size: u32) {\n // docs:end:assert_max_bit_size\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 #[builtin(apply_range_constraint)]\n fn __assert_max_bit_size(self, bit_size: u32) {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n /// \n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_le_bits)]\n // docs:start:to_le_bits\n pub fn to_le_bits<let N: u32>(self: Self) -> [u1; N] {}\n // docs:end:to_le_bits\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n /// \n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_be_bits)]\n // docs:start:to_be_bits\n pub fn to_be_bits<let N: u32>(self: Self) -> [u1; N] {}\n // docs:end:to_be_bits\n\n /// Decomposes `self` into its little endian byte decomposition as a `[u8]` slice of length `byte_size`.\n /// This slice will be zero padded should not all bytes be necessary to represent `self`.\n /// \n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{8*byte_size}` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `byte_size` equal to or greater than the number of bytes necessary to represent the `Field` modulus\n /// (e.g. 32 for the BN254 field) allow for multiple byte decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n // docs:start:to_le_bytes\n pub fn to_le_bytes<let N: u32>(self: Self) -> [u8; N] {\n self.to_le_radix(256)\n }\n // docs:end:to_le_bytes\n\n /// Decomposes `self` into its big endian byte decomposition as a `[u8]` slice of length `byte_size`.\n /// This slice will be zero padded should not all bytes be necessary to represent `self`.\n /// \n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{8*byte_size}` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `byte_size` equal to or greater than the number of bytes necessary to represent the `Field` modulus\n /// (e.g. 32 for the BN254 field) allow for multiple byte decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n // docs:start:to_be_bytes\n pub fn to_be_bytes<let N: u32>(self: Self) -> [u8; N] {\n self.to_be_radix(256)\n }\n // docs:end:to_be_bytes\n\n // docs:start:to_le_radix\n pub fn to_le_radix<let N: u32>(self: Self, radix: u32) -> [u8; N] {\n crate::assert_constant(radix);\n self.__to_le_radix(radix)\n }\n // docs:end:to_le_radix\n\n // docs:start:to_be_radix\n pub fn to_be_radix<let N: u32>(self: Self, radix: u32) -> [u8; N] {\n crate::assert_constant(radix);\n self.__to_be_radix(radix)\n }\n // docs:end:to_be_radix\n\n // `_radix` must be less than 256\n #[builtin(to_le_radix)]\n fn __to_le_radix<let N: u32>(self, radix: u32) -> [u8; N] {}\n\n #[builtin(to_be_radix)]\n fn __to_be_radix<let N: u32>(self, radix: u32) -> [u8; N] {}\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: [u1; 32] = exponent.to_le_bits();\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 comptime fn modulus_num_bits() -> u64 {}\n\n#[builtin(modulus_be_bits)]\npub comptime fn modulus_be_bits() -> [u1] {}\n\n#[builtin(modulus_le_bits)]\npub comptime fn modulus_le_bits() -> [u1] {}\n\n#[builtin(modulus_be_bytes)]\npub comptime fn modulus_be_bytes() -> [u8] {}\n\n#[builtin(modulus_le_bytes)]\npub comptime fn modulus_le_bytes() -> [u8] {}\n\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 x_bytes: [u8; 32] = x.to_le_bytes();\n let y_bytes: [u8; 32] = y.to_le_bytes();\n let mut x_is_lt = false;\n let mut done = false;\n for i in 0..32 {\n if (!done) {\n let x_byte = x_bytes[32 - 1 - i] as u8;\n let y_byte = y_bytes[32 - 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\nmod tests {\n #[test]\n // docs:start:to_be_bits_example\n fn test_to_be_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_be_bits();\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 1, 0]);\n }\n // docs:end:to_be_bits_example\n\n #[test]\n // docs:start:to_le_bits_example\n fn test_to_le_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_le_bits();\n assert_eq(bits, [0, 1, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_bits_example\n\n #[test]\n // docs:start:to_be_bytes_example\n fn test_to_be_bytes() {\n let field = 2;\n let bits: [u8; 8] = field.to_be_bytes();\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 0, 2]);\n }\n // docs:end:to_be_bytes_example\n\n #[test]\n // docs:start:to_le_bytes_example\n fn test_to_le_bytes() {\n let field = 2;\n let bits: [u8; 8] = field.to_le_bytes();\n assert_eq(bits, [2, 0, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_bytes_example\n\n #[test]\n // docs:start:to_be_radix_example\n fn test_to_be_radix() {\n let field = 2;\n let bits: [u8; 8] = field.to_be_radix(256);\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 0, 2]);\n }\n // docs:end:to_be_radix_example\n\n #[test]\n // docs:start:to_le_radix_example\n fn test_to_le_radix() {\n let field = 2;\n let bits: [u8; 8] = field.to_le_radix(256);\n assert_eq(bits, [2, 0, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_radix_example\n}\n"},"249":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/data/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 : u32,\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 crate::hash::poseidon2_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"},"256":{"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\nmod test {\n use crate::{address::AztecAddress, storage::map::derive_storage_slot_in_map};\n\n #[test]\n fn test_derive_storage_slot_in_map_matches_typescript() {\n let map_slot = 0x132258fb6962c4387ba659d9556521102d227549a386d39f0b22d1890d59c2b5;\n let key = AztecAddress::from_field(0x302dbc2f9b50a73283d5fb2f35bc01eae8935615817a0b4219a057b2ba8a5a3f);\n\n let slot = derive_storage_slot_in_map(map_slot, key);\n\n // The following value was generated by `map_slot.test.ts`\n let slot_from_typescript = 0x2499880e2b1b831785c17286f99a0d5122fee784ce7b1c04e380c4a991da819a;\n\n assert_eq(slot, slot_from_typescript);\n }\n}\n"},"262":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/traits.nr","source":"use 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, let N: u32>(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<let N: u32> 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<let N: u32> {\n fn serialize(self) -> [Field; N];\n}\n// docs:end:serialize\n\nimpl<let N: u32> Serialize<N> for [Field; N] {\n fn serialize(self) -> [Field; N] {\n self\n }\n}\nimpl<let N: u32> 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<let N: u32> {\n fn deserialize(fields: [Field; N]) -> Self;\n}\n// docs:end:deserialize\n\nimpl<let N: u32> Deserialize<N> for [Field; N] {\n fn deserialize(fields: [Field; N]) -> Self {\n fields\n }\n}\n"},"263":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/debug_log.nr","source":"// Utility function to console.log data in the acir simulator\n// WARNING: sometimes when using debug logs the ACVM errors with: `thrown: \"solver opcode resolution error: cannot solve opcode: expression has too many unknowns x155\"`\n\n#[oracle(debugLog)]\nunconstrained fn debug_log_oracle<let M: u32>(_msg: str<M>, args: [Field]) {}\n\n/// NOTE: call this with a str<N> msg of form\n/// \"some string with {0} and {1} ... {N}\"\n/// and an array of N field which will be formatted\n/// into the string in the simulator.\n/// Example:\n/// debug_log_format(\"get_2(slot:{0}) =>\\n\\t0:{1}\\n\\t1:{2}\", [storage_slot, note0_hash, note1_hash]);\n/// debug_log_format(\"whole array: {}\", [e1, e2, e3, e4]);\nunconstrained pub fn debug_log_format<let M: u32, let N: u32>(msg: str<M>, args: [Field; N]) {\n debug_log_oracle(msg, args.as_slice());\n}\n\n/// NOTE: call this with a str<N> msg of length > 1\n/// Example:\n/// `debug_log(\"blah blah this is a debug string\");`\nunconstrained pub fn debug_log<let N: u32>(msg: str<N>) {\n debug_log_format(msg, []);\n}\n"},"267":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr","source":"use crate::{\n abis::{\n contract_class_function_leaf_preimage::ContractClassFunctionLeafPreimage,\n function_selector::FunctionSelector, log_hash::{LogHash, ScopedLogHash, ScopedEncryptedLogHash},\n note_hash::ScopedNoteHash, nullifier::ScopedNullifier\n},\n address::{AztecAddress, EthAddress},\n 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},\n merkle_tree::root::root_from_sibling_path,\n messaging::l2_to_l1_message::{L2ToL1Message, ScopedL2ToL1Message},\n recursion::verification_key::VerificationKey, traits::{is_empty, ToField},\n utils::field::field_from_bytes_32_trunc\n};\n\npub fn sha256_to_field<let N: u32>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = std::hash::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\nfn compute_note_hash_nonce(tx_hash: Field, note_index_in_tx: u32) -> Field {\n // Hashing tx hash with note index in tx is guaranteed to be unique\n poseidon2_hash_with_separator(\n [\n tx_hash,\n note_index_in_tx 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 let inputs = [nonce, note_hash];\n poseidon2_hash_with_separator(inputs, GENERATOR_INDEX__UNIQUE_NOTE_HASH)\n}\n\npub fn compute_siloed_note_hash(app: AztecAddress, unique_note_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [\n app.to_field(),\n unique_note_hash\n ],\n GENERATOR_INDEX__SILOED_NOTE_HASH\n )\n}\n\n/// Siloing in the context of Aztec refers to the process of hashing a note hash with a contract address (this way\n/// the note hash is scoped to a specific contract). This is used to prevent intermingling of notes between contracts.\npub fn silo_note_hash(note_hash: ScopedNoteHash, tx_hash: Field, note_index_in_tx: u32) -> Field {\n if note_hash.contract_address.is_zero() {\n 0\n } else {\n let nonce = compute_note_hash_nonce(tx_hash, note_index_in_tx);\n let unique_note_hash = compute_unique_note_hash(nonce, note_hash.value());\n compute_siloed_note_hash(note_hash.contract_address, unique_note_hash)\n }\n}\n\npub fn compute_siloed_nullifier(app: AztecAddress, nullifier: Field) -> Field {\n poseidon2_hash_with_separator(\n [\n app.to_field(),\n nullifier\n ],\n GENERATOR_INDEX__OUTER_NULLIFIER\n )\n}\n\npub fn silo_nullifier(nullifier: ScopedNullifier) -> Field {\n if nullifier.contract_address.is_zero() {\n nullifier.value() // Return value instead of 0 because the first nullifier's contract address is zero.\n } else {\n compute_siloed_nullifier(nullifier.contract_address, nullifier.value())\n }\n}\n\npub fn silo_encrypted_log_hash(log_hash: ScopedLogHash) -> Field {\n // We assume contract address has already been masked\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n accumulate_sha256([log_hash.contract_address.to_field(), log_hash.log_hash.value])\n }\n}\n\npub fn mask_encrypted_log_hash(scoped_log: ScopedEncryptedLogHash) -> AztecAddress {\n if scoped_log.contract_address.is_zero() {\n AztecAddress::from_field(0)\n } else if (scoped_log.log_hash.randomness == 0) {\n scoped_log.contract_address\n } else {\n AztecAddress::from_field(\n poseidon2_hash_with_separator(\n [scoped_log.contract_address.to_field(), scoped_log.log_hash.randomness],\n 0\n )\n )\n }\n}\n\nfn compute_siloed_unencrypted_log_hash(address: AztecAddress, log_hash: Field) -> Field {\n accumulate_sha256([address.to_field(), log_hash])\n}\n\npub fn silo_unencrypted_log_hash(log_hash: ScopedLogHash) -> Field {\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n compute_siloed_unencrypted_log_hash(log_hash.contract_address, log_hash.value())\n }\n}\n\npub fn merkle_hash(left: Field, right: Field) -> Field {\n poseidon2_hash([left, right])\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 recipient: EthAddress,\n content: Field,\n rollup_version_id: Field,\n chain_id: Field\n) -> Field {\n let mut bytes: BoundedVec<u8, 160> = BoundedVec::new();\n\n let inputs = [contract_address.to_field(), rollup_version_id, recipient.to_field(), chain_id, content];\n for i in 0..inputs.len() {\n // TODO are bytes be in fr.to_buffer() ?\n let item_bytes: [u8; 32] = inputs[i].to_be_bytes();\n for j in 0..32 {\n bytes.push(item_bytes[j]);\n }\n }\n\n sha256_to_field(bytes.storage)\n}\n\npub fn silo_l2_to_l1_message(msg: ScopedL2ToL1Message, rollup_version_id: Field, chain_id: Field) -> Field {\n if msg.contract_address.is_zero() {\n 0\n } else {\n compute_l2_to_l1_hash(\n msg.contract_address,\n msg.message.recipient,\n msg.message.content,\n rollup_version_id,\n chain_id\n )\n }\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: [u8; 32] = input[offset].to_be_bytes();\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: [u8; 32] = logs[offset].value.to_be_bytes();\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: [u8; 32] = logs[offset].value.to_be_bytes();\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<let N: u32>(inputs: [Field; N], hash_index: u32) -> Field {\n std::hash::pedersen_hash_with_separator(inputs, hash_index)\n}\n\npub fn poseidon2_hash<let N: u32>(inputs: [Field; N]) -> Field {\n std::hash::poseidon2::Poseidon2::hash(inputs, N)\n}\n\n#[no_predicates]\npub fn poseidon2_hash_with_separator<let N: u32, T>(\n inputs: [Field; N],\n separator: T\n) -> Field where T: ToField {\n // We manually hash the inputs here, since we cannot express with the type system a constant size inputs array of N + 1\n let in_len = N + 1;\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = std::hash::poseidon2::Poseidon2::new(iv);\n sponge.absorb(separator.to_field());\n\n for i in 0..inputs.len() {\n sponge.absorb(inputs[i]);\n }\n\n sponge.squeeze()\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 = std::hash::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), EthAddress::zero(), 0, 0, 0);\n assert(hash_result == 0xb393978842a0fa3d3e1470196f098f473f9678e72463cb65ec4ab5581856c2);\n\n // Non-zero case\n let hash_result = compute_l2_to_l1_hash(AztecAddress::from_field(1), EthAddress::from_field(3), 5, 2, 4);\n assert(hash_result == 0x3f88c1044a05e5340ed20466276500f6d45ca5603913b9091e957161734e16);\n}\n\n#[test]\nfn silo_l2_to_l1_message_matches_typescript() {\n let version = 4;\n let chainId = 5;\n\n let hash = silo_l2_to_l1_message(\n ScopedL2ToL1Message {\n message: L2ToL1Message { recipient: EthAddress::from_field(1), content: 2, counter: 0 },\n contract_address: AztecAddress::from_field(3)\n },\n version,\n chainId\n );\n\n // The following value was generated by `l2_to_l1_message.test.ts`\n let hash_from_typescript = 0x00c6155d69febb9d5039b374dd4f77bf57b7c881709aa524a18acaa0bd57476a;\n\n assert_eq(hash, hash_from_typescript);\n}\n"},"27":{"path":"std/hash/mod.nr","source":"mod poseidon;\nmod mimc;\nmod poseidon2;\nmod keccak;\nmod sha256;\nmod sha512;\n\nuse crate::default::Default;\nuse crate::uint128::U128;\nuse crate::collections::vec::Vec;\nuse crate::embedded_curve_ops::{EmbeddedCurvePoint, EmbeddedCurveScalar, multi_scalar_mul, multi_scalar_mul_slice};\nuse crate::meta::derive_via;\n\n// Kept for backwards compatibility\npub use sha256::{digest, sha256, sha256_compression, sha256_var};\n\n#[foreign(blake2s)]\n// docs:start:blake2s\npub fn blake2s<let N: u32>(input: [u8; N]) -> [u8; 32]\n// docs:end:blake2s\n{}\n\n#[foreign(blake3)]\n// docs:start:blake3\npub fn blake3<let N: u32>(input: [u8; N]) -> [u8; 32]\n// docs:end:blake3\n{}\n\n// docs:start:pedersen_commitment\npub fn pedersen_commitment<let N: u32>(input: [Field; N]) -> EmbeddedCurvePoint {\n // docs:end:pedersen_commitment\n pedersen_commitment_with_separator(input, 0)\n}\n\npub fn pedersen_hash_with_separator<let N: u32>(input: [Field; N], separator: u32) -> Field {\n __pedersen_hash_with_separator(input, separator)\n}\n\nfn pedersen_commitment_with_separator<let N: u32>(input: [Field; N], separator: u32) -> EmbeddedCurvePoint {\n let value = __pedersen_commitment_with_separator(input, separator);\n if (value[0] == 0) & (value[1] == 0) {\n EmbeddedCurvePoint { x: 0, y: 0, is_infinite: true }\n } else {\n EmbeddedCurvePoint { x: value[0], y: value[1], is_infinite: false }\n }\n}\n\n#[no_predicates]\nfn pedersen_commitment_with_separator_noir<let N: u32>(input: [Field; N], separator: u32) -> EmbeddedCurvePoint {\n let mut points = [EmbeddedCurveScalar { lo: 0, hi: 0 }; N];\n for i in 0..N {\n // we use the unsafe version because the multi_scalar_mul will constrain the scalars.\n points[i] = from_field_unsafe(input[i]);\n }\n let generators = derive_generators(\"DEFAULT_DOMAIN_SEPARATOR\".as_bytes(), separator);\n multi_scalar_mul(generators, points)\n}\n\n#[no_predicates]\nfn pedersen_hash_with_separator_noir<let N: u32>(input: [Field; N], separator: u32) -> Field {\n let mut scalars: Vec<EmbeddedCurveScalar> = Vec::from_slice([EmbeddedCurveScalar { lo: 0, hi: 0 }; N].as_slice()); //Vec::new();\n\n for i in 0..N {\n scalars.set(i, from_field_unsafe(input[i]));\n }\n scalars.push(EmbeddedCurveScalar { lo: N as Field, hi: 0 as Field });\n let domain_generators :[EmbeddedCurvePoint; N]= derive_generators(\"DEFAULT_DOMAIN_SEPARATOR\".as_bytes(), separator);\n let mut vec_generators = Vec::new();\n for i in 0..N {\n vec_generators.push(domain_generators[i]);\n }\n let length_generator : [EmbeddedCurvePoint; 1] = derive_generators(\"pedersen_hash_length\".as_bytes(), 0);\n vec_generators.push(length_generator[0]);\n multi_scalar_mul_slice(vec_generators.slice, scalars.slice)[0]\n}\n\n// docs:start:pedersen_hash\npub fn pedersen_hash<let N: u32>(input: [Field; N]) -> Field\n// docs:end:pedersen_hash\n{\n __pedersen_hash_with_separator(input, 0)\n}\n\n#[foreign(pedersen_hash)]\nfn __pedersen_hash_with_separator<let N: u32>(input: [Field; N], separator: u32) -> Field {}\n\n#[foreign(pedersen_commitment)]\nfn __pedersen_commitment_with_separator<let N: u32>(input: [Field; N], separator: u32) -> [Field; 2] {}\n\n#[field(bn254)]\nfn derive_generators<let N: u32, let M: u32>(domain_separator_bytes: [u8; M], starting_index: u32) -> [EmbeddedCurvePoint; N] {\n crate::assert_constant(domain_separator_bytes);\n // TODO(https://github.com/noir-lang/noir/issues/5672): Add back assert_constant on starting_index\n __derive_generators(domain_separator_bytes, starting_index)\n}\n\n#[builtin(derive_pedersen_generators)]\n#[field(bn254)]\nfn __derive_generators<let N: u32, let M: u32>(\n domain_separator_bytes: [u8; M],\n starting_index: u32\n) -> [EmbeddedCurvePoint; N] {}\n\n#[field(bn254)]\n // Same as from_field but:\n // does not assert the limbs are 128 bits\n // does not assert the decomposition does not overflow the EmbeddedCurveScalar\n fn from_field_unsafe(scalar: Field) -> EmbeddedCurveScalar {\n let (xlo, xhi) = unsafe {\n crate::field::bn254::decompose_hint(scalar)\n };\n // Check that the decomposition is correct\n assert_eq(scalar, xlo + crate::field::bn254::TWO_POW_128 * xhi);\n EmbeddedCurveScalar { lo: xlo, hi: xhi }\n}\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();\n sum += crate::field::bytes32_to_field(blake2s(input_bytes));\n }\n\n sum\n}\n\n// docs:start:keccak256\npub fn keccak256<let N: u32>(input: [u8; N], message_size: u32) -> [u8; 32]\n// docs:end:keccak256\n{\n crate::hash::keccak::keccak256(input, message_size)\n}\n\n#[foreign(poseidon2_permutation)]\npub fn poseidon2_permutation<let N: u32>(_input: [Field; N], _state_length: u32) -> [Field; N] {}\n\n// Generic hashing support. \n// Partially ported and impacted by rust.\n\n// Hash trait shall be implemented per type.\n#[derive_via(derive_hash)]\ntrait Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher;\n}\n\n// docs:start:derive_hash\ncomptime fn derive_hash(s: StructDefinition) -> Quoted {\n let name = quote { Hash };\n let signature = quote { fn hash<H>(_self: Self, _state: &mut H) where H: std::hash::Hasher };\n let for_each_field = |name| quote { _self.$name.hash(_state); };\n crate::meta::make_trait_impl(s, name, signature, for_each_field, quote {}, |fields| fields)\n}\n// docs:end:derive_hash\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 u1 {\n fn hash<H>(self, state: &mut H) where H: Hasher{\n H::write(state, self as Field);\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 u16 {\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 i16 {\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, let N: u32> 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\n// Some test vectors for Pedersen hash and Pedersen Commitment.\n// They have been generated using the same functions so the tests are for now useless\n// but they will be useful when we switch to Noir implementation.\n#[test]\nfn assert_pedersen() {\n assert_eq(\n pedersen_hash_with_separator([1], 1), 0x1b3f4b1a83092a13d8d1a59f7acb62aba15e7002f4440f2275edb99ebbc2305f\n );\n assert_eq(\n pedersen_commitment_with_separator([1], 1), EmbeddedCurvePoint {\n x: 0x054aa86a73cb8a34525e5bbed6e43ba1198e860f5f3950268f71df4591bde402,\n y: 0x209dcfbf2cfb57f9f6046f44d71ac6faf87254afc7407c04eb621a6287cac126,\n is_infinite: false\n }\n );\n\n assert_eq(\n pedersen_hash_with_separator([1, 2], 2), 0x26691c129448e9ace0c66d11f0a16d9014a9e8498ee78f4d69f0083168188255\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2], 2), EmbeddedCurvePoint {\n x: 0x2e2b3b191e49541fe468ec6877721d445dcaffe41728df0a0eafeb15e87b0753,\n y: 0x2ff4482400ad3a6228be17a2af33e2bcdf41be04795f9782bd96efe7e24f8778,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3], 3), 0x0bc694b7a1f8d10d2d8987d07433f26bd616a2d351bc79a3c540d85b6206dbe4\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3], 3), EmbeddedCurvePoint {\n x: 0x1fee4e8cf8d2f527caa2684236b07c4b1bad7342c01b0f75e9a877a71827dc85,\n y: 0x2f9fedb9a090697ab69bf04c8bc15f7385b3e4b68c849c1536e5ae15ff138fd1,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4], 4), 0xdae10fb32a8408521803905981a2b300d6a35e40e798743e9322b223a5eddc\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4], 4), EmbeddedCurvePoint {\n x: 0x07ae3e202811e1fca39c2d81eabe6f79183978e6f12be0d3b8eda095b79bdbc9,\n y: 0x0afc6f892593db6fbba60f2da558517e279e0ae04f95758587760ba193145014,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5], 5), 0xfc375b062c4f4f0150f7100dfb8d9b72a6d28582dd9512390b0497cdad9c22\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5], 5), EmbeddedCurvePoint {\n x: 0x1754b12bd475a6984a1094b5109eeca9838f4f81ac89c5f0a41dbce53189bb29,\n y: 0x2da030e3cfcdc7ddad80eaf2599df6692cae0717d4e9f7bfbee8d073d5d278f7,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6], 6), 0x1696ed13dc2730062a98ac9d8f9de0661bb98829c7582f699d0273b18c86a572\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6], 6), EmbeddedCurvePoint {\n x: 0x190f6c0e97ad83e1e28da22a98aae156da083c5a4100e929b77e750d3106a697,\n y: 0x1f4b60f34ef91221a0b49756fa0705da93311a61af73d37a0c458877706616fb,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7], 7), 0x128c0ff144fc66b6cb60eeac8a38e23da52992fc427b92397a7dffd71c45ede3\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7], 7), EmbeddedCurvePoint {\n x: 0x015441e9d29491b06563fac16fc76abf7a9534c715421d0de85d20dbe2965939,\n y: 0x1d2575b0276f4e9087e6e07c2cb75aa1baafad127af4be5918ef8a2ef2fea8fc,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8], 8), 0x2f960e117482044dfc99d12fece2ef6862fba9242be4846c7c9a3e854325a55c\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8], 8), EmbeddedCurvePoint {\n x: 0x1657737676968887fceb6dd516382ea13b3a2c557f509811cd86d5d1199bc443,\n y: 0x1f39f0cb569040105fa1e2f156521e8b8e08261e635a2b210bdc94e8d6d65f77,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9], 9), 0x0c96db0790602dcb166cc4699e2d306c479a76926b81c2cb2aaa92d249ec7be7\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9], 9), EmbeddedCurvePoint {\n x: 0x0a3ceae42d14914a432aa60ec7fded4af7dad7dd4acdbf2908452675ec67e06d,\n y: 0xfc19761eaaf621ad4aec9a8b2e84a4eceffdba78f60f8b9391b0bd9345a2f2,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 10), 0x2cd37505871bc460a62ea1e63c7fe51149df5d0801302cf1cbc48beb8dff7e94\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 10), EmbeddedCurvePoint {\n x: 0x2fb3f8b3d41ddde007c8c3c62550f9a9380ee546fcc639ffbb3fd30c8d8de30c,\n y: 0x300783be23c446b11a4c0fabf6c91af148937cea15fcf5fb054abf7f752ee245,\n is_infinite: false\n }\n );\n}\n\n"},"273":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/point.nr","source":"pub use dep::std::embedded_curve_ops::EmbeddedCurvePoint as Point;\nuse crate::{traits::{Empty, Hash, Serialize}, hash::poseidon2_hash};\n\nglobal POINT_LENGTH: Field = 3;\n\nimpl Serialize<POINT_LENGTH> for Point {\n fn serialize(self: Self) -> [Field; POINT_LENGTH] {\n [self.x, self.y, self.is_infinite as Field]\n }\n}\n\nimpl Hash for Point {\n fn hash(self) -> Field {\n poseidon2_hash(self.serialize())\n }\n}\n\nimpl Empty for Point {\n /// Note: Does not return a valid point on curve - instead represents an empty/\"unpopulated\" point struct (e.g.\n /// empty/unpopulated value in an array of points).\n fn empty() -> Self {\n Point {\n x: 0,\n y: 0,\n is_infinite: false\n }\n }\n}\n"},"274":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/contract_instance.nr","source":"use crate::{\n address::{aztec_address::AztecAddress, partial_address::PartialAddress, public_keys_hash::PublicKeysHash},\n contract_class_id::ContractClassId, constants::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"},"286":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/merkle_tree/root.nr","source":"use crate::{hash::merkle_hash, merkle_tree::merkle_tree::MerkleTree};\n\n// Calculate the Merkle tree root from the sibling path and leaf.\n//\n// The leaf is hashed with its sibling, and then the result is hashed\n// with the next sibling etc in the path. The last hash is the root.\n//\n// TODO(David/Someone): The cpp code is using a uint256, whereas its\n// TODO a bit simpler in Noir to just have a bit array.\n// TODO: I'd generally like to avoid u256 for algorithms like\n// this because it means we never even need to consider cases where\n// the index is greater than p.\npub fn root_from_sibling_path<let N: u32>(\n leaf: Field,\n leaf_index: Field,\n sibling_path: [Field; N]\n) -> Field {\n let mut node = leaf;\n let indices: [u1; N] = leaf_index.to_le_bits();\n\n for i in 0..N {\n let (hash_left, hash_right) = if indices[i] == 1 {\n (sibling_path[i], node)\n } else {\n (node, sibling_path[i])\n };\n node = merkle_hash(hash_left, hash_right);\n }\n node\n}\n\npub fn calculate_subtree_root<let N: u32>(leaves: [Field; N]) -> Field {\n MerkleTree::new(leaves).get_root()\n}\n\n// These values are precomputed and we run tests to ensure that they\n// are correct. The values themselves were computed from the cpp code.\n//\n// Would be good if we could use width since the compute_subtree\n// algorithm uses depth.\npub fn calculate_empty_tree_root(depth: u32) -> Field {\n if depth == 0 {\n 0\n } else if depth == 1 {\n 0x0b63a53787021a4a962a452c2921b3663aff1ffd8d5510540f8e659e782956f1\n } else if depth == 2 {\n 0x0e34ac2c09f45a503d2908bcb12f1cbae5fa4065759c88d501c097506a8b2290\n } else if depth == 3 {\n 0x21f9172d72fdcdafc312eee05cf5092980dda821da5b760a9fb8dbdf607c8a20\n } else if depth == 4 {\n 0x2373ea368857ec7af97e7b470d705848e2bf93ed7bef142a490f2119bcf82d8e\n } else if depth == 5 {\n 0x120157cfaaa49ce3da30f8b47879114977c24b266d58b0ac18b325d878aafddf\n } else if depth == 6 {\n 0x01c28fe1059ae0237b72334700697bdf465e03df03986fe05200cadeda66bd76\n } else if depth == 7 {\n 0x2d78ed82f93b61ba718b17c2dfe5b52375b4d37cbbed6f1fc98b47614b0cf21b\n } else if depth == 8 {\n 0x067243231eddf4222f3911defbba7705aff06ed45960b27f6f91319196ef97e1\n } else if depth == 9 {\n 0x1849b85f3c693693e732dfc4577217acc18295193bede09ce8b97ad910310972\n } else if depth == 10 {\n 0x2a775ea761d20435b31fa2c33ff07663e24542ffb9e7b293dfce3042eb104686\n } else {\n assert(false, \"depth should be between 0 and 10\");\n 0\n }\n}\n\n#[test]\nfn test_merkle_root_interop_test() {\n // This is a test to ensure that we match the cpp implementation.\n // You can grep for `TEST_F(root_rollup_tests, noir_interop_test)`\n // to find the test that matches this.\n let root = calculate_subtree_root([1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]);\n assert(0x1a09d935ae110b4c861fcec8f9099ec30b4485022aeb3d3cf9d7168e38fdc231 == root);\n\n let empty_root = calculate_subtree_root([0; 16]);\n assert(0x2373ea368857ec7af97e7b470d705848e2bf93ed7bef142a490f2119bcf82d8e == empty_root);\n}\n\n#[test]\nfn test_empty_subroot() {\n assert(calculate_empty_tree_root(0) == 0);\n\n let expected_empty_root_2 = calculate_subtree_root([0; 2]);\n assert(calculate_empty_tree_root(1) == expected_empty_root_2);\n\n let expected_empty_root_4 = calculate_subtree_root([0; 4]);\n assert(calculate_empty_tree_root(2) == expected_empty_root_4);\n\n let expected_empty_root_8 = calculate_subtree_root([0; 8]);\n assert(calculate_empty_tree_root(3) == expected_empty_root_8);\n\n let expected_empty_root_16 = calculate_subtree_root([0; 16]);\n assert(calculate_empty_tree_root(4) == expected_empty_root_16);\n\n let expected_empty_root_32 = calculate_subtree_root([0; 32]);\n assert(calculate_empty_tree_root(5) == expected_empty_root_32);\n\n let expected_empty_root_64 = calculate_subtree_root([0; 64]);\n assert(calculate_empty_tree_root(6) == expected_empty_root_64);\n\n let expected_empty_root_128 = calculate_subtree_root([0; 128]);\n assert(calculate_empty_tree_root(7) == expected_empty_root_128);\n\n let expected_empty_root_256 = calculate_subtree_root([0; 256]);\n assert(calculate_empty_tree_root(8) == expected_empty_root_256);\n\n let expected_empty_root_512 = calculate_subtree_root([0; 512]);\n assert(calculate_empty_tree_root(9) == expected_empty_root_512);\n\n let expected_empty_root_1024 = calculate_subtree_root([0; 1024]);\n assert(calculate_empty_tree_root(10) == expected_empty_root_1024);\n}\n"},"290":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/utils/reader.nr","source":"struct Reader<let N: u32> {\n data: [Field; N],\n offset: u32,\n}\n\nimpl<let N: u32> 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<let K: u32>(&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, let K: u32>(&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, let K: u32, let C: u32>(&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"},"308":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/utils/field.nr","source":"pub fn field_from_bytes<let N: u32>(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: [u8; 31] = field.to_be_bytes();\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: [u8; 31] = field.to_be_bytes();\n\n for i in 0..31 {\n assert_eq(return_bytes2[i], return_bytes[i]);\n }\n assert_eq(field2, field);\n}\n\n#[test]\nunconstrained fn max_field_test() {\n // Tests the hardcoded value in constants.nr vs underlying modulus\n // NB: We can't use 0-1 in constants.nr as it will be transpiled incorrectly to ts and sol constants files\n let max_value = crate::constants::MAX_FIELD_VALUE;\n assert_eq(max_value, 0 - 1);\n // modulus == 0 is tested elsewhere, so below is more of a sanity check\n let max_bytes: [u8; 32] = max_value.to_be_bytes();\n let mod_bytes = std::field::modulus_be_bytes();\n for i in 0..31 {\n assert_eq(max_bytes[i], mod_bytes[i]);\n }\n assert_eq(max_bytes[31], mod_bytes[31] - 1);\n}\n"},"310":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/utils/mod.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, let N: u32, let M: u32>(src: [T; N], mut dst: [T; M], offset: u32) -> [T; M] {\n let iterator_len = if N > M { M } else { N };\n for i in 0..iterator_len {\n dst[i] = src[i + offset];\n }\n dst\n}\n"},"32":{"path":"std/hash/poseidon2.nr","source":"use crate::hash::Hasher;\nuse crate::default::Default;\n\ncomptime global 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 #[no_predicates]\n pub fn hash<let N: u32>(input: [Field; N], message_size: u32) -> 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) {\n // add the cache into sponge state\n for i in 0..RATE {\n // We effectively zero-pad the cache by only adding to the state\n // cache that is less than the specified `cache_size`\n if i < self.cache_size {\n self.state[i] += self.cache[i];\n }\n }\n self.state = crate::hash::poseidon2_permutation(self.state, 4);\n }\n\n fn absorb(&mut self, input: Field) {\n assert(!self.squeeze_mode);\n if self.cache_size == RATE {\n // If we're absorbing, and the cache is full, apply the sponge permutation to compress the cache\n self.perform_duplex();\n self.cache[0] = input;\n self.cache_size = 1;\n } else {\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 }\n }\n\n fn squeeze(&mut self) -> Field {\n assert(!self.squeeze_mode);\n // If we're in absorb mode, apply sponge permutation to compress the cache.\n self.perform_duplex();\n self.squeeze_mode = true;\n\n // Pop one item off the top of the permutation and return it.\n self.state[0]\n }\n\n fn hash_internal<let N: u32>(input: [Field; N], in_len: u32, 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"},"323":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/aztec_address.nr","source":"use crate::{\n crate::address::{partial_address::PartialAddress, public_keys_hash::PublicKeysHash},\n constants::{AZTEC_ADDRESS_LENGTH, GENERATOR_INDEX__CONTRACT_ADDRESS_V1},\n hash::poseidon2_hash_with_separator, traits::{Empty, FromField, ToField, Serialize, Deserialize},\n 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_with_separator(\n [pub_keys_hash.to_field(), partial_address.to_field()],\n GENERATOR_INDEX__CONTRACT_ADDRESS_V1\n )\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 = 0x23ce9be3fa3c846b0f9245cc796902e731d04f086e8a42473bb29e405fc98075;\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"},"325":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/partial_address.nr","source":"use crate::{\n address::{salted_initialization_hash::SaltedInitializationHash, aztec_address::AztecAddress},\n constants::GENERATOR_INDEX__PARTIAL_ADDRESS, contract_class_id::ContractClassId,\n hash::poseidon2_hash_with_separator, traits::{ToField, 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 poseidon2_hash_with_separator(\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"},"326":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/salted_initialization_hash.nr","source":"use crate::{\n address::{aztec_address::AztecAddress}, constants::GENERATOR_INDEX__PARTIAL_ADDRESS,\n hash::poseidon2_hash_with_separator, 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 poseidon2_hash_with_separator(\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"},"388":{"path":"/usr/src/noir-projects/noir-contracts/contracts/ecdsa_public_key_note/src/lib.nr","source":"use dep::aztec::prelude::{AztecAddress, FunctionSelector, NoteHeader, NoteInterface, NoteGetterOptions, PrivateContext};\n\nuse dep::aztec::{\n note::utils::compute_note_hash_for_nullify, keys::getters::get_nsk_app,\n protocol_types::{constants::GENERATOR_INDEX__NOTE_NULLIFIER, hash::poseidon2_hash_with_separator}\n};\n\nglobal ECDSA_PUBLIC_KEY_NOTE_LEN: Field = 5;\n// ECDSA_PUBLIC_KEY_NOTE_LEN * 32 + 32(storage_slot as bytes) + 32(note_type_id as bytes)\nglobal ECDSA_PUBLIC_KEY_NOTE_BYTES_LEN: Field = 5 * 32 + 64;\n\n// Stores an ECDSA public key composed of two 32-byte elements\n// TODO: Do we need to include a nonce, in case we want to read/nullify/recreate with the same pubkey value?\n#[aztec(note)]\nstruct EcdsaPublicKeyNote {\n x: [u8; 32],\n y: [u8; 32],\n // We store the npk_m_hash only to get the secret key to compute the nullifier\n npk_m_hash: Field,\n}\n\nimpl NoteInterface<ECDSA_PUBLIC_KEY_NOTE_LEN, ECDSA_PUBLIC_KEY_NOTE_BYTES_LEN> for EcdsaPublicKeyNote {\n // Cannot use the automatic serialization since x and y don't fit. Serialize the note as 5 fields where:\n // [0] = x[0..31] (upper bound excluded)\n // [1] = x[31]\n // [2] = y[0..31]\n // [3] = y[31]\n // [4] = npk_m_hash\n fn serialize_content(self) -> [Field; ECDSA_PUBLIC_KEY_NOTE_LEN] {\n let mut x: Field = 0;\n let mut y: Field = 0;\n let mut mul: Field = 1;\n\n for i in 1..32 {\n let byte_x: Field = self.x[31 - i] as Field;\n x = x + (byte_x * mul);\n let byte_y: Field = self.y[31 - i] as Field;\n y = y + (byte_y * mul);\n mul *= 256;\n }\n\n let last_x = self.x[31] as Field;\n let last_y = self.y[31] as Field;\n\n [x, last_x, y, last_y, self.npk_m_hash]\n }\n\n // Cannot use the automatic deserialization for the aforementioned reasons\n fn deserialize_content(serialized_note: [Field; ECDSA_PUBLIC_KEY_NOTE_LEN]) -> EcdsaPublicKeyNote {\n let mut x: [u8; 32] = [0; 32];\n let mut y: [u8; 32] = [0; 32];\n\n let part_x:[u8; 32] = serialized_note[0].to_be_bytes();\n for i in 0..31 {\n x[i] = part_x[i + 1];\n }\n x[31] = serialized_note[1].to_be_bytes::<32>()[31];\n\n let part_y:[u8; 32] = serialized_note[2].to_be_bytes();\n for i in 0..31 {\n y[i] = part_y[i + 1];\n }\n y[31] = serialized_note[3].to_be_bytes::<32>()[31];\n\n EcdsaPublicKeyNote { x, y, npk_m_hash: serialized_note[4], header: NoteHeader::empty() }\n }\n\n fn compute_nullifier(self, context: &mut PrivateContext, note_hash_for_nullify: Field) -> Field {\n let secret = context.request_nsk_app(self.npk_m_hash);\n poseidon2_hash_with_separator([\n note_hash_for_nullify,\n secret\n ],\n GENERATOR_INDEX__NOTE_NULLIFIER as Field,\n )\n }\n\n fn compute_nullifier_without_context(self) -> Field {\n let note_hash_for_nullify = compute_note_hash_for_nullify(self);\n let secret = get_nsk_app(self.npk_m_hash);\n poseidon2_hash_with_separator([\n note_hash_for_nullify,\n secret,\n ],\n GENERATOR_INDEX__NOTE_NULLIFIER as Field,\n )\n }\n}\n\nimpl EcdsaPublicKeyNote {\n pub fn new(x: [u8; 32], y: [u8; 32], npk_m_hash: Field) -> Self {\n EcdsaPublicKeyNote { x, y, npk_m_hash, header: NoteHeader::empty() }\n }\n}\n"},"389":{"path":"/usr/src/noir-projects/noir-contracts/contracts/ecdsa_r_account_contract/src/main.nr","source":"// Account contract that uses ECDSA signatures for authentication on random version of the p256 curve (to use with touchID).\ncontract EcdsaRAccount {\n use dep::aztec::prelude::{PrivateContext, PrivateImmutable};\n use dep::aztec::{\n encrypted_logs::encrypted_note_emission::encode_and_encrypt_note_with_keys,\n keys::getters::get_current_public_keys\n };\n\n use dep::authwit::{\n entrypoint::{app::AppPayload, fee::FeePayload}, account::AccountActions,\n auth_witness::get_auth_witness\n };\n\n use dep::ecdsa_public_key_note::EcdsaPublicKeyNote;\n\n #[aztec(storage)]\n struct Storage {\n public_key: PrivateImmutable<EcdsaPublicKeyNote>,\n }\n\n // Creates a new account out of an ECDSA public key to use for signature verification\n #[aztec(private)]\n #[aztec(initializer)]\n fn constructor(signing_pub_key_x: [u8; 32], signing_pub_key_y: [u8; 32]) {\n let this = context.this_address();\n let this_keys = get_current_public_keys(&mut context, this);\n // Not emitting outgoing for msg_sender here to not have to register keys for the contract through which we\n // deploy this (typically MultiCallEntrypoint). I think it's ok here as I feel the outgoing here is not that\n // important.\n\n let mut pub_key_note = EcdsaPublicKeyNote::new(signing_pub_key_x, signing_pub_key_y, this_keys.npk_m.hash());\n storage.public_key.initialize(&mut pub_key_note).emit(encode_and_encrypt_note_with_keys(&mut context, this_keys.ovpk_m, this_keys.ivpk_m, this));\n }\n\n // Note: If you globally change the entrypoint signature don't forget to update account_entrypoint.ts\n #[aztec(private)]\n fn entrypoint(app_payload: AppPayload, fee_payload: FeePayload, cancellable: bool) {\n let actions = AccountActions::init(&mut context, is_valid_impl);\n actions.entrypoint(app_payload, fee_payload, cancellable);\n }\n\n #[aztec(private)]\n #[aztec(noinitcheck)]\n #[aztec(view)]\n fn verify_private_authwit(inner_hash: Field) -> Field {\n let actions = AccountActions::init(&mut context, is_valid_impl);\n actions.verify_private_authwit(inner_hash)\n }\n\n #[contract_library_method]\n fn is_valid_impl(context: &mut PrivateContext, outer_hash: Field) -> bool {\n // Load public key from storage\n let storage = Storage::init(context);\n let public_key = storage.public_key.get_note();\n\n // Load auth witness\n let witness: [Field; 64] = unsafe {\n get_auth_witness(outer_hash)\n };\n let mut signature: [u8; 64] = [0; 64];\n for i in 0..64 {\n signature[i] = witness[i] as u8;\n }\n\n // Verify payload signature using Ethereum's signing scheme\n // Note that noir expects the hash of the message/challenge as input to the ECDSA verification.\n let outer_hash_bytes: [u8; 32] = outer_hash.to_be_bytes();\n let hashed_message: [u8; 32] = std::hash::sha256(outer_hash_bytes);\n std::ecdsa_secp256r1::verify_signature(public_key.x, public_key.y, signature, hashed_message)\n }\n}\n"},"5":{"path":"std/collections/bounded_vec.nr","source":"use crate::{cmp::Eq, convert::From};\n\n/// A `BoundedVec<T, MaxLen>` is a growable storage similar to a `Vec<T>` except that it\n/// is bounded with a maximum possible length. Unlike `Vec`, `BoundedVec` is not implemented\n/// via slices and thus is not subject to the same restrictions slices are (notably, nested\n/// slices - and thus nested vectors as well - are disallowed).\n/// \n/// Since a BoundedVec is backed by a normal array under the hood, growing the BoundedVec by\n/// pushing an additional element is also more efficient - the length only needs to be increased\n/// by one.\n/// \n/// For these reasons `BoundedVec<T, N>` should generally be preferred over `Vec<T>` when there\n/// is a reasonable maximum bound that can be placed on the vector.\n/// \n/// Example:\n/// \n/// ```noir\n/// let mut vector: BoundedVec<Field, 10> = BoundedVec::new();\n/// for i in 0..5 {\n/// vector.push(i);\n/// }\n/// assert(vector.len() == 5);\n/// assert(vector.max_len() == 10);\n/// ```\nstruct BoundedVec<T, let MaxLen: u32> {\n storage: [T; MaxLen],\n len: u32,\n}\n\nimpl<T, let MaxLen: u32> BoundedVec<T, MaxLen> {\n /// Creates a new, empty vector of length zero.\n ///\n /// Since this container is backed by an array internally, it still needs an initial value\n /// to give each element. To resolve this, each element is zeroed internally. This value\n /// is guaranteed to be inaccessible unless `get_unchecked` is used.\n ///\n /// Example:\n ///\n /// ```noir\n /// let empty_vector: BoundedVec<Field, 10> = BoundedVec::new();\n /// assert(empty_vector.len() == 0);\n /// ```\n ///\n /// Note that whenever calling `new` the maximum length of the vector should always be specified\n /// via a type signature:\n ///\n /// ```noir\n /// fn good() -> BoundedVec<Field, 10> {\n /// // Ok! MaxLen is specified with a type annotation\n /// let v1: BoundedVec<Field, 3> = BoundedVec::new();\n /// let v2 = BoundedVec::new();\n ///\n /// // Ok! MaxLen is known from the type of `good`'s return value\n /// v2\n /// }\n ///\n /// fn bad() {\n /// // Error: Type annotation needed\n /// // The compiller can't infer `MaxLen` from the following code:\n /// let mut v3 = BoundedVec::new();\n /// v3.push(5);\n /// }\n /// ```\n ///\n /// This defaulting of `MaxLen` (and numeric generics in general) to zero may change in future noir versions\n /// but for now make sure to use type annotations when using bounded vectors. Otherwise, you will receive a \n /// constraint failure at runtime when the vec is pushed to.\n pub fn new() -> Self {\n let zeroed = crate::mem::zeroed();\n BoundedVec { storage: [zeroed; MaxLen], len: 0 }\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero.\n /// \n /// If the given index is equal to or greater than the length of the vector, this\n /// will issue a constraint failure.\n /// \n /// Example:\n /// \n /// ```noir\n /// fn foo<let N: u32>(v: BoundedVec<u32, N>) {\n /// let first = v.get(0);\n /// let last = v.get(v.len() - 1);\n /// assert(first != last);\n /// }\n /// ```\n pub fn get(self, index: u32) -> T {\n assert(index < self.len, \"Attempted to read past end of BoundedVec\");\n self.get_unchecked(index)\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero, without\n /// performing a bounds check.\n /// \n /// Since this function does not perform a bounds check on length before accessing the element,\n /// it is unsafe! Use at your own risk!\n /// \n /// Example:\n /// \n /// ```noir\n /// fn sum_of_first_three<let N: u32>(v: BoundedVec<u32, N>) -> u32 {\n /// // Always ensure the length is larger than the largest\n /// // index passed to get_unchecked\n /// assert(v.len() > 2);\n /// let first = v.get_unchecked(0);\n /// let second = v.get_unchecked(1);\n /// let third = v.get_unchecked(2);\n /// first + second + third\n /// }\n /// ```\n pub fn get_unchecked(self, index: u32) -> T {\n self.storage[index]\n }\n\n /// Writes an element to the vector at the given index, starting from zero.\n /// \n /// If the given index is equal to or greater than the length of the vector, this will issue a constraint failure.\n /// \n /// Example:\n /// \n /// ```noir\n /// fn foo<let N: u32>(v: BoundedVec<u32, N>) {\n /// let first = v.get(0);\n /// assert(first != 42);\n /// v.set(0, 42);\n /// let new_first = v.get(0);\n /// assert(new_first == 42);\n /// }\n /// ```\n pub fn set(&mut self, index: u32, value: T) {\n assert(index < self.len, \"Attempted to write past end of BoundedVec\");\n self.set_unchecked(index, value)\n }\n\n /// Writes an element to the vector at the given index, starting from zero, without performing a bounds check.\n /// \n /// Since this function does not perform a bounds check on length before accessing the element, it is unsafe! Use at your own risk!\n /// \n /// Example:\n /// \n /// ```noir\n /// fn set_unchecked_example() {\n /// let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n /// vec.extend_from_array([1, 2]);\n /// \n /// // Here we're safely writing within the valid range of `vec`\n /// // `vec` now has the value [42, 2]\n /// vec.set_unchecked(0, 42);\n /// \n /// // We can then safely read this value back out of `vec`.\n /// // Notice that we use the checked version of `get` which would prevent reading unsafe values.\n /// assert_eq(vec.get(0), 42);\n /// \n /// // We've now written past the end of `vec`.\n /// // As this index is still within the maximum potential length of `v`,\n /// // it won't cause a constraint failure. \n /// vec.set_unchecked(2, 42);\n /// println(vec);\n /// \n /// // This will write past the end of the maximum potential length of `vec`,\n /// // it will then trigger a constraint failure.\n /// vec.set_unchecked(5, 42);\n /// println(vec);\n /// }\n /// ```\n pub fn set_unchecked(&mut self, index: u32, value: T) {\n self.storage[index] = value;\n }\n\n /// Pushes an element to the end of the vector. This increases the length\n /// of the vector by one.\n /// \n /// Panics if the new length of the vector will be greater than the max length.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 2> = BoundedVec::new();\n /// \n /// v.push(1);\n /// v.push(2);\n /// \n /// // Panics with failed assertion \"push out of bounds\"\n /// v.push(3);\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 /// Returns the current length of this vector\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 4> = BoundedVec::new();\n /// assert(v.len() == 0);\n /// \n /// v.push(100);\n /// assert(v.len() == 1);\n /// \n /// v.push(200);\n /// v.push(300);\n /// v.push(400);\n /// assert(v.len() == 4);\n /// \n /// let _ = v.pop();\n /// let _ = v.pop();\n /// assert(v.len() == 2);\n /// ```\n pub fn len(self) -> u32 {\n self.len\n }\n\n /// Returns the maximum length of this vector. This is always\n /// equal to the `MaxLen` parameter this vector was initialized with.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 5> = BoundedVec::new();\n /// \n /// assert(v.max_len() == 5);\n /// v.push(10);\n /// assert(v.max_len() == 5);\n /// ```\n pub fn max_len(_self: BoundedVec<T, MaxLen>) -> u32 {\n MaxLen\n }\n\n /// Returns the internal array within this vector.\n /// \n /// Since arrays in Noir are immutable, mutating the returned storage array will not mutate\n /// the storage held internally by this vector.\n /// \n /// Note that uninitialized elements may be zeroed out!\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 5> = BoundedVec::new();\n /// \n /// assert(v.storage() == [0, 0, 0, 0, 0]);\n /// \n /// v.push(57);\n /// assert(v.storage() == [57, 0, 0, 0, 0]);\n /// ```\n pub fn storage(self) -> [T; MaxLen] {\n self.storage\n }\n\n /// Pushes each element from the given array to this vector.\n /// \n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut vec: BoundedVec<Field, 3> = BoundedVec::new();\n /// vec.extend_from_array([2, 4]);\n /// \n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_array<let Len: u32>(&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 /// Pushes each element from the given slice to this vector.\n /// \n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut vec: BoundedVec<Field, 3> = BoundedVec::new();\n /// vec.extend_from_slice(&[2, 4]);\n /// \n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\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 /// Pushes each element from the other vector to this vector. The length of\n /// the other vector is left unchanged.\n /// \n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n /// \n /// ```noir\n /// let mut v1: BoundedVec<Field, 5> = BoundedVec::new();\n /// let mut v2: BoundedVec<Field, 7> = BoundedVec::new();\n /// \n /// v2.extend_from_array([1, 2, 3]);\n /// v1.extend_from_bounded_vec(v2);\n /// \n /// assert(v1.storage() == [1, 2, 3, 0, 0]);\n /// assert(v2.storage() == [1, 2, 3, 0, 0, 0, 0]);\n /// ```\n pub fn extend_from_bounded_vec<let Len: u32>(&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 /// Creates a new vector, populating it with values derived from an array input. \n /// The maximum length of the vector is determined based on the type signature.\n /// \n /// Example:\n /// \n /// ```noir\n /// let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from_array([1, 2, 3])\n /// ```\n pub fn from_array<let Len: u32>(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 /// Pops the element at the end of the vector. This will decrease the length\n /// of the vector by one.\n /// \n /// Panics if the vector is empty.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 2> = BoundedVec::new();\n /// v.push(1);\n /// v.push(2);\n /// \n /// let two = v.pop();\n /// let one = v.pop();\n /// \n /// assert(two == 2);\n /// assert(one == 1);\n ///\n /// // error: cannot pop from an empty vector\n /// let _ = v.pop();\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::mem::zeroed();\n elem\n }\n\n /// Returns true if the given predicate returns true for any element\n /// in this vector.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<u32, 3> = BoundedVec::new();\n /// v.extend_from_array([2, 4, 6]);\n /// \n /// let all_even = !v.any(|elem: u32| elem % 2 != 0);\n /// assert(all_even);\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 /// Creates a new vector of equal size by calling a closure on each element in this vector. \n /// \n /// Example:\n /// \n /// ```noir\n /// let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n /// let result = vec.map(|value| value * 2);\n /// \n /// let expected = BoundedVec::from_array([2, 4, 6, 8]);\n /// assert_eq(result, expected);\n /// ```\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> BoundedVec<U, MaxLen> {\n let mut ret = BoundedVec::new();\n ret.len = self.len();\n for i in 0..MaxLen {\n if i < self.len() {\n ret.storage[i] = f(self.get_unchecked(i));\n }\n }\n ret\n }\n}\n\nimpl<T, let MaxLen: u32> 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, let MaxLen: u32, let Len: u32> 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\n mod get {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test(should_fail_with = \"Attempted to read past end of BoundedVec\")]\n fn panics_when_reading_elements_past_end_of_vec() {\n let vec: BoundedVec<Field, 5> = BoundedVec::new();\n\n crate::println(vec.get(0));\n }\n }\n\n mod set {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn set_updates_values_properly() {\n let mut vec = BoundedVec::from_array([0, 0, 0, 0, 0]);\n\n vec.set(0, 42);\n assert_eq(vec.storage, [42, 0, 0, 0, 0]);\n\n vec.set(1, 43);\n assert_eq(vec.storage, [42, 43, 0, 0, 0]);\n\n vec.set(2, 44);\n assert_eq(vec.storage, [42, 43, 44, 0, 0]);\n\n vec.set(1, 10);\n assert_eq(vec.storage, [42, 10, 44, 0, 0]);\n\n vec.set(0, 0);\n assert_eq(vec.storage, [0, 10, 44, 0, 0]);\n }\n\n #[test(should_fail_with = \"Attempted to write past end of BoundedVec\")]\n fn panics_when_writing_elements_past_end_of_vec() {\n let mut vec: BoundedVec<Field, 5> = BoundedVec::new();\n vec.set(0, 42);\n\n // Need to use println to avoid DIE removing the write operation.\n crate::println(vec.get(0));\n }\n }\n\n mod map {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn applies_function_correctly() {\n // docs:start:bounded-vec-map-example\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| value * 2);\n // docs:end:bounded-vec-map-example\n let expected = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| (value * 2) as Field);\n let expected: BoundedVec<Field, 4> = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([0, 1]);\n let result = vec.map(|value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.storage()[2], 0);\n }\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 mod trait_eq {\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}\n"},"55":{"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::mem::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<let N: u32, 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<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"},"70":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/auth_witness.nr","source":"#[oracle(getAuthWitness)]\nunconstrained fn get_auth_witness_oracle<let N: u32>(_message_hash: Field) -> [Field; N] {}\n\n/**\n * Oracle wrapper to fetch an `auth_witness` for a given `message_hash` from the PXE.\n * \n * @param message_hash The hash of the message for which the `auth_witness` is to be fetched.\n * @return The `auth_witness` for the given `message_hash` as Field array.\n */\nunconstrained pub fn get_auth_witness<let N: u32>(message_hash: Field) -> [Field; N] {\n get_auth_witness_oracle(message_hash)\n}\n"},"71":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/auth.nr","source":"use dep::aztec::protocol_types::{\n abis::function_selector::FunctionSelector, address::AztecAddress,\n constants::{\n GENERATOR_INDEX__AUTHWIT_INNER, GENERATOR_INDEX__AUTHWIT_OUTER, GENERATOR_INDEX__AUTHWIT_NULLIFIER,\n CANONICAL_AUTH_REGISTRY_ADDRESS\n},\n hash::poseidon2_hash_with_separator\n};\nuse dep::aztec::{prelude::Deserialize, context::{PrivateContext, PublicContext, gas::GasOpts}, hash::hash_args_array};\n\n/**\n * Authenticaion witness helper library\n *\n * Authentication Witness is a scheme for authenticating actions on Aztec, so users can allow third-parties\n * (e.g. protocols or other users) to execute an action on their behalf.\n *\n * This library provides helper functions to manage such witnesses.\n * The authentication witness, is some \"witness\" (data) that authenticates a `message_hash`.\n * The simplest example of an authentication witness, is a signature. The signature is the \"evidence\",\n * that the signer has seen the message, agrees with it, and has allowed it.\n * It does not need to be a signature. It could be any kind of \"proof\" that the message is allowed.\n * Another proof could be knowing some kind of secret, or having some kind of \"token\" that allows the message.\n *\n * The `message_hash` is a hash of the following structure:\n * hash(consumer, chain_id, version, inner_hash)\n * - consumer: the address of the contract that is \"consuming\" the message,\n * - chain_id: the chain id of the chain that the message is being consumed on,\n * - version: the version of the chain that the message is being consumed on,\n * - inner_hash: the hash of the \"inner\" message that is being consumed, this is the \"actual\" message or action.\n *\n * While the `inner_hash` could be anything, such as showing you signed a specific message, it will often be\n * a hash of the \"action\" to approve, along with who made the call. As part of this library, we provide a few\n * helper functions to deal with such messages.\n *\n * For example, we provide helper function that is used for checking that the message is an encoding of the current call.\n * This can be used to let some contract \"allow\" another contract to act on its behalf, as long as it can\n * show that it is acting on behalf of the contract.\n *\n * If we take a case of allowing a contract to transfer tokens on behalf of an account, the `inner_hash` can be\n * derived as:\n * inner_hash = hash(caller, \"transfer\", hash(to, amount))\n *\n * Where the `caller` would be the address of the contract that is trying to transfer the tokens, and `to` and `amount`\n * the arguments for the transfer.\n *\n * Note that we have both a `caller` and a `consumer`, the `consumer` will be the contract that is consuming the message,\n * in the case of the transfer, it would be the `Token` contract itself, while the caller, will be the actor that is\n * allowed to transfer the tokens.\n *\n *\n * The authentication mechanism works differently in public and private contexts. In private, we recall that everything\n * is executed on the user's device, so we can use `oracles` to \"ask\" the user (not contract) for information. In public\n * we cannot do this, since it is executed by the sequencer (someone else). Therefore we can instead use a \"registry\"\n * to store the messages that we have approved.\n *\n * A simple example would be a \"token\" that is being \"pulled\" from one account into another. We will first outline\n * how this would look in private, and then in public later.\n *\n * Say that a user `Alice` wants to deposit some tokens into a DeFi protocol (say a DEX).\n * `Alice` would make a `deposit` transaction, that she is executing using her account contract.\n * The account would call the `DeFi` contract to execute `deposit`, which would try to pull funds from the `Token`\n * contract. Since the `DeFi` contract is trying to pull funds from an account that is not its own, it needs to\n * convince the `Token` contract that it is allowed to do so.\n *\n * This is where the authentication witness comes in The `Token` contract computes a `message_hash` from the\n * `transfer` call, and then asks `Alice Account` contract to verify that the `DeFi` contract is allowed to\n * execute that call.\n *\n * `Alice Account` contract can then ask `Alice` if she wants to allow the `DeFi` contract to pull funds from her\n * account. If she does, she will sign the `message_hash` and return the signature to the `Alice Account` which\n * will validate it and return success to the `Token` contract which will then allow the `DeFi` contract to pull\n * funds from `Alice`.\n *\n * To ensure that the same \"approval\" cannot be used multiple times, we also compute a `nullifier` for the\n * authentication witness, and emit it from the `Token` contract (consumer).\n *\n * Note that we can do this flow as we are in private were we can do oracle calls out from contracts.\n *\n *\n * Person Contract Contract Contract\n * Alice Alice Account Token DeFi\n * | | | |\n * | Defi.deposit(Token, 1000) | |\n * |----------------->| | |\n * | | deposit(Token, 1000) |\n * | |---------------------------------------->|\n * | | | |\n * | | | transfer(Alice, Defi, 1000)\n * | | |<---------------------|\n * | | | |\n * | | Check if Defi may call transfer(Alice, Defi, 1000)\n * | |<-----------------| |\n * | | | |\n * | Please give me AuthWit for DeFi | |\n * | calling transfer(Alice, Defi, 1000) | |\n * |<-----------------| | |\n * | | | |\n * | | | |\n * | AuthWit for transfer(Alice, Defi, 1000) |\n * |----------------->| | |\n * | | AuthWit validity | |\n * | |----------------->| |\n * | | | |\n * | | throw if invalid AuthWit |\n * | | | |\n * | | emit AuthWit nullifier |\n * | | | |\n * | | transfer(Alice, Defi, 1000) |\n * | | | |\n * | | | |\n * | | | success |\n * | | |--------------------->|\n * | | | |\n * | | | |\n * | | | deposit(Token, 1000)\n * | | | |\n * | | | |\n *\n *\n * If we instead were in public, we cannot do the same flow. Instead we would use an authentication registry to store\n * the messages that we have approved.\n *\n * To approve a message, `Alice Account` can make a `set_authorized` call to the registry, to set a `message_hash`\n * as authorized. This is essentially a mapping from `message_hash` to `true` for `Alice Contract`. Every account\n * has its own map in the registry, so `Alice` cannot approve a message for `Bob`.\n *\n * The `Token` contract can then try to \"spend\" the approval by calling `consume` on the registry. If the message\n * was approved, the value is updated to `false`, and we return the success flag. For more information on the\n * registry, see `main.nr` in `auth_registry_contract`.\n *\n * Person Contract Contract Contract Contract\n * Alice Alice Account Registry Token DeFi\n * | | | | |\n * | Registry.set_authorized(..., true) | | |\n * |----------------->| | | |\n * | | set_authorized(..., true) | |\n * | |------------------->| | |\n * | | | | |\n * | | set authorized to true | |\n * | | | | |\n * | | | | |\n * | Defi.deposit(Token, 1000) | | |\n * |----------------->| | | |\n * | | deposit(Token, 1000) | |\n * | |-------------------------------------------------------------->|\n * | | | | |\n * | | | transfer(Alice, Defi, 1000) |\n * | | | |<---------------------|\n * | | | | |\n * | | | Check if Defi may call transfer(Alice, Defi, 1000)\n * | | |<------------------| |\n * | | | | |\n * | | throw if invalid AuthWit | |\n * | | | | |\n * | | | | |\n * | | set authorized to false | |\n * | | | | |\n * | | | | |\n * | | | AuthWit validity | |\n * | | |------------------>| |\n * | | | | |\n * | | | | transfer(Alice, Defi, 1000)\n * | | | |<-------------------->|\n * | | | | |\n * | | | | success |\n * | | | |--------------------->|\n * | | | | |\n * | | | | deposit(Token, 1000)\n * | | | | |\n *\n *\n * --- FAQ ---\n * Q: Why are we using a success flag of `keccak256(\"IS_VALID()\")` instead of just returning a boolean?\n * A: We want to make sure that we don't accidentally return `true` if there is a collision in the function selector.\n * By returning a hash of `IS_VALID()`, it becomes very unlikely that there is both a collision and we return\n * a success flag.\n *\n * Q: Why are we using static calls?\n * A: We are using static calls to ensure that the account contract cannot re-enter. If it was a normal call, it\n * could make a new call and do a re-entry attack. Using a static ensures that it cannot update any state.\n *\n * Q: Would it not be cheaper to use a nullifier instead of updating state in public?\n * A: At a quick glance, a public state update + nullifier is 96 bytes, but two state updates are 128, so it would be\n * cheaper to use a nullifier, if this is the way it would always be done. However, if both the approval and the\n * consumption is done in the same transaction, then we will be able to squash the updates (only final tx state diff is posted to DA), and now it is cheaper.\n *\n * Q: Why is the chain id and the version part of the message hash?\n * A: The chain id and the version is part of the message hash to ensure that the message is only valid on a specific\n * chain to avoid a case where the same message could be used across multiple chains.\n */\n\nglobal IS_VALID_SELECTOR = 0xabf64ad4; // 4 first bytes of keccak256(\"IS_VALID()\")\n\n/**\n * Assert that `on_behalf_of` have authorized the current call with a valid authentication witness\n *\n * Computing the `inner_hash` using the `msg_sender`, `selector` and `args_hash` and then making a call out to the\n * `on_behalf_of` contract to verify that the `inner_hash` is valid.\n *\n * @param on_behalf_of The address that have authorized the current call\n */\n// docs:start:assert_current_call_valid_authwit\npub fn assert_current_call_valid_authwit(context: &mut PrivateContext, on_behalf_of: AztecAddress) {\n let inner_hash = compute_inner_authwit_hash([context.msg_sender().to_field(), context.selector().to_field(), context.args_hash]);\n assert_inner_hash_valid_authwit(context, on_behalf_of, inner_hash);\n}\n// docs:end:assert_current_call_valid_authwit\n\n/**\n * Assert that a specific `inner_hash` is valid for the `on_behalf_of` address\n *\n * Used as an internal function for `assert_current_call_valid_authwit` and can be used as a standalone function when\n * the `inner_hash` is from a different source, e.g., say a block of text etc.\n *\n * @param on_behalf_of The address that have authorized the current call\n * @param inner_hash The hash of the message to authorize\n */\npub fn assert_inner_hash_valid_authwit(\n context: &mut PrivateContext,\n on_behalf_of: AztecAddress,\n inner_hash: Field\n) {\n // We perform a static call here and not a standard one to ensure that the account contract cannot re-enter.\n let result: Field = context.static_call_private_function(\n on_behalf_of,\n comptime {\n FunctionSelector::from_signature(\"verify_private_authwit(Field)\")\n },\n [inner_hash]\n ).unpack_into();\n assert(result == IS_VALID_SELECTOR, \"Message not authorized by account\");\n // Compute the nullifier, similar computation to the outer hash, but without the chain_id and version.\n // Those should already be handled in the verification, so we just need something to nullify, that allow same inner_hash for multiple actors.\n let nullifier = compute_authwit_nullifier(on_behalf_of, inner_hash);\n context.push_nullifier(nullifier);\n}\n\n/**\n * Assert that `on_behalf_of` have authorized the current call in the authentication registry\n *\n * Computing the `inner_hash` using the `msg_sender`, `selector` and `args_hash` and then making a call out to the\n * `on_behalf_of` contract to verify that the `inner_hash` is valid.\n *\n * Note that the authentication registry will take the `msg_sender` into account as the consumer, so this will only\n * work if the `msg_sender` is the same as the `consumer` when the `message_hash` was inserted into the registry.\n *\n * @param on_behalf_of The address that have authorized the current call\n */\n// docs:start:assert_current_call_valid_authwit_public\npub fn assert_current_call_valid_authwit_public(context: &mut PublicContext, on_behalf_of: AztecAddress) {\n let inner_hash = compute_inner_authwit_hash(\n [(*context).msg_sender().to_field(), (*context).selector().to_field(), (*context).get_args_hash()]\n );\n assert_inner_hash_valid_authwit_public(context, on_behalf_of, inner_hash);\n}\n// docs:end:assert_current_call_valid_authwit_public\n\n/**\n * Assert that `on_behalf_of` have authorized a speicifc `inner_hash` in the authentication registry\n *\n * Computing the `inner_hash` using the `msg_sender`, `selector` and `args_hash` and then making a call out to the\n * `on_behalf_of` contract to verify that the `inner_hash` is valid.\n *\n * Note that the authentication registry will take the `msg_sender` into account as the consumer, so this will only\n * work if the `msg_sender` is the same as the `consumer` when the `message_hash` was inserted into the registry.\n *\n * @param on_behalf_of The address that have authorized the `inner_hash`\n */\npub fn assert_inner_hash_valid_authwit_public(\n context: &mut PublicContext,\n on_behalf_of: AztecAddress,\n inner_hash: Field\n) {\n let result: Field = context.call_public_function(\n CANONICAL_AUTH_REGISTRY_ADDRESS,\n comptime {\n FunctionSelector::from_signature(\"consume((Field),Field)\")\n },\n [on_behalf_of.to_field(), inner_hash].as_slice(),\n GasOpts::default()\n ).deserialize_into();\n assert(result == IS_VALID_SELECTOR, \"Message not authorized by account\");\n}\n\n/**\n * Compute the `message_hash` from a function call to be used by an authentication witness\n *\n * Useful for when you need a non-account contract to approve during execution. For example if you need a contract\n * to make a call to nested contract, e.g., contract A wants to exit token T to L1 using bridge B, so it needs to allow\n * B to transfer T on its behalf.\n *\n * @param caller The address of the contract that is calling the function, in the example above, this would be B\n * @param consumer The address of the contract that is consuming the message, in the example above, this would be T\n * @param chain_id The chain id of the chain that the message is being consumed on\n * @param version The version of the chain that the message is being consumed on\n * @param selector The function selector of the function that is being called\n * @param args The arguments of the function that is being called\n */\n// docs:start:compute_authwit_message_hash_from_call\npub fn compute_authwit_message_hash_from_call<let N: u32>(\n caller: AztecAddress,\n consumer: AztecAddress,\n chain_id: Field,\n version: Field,\n selector: FunctionSelector,\n args: [Field; N]\n) -> Field {\n let args_hash = hash_args_array(args);\n let inner_hash = compute_inner_authwit_hash([caller.to_field(), selector.to_field(), args_hash]);\n compute_authwit_message_hash(consumer, chain_id, version, inner_hash)\n}\n// docs:end:compute_authwit_message_hash_from_call\n\n/**\n * Computes the `inner_hash` of the authentication witness\n *\n * This is used internally, but also useful in cases where you want to compute the `inner_hash` for a specific message\n * that is not necessarily a call, but just some \"bytes\" or text.\n *\n * @param args The arguments to hash\n */\npub fn compute_inner_authwit_hash<let N: u32>(args: [Field; N]) -> Field {\n poseidon2_hash_with_separator(args, GENERATOR_INDEX__AUTHWIT_INNER)\n}\n\n/**\n * Computs the `authwit_nullifier` for a specific `on_behalf_of` and `inner_hash`\n *\n * Using the `on_behalf_of` and the `inner_hash` to ensure that the nullifier is siloed for a specific `on_behalf_of`.\n *\n * @param on_behalf_of The address that have authorized the `inner_hash`\n * @param inner_hash The hash of the message to authorize\n */\npub fn compute_authwit_nullifier(on_behalf_of: AztecAddress, inner_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [on_behalf_of.to_field(), inner_hash],\n GENERATOR_INDEX__AUTHWIT_NULLIFIER\n )\n}\n\n/**\n * Computes the `message_hash` for the authentication witness\n *\n * @param consumer The address of the contract that is consuming the message\n * @param chain_id The chain id of the chain that the message is being consumed on\n * @param version The version of the chain that the message is being consumed on\n * @param inner_hash The hash of the \"inner\" message that is being consumed\n */\npub fn compute_authwit_message_hash(\n consumer: AztecAddress,\n chain_id: Field,\n version: Field,\n inner_hash: Field\n) -> Field {\n poseidon2_hash_with_separator(\n [\n consumer.to_field(),\n chain_id,\n version,\n inner_hash\n ],\n GENERATOR_INDEX__AUTHWIT_OUTER\n )\n}\n\n/**\n * Helper function to set the authorization status of a message hash\n *\n * Wraps a public call to the authentication registry to set the authorization status of a `message_hash`\n *\n * @param message_hash The hash of the message to authorize\n * @param authorize True if the message should be authorized, false if it should be revoked\n */\npub fn set_authorized(context: &mut PublicContext, message_hash: Field, authorize: bool) {\n context.call_public_function(\n CANONICAL_AUTH_REGISTRY_ADDRESS,\n comptime {\n FunctionSelector::from_signature(\"set_authorized(Field,bool)\")\n },\n [message_hash, authorize as Field].as_slice(),\n GasOpts::default()\n ).assert_empty();\n}\n\n/**\n * Helper function to reject all authwits\n *\n * Wraps a public call to the authentication registry to set the `reject_all` flag\n *\n * @param reject True if all authwits should be rejected, false otherwise\n */\npub fn set_reject_all(context: &mut PublicContext, reject: bool) {\n context.call_public_function(\n CANONICAL_AUTH_REGISTRY_ADDRESS,\n comptime {\n FunctionSelector::from_signature(\"set_reject_all(bool)\")\n },\n [context.this_address().to_field(), reject as Field].as_slice(),\n GasOpts::default()\n ).assert_empty();\n}\n"},"72":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/account.nr","source":"use dep::aztec::{\n context::PrivateContext,\n protocol_types::constants::{GENERATOR_INDEX__COMBINED_PAYLOAD, GENERATOR_INDEX__TX_NULLIFIER},\n hash::poseidon2_hash_with_separator\n};\n\nuse crate::entrypoint::{app::AppPayload, fee::FeePayload};\nuse crate::auth::{IS_VALID_SELECTOR, compute_authwit_message_hash};\n\nstruct AccountActions<Context> {\n context: Context,\n is_valid_impl: fn(&mut PrivateContext, Field) -> bool,\n}\n\nimpl<Context> AccountActions<Context> {\n pub fn init(context: Context, is_valid_impl: fn(&mut PrivateContext, Field) -> bool) -> Self {\n AccountActions { context, is_valid_impl }\n }\n}\n\n/**\n * An implementation of the Account Action struct for the private context.\n *\n * Implements logic to verify authorization and execute payloads.\n */\nimpl AccountActions<&mut PrivateContext> {\n\n /**\n * Verifies that the `app_hash` and `fee_hash` are authorized and then executes them.\n *\n * Executes the `fee_payload` and `app_payload` in sequence.\n * Will execute the `fee_payload` as part of the setup, and then enter the app phase.\n *\n * @param app_payload The payload that contains the calls to be executed in the app phase.\n * @param fee_payload The payload that contains the calls to be executed in the setup phase.\n */\n // docs:start:entrypoint\n pub fn entrypoint(self, app_payload: AppPayload, fee_payload: FeePayload, cancellable: bool) {\n let valid_fn = self.is_valid_impl;\n\n let combined_payload_hash = poseidon2_hash_with_separator(\n [app_payload.hash(), fee_payload.hash()],\n GENERATOR_INDEX__COMBINED_PAYLOAD\n );\n assert(valid_fn(self.context, combined_payload_hash));\n\n fee_payload.execute_calls(self.context);\n self.context.end_setup();\n app_payload.execute_calls(self.context);\n if cancellable {\n let tx_nullifier = poseidon2_hash_with_separator([app_payload.nonce], GENERATOR_INDEX__TX_NULLIFIER);\n self.context.push_nullifier(tx_nullifier);\n }\n }\n // docs:end:entrypoint\n\n /**\n * Verifies that the `msg_sender` is authorized to consume `inner_hash` by the account.\n *\n * Computes the `message_hash` using the `msg_sender`, `chain_id`, `version` and `inner_hash`.\n * Then executes the `is_valid_impl` function to verify that the message is authorized.\n *\n * Will revert if the message is not authorized.\n *\n * @param inner_hash The hash of the message that the `msg_sender` is trying to consume.\n */\n // docs:start:verify_private_authwit\n pub fn verify_private_authwit(self, inner_hash: Field) -> Field {\n // The `inner_hash` is \"siloed\" with the `msg_sender` to ensure that only it can\n // consume the message.\n // This ensures that contracts cannot consume messages that are not intended for them.\n let message_hash = compute_authwit_message_hash(\n self.context.msg_sender(),\n self.context.chain_id(),\n self.context.version(),\n inner_hash\n );\n let valid_fn = self.is_valid_impl;\n assert(valid_fn(self.context, message_hash) == true, \"Message not authorized by account\");\n IS_VALID_SELECTOR\n }\n // docs:end:verify_private_authwit\n}\n"},"73":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/entrypoint/app.nr","source":"use dep::aztec::prelude::PrivateContext;\nuse dep::aztec::protocol_types::{\n constants::GENERATOR_INDEX__SIGNATURE_PAYLOAD, hash::poseidon2_hash_with_separator,\n traits::{Hash, Serialize}\n};\n\nuse crate::entrypoint::function_call::{FunctionCall, FUNCTION_CALL_SIZE_IN_BYTES};\n\n// FUNCTION_CALL_SIZE * ACCOUNT_MAX_CALLS + 1\nglobal APP_PAYLOAD_SIZE: u64 = 21;\n// FUNCTION_CALL_SIZE_IN_BYTES * ACCOUNT_MAX_CALLS + 32\nglobal APP_PAYLOAD_SIZE_IN_BYTES: u64 = 424;\n\nglobal ACCOUNT_MAX_CALLS: u64 = 4;\n\n// Note: If you change the following struct you have to update default_entrypoint.ts\n// docs:start:app-payload-struct\nstruct AppPayload {\n function_calls: [FunctionCall; ACCOUNT_MAX_CALLS],\n nonce: Field,\n}\n// docs:end:app-payload-struct\n\nimpl Serialize<APP_PAYLOAD_SIZE> for AppPayload {\n // Serializes the entrypoint struct\n fn serialize(self) -> [Field; APP_PAYLOAD_SIZE] {\n let mut fields: BoundedVec<Field, APP_PAYLOAD_SIZE> = BoundedVec::new();\n for call in self.function_calls {\n fields.extend_from_array(call.serialize());\n }\n fields.push(self.nonce);\n fields.storage\n }\n}\n\nimpl Hash for AppPayload {\n fn hash(self) -> Field {\n poseidon2_hash_with_separator(\n self.serialize(),\n GENERATOR_INDEX__SIGNATURE_PAYLOAD\n )\n }\n}\n\nimpl AppPayload {\n // Serializes the payload as an array of bytes. Useful for hashing with sha256.\n fn to_be_bytes(self) -> [u8; APP_PAYLOAD_SIZE_IN_BYTES] {\n let mut bytes: BoundedVec<u8, APP_PAYLOAD_SIZE_IN_BYTES> = BoundedVec::new();\n\n for i in 0..ACCOUNT_MAX_CALLS {\n bytes.extend_from_array(self.function_calls[i].to_be_bytes());\n }\n bytes.extend_from_array(self.nonce.to_be_bytes::<32>());\n\n bytes.storage\n }\n\n // Executes all private and public calls\n // docs:start:entrypoint-execute-calls\n fn execute_calls(self, context: &mut PrivateContext) {\n for call in self.function_calls {\n if !call.target_address.is_zero() {\n if call.is_public {\n context.call_public_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n false\n );\n } else {\n let _result = context.call_private_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n false\n );\n }\n }\n }\n }\n // docs:end:entrypoint-execute-calls\n}\n"},"75":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/entrypoint/fee.nr","source":"use dep::aztec::prelude::PrivateContext;\nuse dep::aztec::protocol_types::{\n constants::GENERATOR_INDEX__FEE_PAYLOAD, hash::poseidon2_hash_with_separator,\n traits::{Hash, Serialize}\n};\nuse crate::entrypoint::function_call::FunctionCall;\n\n// 2 * 5 (FUNCTION_CALL_SIZE) + 2\nglobal FEE_PAYLOAD_SIZE: Field = 12;\n\n// 2 * 98 (FUNCTION_CALL_SIZE_IN_BYTES) + 32\nglobal FEE_PAYLOAD_SIZE_IN_BYTES: Field = 228;\n\nglobal MAX_FEE_FUNCTION_CALLS = 2;\n\n// docs:start:fee-payload-struct\nstruct FeePayload {\n function_calls: [FunctionCall; MAX_FEE_FUNCTION_CALLS],\n nonce: Field,\n is_fee_payer: bool,\n}\n// docs:end:fee-payload-struct\n\nimpl Serialize<FEE_PAYLOAD_SIZE> for FeePayload {\n // Serializes the entrypoint struct\n fn serialize(self) -> [Field; FEE_PAYLOAD_SIZE] {\n let mut fields: BoundedVec<Field, FEE_PAYLOAD_SIZE> = BoundedVec::new();\n for i in 0..MAX_FEE_FUNCTION_CALLS {\n fields.extend_from_array(self.function_calls[i].serialize());\n }\n fields.push(self.nonce);\n fields.push(self.is_fee_payer as Field);\n fields.storage\n }\n}\n\nimpl Hash for FeePayload {\n fn hash(self) -> Field {\n poseidon2_hash_with_separator(\n self.serialize(),\n GENERATOR_INDEX__FEE_PAYLOAD\n )\n }\n}\n\nimpl FeePayload {\n fn to_be_bytes(self) -> [u8; FEE_PAYLOAD_SIZE_IN_BYTES] {\n let mut bytes: BoundedVec<u8, FEE_PAYLOAD_SIZE_IN_BYTES> = BoundedVec::new();\n\n for i in 0..MAX_FEE_FUNCTION_CALLS {\n bytes.extend_from_array(self.function_calls[i].to_be_bytes());\n }\n bytes.extend_from_array(self.nonce.to_be_bytes::<32>());\n bytes.push(self.is_fee_payer as u8);\n\n bytes.storage\n }\n\n fn execute_calls(self, context: &mut PrivateContext) {\n for call in self.function_calls {\n if !call.target_address.is_zero() {\n if call.is_public {\n context.call_public_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n false\n );\n } else {\n let _result = context.call_private_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n false\n );\n }\n }\n }\n if self.is_fee_payer {\n context.set_as_fee_payer();\n }\n }\n}\n"},"81":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/keys/point_to_symmetric_key.nr","source":"use dep::protocol_types::{constants::GENERATOR_INDEX__SYMMETRIC_KEY, scalar::Scalar, point::Point, utils::arr_copy_slice};\nuse crate::utils::point::point_to_bytes;\nuse std::{hash::sha256, embedded_curve_ops::multi_scalar_mul};\n\n// TODO(#5726): This function is called deriveAESSecret in TS. I don't like point_to_symmetric_key name much since\n// point is not the only input of the function. Unify naming with TS once we have a better name.\npub fn point_to_symmetric_key(secret: Scalar, point: Point) -> [u8; 32] {\n let shared_secret: Point = multi_scalar_mul([point], [secret]);\n let shared_secret = point_to_bytes(shared_secret);\n let mut shared_secret_bytes_with_separator = [0 as u8; 33];\n shared_secret_bytes_with_separator = arr_copy_slice(shared_secret, shared_secret_bytes_with_separator, 0);\n shared_secret_bytes_with_separator[32] = GENERATOR_INDEX__SYMMETRIC_KEY;\n sha256(shared_secret_bytes_with_separator)\n}\n\n#[test]\nfn test_point_to_symmetric_key_matches_noir() {\n // Value taken from \"derive shared secret\" test in encrypt_buffer.test.ts\n let secret = Scalar {\n lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06\n };\n let point = Point {\n x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n is_infinite: false\n };\n\n let key = point_to_symmetric_key(secret, point);\n\n // The following value was generated by `encrypt_buffer.test.ts`.\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let key_from_typescript = [\n 251, 232, 177, 34, 2, 174, 35, 92, 165, 118, 168, 3, 153, 140, 46, 210, 203, 154, 184, 158, 236, 33, 95, 77, 93, 120, 72, 88, 190, 209, 64, 159\n ];\n assert_eq(key, key_from_typescript);\n}\n"},"82":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/keys/stored_keys.nr","source":"use crate::keys::public_keys::{PublicKeys, PUBLIC_KEYS_LENGTH};\nuse dep::protocol_types::traits::{Serialize, Deserialize};\n\n// This struct represents how public keys are stored in the key registry. We store not just the keys themselves but also\n// their hash, so that when reading in private we can perform a historical read for the hash and then show that it\n// corresponds to a preimage obtained from an unconstrained hint. We do store the keys keys regardless as they might be\n// needed during public execution, and since we need to broadcast and produce hints in some standardized way.\n// While it might seem odd to create a struct for what is effectively some data and a pure function called on it, state\n// variables rely on serializable structs in order to persist data to storage, so we must use this abstraction.\nstruct StoredKeys {\n public_keys: PublicKeys,\n hash: Field,\n}\n\nimpl StoredKeys {\n // Instances of StoredKeys are expected to only be created by calling this function so that we guarantee that the\n // hash field does indeed correspond to the hash of the keys. Ideally we'd forbid direct access to the struct, but \n // Noir doesn't yet support private members.\n fn new(public_keys: PublicKeys) -> Self {\n Self { public_keys, hash: public_keys.hash().inner }\n }\n}\n\n// Our serialization is the concatenation of the public keys serialization plush the hash, so we need one extra field.\nglobal STORED_KEYS_LENGTH: u32 = PUBLIC_KEYS_LENGTH + 1;\n\nimpl Serialize<STORED_KEYS_LENGTH> for StoredKeys {\n fn serialize(self) -> [Field; STORED_KEYS_LENGTH] {\n // The code below is equivalent to:\n // [ ...self.public_keys.serialize(), self.hash ]\n\n let mut array = [0; STORED_KEYS_LENGTH];\n\n let serialized_keys = self.public_keys.serialize();\n for i in 0..serialized_keys.len() {\n array[i] = serialized_keys[i];\n }\n\n array[PUBLIC_KEYS_LENGTH] = self.hash;\n\n array\n }\n}\n\nimpl Deserialize<STORED_KEYS_LENGTH> for StoredKeys {\n fn deserialize(array: [Field; STORED_KEYS_LENGTH]) -> Self {\n // The code below is equivalent to:\n // Self { public_keys: PublicKeys::deserialize(array[0 : PUBLIC_KEYS_LENGTH]), hash: array[PUBLIC_KEYS_LENGTH] }\n\n let mut serialized_keys = [0; PUBLIC_KEYS_LENGTH];\n for i in 0..serialized_keys.len() {\n serialized_keys[i] = array[i];\n }\n\n let hash = array[PUBLIC_KEYS_LENGTH];\n\n Self { public_keys: PublicKeys::deserialize(serialized_keys), hash }\n }\n}\n"},"83":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/keys/public_keys.nr","source":"use dep::protocol_types::{\n address::PublicKeysHash, constants::GENERATOR_INDEX__PUBLIC_KEYS_HASH,\n hash::poseidon2_hash_with_separator, point::{Point, POINT_LENGTH},\n traits::{Deserialize, Serialize, Empty, is_empty, Hash}\n};\nuse crate::keys::constants::{NULLIFIER_INDEX, INCOMING_INDEX, OUTGOING_INDEX};\n\nglobal PUBLIC_KEYS_LENGTH: u32 = 12;\n\nstruct PublicKeys {\n npk_m: NpkM,\n ivpk_m: IvpkM,\n ovpk_m: OvpkM,\n tpk_m: TpkM,\n}\n\ntrait ToPoint {\n fn to_point(self) -> Point;\n}\n\nstruct NpkM {\n inner: Point\n}\n\nimpl ToPoint for NpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for NpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\n// Note: If we store npk_m_hash directly we can remove this trait implementation. See #8091\nimpl Hash for NpkM {\n fn hash(self) -> Field {\n self.inner.hash()\n }\n}\n\nstruct IvpkM {\n inner: Point\n}\n\nimpl ToPoint for IvpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for IvpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\nstruct OvpkM {\n inner: Point\n}\n\nimpl Hash for OvpkM {\n fn hash(self) -> Field {\n self.inner.hash()\n }\n}\n\nimpl ToPoint for OvpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for OvpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\nstruct TpkM {\n inner: Point\n}\n\nimpl ToPoint for TpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Empty for PublicKeys {\n fn empty() -> Self {\n PublicKeys {\n npk_m : NpkM { inner: Point::empty() },\n ivpk_m : IvpkM { inner: Point::empty() },\n ovpk_m : OvpkM { inner: Point::empty() },\n tpk_m : TpkM { inner: Point::empty() }\n }\n }\n}\n\nimpl Eq for PublicKeys {\n fn eq(self, other: PublicKeys) -> bool {\n ( self.npk_m.inner == other.npk_m.inner ) &\n ( self.ivpk_m.inner == other.ivpk_m.inner ) &\n ( self.ovpk_m.inner == other.ovpk_m.inner ) &\n ( self.tpk_m.inner == other.tpk_m.inner )\n }\n}\n\nimpl PublicKeys {\n pub fn hash(self) -> PublicKeysHash {\n PublicKeysHash::from_field(\n if is_empty(self) {\n 0\n } else {\n poseidon2_hash_with_separator(self.serialize(), GENERATOR_INDEX__PUBLIC_KEYS_HASH as Field)\n }\n )\n }\n}\n\nimpl Serialize<PUBLIC_KEYS_LENGTH> for PublicKeys {\n fn serialize(self) -> [Field; PUBLIC_KEYS_LENGTH] {\n [\n self.npk_m.inner.x,\n self.npk_m.inner.y,\n self.npk_m.inner.is_infinite as Field,\n self.ivpk_m.inner.x,\n self.ivpk_m.inner.y,\n self.ivpk_m.inner.is_infinite as Field,\n self.ovpk_m.inner.x,\n self.ovpk_m.inner.y,\n self.ovpk_m.inner.is_infinite as Field,\n self.tpk_m.inner.x,\n self.tpk_m.inner.y,\n self.tpk_m.inner.is_infinite as Field\n ]\n }\n}\n\nimpl Deserialize<PUBLIC_KEYS_LENGTH> for PublicKeys {\n fn deserialize(serialized: [Field; PUBLIC_KEYS_LENGTH]) -> PublicKeys {\n PublicKeys {\n npk_m: NpkM { inner: Point { x:serialized[0], y:serialized[1], is_infinite: serialized[2] as bool } },\n ivpk_m: IvpkM { inner: Point { x:serialized[3], y: serialized[4], is_infinite: serialized[5] as bool } },\n ovpk_m: OvpkM { inner: Point { x:serialized[6], y: serialized[7], is_infinite: serialized[8] as bool } },\n tpk_m: TpkM { inner: Point { x:serialized[9], y: serialized[10], is_infinite: serialized[11] as bool } }\n }\n }\n}\n\n#[test]\nfn compute_public_keys_hash() {\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: 1, y: 2, is_infinite: false } },\n ivpk_m: IvpkM { inner: Point { x: 3, y: 4, is_infinite: false } },\n ovpk_m: OvpkM { inner: Point { x: 5, y: 6, is_infinite: false } },\n tpk_m: TpkM { inner: Point { x: 7, y: 8, is_infinite: false } }\n };\n\n let actual = keys.hash();\n let expected_public_keys_hash = 0x0fecd9a32db731fec1fded1b9ff957a1625c069245a3613a2538bd527068b0ad;\n\n assert(actual.to_field() == expected_public_keys_hash);\n}\n\n#[test]\nfn compute_empty_hash() {\n let keys = PublicKeys::empty();\n\n let actual = keys.hash();\n let test_data_empty_hash = 0x0000000000000000000000000000000000000000000000000000000000000000;\n\n assert(actual.to_field() == test_data_empty_hash);\n}\n\n#[test]\nfn test_public_keys_serialization() {\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: 1, y: 2, is_infinite: false } },\n ivpk_m: IvpkM { inner: Point { x: 3, y: 4, is_infinite: false } },\n ovpk_m: OvpkM { inner: Point { x: 5, y: 6, is_infinite: false } },\n tpk_m: TpkM { inner: Point { x: 7, y: 8, is_infinite: false } }\n };\n\n let serialized = keys.serialize();\n let deserialized = PublicKeys::deserialize(serialized);\n\n assert_eq(keys.npk_m.inner.x, deserialized.npk_m.inner.x);\n assert_eq(keys.npk_m.inner.y, deserialized.npk_m.inner.y);\n assert_eq(keys.ivpk_m.inner.x, deserialized.ivpk_m.inner.x);\n assert_eq(keys.ivpk_m.inner.y, deserialized.ivpk_m.inner.y);\n assert_eq(keys.ovpk_m.inner.x, deserialized.ovpk_m.inner.x);\n assert_eq(keys.ovpk_m.inner.y, deserialized.ovpk_m.inner.y);\n assert_eq(keys.tpk_m.inner.x, deserialized.tpk_m.inner.x);\n assert_eq(keys.tpk_m.inner.y, deserialized.tpk_m.inner.y);\n}\n"},"85":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/keys/getters/mod.nr","source":"use dep::protocol_types::{\n header::Header, abis::validation_requests::KeyValidationRequest, address::AztecAddress,\n constants::CANONICAL_KEY_REGISTRY_ADDRESS, point::Point, storage::map::derive_storage_slot_in_map,\n traits::is_empty\n};\nuse crate::{\n context::{PrivateContext, UnconstrainedContext},\n oracle::{keys::get_public_keys_and_partial_address, key_validation_request::get_key_validation_request},\n keys::{\n public_keys::{PublicKeys, PUBLIC_KEYS_LENGTH}, stored_keys::StoredKeys,\n constants::{NULLIFIER_INDEX, INCOMING_INDEX, OUTGOING_INDEX, TAGGING_INDEX}\n},\n state_vars::{\n shared_mutable::shared_mutable_private_getter::SharedMutablePrivateGetter,\n public_mutable::PublicMutable, map::Map\n}\n};\n\nmod test;\n\n// This is the number of blocks that must pass after a key rotation event until the old keys are fully phased out and\n// become invalid.\nglobal KEY_REGISTRY_UPDATE_BLOCKS = 5;\n\nglobal KEY_REGISTRY_STORAGE_SLOT = 1;\n\nunconstrained pub fn get_nsk_app(npk_m_hash: Field) -> Field {\n get_key_validation_request(npk_m_hash, NULLIFIER_INDEX).sk_app\n}\n\n// Returns all current public keys for a given account, applying proper constraints to the context. We read all\n// keys at once since the constraints for reading them all are actually fewer than if we read them one at a time - any\n// read keys that are not required by the caller can simply be discarded.\npub fn get_current_public_keys(context: &mut PrivateContext, account: AztecAddress) -> PublicKeys {\n // We're going to perform historical reads from public storage, and so need to constrain the caller so that they\n // cannot use very old blocks when constructing proofs, and hence e.g. read very old keys. We are lax and allow\n // _any_ recent block number to be used, regardless of whether there may have been a recent key rotation. This means\n // that multiple sets of keys are valid for a while immediately after rotation, until the old keys become phased\n // out. We *must* be lax to prevent denial of service and transaction fingerprinting attacks by accounts that rotate\n // their keys frequently.\n // Note that we constrain the max block number even if the registry ends up being empty: this ensures that proof of\n // an empty registry is also fresh.\n let current_header = context.get_header();\n context.set_tx_max_block_number(current_header.global_variables.block_number as u32 + KEY_REGISTRY_UPDATE_BLOCKS);\n\n get_historical_public_keys(current_header, account)\n}\n\n// Returns historical public keys for a given account at some block determined by a block header. We read all keys at\n// once since the constraints for reading them all are actually fewer than if we read them one at a time - any read keys\n// that are not required by the caller can simply be discarded.\n// WARNING: if called with a historical header created from a fixed block this function will explicitly ignore key\n// rotation! This means that callers of this may force a user to use old keys, potentially leaking privacy (e.g. if the\n// old keys were leaked). Only call this function with a header from a fixed block if you understand the implications of\n// breaking key rotation very well.\npub fn get_historical_public_keys(historical_header: Header, account: AztecAddress) -> PublicKeys {\n // TODO: improve this so that we always hint the correct set of keys (either registry or canonical) and hash them\n // once instead of having two different hints and twice as many constraints due to the double hashing.\n\n // The key registry is the primary source of information for keys, as that's where accounts store their new keys\n // when they perform rotation. The key registry conveniently stores a hash of each user's keys, so we can read that\n // single field and then prove that we know its preimage (i.e. the current set of keys).\n let key_registry_hash = key_registry_hash_public_historical_read(historical_header, account);\n if key_registry_hash != 0 {\n let hinted_registry_public_keys = key_registry_get_stored_keys_hint(\n account,\n historical_header.global_variables.block_number as u32\n );\n assert_eq(hinted_registry_public_keys.hash().to_field(), key_registry_hash);\n\n hinted_registry_public_keys\n } else {\n // If nothing was written to the registry, we may still be able to produce the correct keys if we happen to know\n // the canonical set (i.e. the ones that are part of the account's preimage).\n let (hinted_canonical_public_keys, partial_address) = get_public_keys_and_partial_address(account);\n assert_eq(\n account, AztecAddress::compute(hinted_canonical_public_keys.hash(), partial_address), \"Invalid public keys hint for address\"\n );\n\n hinted_canonical_public_keys\n }\n}\n\nfn key_registry_hash_public_historical_read(historical_header: Header, account: AztecAddress) -> Field {\n // The keys are stored in a Map that is keyed with the address of each account, so we first derive the corresponding\n // slot for this account.\n let keys_storage_slot = derive_storage_slot_in_map(KEY_REGISTRY_STORAGE_SLOT, account);\n\n // The keys are stored as [ ...serialized_keys, hash ], and since arrays get allocated sequential storage slots\n // (prior to siloing!), we simply add the length to the base slot to get the last element.\n let hash_storage_slot = keys_storage_slot + PUBLIC_KEYS_LENGTH as Field;\n\n historical_header.public_storage_historical_read(hash_storage_slot, CANONICAL_KEY_REGISTRY_ADDRESS)\n}\n\nunconstrained fn key_registry_get_stored_keys_hint(account: AztecAddress, block_number: u32) -> PublicKeys {\n // This is equivalent to the key registry contract having an unconstrained getter that we call from an oracle, but\n // PXE does not yet support that functionality so we do this manually instad. Note that this would be a *historical*\n // call!\n\n // TODO (#7524): call the unconstrained KeyRegistry.get_current_keys() function instead\n\n let context = UnconstrainedContext::at_historical(CANONICAL_KEY_REGISTRY_ADDRESS, block_number);\n let keys_storage = Map::new(\n context,\n KEY_REGISTRY_STORAGE_SLOT,\n |context, slot| { PublicMutable::new(context, slot) }\n );\n\n let stored_keys: StoredKeys = keys_storage.at(account).read();\n stored_keys.public_keys\n}\n"},"99":{"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::poseidon2_hash_with_separator,\n address::AztecAddress, header::Header, utils::field::full_field_less_than\n};\nuse dep::protocol_types::merkle_tree::root::root_from_sibling_path;\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 index by siloing the storage slot with the contract address\n let public_data_tree_index = poseidon2_hash_with_separator(\n [contract_address.to_field(), storage_slot],\n GENERATOR_INDEX__PUBLIC_LEAF_INDEX\n );\n\n // 2) Get the membership witness for the tree index.\n let witness = unsafe {\n get_public_data_witness(\n self.global_variables.block_number as u32,\n public_data_tree_index\n )\n };\n\n // 3) The witness is made up of two parts: the preimage of the leaf and the proof that it exists in the tree.\n // We first prove that the witness is indeed valid for the public data tree, i.e. that the preimage is of a\n // value present in the tree. Note that `hash` returns not just the hash of the value but also the metadata\n // (slot, next index and next slot).\n assert(\n self.state.partial.public_data_tree.root\n == root_from_sibling_path(witness.leaf_preimage.hash(), witness.index, witness.path), \"Proving public value inclusion failed\"\n );\n\n // 4) Now that we know the preimage is valid, we determine the value that's represented by this tree entry. Here\n // we have two scenarios:\n // 1. The tree entry is initialized, and the value is the same as the one in the witness\n // 2. The entry was never initialized, and the value is default zero (the default)\n // The code below is based on the same checks in `validate_public_data_reads` in `base_rollup_inputs`.\n let preimage = witness.leaf_preimage;\n\n let is_less_than_slot = full_field_less_than(preimage.slot, public_data_tree_index);\n let is_next_greater_than = full_field_less_than(public_data_tree_index, 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_data_tree_index, \"Public data tree index doesn't match witness\");\n preimage.value\n };\n\n value\n }\n}\n"}}}
1
+ {"transpiled":true,"noir_version":"0.33.0+cb20e078dd909656110d133339b2b425e6c3ebb0","name":"EcdsaRAccount","functions":[{"name":"entrypoint","is_unconstrained":false,"custom_attributes":["aztec(private)"],"abi":{"error_types":{},"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"}}],"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":"num_txs","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":"slot_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":"app_payload","type":{"fields":[{"name":"function_calls","type":{"kind":"array","length":4,"type":{"fields":[{"name":"args_hash","type":{"kind":"field"}},{"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":"target_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"is_public","type":{"kind":"boolean"}},{"name":"is_static","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::function_call::FunctionCall"}}},{"name":"nonce","type":{"kind":"field"}}],"kind":"struct","path":"authwit::entrypoint::app::AppPayload"},"visibility":"private"},{"name":"fee_payload","type":{"fields":[{"name":"function_calls","type":{"kind":"array","length":2,"type":{"fields":[{"name":"args_hash","type":{"kind":"field"}},{"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":"target_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"is_public","type":{"kind":"boolean"}},{"name":"is_static","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::function_call::FunctionCall"}}},{"name":"nonce","type":{"kind":"field"}},{"name":"is_fee_payer","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::fee::FeePayload"},"visibility":"private"},{"name":"cancellable","type":{"kind":"boolean"},"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"}}],"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":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::read_request::ReadRequest"}}},{"name":"nullifier_read_requests","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::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"}},{"name":"is_infinite","type":{"kind":"boolean"}}],"kind":"struct","path":"std::embedded_curve_ops::EmbeddedCurvePoint"}},{"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":"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":"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":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"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"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"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_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"item","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"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"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"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"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_stack_item_compressed::PublicCallStackItemCompressed"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}}},{"name":"public_teardown_call_request","type":{"fields":[{"name":"item","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"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"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"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"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_stack_item_compressed::PublicCallStackItemCompressed"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}},{"name":"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":"num_txs","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":"slot_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"}},"bytecode":"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","debug_symbols":"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ZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSDZhSTZhSTZhSTZhSTZhTzgiV10oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0oxi0Yxi0Yxi0Yxi0YxiXbCkLppRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRLJpRbJpRbJpRbJpRbJpR7AuW1E0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zik0zikMzikMzikMzikMzinPBknpoRnFoRnFoRnFoRnFoRnFoRnEebxTP2+dLQaNy46lt/OXRNhmvj9Z858Fu+VK1W9vbB/+tVd3Tqu1p1fe0GntazT2t1p5We0+rs6bVx2vej2t1z7Ske6Yl3TMtPV5Nf1yre6Yl3TMt6Z5pSfdMS7pnWrI905LtmZZsz7Rke6alx28u+LhW90xLtmdasj3Tku2ZlmzPtOR7piXfMy35nmnJ90xLj98e8nGt7pmWfM+05HumJd8zLfmeaSn2TEuxZ1qKPdNS7JmWHr/B5+Na3TMtxZ5pKfZMS7FnWoo909LjtztN+murM3/31H8r6NEzjV3X62nKmwe/FvR7J4+//Y+4xzt+ib/+j7D5dc/S1/X61Fo/HlzvPTjqtfiYNwek8Uf1/qmrj09dfT68+u6XB59vQW9UP9mvTz11/Qg2kXgvG3T65Wz027/Lv3v83/qtZf32sn5nV793Wdn1G/vt66UQvS6Jn+uXB9evqq8nqpm30rPttdu84p3z109ev6Hrz2te375S1H+u3z95/fHJ689PXv+yeaCWzQO1bB5o+Dxw935lWb+6rF9b1q8v6zeW9bvseksvm6/64fNVpb4+uOVtv3+rZ1j1zAWrB379IfP1Wm+U5E9/b49fnuiXvNTv2jeeWqvt5dEtb/659LvfpES8/Nu1mB9li7333CP58txzron/2/90H7/28esepT+P8l5Hyb5AdPMC47AvEN2uvz55/bCBZFgDiVwXayI5BckzPO8Tnucsn+PR/c7yOR/d7yx91cfi0/Cu6zyn4V0Xek7Du670nIZ3fZV2Gt71XZpcQhsNRWkFGa0g/9TX804DQTvRz/0B/jRQz7n1XnPr43fPfuGznE/+D0uvz96AwLJWaW+nd9l0eteC4J8jz/P9mEEn3vmbS9qJPt8e7xbp+nx7vN9ZPv7T5v1clVx2fe7y5XOXv+tnkqfhXb+TPA37toa3XUE3+BX0G7TtNIC+Iq5XxI8G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Yu8dv3ezmyYo9r7xeze7aYJi7xm/d7ObJqivtpP8181umqC+2k7yXze7aYLatJO8Nu0kr007yWvTTvLatJO8Nu0kr007yWvTTvLatJO8Nu0kr007yWvTTvLatJO8Nu0kr007yWvTTvLatJO8Nu0k7007yXvTTvLetJO8N+0k78s3NbtogupNO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8n7i+0kH83XZu1/bXa+2E7yG80+fIKy0Zfy3frXzUq09ctT5xXzd83+0YB+9gYM3UBeP546Rf2dBvyzNxCfvYH87A0Uu4Gpl0dLXZfdfDO118jtsJ8itzc1O4uaffwu7o9slj053LlZ9pTxTzf7q2l/BD6R3LdZ39QsfNK5b7Pwqei+zX6xCerXzX6xCerXzX6xCeqXzeoXm6B+3ewXm6B+3eymCUo3TVCP38X9kc1umqB00wSlmyYo3TRB6aYJyjZNULZpgrJNE5RtmqAev4v7I5vdNEHZpgnKNk1QtmmCsk0TlG+aoHzTBOWbJijfNEE9fhf3Rza7aYLyTROUb5qgfNME5ZsmqNg0QcWmCSo2TVCxaYJ6/C7uj2x20wQVmyao2DRBxaYJKjZNULlpgspNE1RumqBy0wT1+F3cH9nspgkqN01QuWmCyk0TVG6aoGrTBFWbJqjaNEHVpgnq8bu4P7LZTRNUbZqgatMEVZsmqNo0QfWmCao3TVC9aYLqTRPU43dxf2Szmyao3jRB9aYJqjdNUL1pgppNE9RsmqBm0wQ1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6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSj6DSjGDSjGDSjGDSjGDSjGBcsqYNmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFINmFJNmFJNmFJNmFJNmFPOCJXXSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLSjGLRjGLRjGLRjGLRjGJdsKQumlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlEsmlFsmlFsmlFsmlFsmlHsC5bUTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKTTOKQzOKQzOKQzOKQzOKc8GSemhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWBG0S+YUTwFsZL6FMRK6lMQK6lPQaykPgWxkvoUxErqUxArqU9BrKQ+BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0GwpBaaURSaURSaURSaUZQLltRCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pCM4pKM4pKM4pKM4pKM4p6wZJaaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUbRaEbRaEbRaEbRaEbRLlhSG80oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oGs0oOs0oOs0oOs0oOs0o+gVLaqcZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZRacZxaAZxaAZxaAZxaAZxbhgSR00oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0oxg0o5g0o5g0o5g0o5g0o5gXLKmTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSTZhSLZhSLZhSLZhSLZhTrgiV10Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi0Yxi04xi04xi04xi04xiX7CkbppRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRbJpRHJpRHJpRHJpRHJpRnAuW1EMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzikMzivNwo6hXXt8frHLF24Lee3C8FnL+u388XOS9x+dofn94jr3p9nuztanZ3tTsrGk2roeb0A9tVjY1q5uatU3N+qZmY1Oz6AlKzrc3/joA1iU3mlU9l8hent2ua/7u8X80jJ6ifkfD6EnqdzSMnqZ+Q8OCnqh+R8Poqep3NHyXyUpeq6q3bwTvfvCufP3gXf2jg/r+tnEfe37PgpxWUDy6oL6uH3/Q9XNBSSuoaAU17W9oYAXdx57fsyChFURLaqUltdKSWoNWUNIKoiW1Nq2ggRVkF62gRye1qr5O1Zr5tqB3njnydcKXKMmfZ3DTz96AffYG/LM3QHunMdo7jRWtoGb/zbX1y1PnFe9cOrD55A349dkbuMc7X8br1aq6bl2t8kteGnDtG0+t1fby6JY39fd7z20RL+1azI+yxd577pF8ee45A8Jf/+0LYXdZQ/A8yz/O0p5nebez9OdZ3u0s43mWdzvLfJ7l3c6yPvsg8tlnWf/ss2x89lk24FdxbjcAv4pzuwGDXdi7zzaVexZE++Y1aN+8Bu16ftCu5wften7Sruen0ApSWkG0pE5aUictqZOW1ElL6qQlddKSumhJXbSkLlpSFy2pi5bURUvqoiV10ZK6aEldtKRuWlI3LambltRNS+qmJXXTkrppSd20pG5aUjctqYeW1ENL6qEl9dCSemhJPbSkHlpSDy2ph5bUA0tquWBJLRcsqeWCJbVcsKSWC5bUcsGSWi5YUssFS2q5YEktFy2phZbUQktqoSW10JJaaElNU/dCU/dCU/citKQWWlIrLamVltRKS2qlJbXSklppSa20pKape6Gpe6Gpe6GpezFaUhstqY2W1EZLaqMltdGS2mhJbbSkNlpSOy2pnZbUTktqpyW105LaaUnttKR2WlI7LamdltRBS+qgJXXQkppmFIVmFIVmFIVmFIVmFIVmFIVmFIVmFIVmFIVmFIVmFIVmFIVmFIVmFIVmFIVmFIVmFIVmFIVmFIVmFIVmFIVmFIVmFOXhd3xXm5dlpur2Y/nW+7cpyTc316zr+lHJv3IjKXn43eQ/tNne1OwsaravTc3KpmZZ95s+BbHuN30KclpBrPtNn4KSVlDRCmpaQQMraC5aQUIriJbUQ0vqoSX10JJ6aEk9tKQeWlIPLKn1giW1XrCk1guW1HrBklovWFLrBUtqvWBJrRcsqfWCJbVetKQWWlILLamFltRCS2qhJbXQklpoSS20pBZaUgstqZWW1EpLaqUltdKSWmlJrbSkVlpSKy2plZbUSktqoyW10ZLaaElttKQ2WlIbLamNltRGS2qjJbXRktppSe20pHZaUjstqZ2W1E5LaqcltdOS2mlJ7bSkDlpSBy2pg5bUQUvqoCV10JI6aEkdtKQOWlIHLamTltRJS+qkJXXSkjppSZ20pE5aUictqZOW1ElL6qIlddGSumhJXbSkLlpSFy2pi5bURUvqoiV10ZK6aUndtKSmGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWjGUWjGUWjGUWjGUW7YEltNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKPoNKPoNKPoNKPoNKPoFyypnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUg2YUg2YUg2YUg2YU44IlddCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtKMYtKMYtKMYtKMYl6wpE6aUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUSyaUSyaUSyaUSyaUawLltRFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pF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2tWPoCV10JI6aFc/aEZxaEZxaHfZHtpdtod2l+2h3WV7aHfZnvsYxXsWRLv6kbSZOmlXP5J29YNmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFKdoM3XRZup69G8/1OblrUPd+u1bxzvPnG/eaOq6flTy/g35vn2p/f3h3y7B/3jyP5rta1OzsqlZ3dSsbWrWNzUbm5rNTc3WpmZ7U7O0X88O7dezNDs8NDs8NDs8NDs8NDs8NDs8Q7sqObSrkrD7m563HlZSn4JYSX0KYiX1t2mBVhArqU9BrKQ+BbGS+hTESupTECupT0G0pBZaUgstqYWW1EJLaqEltdCSWmhJDbu/6SmIltQwO1wXzA6fgmhJDbPDpyBaUsPs8CmIltQwO3wKoiW10pJaaUlttKSG3d/0FERLatj9TU9BtKSG3d/0FERLapgdPgXRktpoSe20pHZaUjstqZ2W1DA7fAqiJbXTkhp2f9NTEC2pnZbUQUtqmB0+BdGSGmaHT0G0pIbZ4VMQLamDltRBS2rY/U3rgt3f9BRES2rY/U1PQbSkht3f9BRES2rY/U1PQbSkhtnhUxAtqYuW1EVL6qIlddGSumhJXbSkLlpSw+5vegqiJXXRkrppSd20pG5aUjctqWH3Nz0F0ZK6aUndtKRuWlLDjGJdMKN4CqIlNcwonoJoSQ0ziqcgWlLDjOIpiJbUMKN4CoIltdCMotCMotCMotCMolywpBaaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaURSaUVSaUVSaUVSaUVSaUdQLltRKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pKM4pGM4pGM4pGM4pGM4p2wZLaaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaEbRaUbRaUbRaUbRaUbRL1hSO80oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oOs0oBs0oBs0oBs0oBs0oxgVL6qAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaAZxaQZxaQZxaQZxaQZxbxgSZ00o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o5g0o1g0o1g0o1g0o1g0o1gXLKmLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSLZhSbZhSbZhSbZhSbZhT7giV104xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04xi04zi0Izi0Izi0Izi0IziXLCkHppRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJpRHJhR7AtmFE9BrKQ+BbGS+hTESupTECupT0GspD4FsZL6FMRK6lMQK6lPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAsqYVmFIVmFIVmFIVmFOWCJbXQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLQjKLSjKLSjKLSjKLSjKJesKRWmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlFUmlE0mlE0mlE0mlE0mlG0C5bURjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKRjOKTjOKTjOKTjOKTjOKfsGS2mlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlG0WlGMWhGMWhGMWhGMWhGMS5YUgfNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKAbNKCbNKCbNKCbNKCbNKOYFS+qkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWkGcWiGcV6uFHUK6/vD1a54m1B7z04Xgs5/90/Hi7y3uNPzuf3h5+EfdPt92Z1U7O2qVnf1GxsajY3NVubmu1Nzc6iZh/uez+0WfQEJXOuwb0OgGfcu9Gs6vTrs9t1zd89/o+G0VPU72gYPUn9joZ9W8Poiep3NIyeqn5Hw3eZrOS1qnr7RvDuB+/K1w/e1T86qJe3jaYVNLCC7mPP/5mC+rp+/EHXzwUJrSClFWS0vyGnFRS0gpJWEC2plZbUSktqu2gFCa0gWlKb0QpyWkFBK+jRSa2qr1O1Zr4t6J1njnyd8CXOB4yfZ3Crz95Af/YG5pM34LR3Gqe907jSCjL231xbvzx1XvHOpYP7WPuPbCA+ewP3eOfLeL1aVdetq1V+yUsDrn3jqbXaXh7d8qb+fu+5LeKlXYv5UbbYe889ki/PPWdA+Ou/fSHsLmsInmf5x1n28yzvdpbzPMt7neVd9lY8z/KPs5TnWd7tLPWTDyLx2WfZ+2wj+cgGPvssG/CrOLcbgF/Fud1Awy7sxcAKSto3r0n75jVp1/OTdj3/PttU7lkQ7Xp+Jq2gohVES+qkJXXRkrpoSV20pC5aUhctqYuW1EVL6qIlddGSumhJ3bSkblpSNy2pm5bUTUvqpiV105K6aUndtKRuWlIPLamHltRDS+qhJfXQknpoST20pB5aUg8tqQeW1H3BkrovWFL3BUvqvmBJ3RcsqfuCJXVfsKTuC5bUfcGSui9aUgstqYWW1EJLaqEltdCSWmhJLbSkFlpSCy2phZbUNHXfNHXfNHXfSktqpSW10pJaaUmttKRWWlIrLamNltRGS2qaum+aum+aum+aum+jJbXRktpoSW20pHZaUjstqZ2W1E5LaqcltdOS2mlJ7bSkdlpSOy2pg5bUQUvqoCV10JI6aEkdtKQOWlIHLalpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrEffsd3tXlZZqpuP5ZvvX+bknxzc826rh+V/Cs3kuqH303+Q5u1Tc36pmZjU7O5qVnY/aa7Yfeb7obdb7oHdr/pHqEVpLSCjFaQ0woKWkFJK4iW1ENL6oEl9VywpJ4LltRzwZJ6LlhSzwVL6rlgST0XLKnngiX1XLCknouW1EJLaqEltdCSWmhJLbSkFlpSCy2phZbUQktqoSW10pJaaUmttKRWWlIrLamVltRKS2qlJbXSklppSW20pDZaUhstqY2W1EZLaqMltdGS2mhJbbSkNlpSOy2pnZbUTktqpyW105LaaUnttKR2WlI7LamdltRBS+qgJXXQkjpoSR20pA5aUgctqYOW1EFL6qAlddKSOmlJnbSkTlpSJy2pk5bUSUvqpCV10pI6aUldtKQuWlIXLamLltRFS+qiJXXRkrpoSV20pC5aUjctqZuW1E1L6qYlddOSumlJ3bSkphnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFoRnFgRnFuWBG8RTESupTECupT0GspD4FsZL6FMRK6lMQK6lPQaykPgWxkvoUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BdGSGmYUT0G0pIYZxVMQLalhRvEUREtqmFE8BcGSWmhGUWhGUWhGUWhGUS5YUgvNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKArNKCrNKCrNKCrNKCrNKOoFS2qlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWlGUWjGUWjGUWjGUWjGUW7YEltNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKNoNKPoNKPoNKPoNKPoNKPoFyypnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUnWYUg2YUg2YUg2YUg2YU44IlddCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtCMYtKMYtKMYtKMYtKMYl6wpE6aUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUUyaUSyaUSyaUSyaUSyaUawLltRFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pFM4pNM4pNM4pNM4pNM4p9wZK6aUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUaxaUZxaEZxaEZxaEZxaEZxLlhSD80oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0oDs0ozsONol55fX+wyhVvC3rvwfFayPnv/vFwkfcen+eAvz88x950+73Z3tTsLGr24W7zQ5uVTc3qpmZB7+jvPDjq9Zljfjyz6fc3E5J8/VfKB00L/0r5Sf6XIpPtr83WJTf+pahOvz67Xdf83eP/aBg9u/yOhtHzy+9oGD3D/IaGHT3HyLdNiq/vdpfEOw18rdmk7fXtusP+17dr/1qzyY1mbVOzvqnZ2NQsekr655vtev08cf30ecK/1tWdG81+ras7N5r9Wld3ft1sfK2rOzea/WIT1K+b/WIT1K+b/WIT1K+b9U3NfrEJ6tfNbpqgYtMEFZsmqNg0QeWmCSo3TVC5aYLKTRPUwzepfGizmyao3DRB5aYJKjdNULlpgqpNE1RtmqBq0wRVmyaoh284+tBmN01QtWmCqk0TVG2aoGrTBNWbJqjeNEH1pgmqN01QD9889qHNbpqgetME1ZsmqN40QfWmCWo2TVCzaYKaTRPUbJqgHr4R8EOb3TRBzaYJajZNULNpgpo9E5Rc17VnhPrW7Z4Z6lu3e4aob93umaK+deurut0zR33rds8g9a3bPZPUt273jFLful01S8mqWUpWzVKyapaSVbPUwxfqfmy3q2YpWTVLyapZSlbNUrJqltJVs5SumqV01Sylq2aph6+8/thuV81SumqW+mKbwG91u2qW+mK7wG90+8WWgd/qdtUs9cXWgd/qdtUs9fD14R/b7apZir2c/O7drpql2GvJ797tqlmKvZD87t2umqW+2vryG92umqW+2gLzG92umqUWrTD/1u2qWWrREvNv3a6apRatMf/W7apZatEi82/drpqlFq0y/9btqllq0TLzb92umqUWrTP/1u2qWWrRQvNv3a6apRatNP/W7apZatFS82/drpqlFq01/9btqllq0WLzb92umqUWrTb/1u2qWWrRcvNv3a6apRatN//W7apZatGC82/drpqlFq04/9btqllq0ZLzb92umqUWrTn/1u2qWWrRovNv3a6apRatOv/W7apZatGy82/drpqlFq07/9btqllq0cLzb92umqUWrTz/1u2qWWrR0vNv3a6apRatPf/W7aZZSlbtPZdVe89l1d5zWbX3XC5f1e2mWUpW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPddXec12191xX7T3XVXvP9fJV3W6apXTV3nNdtfdcV+0911V7z3XV3nNdtfdcV+0911V7z3XV3nNdtfdcV+0911V7z3XV3nNdtfdcV+0911V7z3XV3nNdtfdcV+0911V7z3XV3nNdtfdcV+0911V7z3XV3nNdtfdcV+0911V7z3XV3nNdtfdcV+0911V7z3XV3nNdtfdcV+0911V7z3XV3nNdtfdcV+0911V7z3XV3nNdtfdcV+0911V7z3XV3nNdtfdcV+0911V7z3XV3nNdtfdcV+0911V7z3XV3nNdtfdcV+0911V7z3XV3nNdtfdcV+09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qTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHaTgHaTgHaTgHaTgHaRctsw3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIB3nIB3nIB3nIB3nIP2iZbbjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHGTgHGTgHGTgHGTgHGRctMwOnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnINMnINMnINMnINMnIPMi5bZiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQhXOQhXOQhXOQhXOQddEyu3AOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnEOsnEOsnEOsnEOsi9aZjfOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQQ7OQQ7OQQ7OQQ7OQc5Fy+zBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcihOUi9aA7yVATL7FMRLLNPRbDMPhXBMvtUBMvsUxEss09FsMw+FcEy+1SEy2yagzwV4TKb5iBPRbjMpjnIUxEus2kO8lSEy2yagzwV4TKb5iBPRbjMpjnIUxEus2kO8lSEy2yagzwV4TKb5iBPRbjMpjnIUxEus2kO8lSEy2yagzwV4TKb5iBPRbjMpjnIUxEus2kO8lSEy2yagzwV4TKb5iBPRbjMpjnIUxEus2kO8lSEy2yagzwV4TKb5iBPRbjMpjnIUxEus2kO8lSEy2yagzwV4TKb5iBPRbjMpjnIUxEus2kO8lSEy2yagzwV4TKb5iBPRbjMpjnIUxEus2kO8lSEy2yagzwV4TKb5iBPRbjMpjnIUxEus2kO8lSEy2yagzwV4TKb5iBPRbjMpjnIUxEus2kO8lSEy2yagzwV4TKb5iBPRbjMpjnIUxEus2kO8lSEy2yagzwV0TJbcA5ScA5ScA5ScA5SLlpmC85BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BKs5BKs5BKs5BKs5B6kXLbMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMM5SMM5SMM5SMM5SLtomW04B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B+k4B+k4B+k4B+k4B+kXLbMd5yD94Q5Sr7y+P1jlircVvffgeC3k/Hf/eLjIe4/P0fz+8Bx70+5Lt7Wq217V7Wzq9uHu9GO7lVXd6qpubVW3vqrbWNUtepaSyfbXWbAuudHtt509r89u1zV/9/jvHaPnqd/SMXqm+i0do+eq39Gxomer39Ixer76LR3fZcaS17Lq7fvBu5/EK18/iVf/aKFe3j3u49vvWpHjKopHV9TX9eOPut6pKHEVFa6ixv0dDa2i+/j2u1YkuIpwmW24zDZcZlvgKkpcRbjMtsZVNLSK/MJV9OjMVtXXSVsz31b0zjNHvk79EiX5zlzu+uk7sE/fgX/6DnDvOY57z/HCVdTsv7u2fnnqvOK9qwo+n72DuD59B/d4D8x4vZZV161rWX7JSwfns+6Np9Zqe3l0y5sG+r3ntoiXfi3mR9li7z33SL4895xZ4a///mWyu6w6eB7m98O052He7zD9eZj3O8x4Hub9DjOfh3m/w6xPP498+qk2Pv1Um59+qk34lZ1/oAP4lZ1/oAOjXe+7z8aWu1aE+4Y2cd/QJu5qf+Ku9ifuan/hrvaX4CpSXEW4zC5cZhcuswuX2YXL7MJlduEyu3GZ3bjMblxmNy6zG5fZjcvsxmV24zK7cZnduMweXGYPLrMHl9mDy+zBZfbgMntwmT24zB5cZg8ts+OiZXZctMyOi5bZcdEyOy5aZsdFy+y4aJkdFy2z46Jldly4zBZcZgsuswWX2YLLbMFltuAyW3CZLbjMFlxmCy6zFZfZistsxWW24jJbcZmNk/2Bk/2Bk/2huMxWXGYbLrMNl9mGy2zDZbbhMttwmW24zMbJ/sDJ/sDJ/sDJ/nBcZjsusx2X2Y7LbMdltuMy23GZ7bjMdlxmBy6zA5fZgcvswGV24DI7cJkduMwOXGYHLrMDl9mJy+zEZXbiMhvnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIOPhd67/dgPv7w/+trf7x4PfvZdKvrkjaF3Xj0r+pXteRdeqbntVt7Op27lWdSuruqXdLTuGdrfsuI+XvWtFtLtlxySuosJV1LiKBlZRXheuIsFVRMvsvGiZnRcts/OiZXZetMzOi5bZedEyOy9cZgsuswWX2YLLbMFltuAyW3CZLbjMFlxmCy6zBZfZistsxWW24jJbcZmtuMxWXGYrLrMVl9mKy2zFZbbhMttwmW24zDZcZhsusw2X2YbLbMNltuEy23CZ7bjMdlxmOy6zHZfZjstsx2W24zLbcZntuMx2XGYHLrMDl9mBy+zAZXbgMjtwmR24zA5cZgcuswOX2YnL7MRlduIyO3GZnbjMTlxmJy6zE5fZicvsxGV24TK7cJlduMwuXGYXLrMLl9mFy+zCZXbhMrtwmd24zG5cZjcusxuX2Y3L7MZlduMyu3GZ3bjMblxmDy6zB5fZOAeZOAeZOAeZOAeZOAeZOAeZOAeZOAdZOAdZOAdZOAdZOAdZFy2zC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgC+cgG+cgG+cgG+cgG+cg+6JlduMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMcZOMc5OAc5OAc5OAc5OAc5Fy0zB6cgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxycgxyag7SL5iBPRbDMPhXBMvtUBMvsUxEss09FsMw+FcEy+1QEy+xTESyzT0W4zKY5yFMRLrNpDvJUhMtsmoM8FeEym+YgT0W4zKY5yFMRLrNpDvJUhMtsmoM8FeEym+YgT0W4zKY5yFMRLrNpDvJUhMtsmoM8FeEym+YgT0W4zKY5yFMRLrNpDvJUhMtsmoM8FeEym+YgT0W4zKY5yFMRLrNpDvJUhMtsmoM8FeEym+YgT0W4zKY5yFMRLrNpDvJUhMtsmoM8FeEym+YgT0W4zKY5yFMRLrNpDvJUhMtsmoM8FeEym+YgT0W4zKY5yFMRLrNpDvJUhMtsmoM8FeEym+YgT0W4zKY5yFMRLrNpDvJUhMtsmoM8FeEym+YgT0W4zKY5yFMRLrNpDvJUhMtsmoM8FeEym+YgT0W4zKY5yFMRLrNpDvJUhMtsmoM8FeEym+YgT0W4zKY5yFMRLbMF5yAF5yAF5yAF5yDlomW24Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4Byk4hyk4hyk4hyk4hykXrTMVpyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDVJyDNJyDNJyDNJyDNJyDtIuW2YZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkIZzkI5zkI5zkI5zkI5zkH7RMttxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDtJxDjJwDjJwDjJwDjJwDjIuWmYHzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEGzkEmzkEmzkEmzkEmzkHmRcvsxDnIxDnIxDnIxDnIxDnIxDnIxDnIxDnIxDnIxDnIxDnIxDnIxDnIxDnIxDnIxDnIxDnIxDnIxDnIxDnIxDnIxDnIxDnIxDnIxDnIxDnIxDnIfLiD1Cuv7w9WueJtRe89OF4LOf/dPx4u8t7jczS/PzzH3rT70q2t6tZXdRurus1V3daqbkHv7e88OOr1mc/XoT/q0Nf3FNAk8K/UT7K4/1L9Qv7XIpPtr93WJTf+tahOvz67Xdf83eO/d4yeYn5Lx+hJ5rd07Os6Rk80chr48a53SbzXwdeaUtpe37c77Kf3bf9aU8qtbntVt7Op24fL9o/tFj0v/fPddr1+urh+/nQRX+uKz61uv9YVn1vd+qpuv9YVn1vdfrFZ6ka3X2yWutHtF5ulbnT7xWapX3ebX2yWutHtqlkqV81SuWqWeviGj4/tdtUslatmqVw1S+WqWSpXzVK1apaqVbNUrZqlatUs9fDNOx/b7apZqlbNUrVqlqpVs1StmqV61SzVq2apXjVL9apZ6uEbsT6221WzVK+apXrVLNWrZqleNUvNqllqVs1Ss2qWmlWz1MM31X1st6tmqVk1S82qWWpWzVKzaZaqa9MsVdemWaquTbNUXZtmqbp8VbebZqm6Ns1SdW2aperaNEvVtWqWklWzlKyapWTVLCWrZqmHb3b92G5XzVKyapaSVbOUrJqlZNUspatmKV01S+mqWUpXzVIP37j8sd2umqV01Sylq2YpXTVL6apZylbNUrZqlvpiG8VvdbtqlvpiG8VvdbtqlvpiG8VvdbtqlrJVs5StmqV81SzF3m1+925XzVLsneZ379ZXdbtqlvpqe89vdLtqlvpqe89vdLtqlvpqe89vdLtqllq197xW7T2vVXvPa9Xe81q197xW7T2vVXvPa9Xe81q197xW7T2vVXvPa9Xe81q197xW7T2vVXvPa9Xe81q197xW7T2vVXvPa9Xe81q197xW7T2vVXvPa9Xe81q197xW7T2vVXvPa9Xe81q197xW7T2vVXvPa9Xe81q197xW7T2vVXvPa9Xe81q197xW7T2vVXvPa9Xe81q197xW7T2vVXvPa9Xe81q197xW7T2vVXvPa9Xe816197xX7T3vVXvPe9Xe8758VbebZqletfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+0971V7z3vV3vNetfe8V+09n1V7z2fV3vNZtfd8Vu09n8tXdbtplppVe89n1d7zWbX3fFbtPZ9Ve89n1d7zWbX3fFbtPZ9Ve89n1d7zWbX3fFbtPZ9Ve89n1d7zWbX3fFbtPZ9Ve89n1d7zWbX3fFbtPZ9Ve89n1d7zWbX3fFbtPZ9Ve89n1d7zWbX3fFbtPZ9Ve89n1d7zWbX3fFbtPZ9Ve89n1d7zWbX3fFbtPZ9Ve89n1d7zWbX3fFbtPZ9Ve89n1d7zWbX3fFbtPZ9Ve89n1d7zWbX3fFbtPZ9Ve89n1d7zWbX3fFbtPZ9Ve89n1d7zWbX3fFbtPZ//p727220syc40fEt7/a91NQPbGAwaaNgD2zPAHPjeJyorJWVZ6lSJRYZeVdSJ4UKTjC+YjE+hLT6xjzr3fI4693yOOvd8jjr3fI4693yOOvd8jjr3fI4693yOOvd8jjr3fI4693yOOvd8jjr3fI4693yOOvd8jjr3fI4693yOOvd8jjr3fI4693yOOvd8jjr3fI4693yOOvd8jjr3fI4693yOOvd8jjr3fPafe26jT/nd+uezlWjr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SMU5SMM5SMM5SMM5SMM5SLtonW04B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B+k4B+k4B+k4B+k4B+kXrbMd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAd5yAD5yAD5yAD5yAD5yDjonV24Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4Bxk4hxk4hxk4hxk4hxkXrTOTpyDTJyDTJyDzIvW2YlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIlzkIVzkIVzkIVzkIVzkHXROrtwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJwDrJxDrJxDrJxDrJxDrIvWmc3zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2zkE2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6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgHGTgHGTgHGTgHGTgHGRetswPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIBPnIBPnIBPnIBPnIPOidXbiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGThHGThHGThHGThHGRdtM4unIMsnIMsnIMsnIMsnIMsnIMsnIMsnIMsnIMsnIMsnIMs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","brillig_names":["get_note_internal","decompose_hint","get_auth_witness","enqueue_public_function_call_internal","call_private_function_internal","debug_log_format","notify_set_min_revertible_side_effect_counter","directive_invert","directive_integer_quotient"]},{"name":"verify_private_authwit","is_unconstrained":false,"custom_attributes":["aztec(private)","aztec(noinitcheck)","aztec(view)"],"abi":{"error_types":{},"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"}}],"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":"num_txs","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":"slot_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":"inner_hash","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"}}],"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":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::read_request::ReadRequest"}}},{"name":"nullifier_read_requests","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::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"}},{"name":"is_infinite","type":{"kind":"boolean"}}],"kind":"struct","path":"std::embedded_curve_ops::EmbeddedCurvePoint"}},{"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":"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":"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":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"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"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"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_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"item","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"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"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"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"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_stack_item_compressed::PublicCallStackItemCompressed"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}}},{"name":"public_teardown_call_request","type":{"fields":[{"name":"item","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"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"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"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"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_stack_item_compressed::PublicCallStackItemCompressed"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}},{"name":"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":"num_txs","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":"slot_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"}},"bytecode":"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","debug_symbols":"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","brillig_names":["get_note_internal","decompose_hint","get_auth_witness","pack_returns","directive_invert","directive_integer_quotient"]},{"name":"compute_note_hash_and_optionally_a_nullifier","is_unconstrained":true,"custom_attributes":[],"abi":{"error_types":{},"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":"compute_nullifier","type":{"kind":"boolean"},"visibility":"private"},{"name":"serialized_note","type":{"kind":"array","length":5,"type":{"kind":"field"}},"visibility":"private"}],"return_type":{"abi_type":{"kind":"array","length":4,"type":{"kind":"field"}},"visibility":"public"}},"bytecode":"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","debug_symbols":"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","brillig_names":["compute_note_hash_and_optionally_a_nullifier"]},{"name":"constructor","is_unconstrained":false,"custom_attributes":["aztec(private)","aztec(initializer)"],"abi":{"error_types":{},"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"}}],"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":"num_txs","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":"slot_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":"signing_pub_key_x","type":{"kind":"array","length":32,"type":{"kind":"integer","sign":"unsigned","width":8}},"visibility":"private"},{"name":"signing_pub_key_y","type":{"kind":"array","length":32,"type":{"kind":"integer","sign":"unsigned","width":8}},"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"}}],"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":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::read_request::ReadRequest"}}},{"name":"nullifier_read_requests","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::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"}},{"name":"is_infinite","type":{"kind":"boolean"}}],"kind":"struct","path":"std::embedded_curve_ops::EmbeddedCurvePoint"}},{"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":"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":"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":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"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"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"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_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"item","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"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"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"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"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_stack_item_compressed::PublicCallStackItemCompressed"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}}},{"name":"public_teardown_call_request","type":{"fields":[{"name":"item","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"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"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"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"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_stack_item_compressed::PublicCallStackItemCompressed"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}},{"name":"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":"num_txs","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":"slot_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"}},"bytecode":"H4sIAAAAAAAA/+1dB3xURRM/0ggQqkpRwdAEpL29u+QuoAjSi/Tek1yO3puAhWJBBESwK3ZU7L1i7wULFhAbdlFRVOyK3zzYJ8MxSa7Mxjef936/f24ye2/vvzu7s2X23pXz7Lserubx1M3aJ5cDpOrXFEB2hM55xXIaocsg7s0idFUIXTVCV4PQ1QK0j9AdRbwvm9DVJ3QNCN3RhK4JIDNC15TQNSN0xxC65oSuBaFrSehaEbrWhM4idIrQeQmdj9D5CV0OocsldAFCFyR0eYSuDaFrS+iOJXTHEbp2hO54Qtee0HUgdCcQuo6ErhOh60zouhC6roSuG6HrTuh6ELqehK4XoTuR0PUmdH0IXV9C14/Q9Sd0AwjdQEI3iNANJnRDCN1QQjeM0A0ndCMI3UhCN4rQjSZ0YwjdWEKXT+gKCF0hoQsRuiJCF9Y6fJXTr+31q8/K9fuLAt4i5VP5ljevIJhj+XMKcoMqqHKCOSFv0OcrCvqDgbyCvICVp/y+IhXOyfOFrX3XzpT9eVkJXd5Ckzy/jZunUpEam5s9fqUhrnY97NGyPcY4clMkf6vf49z3Hfy/C/A94IeU/XrnSo2oAyuxSzVjzOu7FD7b/MjWhizLZP0dw5jXLsb62y2k/poz5vU9Y/39xFh/lG/4EfmG3Uj+Cck/RPiGn+H/XwC/An4rA9/QgjGvnxlt87uQtt2SMa9fGOvvDyH114oxr18Z6+9Pw77hd+QD/kDyn0j+LcI3/GX/D/g7ZZ8hTPuG1ox5/cVom3KpMtq2xZjXHsb6SxFSf4oxr78Z6y811axvsNu34wNSkJyKZE/qgb4hDf5PB2QAypeBb/Ay5pWWymebTCFt28eYVzpj/VUQUn9+xrwyGOuvomHfkIl8QAUkV0Ry+QjfUAn+zwJUBlQpA9+Qw5hXJUbbVBXStnMZ88pirL9qhtt2VdSGqyG5MpKrRLTt6vB/DcAhgENT98e1Stqns2MZjhz0FL9PdxjkVxNQC1C7DPpNHmNehzHavY6QftOGMa+ajPV3uJD6a8uYVy3G+jvCsN+pg/zL4Ug+Asm1I/zOkfB/XUA9wFFl4BuOZczrSEbbZAtp28cx5lWXsf7qC6m/dox51WOsvwaGfUM28gH1kdwAyUdF+IaG8H8jQGPA0WXgG45nzKsho22aCGnb7RnzasRYf02F1F8HxrwaM9ZfM8O+oQnyAU2R3AzJR0f4hmPg/+aAFoCWZeAbTmDM6xhG27QS0rY7MubVnLH+Wgupv06MebVgrD/LsG9ohXxAayRbSG4Z4RsU/O8F+AD+MvANnRnzUoy2yRHStrsw5uVlrL9cw207B7XhXCT7kOyPaNsB+D8IyAO0iXKfzj4z68jdPMXv07WF/I4FHAdoVwb9pjtjXm0Z7X68kH7TgzGvYxnrr72Q+uvJmNdxjPXXwbDfOR75l/ZI7oDkdhF+5wT4vyOgE6BzGfiGXox5ncBomy5C2vaJjHl1ZKy/rkLqrzdjXp0Y66+bYd/QBfmArkjuhuTOEb6hO/zfA9AT0KsMfEMfxry6M9rmRCFtuy9jXj0Y66+3kPrrx5hXT8b662PYN5yIfEBvJPdBcq8I39AX/u8H6A8YUAa+oT9nP2G0zUAhbXsAZz9hrL9BQupvIGdbZqy/wYZ9w0DkAwYheTCSB0T4hiHw/1DAMMDwMvANgxjzGsJomxFC2vZgxryGMtbfSMNtewRqwyORPAzJwyPa9ij4fzRgDGBslPt09nezHXmop/h9unzIrwBQCAiVQb8ZxphXPqPdi4T0m+GMeRUw1l9YSP2NYMyrkLH+xhn2O0XIv4SRPA7JoQi/Mx7+nwCYCJhUBr5hJGNe4xltM1lI2x7FmNcExvqbIqT+RjPmNZGx/qYa9g2TkQ+YguSpSJ4U4Rumwf/TATMAM8vAN4xhzGsao21mCWnbYxnzms5Yf7OF1F8+Y14zGOtvjmHfMAv5gNlInoPkmRG+YS78Pw9wEmB+GfiGAsa85jLaZoGQtl3ImNc8xvpbKKT+Qox5ncRYfycb9g0LkA9YiOSTkTw/wjecAv+fCjgNsKgMfEMRY16nMNpmsZC2HWbM61TG+ltiuG0vRm14CZJPQ/KiiLa9FP4/HXAG4Mwo9+mqo/wCqcXv050FacsAZwOWl0G/GcVXv+osRrufI6TfLGWsv2WM9bfCcL85B7XhFUg+G8nLI/rNSvh/FeBcwOoS+s1KlMcqJJ+L5NUReZ8H/68BrAWcX0Le56E81iB5LZLPj8j7Avj/QsBFgItLyPsClMeFSL4IyRdH5H0J/H8p4DLA5SXkfQnK41IkX4bkyyPyXgf/XwG4EnAV4UtS9Gt7/WoldqmjPXzt92rGfmXXTaquIzvfbHhNR3UbeZVjrpdyHt6+6HB0ynANlOlawHWA9YDrU0spUKLGuYHNOHvXdMZ43hg/T3+kguqUN6DOdw2S1yP5xohOuQH+vwlwM+CWMhjgr2XsSBsYB6hbDQ9QtyIb3ITkm5F8S4RtboP/bwfcAbiTsA13+7wr/jrwRVMHuH1eh+TbkHxXRB3cDf/fA7gXcF8Z1MH9fO0gTNXB/ais1yP57hLq4AH4/0HAQ4CHoxg4E36oooevjz5gaOLMbfeNfDxDlN03Ivva9nLkdSXY/RH4/1HAY4DHy2DCtJ7Rnz7CaHd7YlHJUzaTI8bxycJ8n0g1SNjOnDvfJxkbg6lyP4lmlkz5Gl2d47wSrdNrGe3zlNDO+pShzvp0qkHCTxvorM+4vLPa5X7GUGflngk8qblyj65PprrT3naHtX/aK8Vz8MXdDg7zmHHUTO3qn595wXXxrG63zzl7Ns6rnfBBhO45vZ+DL+5RBFdinMb3auOrZxkb0nOGpvrcHZGzzM8TeRVYhaEcVZAbCqii/JxgYWGeTylvfm5+boE3GC4qyFHBnCDkWZjvDcLHefMLVZGVn1tUliPn84ZGzhdSDRJ+wcDI+aLLR0673C8KGTmf01y5OqyTL6eNXmJu+I7jt/Ot7znw4nZczzHWw8t89ZCD6+FlYgDkbmebmIMxFZCt7P83oT0ZG3t02iupZsv1Kl8cI2CS52uIp8rJLcovCAf9RT4Y7KyQ3yry+XyW1+sPe0PeoqDK9QfD4XAwrMKBokJVUJgL2Qd8hYUw4OXl5IUwT+7+8gpjf3mdr80VUvuDr6I29xqSXy9hf3Az/P8G4E3AW3p/MN2zf48x8uIem0xN+Lh5bmbkmYF4vq39wRb9ulW/vqNft+n5SlP9/nfh//cA79sLB8CHgO2AjwAfAz4BfAr4DPA54AvAl4AdgK8AXwO+AewEfAv4DrAL8D3gB8CPgN2AnwA/A34B/Ar4DfA74A/An4C/7HYE+Dt1X2MqB0hxIv2OI9+Wuj8yXVaz0i2GZqWpaQYJ25lz55uW5u5ZqV3uNBSOYMq3TDcPtxpqbOlpBgmnG2hsGS5vbHa5M4Q3tncMNbbyaQYJlzfQ2DJd3tjscmcaaGwmuNoeOCONf35fIU1mJ9tmqJNVTDNIuKKBTlbJ5Z3MLnclIZ3MdgYVDHSyrDTexhq5oNyCFo5bkbwttfjDgJVBqAKoCqiWZv4wIOOoqCoztvnqhm1j5+/YoAqSqyK5WtqBtqkBwiGAQwGHpR2YH2e7tPtlloH2XpOvTlXk5gZ3n3+bcSBxFv+1oPy1AXUAhwOOABwJqAuoBzgKkA2oD2gAaAhoBGgMOBrQBNAU0AxwDKA5oAWgJaAVoDXAAiiAF+AD+AE5gFxAABAE5AHaANoCjgUcB2iXtm/DCK//a6Xt3wB1dLUJXR1CdzihO4LQHUno6hK6eoTuKEKXTejqE7oGhK4hoWtE6BoTuqMJXRNC15TQNSN0xxC65oSuBaFrSehaEbrWhM4idIrQeQmdj9D5CV0OocsldAFCFyR0eYSuDaFrS+iOJXTHEbp2yB86l+N/2+tXK7HrAJ+TqK+txTAWFoX3XbUZx9VLs8xsGEfaIsEyh+rw1V/e4Xx5qSMYbXGZCFsUqSPZ6q9Q1WXLK6jqMdrichG2sNRRXPVXZKlsrrwKLVWf0RbrJNgiaKkGXPUHY09DpryKIK9GjLa4QoAtCqHMjZnqL2h/a5UpLyiyasJoiyvdb4siu8xNeeqv0M6rGU9eQTuvYxhtcZX7bWFnrZqz1F/R3rxasORVuDevloy2uNr1tgjuLXMrlvrbS1O15siraF9eFqMtrnG7LQr3lVlx1F9wX15ejrz2FVn5GG1xrcttEdJl9jOUuUDnlcOQV0Dnlctoi+vcbYt/vo0QSLzMyskrmHBewbCTVx6jLda72hbBAqfMbRKvP6fMqm3CeQX+yetYRltc72pb5PxT5uMSLrP6J692aXx7lng/L+GHuJSRLazELsW4b6YY933UOkZb3CjEFoz7A4pxfauuYrTFBiG2YFwHKcZ5vLqW0RY3CbEF43xPMc5X1PWMtrhZiC0YxzXF6JfVBkZb3GLIFtznjRj7r2Jsf8pU/aVE1J8b4sr//EI54zzUzoP7DJB93qpmGv85qPZpvLbmLrf9JaVaBsr9eJa7y723PRoo9xNl5BsT5dmBsT8y2lo94fJ2Y/eX4w20m6ddXu5ahvrLM0L6ywmM/YXR1spU/XHbuWOaDJ6d4ufpjVTY3CLPgtt+1znzfQKSOyK5U9qBZ8E7g9AF0BXQLa34s+BWYpeyv6xc20Aff96wb0uUn13mzgbK/YKQNWtnxnl+d0Y/ydhulBRbvMd4LrhHmpk+7KZ+QfnY7siX9ojSx/YEoRfgREBvgz7WfhhEHQO+5mWX+1i7zD0NlHuTkH7dk7Ev9mH0sYztRkmxxfuMPrZvmpk+7KZ+QfnYPsiX9o3Sx/YDoT9gAGCgQR9rP2zncAO+5jWX+1i7zP0MlPt1If26H2NfHMToYxnbjZJiiw8YfezgNDN92E39gvKxg5AvHRyljx0CwlDAMMBwgz7WfpjZEQZ8zZsu97F2mYcYKPdbQvr1EMa+OILRxzK2GyXFFh8y+tiRaWb6sJv6BeVjRyBfOjJKHzsKhNGAMYCxBn3s9tT9z0zA+SZap1td7mPtMo8yUO53hPTrUYx9MZ/RxzK2GyXFFtsZfWxBmpk+7KZ+QfnYfORLC6L0sYUghABFgLBBH2s/jLeuAV/znst9rF3mQgPlfl9Ivy5k7IvjGH0sY7tRUmzxEaOPHZ9mpg+7qV9QPnYc8qXjo/SxE0CYCJgEmGzQx9oPO69nwNdsd7mPtcs8wUC5PxLSrycw9sUpjD6Wsd0oKbb4mNHHTk0z04fd1C8oHzsF+dKpUfrYaSBMB8wAzDToY+0fkzjKgK/51OU+1i7zNAPl/kxIv57G2BdnMfpYxnajpNjiE0YfOzvNTB92U7+gfOws5EtnR+lj54AwFzAPcJJBH2v/WE+2AV/zpct9rF3mOQbKvUNIv57D2BfnM/pYxnajpNjiU0YfuyDNTB92U7+gfOx85EsXROljF4JwMuAUwKkGfaz9Y2j1Dfiab1zuY+0yLzRQ7p1C+vVCxr54GqOPZWw3SootPmP0sYvSzPRhN/ULyseehnzpoih97GIQlgCWAk436GPtH5tsYMDX7HK5j7XLvNhAub8X0q8XM/bFMxh9LGO7UVJs8Tmjjz0zzUwfdlO/oHzsGciXnhmljz0LhGWAswHLDfpY+8d8GxrwNbtd7mPtMp9loNw/CenXZzH2xXMYfSxju1FSbPEFo49dkWamD7upX1A+9hzkS1dE6WNXgrAKcC5gtUEfa/9YeiMDvuZXl/tYu8wrDZT7NyH9eiVjXzyP0ccythslxRZfMvrYNWlm+rCb+gXlY89DvnRNlD52LQjnAy4AXGjQx+5I3f8biDjfROv0T5f7WLvMaw2U+y8h/XotY1+8iNHHMrYbJcUWOxh97MVpZvqwm/oF5WMvQr704ih97CUgXAq4DHC5QR/7Ver+35TF+SZap57K7vaxdpkvMVDucpVl9OtLGPviOkYfy9hulBRbfMXoY69IM9OH3dQvKB+7DvnSK6L0sVeCcBXgasA1Bn3s16n7f6Mb55tonaa53MfaZb7SQLnThfTrKxn74rWMPpax3Sgptvia0cdel2amD7upX1A+9lrkS6+L0seuB+F6wA2AGw362G/Avk0N+JpMl/tYu8zrDZS7gpB+vZ6xL25g9LGM7UZJscU3jD72pjQzfdhN/YLysRuQL70pSh97Mwi3AG4F3GbQx+4E+zYz4GuyXO5j7TLfbKDclYX065sZ++LtjD6Wsd0oKbbYyehj70gz04fd1C8oH3s78qV3ROlj7wThLsDdgHsM+thvwb7HGPA11VzuY+0y32mg3NWF9Os7GfvivYw+lrHdKCm2+JbRx96XZqYPu6lfUD72XuRL74vSx94PwgOABwEPGfSx34F9mxvwNYe63MfaZb7fQLkPE9Kv72fsiw8z+ljGdqOk2OI7Rh+7Mc1MH3ZTv6B87MPIl26M0sc+AsKjgMcAjxv0sbvAvi0M+JraLvexdpkfMVDuOkL69SOMffEJRh/L2G6UFFvsYvSxT6aZ6cNu6heUj30C+dIno/SxT4HwNOAZwLMGfez3YN+WBnzNkS73sXaZnzJQ7rpC+vVTjH3xOUYfy9hulBRbfM/oY59PM9OH3dQvKB/7HPKlz0fpY18A4UXAS4CXDfrYH8C+rQz4mmyX+1i7zC8YKHd9If36Bca+uInRxzK2GyXFFj8w+thX0sz0YTf1C8rHbkK+9JUofeyrILwGeB2w2aCP/RHs29qAr2nkch9rl/lVA+VuLKRfv8rYF99g9LGM7UZJscWPjD72zTQzfdhN/YLysW8gX/pmlD72LRDeBmwBbDXoY3eDfS0Dvqapy32sXea3DJS7mZB+/RZjX3yH0ccythslxRa7GX3stjQzfdhN/YLyse8gX7otSh/7LgjvAd4HfGDQx/4E9lUGfE0Ll/tYu8zvGih3SyH9+l3Gvvgho49lbDdKii1+YvSx29PM9GE39QvKx36IfOn2KH3sRyB8DPgE8KlBH/sz2NdrwNdYLvexdpk/MlBuJaRff8TYFz9j9LGM7UZJscXPjD728zQzfdhN/YLysZ8hX/p5lD72CxC+BOwAfGXQx/4C9vUZ8DV+l/tYu8xfGCh3jpB+/QVjX/ya0ccythslxRa/MPrYb9LM9GE39QvKx36NfOk3UfrYnSB8C/gOsMugj/0V7Os34GuCLvexdpl3Gih3npTvbzL2xe8ZfSxju1FSbPEro4/9Ic1MH3ZTv6B87PfIl/4QpY/9EYTdgJ8APxv0sb+BfXMM+JpjXe5j7TL/aKDcx0mJZTP2xV8YfSxju1FSbPEbo4/9Nc1MH3ZTv6B87C/Il/4apY/9DYTfAX8A/jToY38H++Ya8DXtXe5j7TL/ZqDcHaT0a8a++Bejj2VsN0qKLX5n9LF70sz0YTf1C8rH/oV86Z4ofezftpAOaYCUdHM+9g+wb8CAr+nkch9rl/lvA+XuLKRf/83YF1PT+XgxthslxRZ/MPrYtHQzfdhN/YLysXYbdHxpWnp0PjYd3pcBKA/INOhj/wT7Bg34mm4u97F2me065s63u5B+nc7YFysw+ljGdqOk2OJPRh9bMd1MH3ZTv6B8bAXkVytG6WMrwfuyAJUBVQz62L/AvnkGfGwvl/tYu8yVDPjYE4X060qMfbEqo49lbDdKii3+YvSx1dLN9GE39QvKx1ZFfrValD62OryvBuAQwKEGfewesG8bAz62r8t9rF3m6gZ8bD8h/bo6Y188jNHHMrYbJcUWexh9bM10M33YTf2C8rGHIb9aM0ofWwveVxtQB3C4QR/7N9i3rQEfO9DlPtYucy0DPnaQkH5di7EvHsHoYxnbjZJii78ZfeyR6Wb6sJv6BeVjj0B+9cgofWxdeF89wFGAbIM+1s74WAM+dqjLfaxd5roGfOwwIf26LmNfrM/oYxnbjZJiCw9j/LFBupk+7KZ+QfnY+sivNojSxzaE9zUCNAYcbdDHloOMjzPgY0e63MfaZW5owMeOEtKvGzL2xSaMPpax3SgptijH6GObppvpw27qF5SPbYL8atMofWwzeN8xgOaAFgZ9bApk3M6Ajx3rch9rl7mZAR+bL6RfN2Psiy0ZfSxju1FSbJHC6GNbpZvpw27qF5SPbYn8aqsofWxreJ8FUAAv8rHOlcJs5+oevvpsnW6mbadGlDlRnptT+epvC+Oemo+x/iArTyXP/rEEX9zjNSdvzNefbpCwP50/3xxGR2eq3Dnp+yuYKd+9jS3Fs985mWxsjJ3XMslzS6qZTpGL2i3/t2AZZ017Ty9rjg7pdKQz3VA4DYAbdkB3oKBdJhMGyDXgmXKZh2ZT5U4xWO6EjyQarkMrsUvZDTPPwPKxDfPw7jgAO99FOl/uuggaqou2huqircG6sB2hiboIuf2rcIbaQNG/W+7CUvgZa/thQ1sXkcs7K7FLMbZLxWhrxVl/9hzE3hqgZtyeGOuztPaE8zQxZnHVCZ5UHlvSLNlK7FJ5hgYBTDpGzqq0z7E5H2vAKUx0yX5mLJO3hGOh6e50MBMrm2mXx6HJSbz2Ka3OOe3TDuWlfD7oG6GACofCvpxAnrdA5fpyc8P+cCA36A+Fc/z5oUCR8uf7vHlFASusgkVFgRxfYSA3nBcqzA1jp61CPp8/lFdQqHK8ufkFVjDky7fC/oDPa+WHfIFQyBfMzc33+UK5wXAwL+j15od9QSsnEMizcr2+PK8p+7TT9inL1fVmQ6vr4/Xqur0UB26K3/EGnHUHQwNXB4Orl722MlAXJxiqixMM1sVmQyu5yW7/Mqih/jDF5Ss5U21/qpCVHGO7VIy2VlOTK7nISx1vaCXXUeJKrqPhlVxHA05h5n9wJdcp3Z0OZqahlUInYSu5zowruamMKzlT9umMVnLFDQpu3oIzydPUANNF4gDTxfAA08XAADO7jAYYzjivi2JFBwwwifKaU0YrgER5dmUcoBnbn5pjaADoGsUAnfCjudL5BsIDtkddNEDPNmSfbv9HW63d9VZrD+ogk5XYpYo70MN5Qi3h55EzOhcThnfqkNupmqrDRPPq6XJ72B2mp4GJUS9Dk8ReBreiexiqixMN1cWJhrflTdTFSS7fljfVH+a7fFveVNtfIGRbnrFdKkZbqwXJbfnIa++YxVUneLLb2+SuSU9Dg0Bvg7smNufeBpzCqUK25XsyTgT7pLvTwZxqaFXZpwy25Tnt05dxW34B46rflH36/gurflNfX+qnV/39pThwU/z6GXDWAwwNXAMMrl7suuhvoC4GGqqLgYa/KmNiZr/I5Ss5U/1hsctXcqba/hIhKznGdqkYba2WJFdykZfqZ2glN0jiSm6Q4ZXcIANO4cz/4EpucLo7HcyZhlYKg4Wt5IYwruSWMK7kTNlnyL9wwKp7upl+L2WAGSpxgBlqeIAZamCAWSbkgBWnA5tvaAabKK+zhRywGsY4QDO2P3W2oQFgWBkcsBrOeMBqQWV3DtDLDNlnOGEf7lXvZsZn9r3DmNcIxrHMnuCU1fP/RhiaOIxMN0h4ZDp/vqMYBzZT5R6Vvr+CmfIt0+f/vSPk+X+cpzZxpxhd0mw64aeOM84GsFd3SP8/HJsdozvQWOrYLIcBRhvwTKMNB+S4yp1isNwJPy7a5UFNu2HmG1hWFhhaYhcYDOSNNVQXhYbqotDw8VQTdbHC5UFNU/1hpcuDmqba/iohQU3GdqkYba1WJYOakdfeMYurTvCkMmRyzznf0CAQMrjnbHMOGXAKa4QENfMZJ4JF6e50MGsM7ckVlUFQk9M+Ycag5irGPVNT9gn/C8dT3zG0uh6nV9fjpThwU/zGGXDWEwwNXBMMrl7suhhvoC4mGqqLiQbr4h1DK7nzXb6SM9UfLnD5Ss5U279QyEqOsV0qRlurC5MruchLjTO0kpskcSU3yfBKbpIBp3Dpf3AlNzndnQ7mUkMrhcnCVnJTGFdyFzKu5EzZZ8q/cDx1TLqZfi9lgJkqcYCZaniAmWpggLlcyPFUTge20tAMNlFe64QcT53GOEAztj+1ztAAMK0MjqdOZzyeuqqyOwfoyw3ZZ/r/0VbrDL3VOpM6yGQldqniDvRwnlBLNC/GQ1FGnjfn1CG3UzVVh4nmNcvl9rA7zCwDE6PZhiaJsw1uRc80VBdzDNXFHMPb8ibq4iqXb8ub6g9Xu3xb3lTbv0bItjxju1SMtlbXJLflI6+9YxZXneDJ7lyTuyazDA0Ccw3umtic5xpwCtcL2ZafxTgRnJfuTgdzvaFV5bwy2JbntM9JjNvy1zCu+k3Z56R/YdVv6utL8/Wqf4EUB26K33wDznqhoYFrocHVi10XCwzUxcmG6uJkw1+VMTGzv9HlKzlT/WGDy1dyptr+TUJWcoztUjHaWt2UXMlFXmq+oZXcKRJXcqcYXsmdYsAp3PYfXMmdmu5OB3OboZXCqcJWcqcxruRuYlzJmbLPaf/CAasZ6Wb6vZQBZpHEAWaR4QFmkYEB5g4hB6w4HdjVhmawifK6U8gBq8WMAzRj+1N3GhoAFpfBAasljAesrqnszgH6DkP2WVLC7g7HuZdZ6fwPGeL0Z0tdvnOaCZ2lUhq/bU43XG6O30ztaaDtcD4L9wyX16Hdtk9P59/FYuwz6nRGe5zpcnvY7eVMA/PQswyf40uUn73Lf5aBct9T2d2+e4uhct9raK7L7WsZ7aPudXlEZ6shWy9j9Gn2JkxZPaN4GfM+gXOdnW6Q8Nnp/PkuZxzgTJV7efr+CmbKd29js5HiMd/YynnMOERuns8xnjHJQjzP0fZboV9X6tdV+vVc/bpav56nX9fo17X69Xz9eoF+vbCkncREG/PydN4G4KxoV2rSWLea0K0ldE6By9JTnmPIU16UbpDwRQY85cUu95R2uS825CnLqrGtMNTYLkk3SPgSA43tUpc3NrvclxpobBTXhL90rTsG9/qB0yFcJnQevcpQh7083SDhyw102HUu77B2udcJHx3ONdTYrkg3SPgKA43tSpc3NrvcVwoZHVbrjsE9OnA6hKtcHgWyZwKXGdhdutrl5bbb+FUGyn2N0NnAeYYc9LXpBglfa8BBX+dyB22X+zrhs4E1hhrb+nSDhNcbaGzXu7yx2eW+XshsYK3uGNyzAU6HcIPLR0V71L7GwKh4o8vLbbfxGwyUe4PQ2cD5hhz0TekGCd9kwEHf7HIHbZf7ZuGzgQsMNbZb0g0SvsVAY7vV5Y3NLvetQmYDF+qOwT0b4HQIt7l8VLRH7Q0GRsXbXV5uu43fZqDcdzCX27lSmHlyHiy5kzEWb8LWdlu8w4Ct7zJka26ed7Px9PlN8rwnfp6hSIXNrZZn/7dF7P/tetij5XOQvALJ92jZue9e+P8+wP2AB9L3652L+3T0Ssa+dC9jH3/QUFvnrj/GiKe6j7H+HhJSf4xBPHU/Y/09zLyAiPQNDyIf8BCSH0byAxG+YSP8/wjgUcBjZeAbVjPaZiOjbR4X0rYZ4x/qEcb6e0JI/TFu6atHGevvScO+4XHkA55A8pNIfizCNzwF/z8NeAbwbBn4hrWMtnmK0TbPCWnbjLuh6mnG+nteSP0xbvCpZxjr7wXDvuE55AOeR/ILSH42wje8CP+/BHgZsKkMfMOFjLZ5kdE2rxi2zSvIBi8h+WUkb4qwzavw/2uA1wGb0w/MD9uEY8/kLgN7l3cy2ucNl+/h2bZ6w8C+zpsuL7epbwu+5fJy2237TQPlfsDl3w61y/2WgXI/KOSbwIz2UQ8yP6syw1M2AVTOLylWRjzf1rG+Lfp1q359R79u06/v6tf39Ov7+vUD/fqhft2uXz/Srx+nl/AlQCuxSzF+CfCAx9psTT/4y33vEroPCN1H6WX/JcC3mevBuT5JN0j4k3T+fD9lnP2YKven6fsrmCnfMj3KscVQY/ss3SDhzww0ts9d3tjscn9uoLFRXBN+AIbuGNxTB06H8EW6zA77jqEO+2W6QcJfGuiwO1zeYe1y7xA+Omwz1Ni+SjdI+CsDje1rlzc2u9xfCxkd3tUdg3t04HQI37h888SeCXxhYBNhp8vLbbfxbwyU+1uhs4H3DDno79INEv7OgIPe5XIHbZd7l/DZwPuGGtv36QYJf2+gsf3g8sZml/sHIbOBD3TH4J4NcDqEH10+Ktqj9rcGRsXdLi+33cZ/NFDun4TOBj405KB/TjdI+GcDDvoXlztou9y/CJ8NbDfU2H5NN0j4VwON7TeXNza73L8JmQ18pDsG92yA0yH87vJR0R61fzIwKv7h8nLbbfx3A+X+0+Xltu3yp4Fy/8Xs4Ev6AtfbSN6SXvwXuPbA/3/rkxrlMswfttzKVwdqD6MPSskwc9iHu/4Yo1Xqb8b6SxVSf4wBGOXJ4Ku/tAyzvsFu344PSEVyGpLLZRzoG9Lh/wxAeUBmGfiGdxltk85omwpC2jbj3rXKYKy/ikLqj3E7VpVnrL9Khn1DBeQDKiK5EpIzI3xDFvxfGVAFULUMfMMHjLbJYrRNNSFtm3EnS1VmrL/qQuqPcXNGVWGsvxqGfUM15AOqI7kGkqtG+IZD4P9DAYcBapaBb/iI0TaHMNqmlmHb1EI2OBTJhyG5ZoRtasP/dQCHA47IMPcFLvvs+V8G9p04H8xzJLPv4d6HsG1lc+S2TV3D7fL+1P3try5qix+jfYi7Ug9sl/XgfUcBsgH1S2iXVmLX3i+KLDewt7PR5V+Ssstcz0BbekTIl6QY7aMecflPY9q23mqgjT/u8nLbD4e600C5n6hcNnPURHk24PPritHW6glDP6/eAPkzE33oXQNt6WmX96HVhvrQM0L6UEPGPsRoa/WMgDHnAwPt5nmXl3utof7ygpD+0oixvzDaWr1gaMxpZHjMedtAW3rZ5X3oHEN9aJOQPtSYsQ8x2lptEjDmbDHQbl5zeblXGOovrwvpL0cz9hdGW6vXmcecyH21xmgv7WgkN8gofl+tCaQ1BTQDHEPsxXPvs1ydymfn5ox2xmO4nW92RD2kHVwPykrgahJZpwnk1vRg+8SdWzPGfvimIX9B2MJKpNTHeEieceXW3FNMmePIrQWjLd4qa1tY8ZW6pacEnjHm1spTYpljyq01oy3e/ndsYcVcak+pPKPOTXmiKHOUuXkZbbHl37SFFX2pfZ4oeUaRm98TdZlLzS2H0RZb/31bWNGUOtcTE88Scwt4YixzCbkFGW3xjltsYZVc6jxPHDyLya2NJ64yk7m1ZbTFNnfZwiqu1Md64uZ5UG7HeRIoc0Ru7Rht8a4bbWEdXOrjPQnyRLm19yRc5n9y68Boi/fcawsLl/oEDwvPvbl19DCVGXLrxGiL991ui32X6syYF+P6VuH1WcJPeBBiC8Z1kGKcx6utjLb4UIgtGOd7inG+ot5ltMV2IbZgHNcUo19WHzDa4qMyskWiPFsw7jEz+gLF2JbVR2XXLxLaM+/q4dsz7+bh2zPvztjedgnZM+/h4dsz7+nh2zPvxWiL74XsmZ/o4dsz7+3h2zPvw2iLH4Tsmff1lMoz6tz6eaIoc5S59We0xY9C9swHeKLkGUVuAz1Rl7nU3AYx2mK3kD3zwZ6YeJaY2xBPjGUuIbehjLb4Scie+TBPHDyLyW24J64yk7mNYLTFz0L2zEd64uZ5UG6jPAmUOSK30Yy2+EXInvkYT4I8UW5jPQmX+Z/c8hlt8auQPfMCDwvPvbkVepjKDLmFGG3xm5D9qCLGvBjXt+p7xv2o34XYgnEdpBjn8Wo3oy3+EGILxvmeYpyvqF8YbfGnEFswjmuK0S+r3xlt8ZeQPfOWjHvmjL5AMbZlxWmLvc/P8uz7zUv7sv9vgc7sd/Hsl1sifRjpm2i9fTatFcitM8r2NzRbMT8zxLmsDIOErQz+fBXjA4JMlVtl7K9gpnzL9EnorQ01Nm+GQcJeA43N5/LGZpfbZ6CxUVwTLb/SXLnz9TN/SynLs/8bcwfUqV95vT7lDwA1CziGCoPeomB+Tk5+Xo435A+FvZY3JzdcZAG3UJ4/D9R+VZhvWWErvyCscvZE5pcfLIRS51ohC/6Ec0JBKLY/L+QPhn2W3x+ycpXfKsgLFoUCKpCfV5Dj8+aHc31WocrxWYE8tYfZ5nufUkuVO8E65eZp55cDNs8FBPQonBXB3bm4+1vA0NMSmevci+siqP1DnvNb8M7X8OyEvyJ0eRkHjzDcjwsMMDjVovC+K8jooPMMGTeFuf44y9wG5aWCPq834LPfFwxZyh8q9Aa93lCB3yq08gu9RXl+lRf2e/2+wlBhAeSZr8JWOL8wLxzcx6ssZyhtDM1Q2mYYJNzWwAzlWJfPUOxyHytkhpKnuXLnexxzY3WctZ1viqH2ai9j/Abqop3Ln/nZ2lC5j3d5uU3Nztszt/3Kuuzt0D7N8Uhur8tgIwfpc5HsTHI6wOsJgI56Flnes3+PiLraM9W1ibzzrNzCgrxCXzmiDNxtpUUG/0SJm2MXj/s5thRQj2EB9djE0MSdm2cHITybM/ts5+qU4Tnw4ibeScgKrjnjpL2zoYf0dNYP6SnLVZ2phtclwyDhLgZWdV1dvqqzy921jFZ1VmLX3qfUvWfgaW1ZVdxd7vMMPaWuchUzTpb7KXXdGB0jo61VZZe3G7u/vG+g3VRzebnXGOov1YX0l+6M/YXR1oqz/qinOnZDOwPdkdyohKc69oC0noBegBPL4KmOPRjnA72xnXOt3FzY1LeKfFZYWV7Y9c/LK4AAY74qyilUuRAIyC0qhM8p9AVz8vIhRhkK+v35KlhQ6MuBSGVZTg57G5oc9skwSLiPgclhX5dPDu1y9zV0AsY+xpXiMd/YeggJ9GLH00/XeX/9OkC/DsQxXe7Rra+h5ecAtI8b6bH7Ic/cH8kDSvDYgyBtMGAIYGiGud+36qEbP3c9H2p49sTRDgYZKPdhhmZP3GdyGR2GGsSYF2O7UZy2sJ15BWQPPCIPsx2X/YZUT9lMLYYxens8Og3XHnhE5MYn95GaYYxTguHR51VYSl5qBPOcrdizeYldpZ1R8xaGlS+nKJBj5eb7c0K5Pm/IG7BC/pywgorw5vmhGsKFfpgce31hb8BbaPJsXjndsJyRboSWR8LrKMDoMj4TN1rgmbgxukOOjTwTN0aficMXd2cdzXj+bQxjxx8rJHrCWeZ8oeff8g0thgsyDBIuMLAYLnT5Ytgud2EZRUo4HEChgTl8yND5t5DB82/2Lvg7BnaDa7t8F3yVoV3wOkJ2wYsY116MtlZ1BESNthloN0e6vNznGuovdYX0lzBjf2G0tarLHDXCK0/7/yK0AgsjuaEeP0tbrY2D1/GACWW8WpsgcLU2Uc+fJkWu1iaWwWptAuNqbSLjZHWSkNUaZ5knC12tTTa0WpuSYZDwFAOrtakuX63Z5Z4qZLU2SXPlzneaodXatIyDRzhu+3E6RdNcxzFyzdb5TIc8ZwBmAmYBZgPmAOYC5gFOAswHLAAsBJwMOAVwKuA0wCLAYsASwFLA6YAzAGcCzgIsA5wNWA44B7ACsBKwCnCuHp2xzW0+mZ4DdTMI3UxCN4vQzSZ0cwjdXEI3j9CdROjmE7oFhG4hoTuZ0J1C6E4ldKcRukWEbjGhW0LolhK60wndGYTuTEJ3FqFbRujOJnTLCd05hG4FoVtJ6FYRunO1Dl/cT8Eaxzh+TWebWFpqBiOvbJdH3O0y27aYyVJ/++w6K/G8vE7MczajLeq72Rb+/XHeOYmV2cIx47mJ5OU9MP48j9EWDdxpCysy5n5SnGXODR8cv58fX15B6izAAkZbNHSbLYL0+YeFsZc5UNxZipNjzStQ/LmMUxht0cg9tvCWdBbl1FjKHCj5XMtp0edV6hmZRYy2aOwGWwRK5akWR1dmK4oyqyXR5GVFVX9qKaMtjv53bZETJU91emll9kddZnVGiXn5wzHUnzqT0RZN/i1bBGLiqc4qvszBGMuslhWTV1445vpTZzPaomnZ28KKg6daTpXZiqvM6pyD81Jx1p9awWiLZmVpi1DcPNXKA8vsS6DMahXKyxtOqP7UuYy2OKaMbGEldinG/QHFuL5VeH2WqC2aC7EF4zpIMc7jVWNGW7QQYgvG+Z5inK+opoy2aCnEFozjmmL0y6o5oy1aldEJISuxSzH2X8XY/hRn/dntNwzI1vmdq2NiK3WM7BwdMztbx9DO0jG1M3SMbamOuS3WMbjTdEzuFB2jW6hjdvN1DG+ejunN0TG+WTrmZ8cB7LhC5BV5qCPRtjeecd6zOoPtUEeZPiQf87YSvDDf8zIMErYz5853DWNjMFXuNahTMOW7t7GleMrm2N74DDPOPrJOEu2AuCGvzTD4vfM1fBVywPfOMekYOReWduTM5mznH+sRu9IqfS1jBzyf2as59WrnuyjOtqDs7/koK2zleWEnJ1CYGyjIC3kLgvlhXzjHF/LFW6+lNXbOer3AUL1eEH+9/l+01wsN1euF//H2epGher1I12tZfr2fc/DEg/3FelJxiT1mmBjg1hqYra1lnkmYKnesncOKodyJcrzUcB1aiV3KbpiXZvDb5jJDTuGyEpytldilLjFUF5cbqovLDdbFeEN10c7lDycy1R+O/3fLXerRElNtv72QrUfGdqkYba0468+eSNnbj9QuhCfG+iytPeE8TYxZXHWCJ5XrStqFsBK71KWGBoF1JexClJKNKu1zbM7rDDiFTi6JDcUyeUu0zFdkuNPBcNoCt8sr0OQkXvuUVuec9rkSxxZ8PugboYAKh8K+nECet0Dl+nJzw/5wIDfoD4Vz/PmhQJHy5/u8eUUBK6yCRUWBHF9hIDecFyrMDWOnrUI+nz+UV1Cocry5+QVWMOTLt8L+gA8W/CFfIBTyBXNz832+UG4wHMyDRTos/YNWTiCQZ+V6fXleU/a5Eq2uuQaF0nZzcJ5SBoWrJA4KVxkeFK4yMCh0ccmgUGwjDuz7Zj6n07napYNCF0NO52qGQaG0rU1O+1zj0kHBlH2u+T/acr1Wb7leR225WoldxcY7OGOViebFuH2rTBjeqUPu5wyZqsNE81rvcnvYHWa9gYH9ekOTnOsNbn9eZ6gubjBUFzcY3go2URfdXL4VbKo/dHf5VrCptt9DyFYwY7tUjLZWPZJbwZHX3jGLq07wZPdGk6v+9YYGgRsNrvptzjcacAq9hWwFr2ecCG7IcKeD6W1oVbmhDLaCOe1zE+Oqvwfjqt+UfW4i7BPrmZrStn457XOzIf95M0M9lLY7xVkPtxiqh1uEtYdbDdXDrcLaw22G6uG2KEJFbp7YEXTZ2jGeNN4ucdJ4u+FJ4+0GJo193fEcocKydHJ3MObFOWnsa2hSckcUk8ZET9dz2ufODL6JHuek0ZR97mQYHEu5WJ+ZcReb/wya+U1xvevGHVHibON3uzyCYdv4bgPjzT2Gxl4730z9f9hz8MX1mU5+3PXdMc39HO/lnkhKabT9XR5esct8r4FyDxDy4JF7GR3zfYyOmbHdKE5bGHaS/4Qp/otO8r7/qpO8P8Osk7QSu5Rd5vsNlPsBQzOaBzL2P1nfxNc9qRmyldilOGfID7q8PdkrqgcNtKeHBPSjhwyU+2FD/ejhEvqRldhlzKcMdvnvL5pqA0OE/P7iRsZJIqOt1RBDO1Qbk6tr4xwfMT1x5FhlPmKg0w8Xssp8RECnT9QWI4Q44EcZbcHY/tSI5CpdhLN9lNPZSh0VN6W6n+Njpg4vcI9ij/MR9UptUI9nuJ/jE1Ia1JN8RH1SG9STAhrUU1Ia1NN8RP1SG9TTAhrUM1Ia1LN8RHOkNqhnBTSo56Q0qOf5iOZKbVDPC2hQL0hpUC/yEQ1IbVAvCmhQL0lpUC/zEQ1KbVAvC2hQm6Q0qFf4iOZJbVCvCGhQr0ppUK/xEc2X2qBeE9CgXpfSoDbzES2Q2qA2C2hQb0hpUG/yES2U2qDeFNCg3krGyCy1UUCM7G0pPX8LH9EiqQ1qi4CevzXZ8y11v4Ce/46Unr+NjaiypDaobQJ6/rtSGtR7fA1KSW1Q7wloUO9LaVAf8DUosed3PhDQoD6U0qC28zUosed3tgtoUB9JaVAf8zUosed3PhbQoD6R0qA+5WtQYs/vfCqgQX0mpUF9ztegxJ7f+VxAg/oiub8DEV0B+ztfSun5O/h6vthzMTsE9PyvpDSor/kalNhzMV8LaFDfSGlQO/kalNhzMTsFNKhvk3MTS90gYG7ynZSev4uv54s9b7JLQM//XkqD+oGvQYWkNqgfBDSoH6U0qN18DUrsuZjdAhrUT1Ia1M98DSostUH9LKBB/WKqQXH/kB/jwz0VfsBhog39V0MVyN0hf2Pj6QvY3OxnW9VHXH/VD2iz5ceQ/ASSn0LyM0h+DskvIPklJG9C8qtIfh3JbyD5LSS/jeStSH4Hye8i+X0kf4jkj5D8CZI/Q/IXSP4SyV8h+Rskf4vk75D8PZJ/RPJPSP4Fyb9p+Xd4/QPwJ+AvwB7A3wBPeXgfIAWQCkgDpAMyAOUBmYAKgIqASoAsQGVAFUBVQDVAdUANwCGAQwGHAWoCagFqA+qUP/j3hLgdVjm+vKxsnc/hwPsIwJGAuoB6gKMA2YD6gAaAhoBGgMaAowFNAE0BzQDHAJoDWgBaAloBWgMsgAJ4AT6AH5ADyAUEAEFAXvl9lWSXy3nYoc3HsaujO4LQHUno6hK6eoTuKEKXTejqE7oGhK4hoWtE6BoTuqMJXRNC15TQNSN0xxC65oSuBaFrSehaEbrWhM4idIrQeQmdj9D5CV0OocsldAFCFyR0eeX3P5zWubifW4j7bKLjmN03Es2rKGxfljqiPB+v0e74GasSy2zb4kiW+ttn17qJ5+V1fli4HqMtxrjZFv79P6Z8VGJltvAPM2cnkpf3wB95rs9oi7HutIUV+cPWDeIsc2744B/JbhhfXkHqB7cbMdoi3222CNI/Mt449jIHivvB8qNjzStQ/I+fN2G0RYF7bOEt6Qffm8ZS5kDJPx7fLPq8Ckv7IfpjGG1R6AZbBErlqZpHV2YrijKrFtHkZUVVf6oloy1C/64tcqLkqVqVVmZ/1GVWrUvMyx+Oof6UxWiLon/LFoGYeCpVfJmDMZZZeYvJKy8cc/0pH6MtwmVvCysOnspPldmKq8wq5+C8VJz1p3IZbTGuLG0RipunChxYZl8CZVZBlJc3nFD9qTxGW4wX8tsNjPsDinF9q8Yy/nbDBCG2YFwHKcZ5vCpktMVEIbZgnO8pxvmKCjPaYpIQWzCOa4rRL6sJjLaYXEa/L2MldinG/qsY25/irD8nNpitX3E8IjJegeMZON6B4yE4XoLjKTjeguMxOF6D4zk43oPjQThehONJON6E41E4XoXjWTjeheNhOF6G42k43objcTheh+N5ON6H44E4XojjiTjeWBHJlZCcheTKSK6C5KpIrobk6kiugeRDkHwokg9Dck0k10JybSTXQfLvKCb+B5L/RPJfSN6D5L+R7EF5lkNyCo6hITkNyelIzkByeSRnIrmClh2H0gb+bws4FnAcoB3geHvODOgAOAHQEdAJ0BnQBdAV0A3QHdAD0BPQC3AioDegD6AvoB+gP2AAYCBgEGAwYAhgKGAYYDhgBGAkYBRgNGAMYCwgH1AAKASEAEWAMGAcYDxgQnndXjz7faL9fzf7LIKWuyO5UYauV/Te4Sh9hJYnQr6TAJMB6Tp/5x58OT6lvX61ErvU5PKGDkjx8vTiuphSft/r1PKeA4O9dsJfEQS4B67JDIu7fQHacHgK40JxqiFDpjDXH2eZp6G8FGz0wwa9/b5gCPZpQrDF7vWGCvxWoZVf6C3K88Mel9/r9xWGCmHTMZivwlY4vzAvHNzHy+50lTz7Oxi+uDvdtPL8kwz7ml7eIOHp5fnzncHYGEyVe0b5/RXMlC/JlcMBzCjPn+9M5sbqOGs7X9On6TidommuExm5Zut8ZkGeswFzAHMB8wAnAeYDFgAWAk4GnAI4FXAaYBFgMWAJYCngdMAZgDMBZwGWAc4GLAecA1gBWAlYBTgXsBpwHmCNHp2xzWeVP/iE1mxCN4fQzSV08wjdSYRuPqFbQOgWErqTCd0phO5UQncaoVtE6BYTuiWEbimhO53QnUHoziR0ZxG6ZYTubEK3nNCdQ+hWELqVhG4VoTuX0K0mdOcRujXlzZ/8m8g4fs1im1haajYjr5OFnPybw1J/++w6N/G8/jn5N4/RFqcIOfl3UmJlPuDk3/xE8oo4+beA0RanCjn5tzDOMlMn/06OLy/y5N8pjLY4TcjJv1NjL3OxJ/9OizWvEk7+LWK0xSIhJ/8Wx1LmUk7+LYk+r1JP/i1ltMViISf/To+uzFGd/DsjmryiPPl3JqMtlgg5+XdWaWWO4eTfsvJ8J//OZrTFUiEn/5aX5zv5d055vpN/KxhtcbqQk38ry/Od/FtVnu/k37mMtjhDyMm/1eX5Tv6dV57v5N8aRlucKeRUDeP+gGJc36pTGU/VnCXEFozrIMU4j1eLGW2xTIgtGOd7inG+ok5ntMXZQmzBOK4pRr+szmK0xXIhJ/8Y+69ibH+Ks/7s9jsJkK3zW6NjYqt1jGyVjpmt0DG05TqmtkzH2M7UMbfTdQxuiY7JLdIxulN1zO5kHcNboGN6J+kY31wd87PjAHZcIfKKPNSR8AlgxnnP2vJshzqssjzUgXlbCV6Y7/nlDRK2M+fO9wLGxmCq3BegTsGU797GluIpm2N7k8qbcfaRdZJoB8QN+ULU1thPqVzAVyEKR5Ex6Rg5F5Z25MzmbOcf6xG70ir9QsYOeBGzV3Pq1c53UZxtQdnfJVJW2Mrzwk5OoDA3UJAX8hYE88O+cI4v5Iu3Xktr7Jz1erGher04/nr9v2ivlxiq10v+4+31UkP1eqmu13Ski7zcPHjiwf4yPam43B4zTAxwFxqYrV3IPJMwVe5YO4cVQ7kT5bjOcB1aiV3KbpjryvPb5gpDTuGKEpytldilLjdUF1caqosrDdbFJEN1cWkVd/sUU/3hsn+33KUeLTHV9i8XsvXI2C4Vo60VZ/3ZEyl7+5HahfDEWJ+ltSecp4kxi6tO8KTyqpJ2IazELrXO0CBwVQm7EKVko0r7HJvzVQacwlUuiQ3FMnlLtMxXl3eng+G0BW6XV6PJSbz2Ka3OOe1zDY4t+HzQN0IBFQ6FfTmBPG+ByvXl5ob94UBu0B8K5/jzQ4Ei5c/3efOKAlZYBYuKAjm+wkBuOC9UmBvGTluFfD5/KK+gUOV4c/MLrGDIl2+F/QEfLPhDvkAo5Avm5ub7fKHcYDiYB4t0WPoHrZxAIM/K9fryvKbscw1aXXMNCqXt5uA8pQwK10ocFK41PChca2BQuMYlg0KxjTiw75v5nE7nOpcOCtcYcjrXMQwKpW1tctpnvUsHBVP2Wf9/tOV6vd5yvYHacrUSu4qNd3DGKhPNi3H7VpkwvFOHqULqMNG8bnS5PewOc6OBgX2DoUnOBoPbnzcYqoubDNXFTYa3gk3UxXUu3wo21R/Wu3wr2FTbv17IVjBju1SMtlbXJ7eCI6+9YxZXneDJ7s0mV/03GhoEbja46rc532xiQBSyFXwj40TwlvLudDA3GVpV3lIGW8Gc9rmVcdV/PeOq35R9biXsE+uZmtK2fjntc5sh/3kbQz2UtjvFWQ+3G6qH24W1hzsM1cMdwtrDnYbq4c4oQkVuntgRdNnaMZ403iVx0niX4UnjXQYmjbe44zlChWXp5O7mDGswThpvMTQpuTuKSWOip+s57XNPeb6JHuek0ZR97mEYHEu5WJ+ZcS+b/wwaOYh9gd51444ocbbx+1wewbBtfJ+B8eZ+Q2OvnW+m/n+S5+CL6zOd/Ljru2Oa+zk+wD2RlNJob3N5eMUu8wMGyn27kAePPMDomB9kdMyM7UZx2sKwk/wnTPFfdJIP/led5EMu/3qeXeaHDJT7YUMzmofL73+yvomve1IzZCuxS3HOkDe6vD3ZK6qNBtrTIwL60SMGyv2ooX70aAn9yErsMuZT7qry32wDd5fRuZZEeT7GOElktLW629AO1WPJ1bVxjo+bnjhyrDIfN9Dp7xOyynxcQKdPeHtOiAN+gtEWjO1P3Z9cpYtwtk9wOlupo+KmVPdzfDJpKBh5MtzP8amkoaC1CjDU00lDQSUIMNQzSUNZ6lkBhno2aShLPS/AUM8lDWWpFwUY6vmkoSz1sgBDvZA0lKVeEWCoF5OGstRrAgz1UtJQltoswFAvJw1lqTcFGGpT0lCW2ihgr++VpKEstUVAj3o1aSgI9QjoUa8lDWWpbQJ61OtJQ1nqPQGG2pw0lKU+EGCoN5KGstR2AYZ6M2koS30swFBvJQ1lqU8FGOrtpKEs9bkAQ21JGgoWkwLWUVuThrLUDgE96p2koSz1tQBDbUsaylI7BRjq3aShLHWDgDHqvaShLLVLQI96P2koS/0gwFAfJA1lqd0CDPVh0lCW+lmAobabehQl94PrGR9moR5hfCjCR8xfkre/I1kfGfsj/UVfW34SyU8h+WkkP4PkZ5H8HJKfR/ILSH4RyS8h+WUkb0LyK0h+FcmvIfl1JG9G8htIfhPJbyH5bSRvQfJWJL+D5G1IfhfJ7yH5fSR/gOQPkbwdyb9l7JM/Bt0ngE8BnwE+B3wB+BKwA/AV4GvAN4CdgG8B3wF2Ab4H/AD4EbAb8BPgZ8AvgF8BvwF+B/wB+BPwF2AP4G+A/eHlMg9+Li23IyjHl5eVrfNJAd6pgDRAOiADUB6QCagAqAioBMgCVAZUAVQFVANUB9QAHAI4FHAYoCagFqA2oA7gcMARgCMBdQH1AEcBsgH1tQHxl+ZtPo5dHV0qoUsjdOmELoPQlSd0mYSuAqGrSOgqEbosQleZ0FUhdFUJXTVCV53Q1SB0hxC6QwndYYSuJqGrRehqE7o6hO5wQncEoTuS0NUldPUI3VGELpvQ1c/c/5AT5+L+/jvus4mOY3bfSDSvor2/IWmp1Ew+Xg+543HIJZbZtkUaS/3ts2t64nl5nR+oyWC0xcNutoV//4/ylE+szBb+gZ/MRPLyHvhjQRUYbbHRnbawIn8gqWKcZc4NH/xjS5XiyytI/XBTFqMtHnGbLYL0j1VVjr3MgeJ++KpKrHkFiv8RraqMtnjUPbbwlvTDYdViKXOg5B8hqx59XqX+QF4NRls85gZbBErlqQ6JrsxWFGVWh0aTlxVV/anDGG3x+L9ri5woeaqapZXZH3WZVa0S8/KHY6g/VZvRFk/8W7YIxMRT1Sm+zMEYy6wOLyavvHDM9aeOYLTFk2VvCysOnupIqsxWXGVWdQ/OS8VZf6oeoy2eKktbhOLmqY46sMy+BMqsslFe3nBC9afqM9riaSHPAGTcH1CM61u1kfEZgM8IsQXjOkgxzuPVY4y2eFbKszEZ649xvqKeZLTFc0JswTiuKUa/rJ5htMXzQn4AnbH/Ksb2pzjrz4kNZutXHI+IjFfgeAaOd+B4CI6X4HgKjrfgeAyO1+B4Do734HgQjhfheBKON+F4FI5X4XgWjnfheBiOl+F4Go634XgcjtfheB6O9+F44AHxQiTjeOMPKKb8I5J3I/knJP+M5F+Q/CuOTSP5dyT/geQ/kfwXkvcg+W8kexDnckj+GL3nEyR/iuTPkPw5kr9A8pdI3oHkr5D8NZK/QfJOJH+L5O+QvAvJ32vZcSgN4J+GgEaAxoCjAU0ATQHNAMcAmgNaAFoCWgFaAyyAAngBPoAfkAPIBQQAQUAeoA2gLeBYwHGAdoDjAe0BHQAnADoCOgE6A7oAugK6AboDegB6AnoBTgT0BvQB9AX0yzR/BqAF44GlbJ1Pf+A9ADAQMAgwGDAEMBQwDDAcMAIwEjAKMBowBjAWkA8oABQCQoAiQBgwDjAeMAEwETAJMBkwBTAVMA0wHTBDNwQcl+2feXCsdgChG0joBhG6wYRuCKEbSuiGEbrhhG4EoRtJ6EYRutGEbgyhG0vo8gldAaErJHQhQldE6MKEbhyhG0/oJhC6iYRuEqGbTOimELqphG4aoZtO6GZkmj8DgPtsonM4u28kmpdzBmBAJh+vrULOAAxkqb99dh2UeF7/nAEYzGiLd4ScARiSWJkPOAMwNJG8Is4ADGO0xTYhZwCGx1lm6gzAiPjyIs8AjGS0xbtCzgCMir3MxZ4BGB1rXiWcARjDaIv3hJwBGBtLmUs5A5AffV6lngEoYLTF+0LOABRGV+aozgCEoskryjMARYy2+EDIGYBwaWWO4QzAuEy+MwDjGW3xoZAzABMy+c4ATMzkOwMwidEW24WcAZicyXcGYEom3xmAqYy2+EjIGYBpmXxnAKZn8p0BmMFoi4+FxNcY9wcU4/pWbWOMr30ixBaM6yDFOI9X7zPa4lMhtmCc7ynG+YrazmiLz4TYgnFcU4x+WX3CaIvPhZwBYOy/irH9Kc76Mx0r7MKX1z+xwpkwd5kFmA2YA5gLmAc4CTAfsACwEHAy4BTAqYDTAIsAiwFLAEsBpwPOAJwJOAuwDHA2YDngHMAKwErAKsC5gNWA83TwBsdvZhIxnVmEbjahm0Po5hK6eYTuJEI3n9AtIHQLCd3JhO4UQncqoTuN0C0idIsJ3RJCt5TQnU7oziB0ZxK6swjdMkJ3NqFbTujOIXQrCN1KQreK0J1L6FYTuvMyzccKcZ9N1NfPZIl17YsVzmJcs/wsJFY4m6X+9tl1TuJ5/RMrnMtoi1+ExArnJVbmA2KFJyWSV0SscD6jLX4VEitcEGeZqVjhwvjyImOFJzPa4jchscJTYi9zsbHCU2PNq4RY4WmMtvhdSKxwUSxlLiVWuDj6vEqNFS5htMUfQmKFS6Mrc1SxwtOjySvKWOEZjLb4U0is8MzSyhxDrPCsTL5Y4TJGW/wlJFZ4diZfrHB5Jl+s8BxGW+wREitckckXK1yZyRcrXMVoi7+FxArPzeSLFa7O5IsVnsdoC09VGfvwjPsDinF9q35l3IcvJ8QWjOsgxTiPV38w2iJFiC0Y53uKcb6i9jDaIlWILRjHNcXolxX2K4naIs2QLbhjhYz9VzG2P8VZf6ZjhS0NfK9wDcxd1gLOB1wAuBBwEeBiwCWASwGXAS4HrANcAbgScBXgasA1gGsB1wHWA64H3AC4EbABcBPgZsAtgFsBtwFuB9wBuFMHb3D8Zg0R01lL6M4ndBcQugsJ3UWE7mJCdwmhu5TQXUboLid06wjdFYTuSkJ3FaG7mtBdQ+iuJXTXEbr1hO56QncDobuR0G0gdDcRupsJ3S2E7lZCdxuhu53Q3UHo7sw0Hytsyfi9wjUssa59scK1jGuWQ8toPpBorPB8lvrbZ9cLEs/rn1jhhYy2OMzNtkCxwosSK/MBscKLE8krIlZ4CaMtarrTFgfFCi+Ns8xUrPCy+PIiY4WXM9qilttsUUyscF3sZS42VnhFrHmVECu8ktEWtd1jixJjhVfFUuZSYoVXR59XqbHCaxhtUccNtogiVnhtdGWOKlZ4XTR5RRkrXM9oi8P/XVtEHSu8vrQyxxArvCGTL1Z4I6Mtjvi3bBFjrHBDJl+s8KZMvljhzYy2OLLsbRFXrPCWTL5Y4a2ZfLHC2xhtUbcsbZFArPD2TL5Y4R2ZfLHCOxltUU/IPjzj/oBiXN+qmoz78EcJsQXjOkgxzuNVHUZbZAuxBeN8TzHOV9SRjLaoL8QWjOOaYvTL6ihGWzQQEitk7L+Ksf2pBoJihWG+vP6JFd4Fc5e7AfcA7gXcB7gf8ADgQcBDgIcBGwGPAB4FPAZ4HPAE4EnAU4CnAc8AngU8B3ge8ALgRcBLgJcBmwCvAF4FvAZ4XQdvcPzmLiKmczehu4fQ3Uvo7iN09xO6Bwjdg4TuIUL3MKHbSOgeIXSPErrHCN3jhO4JQvckoXuK0D1N6J4hdM8SuucI3fOE7gVC9yKhe4nQvUzoNhG6Vwjdq4TuNUL3eqb5WCHus4n6+rtYYl37YoV3M65ZvEJihfew1N8+u96beF7/xArvY7SFT0is8P7EynxArPCBRPKKiBU+yGgLv5BY4UNxlpmKFT4cX15krHAjoy1yhMQKH4m9zMXGCh+NNa8SYoWPMdoiV0is8PFYylxKrPCJ6PMqNVb4JKMtAkJihU9FV+aoYoVPR5NXlLHCZxhtERQSK3y2tDLHECt8LpMvVvg8oy3yhMQKX8jkixW+mMkXK3yJ0RZthMQKX87kixVuyuSLFb7CaIu2QmKFr2byxQpfy+SLFb7OaItjhezDM+4PKMb1rfIz7sMfJ8QWjOsgxTiPVwFGW7QTYgvG+Z5inK+oNoy2OF6ILRjHNcXol9VxjLZoLyRWyNh/FWP7U+0FxQqbGPhe4WaYu7wBeBPwFuBtwBbAVsA7gG2AdwHvAd4HfAD4ELAd8BHgY8AngE8BnwE+B3wB+BKwA/AV4GvAN4CdgG8B3wF2Ab7XwRscv9lMxHTeIHRvErq3CN3bhG4LodtK6N4hdNsI3buE7j1C9z6h+4DQfUjothO6jwjdx4TuE0L3KaH7jNB9Tui+IHRfErodhO4rQvc1ofuG0O0kdN8Suu8I3S5C932m+VhhE8bvFW5miXXtixW+wbhm6SskVvgmS/3ts+tbief1T6zwbUZb9BMSK9ySWJkPiBVuTSSviFjhO4y26C8kVrgtzjJTscJ348uLjBW+x2iLAUJihe/HXuZiY4UfxJpXCbHCDxltMVBIrHB7LGUuJVb4UfR5lRor/JjRFoOExAo/ia7MUcUKP40mryhjhZ8x2mKwkFjh56WVOYZY4ReZfLHCLxltMURIrHBHJl+s8KtMvljh14y2GCokVvhNJl+scGcmX6zwW0ZbDBMSK/wuky9WuCuTL1b4PaMthgvZh2fcH1CM61vVn3EffoQQWzCugxTjPF4NYrTFSCG2YJzvKcb5ihrKaItRQmzBOK4pRr+sRjDaYrSQWCFj/1WM7U9x1p8df8hCdWf/XwSxgj1aDiO5Yca+1xT03uEofYSWf4C5xY+A3YB0nX+K5+CLOy65O9NMu/Lw8vTiuvhJB35+jgwK2Ql/RRDgbuC72QI54fBPjBPKnw0ZMoW5/jjL/AvKS8GGIGzk2e8LhizlD8FWnNcbKvBbhVZ+obcozw9rYb/X7ysMFcLmRDBfha1wfmFeOLiPl93pKnn2dzB8cXe6XzJ5nZFz/ZppkLCdOXe+vzE2BlPl/i1zfwUz5Uty5XAAv2Xy5/s7c2N1nLWdr+lTN5xO0TTXHxi5Zut8/oA8/7QHRcAewN92W64A3AEpgFRAGiAdkAEoD8gEVABUBFQCZAEqA6oAqgKqAaoDagAOARwKOAxQE1ALUBtQB3B4Bc9BJ4T+IE5y/Eno/iJ0ewjd34TOLl+krhyhSyF0qYQujdClE7oMQlee0GUSugqEriKhq0TosghdZUJXhdBVJXTVCF11QleD0B1C6A4ldIcRupqErhahq03o6hC6wyuYPyH0A+P49QfjCaE/GXlNFXJC6C/GE0J7GE8I/c1oi2lCTgjZPjiBvA44IVQukbwiTgilVOCzxXQhJ4RS4ywzdUIoLb68yBNC6Yy2mCHkhFBG7GUu9oRQ+VjzKuGEUCajLWYKOSFUIZYyl3JCqGL0eZV6QqgSoy1mCTkhlBVdmaM6IVQ5mryiPCFUhdEWs4WcEKpaWpljOCFUrQLfCaHqjLaYI+SEUI0KfCeEDqnAd0LoUEZbzBVyQuiwCnwnhGpW4DshVIvRFvOEnBCqXYHvhFCdCnwnhA5ntMVJQqLvjPsDinF9q6YzRt/nC7EF4zpIMc7j1SxGWywQYgvG+Z5inK+ouYy2WCjEFozjmmL0y2o+oy1OFnJCiLH/Ksb2pzjrz26/cwDZOr/DdUysto6R1dQxs0N1DK2GjqlV0zG2KjrmlqVjcBV1TC5Tx+gydMwuTcfwUnRMz953/VvH+v7Ssb8/IoMgnoMPdSTa9n5k3OM+ogLboQ6rLA91YN5Wghfme2QFg4TtzLnzrcs4CTZV7roV9lcwU757G1uKp2yO7f1YRsf2Eu2AuCHXQ22N/ZRKXb7ep3AUGZOOkXNhaUfObM52/rEesSut0usxdsCjmL2aU692vovibAsK6q5QWWErzws7OYHC3EBBXshbEMwP+8I5vpAv3notrbFz1mu2oXrNjr9e/y/aa31D9Vr/P95eGxiq1wa6XtORLvJy8+CJB/uGelLRyB4zTAxw9QzM1upV4J1JmCp3rJ3DiqHciXJsbLgOrcQuZTfMxhX4bXO0IadwdAnO1krsUo0M1UUTQ3XRxGBd2I7QRF2sqOpun2KqP6z8d8td6tESU21/lZCtR8Z2qRhtrTjrz55I2duP1C6EJ8b6LK094TxNjFlcdYInlU1L2oWwErtUY0ODQNMSdiFKyUaV9jk256YGnMIal8SGYpm8JVrmZhXc6WA4bYHbZTM0OYnXPqXVOad9jsGxBZ8P+kYooMKhsC8nkOctULm+3NywPxzIDfpD4Rx/fihQpPz5Pm9eUcAKq2BRUSDHVxjIDeeFCnPD2GmrkM/nD+UVFKocb25+gRUM+fKtsD/ggwV/yBcIhXzB3Nx8ny+UGwwH82CRDkv/oJUTCORZuV5fnteUfY5Bq2uuQaG03Rycp5RBobnEQaG54UGhuYFB4XyXDArFNuLAvm/mczqdFi4dFM435HRaMAwKpW1tctqnpUsHBVP2afl/tOXaSm+5tqa2XK3ErmLjHZyxykTzYty+VSYM79RhqpA6TDQvy+X2sDuMZWBgV4YmOcrg9mdrQ3XhNVQXXsNbwSbq4kKXbwWb6g8XuXwr2FTbv1jIVjBju1SMtlYXJ7eCI6+9YxZXneDJrs/kqt8yNAj4DK76bc4+A07hciFbwRbjRNBfwZ0O5nJDq0p/GWwFc9onh3HVfzHjqt+UfXII+8R6pqa0rV9O++Qa8p+5DPVQ2u4UZz0EDNVDQFh7CBqqh6Cw9pBnqB7yoggVuXliR9Bla8d40thG4qSxjeFJYxsDk8Yr3PEcocKydHJtGfPinDReYWhS0jaKSWOip+s57XNsBb6JHuek0ZR9jmUYHEu5WJ+ZcRyb/wwaOYhdV++6cUeUONt4O5dHMGwbtzMw3hxvaOy1883U/8/xHHxxfaaTH3d9d0xzP8f23BNJKY32KpeHV/Y6EwPlvlrIg0faMzrmDoyOmbHdKE5bGHaS/4Qp/otOssN/1Ume4PKv59llPsFAuTsamtF0rLD/yfomvu5JzZCtxC7FOUPu5PL2ZK+oOhloT50F9KPOBsrdxVA/6lJCP7ISu4z5lOuq/jfbwPoyOteSKM+ujJNERlur9YZ2qLomV9fGOXYzPXHkWGV2M9DpbxSyyuwmoNMnaosNQhxwd0ZbMLY/tSG5ShfhbLtzOlupo+KmVPdz7JE0lKUez3A/x55JQ1nqSQGG6pU0lKWeFmCoE5OGstSzAgzVO2koSz0vwFB9koay1IsCDNU3aShLvSzAUP2ShrLUKwIM1T9pKEu9JsBQA5KGstRmAYYamDSUpd4UYKhBSUNZaqOAvb7BSUNZaouAHjUkaShL3S+gRw1NGspS2wT0qGFJQ1nqPQGGGp40lKU+EGCoEUlDWWq7AEONTBrKUh8LMNSopKEs9akAQ41OGspSnwsw1JikoSz1qoB11NikoSy1Q0CPyk8aylJfCzBUQdJQltopwFCFSUNZ6gYBY1QoaShL7RLQo4qShrLUDwIMFU4aylK7BRhqXNJQlvpZgKHGm3oUJfeD6xkfZqE6Mz4UYQLzl+Tt70jWR8aeoL/oa8s9kNwTyb2QfCKSeyO5D5L7IrkfkvsjeQCSByJ5EJIHI3kIkocieRiShyN5BJJHInkUkkcjeQySxyI5H8kFSC5EcgjJRUgOI3kckscj+beMffJE0E0CTAZMAUwFTANMB8wAzATMAswGzAHMBcwDnASYD1gAWAg4GXAK4FTAaYBFgMWAJYClgNMBZwDOBJwFWAY4G33Hd7tn/9Weqd1lJvNL5pfML5lfMr9kfsn8kvkl83NzfipZf8n8kvkl80vml8wvmV8yv/92fnnM+eUW8uZXkMebX6HP2Zuckbl/n3I6kqcheSqSpyB5MpInIXkikicgeTySxyE5jOQiJIeQXIjkAiTnI3kskscgeTSSRyF5JJJHIHk4kocheSiShyB5MJIHIXkgkgcguT+Sz0PyaiSfi+RVSF6J5BVIPgfJy5F8NpKXIfksJJ+J5DOQfDqSlyJ5CZIXI3kRkk9D8qlIPgXJJyN5IZIXIHk+kk9C8jwkz0XyHCTPRvIsJM9E8p1IvgPJtyP5NiTfiuRbkHwzkm9C8gYk34jkG5B8PZLXI/k6JF+L5GuQfDWSr0LylUi+AsnrkHw5ki9D8qVIvgTJFyP5IiRfiOQLkHw+ktcieQ2SX0fya0h+FcmvIHkTkl9G8ktIfhHJLyD5eSQ/h+RnkfwMkp9G8lNIfhLJTyD5cSQ/huRHkfwIkjci+WEkP4TkB5H8AJLvR/J9SL4Xyfcg+W4k34Xk75G8C8nfIflbJO9E8jdI/hrJXyF5B5K/RPIXSP4cyZ8h+VMkf4Lkj5H8EZK3I/lDJH+A5PeR/B6S30XyNiS/g+StSN6C5LeR/BaS30TyG0jejOQFKE64EMknI/kUJJ+K5NOQvAjJi5G8BMlLkXw6ks9A8plIPgvJy5B8NpInInkSkicjeQqSpyJ5GpKnI3kGkmcieRaSZyN5DpLnInkekk9C8nwt7/Lsu5bD/+cAVgBWAlYBzgWsBpwHWANYCzgfcAHgQsBFgIsBlwAuBVwGuBywDnAF4ErAVYCrAdcArgVcB1gPuB5wA+BGwAbATYCbAbcAbgXcBrgdcAfgTsBdgLsB9wDuBdwHuB/wAOBBwEOAhwEbAY8AHgU8Bngc8ATgScBTgKcBzwCeBTwHeB7wAuBFwEuAlwGbAK8AXgW8BngdsBnwBuBNwFuAtwFbAFsB7wC2Ad4FvAd4H/AB4EPAdsBHgI8BnwA+BXwG+BzwBeBLwA7AV4CvAd8AdgK+BXwH2AX4HvAD4EfAbsBPgJ8BvwB+BfwG+B3wB+BPwF+APYC/AZ6KYG9ACiAVkAZIB2QAygMyARUAFQGVAFmAyoAqgKqAaoDqgBqAQwCHAg4D1ATUAtQG1AEcDjgCcCSgLqAe4ChANqA+oAGgIaARoDHgaEATQFNAM8AxgOaAFoCWgFaA1gALoABegA/gB+QAcgEBQBCQB2gDaAs4FnAcoB3geEB7QAfACYCOgE6AzoAugK6AboDugB6AnoBegBMBvQF9AH0B/QD9AQMAAwGDAIMBQwBDAcMAwwEjACMBowCjAWMAYwH5gAJAISAEKAKEAeMA4wETABMBkwCTAVMAUwHTANMBMwAzAbMAswFzAHMB8wAnAeZX3Pe7u85D7Z3Lkdvr10TP6PTNgPJnHJyvldilBjIe8EpB5V9Qcd/rwoq6MpwKshMWRegWVtz/W5WmKo77MBeuuEQ52nUSZV6FpeSlFlbkM2hJPyjtibE+S+ON8+Ru5AsY6wR38pMjG7etKBdRQdxPqY+hMKX+APTJFfl4nVKRrTEc8DMhp1Q8+Idsuet0IWM9cNbpqTHUaWmfhev0VF2nkR2bu+ONYBxdsnU+p9ncAYsBSwBLAacDzgCcCTgLsAxwNmA54BzACsBKwCrAuYDVgPMAawBrAecDLgBcCLgIcDHgEsClgMsAlwPWAa7QHR7Xpc3Hmdk7ukWEbjGhW0LolhK60wndGYTuTEJ3FqFbRujOJnTLCd05hG4FoVtJ6FYRunMJ3WpCdx6hW0Po1hK68wndBYTuQkJ3EaG7mNBdQuguJXSXEbrLCd06QneF1uGL+xdpRjBObE5j8IVFYfuy1CJGv3pLGf06UCJltm2xmKX+9tl1SeJ5eZ3J2lJGW9zqZlv4909QT0+szBae7J6RSF7eAyfOZzLa4jZ32sKKXCycFWeZc8MHLzyWxZdXkFrEnM1oi9vdZosgvXBbHnuZA8UtAs+JNa9A8QvKFYy2uMM9tvCWtIheGUuZAyUvyFcxbkqcy2iLO91gi0CpPNXq6MpsRVFmdV40eVlR1Z9aw2iLu/5dW+REyVOtLa3M/qjLrM4vMS9/OIb6Uxcw2uLuf8sWgZh4qguLL3MwxjKri4rJKy8cc/2pixltcU/Z28KKg6e6hCqzFVeZ1aUH56XirD91GaMt7i1LW4Ti5qkuP7DMvgTKrNahvLzhhOpPXcFoi/uE/Cov4/6AYlzfqtsYf5X3fiG2YFwHKcZ5vLqT0RYPCLEF43xPMc5X1D2MtnhQiC0YxzXF6JfV/Yy2eKiMfjncSuxSjP1XMbY/xVl/pmOFww3ECq+EuctVgKsB1wCuBVwHWA+4HnAD4EbABsBNgJsBtwBuBdwGuB1wB+BOwF2AuwH3AO4F3Ae4H/AA4EHAQ4CHARsBjwAeJWKFVxIxnasI3dWE7hpCdy2hu47QrSd01xO6GwjdjYRuA6G7idDdTOhuIXS3ErrbCN3thO4OQncnobuL0N1N6O4hdPcSuvsI3f2E7gFC9yChe4jQPUzoNhK6RwjdoxXNxwqHM8YKr2SMFV7FuGZ5UUis8GrGWOE1jLHCaxlt8ZKQWOF1jLHC9YyxwusZbfGykFjhDYyxwhsZY4UbGG2xSUis8CbGWOHNjLHCWxht8YqQWOGtjLHC2xhjhbcz2uJVIbHCOxhjhXcyxgrvYrTFa0JihXczxgrvYYwV3stoi9eFxArvY4wV3s8YK3yA0RabhcQKH2SMFT7EGCt8mNEWbwiJFW5kjBU+whgrfJTRFm8K2Ydn3B9QjOtb9TLjPvxbQmzBuA5SjPN49SqjLd4WYgvG+Z5inK+ozYy22CLEFozjmmL0y+otRltsFRIrZOy/irH9qa2CYoXl+PL6J1b4GMxdHgc8AXgS8BTgacAzgGcBzwGeB7wAeBHwEuBlwCbAK4BXAa8BXgdsBrwBeBPwFuBtwBbAVsA7gG2AdwHvAd4HfEDECh8jYjqPE7onCN2ThO4pQvc0oXuG0D1L6J4jdM8TuhcI3YuE7iVC9zKh20ToXiF0rxK61wjd64RuM6F7g9C9SejeInRvE7othG4roXuH0G0jdO8SuvcI3fuE7oOK5mOFuM8m6usfY4wVPs64ZvlSSKzwCcZY4ZOMscKnGG2xQ0is8GnGWOEzjLHCZxlt8ZWQWOFzjLHC5xljhS8w2uJrIbHCFxljhS8xxgpfZrTFN0JihZsYY4WvMMYKX2W0xU4hscLXGGOFrzPGCjcz2uJbIbHCNxhjhW8yxgrfYrTFd0JihW8zxgq3MMYKtzLaYpeQWOE7jLHCbYyxwncZbfG9kFjhe4yxwvcZY4UfMNriByH78Iz7A4pxfau+YtyH/1GILRjXQYpxHq92MtpitxBbMM73FON8Re1itMVPQmzBOK4pRr+sfmS0xc9CYoWM/Vcxtj9lqv6444QNDT3d2gTXIgPff/wQ5ljbAR8BPgZ8AvgU8Bngc8AXgC8BOwBfAb4GfAPYCfgW8B1gF+B7wA+AHwG7AT8Bfgb8AvgV8Bvgd8AfgD8BfwH2EDHND4nY03ZC9xGh+5jQfULoPiV0nxG6zwndF4TuS0K3g9B9Rei+JnTfELqdhO5bQvcdodtF6L4ndD8Quh8J3W5C9xOh+5nQ/ULofiV0vxG63wndH4TuT0L3F6HbU9F8TLOI8fuPHzLGNLczrq0yqsmIaX7EGNP8mDGm+QmjLcq72RYopvkpY0zzM8aY5ueMtsh0py0Oiml+wRjT/JIxprmD0RYV3GaLYmKaXzHGNL9mjGl+w2iLiu6xRYkxzZ2MMc1vGWOa3zHaopIbbBFFTHMXY0zze8aY5g+Mtsj6d20RdUzzR8aY5m7GmOZPjLao/G/ZIsaY5s+MMc1fGGOavzLaokrZ2yKumOZvjDHN3xljmn8w2qJqWdoigZjmn4wxzb8YY5p7GG1RrYxsYSV2Kcb9AcW4vlV4fZaoLaoLsQXjOkgxzuNVJUZb1BBiC8b5nmKcr6gqjLY4RIgtGMc1xeiXVXVGWxxqyBbcMU3G/qsY25/irD+7/S4EZOv89uiY2J86Rva7jpn9qmNoP+uY2m4dY/tBx9x26Rjctzom942O0X2lY3Zf6hje5zqm96mO8X2sY352HMCOK0ReKRE2TbTthRnjIH+jOZSCPRzYe7HfFwxZyh+C3ROvN1Tgtwqt/EJvUZ4fli9+r99XGCqE9WQwX4WtcH5hXji4Ly/7B2wrefbHavHFHb/FvK0ErwP4VjJI2M6cO99ylfgag6lyl6u0v36Z8t3b2FI89K8lc5chnGHG2UfWSaIdEDfkFNTWDqqQRBsKbnRWYpfCUWRMOkbOhaVUzt6OYucf6Y1LI1hapacwdsDUSrxezalXO99FcbYFBXVXqKywleeFnZxAYW6gIC/kLQjmh33hHF/IF2+9ltbYOes1zVC9psVfr/8X7TXdUL2m/8fba4ahes3Q9ZqOdJGXmwdPPNiX15OKTHvMMDHApRiYraVU4p1JmCp3rJ3DiqHcCR8/MFyHVmKXshtmhUr8tqloyClULMHZWoldKtNQXVQyVBeVDNaF7QhN1EWjau72Kab6Q+N/t9ylHi0x1faPFrL1yNguFaOtFWf92RMpe/uR2oXwxFifpbUnnKeJMYurTvCkMqukXQgrsUtVMDQIZJWwC1FKNqq0z7E5ZxlwCse4JDYUy+Qt4XNFldzpYDhtgdtlZTQ5idc+pdU5p32qoLyUzwd9IxRQ4VDYlxPI8xaoXF9ubtgfDuQG/aFwjj8/FChS/nyfN68oYIVVsKgokOMrDOSG80KFuWHstFXI5/OH8goKVY43N7/ACoZ8+VbYH/DBgj/kC4RCvmBubr7PF8oNhoN5sEiHpX/QygkE8qxcry/Pa8o+VdDqmmtQKG03B+cpZVCoKnFQqGp4UKhqYFBo4ZJBodhGHNj7Daowp9Op5tJBoYUhp1ONYVAobWuT0z7VXToomLJP9f+jLdcaesv1EGrL1UrsKjbewRmrTDQvxu1bZcLwTh2mCqnDhE9hudwedoc51MDAfpihSc5hBrc/DzFUFzUN1UVNw1vBJuqilcu3gk31h9Yu3wo21fYtIVvBjO1SMdpaWcmt4Mhr75jFVSd4slvL5Kr/UEODQC2Dq36bcy0DTsEvZCv4UMaJYO1K7nQwfkOrytplsBXMaZ86jKt+i3HVb8o+dQj7xHqmprStX077HG7Ifx7OUA+l7U5x1sMRhurhCGHt4UhD9XCksPZQ11A91I0iVOTmiR1Bl60d40ljPYmTxnqGJ431DEwac93xHKHCsnRyRzHmxTlpzDU0KTkqikljoqfrOe2TXYlvosc5aTRln2yGwbGUi/WZGfXZ/GfQyEHscnrXjTuixNnGG7g8gmHbuIGB8aahobHXzjdT/7/Qc/DF9ZlOftz13THN/RwbcU8kpTTaoMvDK3aZGxkod56QB480YnTMjRkdM2O7UZy2MOwk/wlT/BedZOP/qpM82uVfz7PLfLSBcjcxNKNpUmn/k/VNfN2TmiFbiV2Kc4bc1OXtyV5RNTXQnpoJ6EfNTHyTxVA/OqaEfmQldhnzKcdW+2+2gePK6FxLojybM04SGW2tjjO0Q9U8ubo2zrGF6YkjxyqzhYFO317IKrOFgE6fqC06CHHALRltwdj+VIfkKl2Es23J6WyljoqbUt3PsVXSUJZ6PMP9HFsnDWWpJwUYykoaylJPCzCUShrKUs8KMJQ3aShLPS/AUL6koSz1ogBD+ZOGstTLAgyVkzSUpV4RYKjcpKEs9ZoAQwWShrLUZgGGCiYNZak3BRgqL2koS20UsNfXJmkoS20R0KPaJg1lqfsF9Khjk4ay1DYBPeq4pKEs9Z4AQ7VLGspSHwgw1PFJQ1lquwBDtU8aylIfCzBUh6ShLPWpAEOdkDSUpT4XYKiOSUNZ6lUB66hOSUNZaoeAHtU5aShLfS3AUF2ShrLUTgGG6po0lKVuEDBGdUsaylK7BPSo7klDWeoHAYbqkTSUpXYLMFTPpKEs9bMAQ/Uy9ShK7u8knhg/0ZxIhc2tlmf/9xHt/38DY+3R8sKK++UFSLY57EH39Yb/+wD6AvpV2q93Lu6H94/ka1CqN+ODIfobakTc9TeKsf76MNbfAOYHLUS27f6V9rfhAUjui+R+EW17IPw/CDAYMKQS/Wxcbmc0kLEesnU+QyHPYYDhgBGAkYBRgNGAMYCxgHxAAaAQEAIUAcKAcYDxgAmAiYBJgMmAKYCpgGmA6YAZgJmAWYDZgDmAuYB5lfZVEv7i/lD9xX2sG0bohhO6EYRuJKEbRehGE7oxhG4socsndAWErpDQhQhdEaELE7pxhG48oZtA6CYSukmEbjKhm0LophK6aYRuOqGbQehmErpZhG42oZtD6OYSunmV9j9oxbm4v4M/kNEPDmXIq2jv71haahgjr07VzIxvsT7yt6Qy27YYzlJ/++w6IvG8vM6P5IxktEVnN9vCv/+HgUYlVmYL/8jQ6ETy8h74g0VjGG3RxZ22sCJ/pGlsnGXODR/8g0/58eUVpH48qoDRFl3dZosg/YNZhbGXOVDcj2+FYs0rUPwPeRUx2qKbe2zhLenHy8KxlDlQ8g+hjYs+r1J/pG88oy26u8EWgVJ5qgnRldmKosxqYjR5WVHVn5rEaIse/64tcqLkqSaXVmZ/1GVWU0rMyx+Oof7UVEZb9Py3bBGIiaeaVnyZgzGWWU0vJq+8cMz1p2Yw2qJX2dvCioOnmkmV2YqrzGrWwXmpOOtPzWa0xYllaYtQ3DzVnAPL7EugzGouyssbTqj+1DxGW/QuI1tYiV2KcX9AMa5vFV6fJWqLPkJswbgOUozzeNWd0RZ9hdiCcb6nGOcrqhejLfoJsQXjuKYY/bLqw2iL/oZswR2HZOy/irH9KSn1x/jDFqoZ43zlJOY4rn0t0q/2/1dU3B/jWYfky5F8GZIvRfIlSL4YyRch+UIkX4Dk85G8FslrkHweklcj+Vwkr0LySiSvQPI5SF6O5LORvAzJZyH5TCSfgeTTkbwUyUuQvBjJi5B8GpIfRfIjSN6I5IeR/BCSH0TyA0i+H8n3IfleJN+D5LuRfBeS70TyHUi+Hcm3IflWJN+C5JuRfBOSNyD5RiTfgOTrkbweydch+VokX4Pkq5F8FZKvRPIHSH4fye8h+V0kb0PyO0jeiuQtSH4byW8h+U0kv4HkzUh+HcmvIflVJL+C5E1IfhnJLyH5RSS/gOTnkfwckp9F8jNIfhrJTyH5SSQ/geTHkfwYkk9CMeZWSG6NZAvJCsleJPuQ7EdyDpJzkRxAchDJeUhug+S2SD4WycchuR2Sj0dyeyR3QPIJSO6I5E5I7ozkLkjuiuRuSO6O5B5I7onkXkjG5yHweQl8ngKft8DnMfB5DXyeA5/3wOdB8HkRfJ4EnzfB51HweRV8ngWfd5mHZHxeAZ9nwOcd8HkIfF4Cn6fA5y3weQx8XgOf58DnPfB5EHxeBJ8ncc6brPbsu+bD/wsACwEnA04BnAo4DbAIsBiwBLAUcDrgDMCZgLMAywBnA5YDzgGsAKwErAKcC1gNOA+wBrAWcD7gAsCFgIsAFwMuAVwKuAxwOWAd4ArAlYCrAFcDrgFcC7gOsB5wPeAGwI2ADYCbADcDbgHcCrgNcDvgDsCdgLsAdwPuAdwLuA9wP+ABwIOAhwAPAzYCHgE8CngM8DjgCcCTgKcATwOeATwLeA7wPOAFwIuAlwAvAzYBXgG8CngN8DpgM+ANwJuAtwBvA7YAtgLeAWwDvAt4D/A+4APAh4DtgI8AHwM+AXwK+AzwOeALwJeAHYCvAF8DvgHsBHwL+A6wC/A94AfAj4DdgJ8APwN+AfwK+A3wO+APwJ+AvwB7AH8DPFnQZgApgFRAGiAdkAEoD8jM8hxwldOv7fWrldilxjIeODZ91o/xLOs/Z/0qQP1WBFQCZAEqA6oAqgKqAaoDagAOARwKOAxQE1ALUBtQB3A44AjAkYC6gHqAowDZgPqABoCGgEaAxoCjAU0ATbP2VZJdT875K5uP40ccXUVCV4nQZRG6yoSuCqGrSuiqEbrqhK4GoTuE0B1K6A4jdDUJXS1CV5vQ1SF0hxO6IwjdkYSuLqGrR+iOInTZhK4+oWtA6BoSukaErjGhO5rQNSF0TbUOX9x7SLjPJrpWtvtGonk5Z/0qZvHxKhBy1q8SS/3ts2tW4nn9c9avMqMtCoWc9auSWJkPOOtXNZG8Is76VWO0RUjIWb/qcZaZOutXI768yLN+hzDaokjIWb9DYy9zsWf9Dos1rxLO+tVktEVYyFm/WrGUuZSzfrWjz6vUs351GG0xTshZv8OjK3NUZ/2OiCavKM/6Hcloi/FCzvrVLa3MMZz1q5fFd9bvKEZbTBBy1i87i++sX/0svrN+DRhtMVHIWb+GWXxn/Rpl8Z31a8xoi0lCzvodncV31q9JFt9Zv6aMtpgs5BwN4/6AYlzfqhDjOZopQmzBuA5SjPN4NY7RFlOF2IJxvqcY5ytqIqMtpgmxBeO4phj9sprCaIvpQs6qMfZfxdj+FGf92e13ESBb59dUx8SO1jGyRjpm1kDH0LJ1TK2ejrEdqWNuh+sYXG0dk6upY3SH6phdDR3Dq6ZjelV0jC9Lx/zsOECFiBirfaVE2DTRtjeKMQ7SDM2hFOzhwN6L/b5gyFL+EOyeeL2hAr9VaOUXeovy/LB88Xv9vsJQIawng/kqbIXzC/PCwX15pUMedhi63MFVwB6/xbytBC/M95gsg4TtzLnzbc44CTZV7uaoUzDlu7expXgOfiiQiTKMMvAkNXw5eSfaAXFDboHa2kEVkmhDac7X+xSOImPSMXIuLKVy9nYUO/9Ib1wawdIqvQVjB2zJ7NWcerXzXRRnW1D2SlFZYSvPCzs5gcLcQEFeyFsQzA/7wjm+kC/eei2tsXPWaytD9doq/nr9v2ivrQ3Va+v/eHu1DNWrpes1HekiLzcPnniwV3pS4bXHDBMDXAsDs7UWWbwzCVPljrVzWDGUO1GOPsN1aCV2Kbth+rL4beM35BT8JThbK7FLeQ3VRY6husgxWBe2IzRRF4uqudunmOoPi//dcpd6tMRU218iZOuRsV0qRlsrzvqzJ1LUo4nxFe1nldaecJ4mxiyuOsGTytySdiGsxC7lMzQI5JawC1FKNqq0z7E55xpwCme6JDYUy+Qt0TIHstzpYDhtgdtlAE1O4rVPaXXOaZ8gji34fNA3QgEVDoV9OYE8b4HK9eXmhv3hQG7QHwrn+PNDgSLlz/d584oCVlgFi4oCOb7CQG44L1SYG8ZOW4V8Pn8or6BQ5Xhz8wusYMiXb4X9AR8s+EO+QCjkC+bm5vt8odxgOJgHi3RY+getnEAgz8r1+vK8puwTRKtrrkGhtN0cnKeUQSFP4qCQZ3hQyDMwKCxzyaBQbCMO7P0GVZjT6bRx6aCwzJDTacMwKJS2tclpn7YuHRRM2aft/9GW67F6y/U4asvVSuwqNt7BGatMNC/G7VtlwvBOHaYKqcNE82rncnvYHaadgYH9eEOTnOMNbn8eZ6gu2huqi/aGt4JN1MVyl28Fm+oP57h8K9hU218hZCuYsV0qRlurFcmt4Mhr75jFVSd4stvB5Kq/naFBoIPBVb/NuYMBp7BayFZwO8aJ4AlZ7nQwqw2tKk8og61gTvt0ZFz1r2Bc9ZuyT0fCPrGeqSlt65fTPp0M+c9ODPVQ2u4UZz10NlQPnYW1hy6G6qGLsPbQ1VA9dI0iVOTmiR1Bl60d40ljN4mTxm6GJ43dDEwa17jjOUKFZenkujPmxTlpXGNoUtI9ikljoqfrOe3TI4tvosc5aTRlnx4Mg2MpF+szM3qy+c+gkYPYzfWuG3dEibON93J5BMO2cS8D482JhsZeO99M/f8iz8EX12c6+XHXd8c093PszT2RlNJoz3d5eMUuc28D5b5AyINHejM65j6Mjpmx3ShOWxh2kv+EKf6LTrLPf9VJ9nX51/PsMvc1UO5+hmY0/bL2P1nfxNc9qRmyldilOGfI/V3enuwVVX8D7WmAgH40wEC5BxrqRwNL6EdWYpcxn3Jxtf9mG7ikjM61JMpzEOMkkdHW6hJDO1SDkqtr4xwHm544cqwyBxvo9JcLWWUOFtDpE7XFOiEOeAijLRjbn1qXXKWLcLZDOJ2t1FFxU6r7OQ5NGspSj2e4n+OwpKEs9aQAQw1PGspSTwsw1IikoSz1rABDjUwaylLPCzDUqKShLPWiAEONThrKUi8LMNSYpKEs9YoAQ41NGspSrwkwVH7SUJbaLMBQBUlDWepNAYYqTBrKUhsF7PWFkoay1BYBPaooaShL3S+gR4WThrLUNgE9alzSUJZ6T4ChxicNZakPBBhqQtJQltouwFATk4ay1McCDDUpaShLfSrAUJOThrLU5wIMNSVpKEu9KmAdNTVpKEvtENCjpiUNZamvBRhqetJQltopwFAzkoay1A0CxqiZSUNZapeAHjUraShL/SDAULOThrLUbgGGmpM0lKV+FmCouaYeRcn94HrGh1moAYwPRZjH/CV5+zuS7VP2G9v+7lZmUk7K/1F5XtZ+eSiShyF5OJJHIHkkkkcheTSSxyB5LJLzkVyA5EIkh5BchOQwkscheTySJyB5IpInIXkykqcgeSqSpyF5OpJnIHkmkmcheTaS5yB5LpLblN8vt0XysUg+DsntkHw8ktsjuQOST0ByRyR3QnJnJHdBclckd0NydyT3QHJPJPdC8olI7o3kPkjui+R+SO6P5AFIHojkQUgejOQhSB6K5GFIHo7kEUgeieRRSB6N5DFIHovkfCQXILkQySEkFyE5jORxSB6P5AlIbpC5X26I5EZIbozko5HcBMlNkdwMyccguTmSWyC5JZJbIbk1ki0kKyR7kexDsh/JOUjORXIAyUEk5yG5DZLbIvlYJB+H5HZIPh7J7ZHcAcknILkjkjshuTOSuyC5K5K7Ibk7knsguSeSeyH5RCT3RnIfJPdFcj8kz6+0X16A5IVIPhnJpyD5VCSfhuRFSF6M5CVIXork05F8BpLPRPJZSF6G5LORvBzJ5yB5BZJXInkVks9F8mokn4fkNUhei+TzkXwBki9E8kVIvhjJlyD5UiRfhuTLkbwOyVcg+UokX4Xkq5F8DZKvRfJ1SF6P5OuRfAOSb0TyBiTfhOSbkXwLkm9F8m1Ivh3JdyD5TiTfheS7kXwPku9F8n1Ivh/JDyD5QSQ/hOSHkbwRyY8g+VEkP4bkx5H8BJKfRPJTSH4ayc8g+VkkP4fk55H8ApJfRPJLSH4ZyZuQ/AqSX0Xya0h+HcmbkfwGkt9E8ltIfhvJW5C8FcnvIHkbkt9F8ntIfh/JHyD5QyRvR/JHSP4YyZ8g+VMkf4bkz5H8BZK/RPIOJH+F5K+R/A2SdyL5WyR/h+RdSP4eyT8g+Uck70byT0j+Gcm/IPlXJP+G5N+R/AeS/0TyX0jeg+S/kexB89tySE5BciqS05CcjuQMJJdHciaSl1fYL5+D5BVIXonkVUg+F8mrkXwektcgeS2Sz0fyBUi+EMkXIfliJF+C5EuRfBmSL0fyOiRfgeQrkXwVkq9G8jVIvhbJ1yF5PZKvR/INSL4RyRuQfBOSb0byLUi+Fcm3Ifl2JN+B5DuRfBeS70byPUi+F8n3Ifl+JD+A5AeR/BCSH0byRiQ/guRHkfwYkh9H8hNIfhLJTyH5aSQ/g+Rnkfwckp9H8gtIfhHJLyH5ZSRvQvIrSH4Vya8h+XUkb0byG0h+E8lvIfltJG9B8lYkv4PkbUh+F8nvIfl9JH+A5A+RvB3JHyH5YyR/guRPkfwZkj9H8hdI/hLJO5D8FZK/RvI3SN6J5G+R/B2SdyH5eyT/gOQfkbwbyT8h+Wck/4LkX5H8G5J/R/IfSP4TyX8heQ+S/0ayp+J+uRySU5CciuQ0JKcjOQPJ5ZGcieQKSK6I5EpIzkJyZSRXQXJVJFdDcnUk10DyIUg+FMmHIbkmkmshuTaS6yD5cCQfgeQjkVwXyfWQfBSSs5FcH8kNkNwQyY2Q3BjJRyO5CZKbIrkZko9BcnMkt0BySyS3QnJrJFtIVkj2ItmHZD+Sc5Cci+QAkoNIzkNyGyS3RfKxSD4Oye2QfDyS2yO5A5JPQHJHJHdCcmckd0FyVyR3Q3J3JPdAck8k90LyiUjujeQ+SO6L5H5I7o/kAUgeiORBSB6M5CFIHorkYUgejuQRSB6J5FFIHo3kMUgei+R8JBcguRDJISQXITmM5HFIHo/kCUieiORJSJ6M5ClInorkaUiejuQZSJ6J5FlIno3kOUiei+R5SD4JyfO1fBLMo+cDFgAWAk4GnAI4FXAaYBFgMWAJYCngdMAZgDMBZwGWAc4GLAecA1gBWAlYBTgXsBpwHmANYC3gfMAFgAsBFwHwpUNybDHIzhl8MciLGWOje8dBbQc732zPvt9GrOjZH9PFVznmemmewRtPdWKpkRfXZyTzTeabzDeZbzLfZL7JfJP5JvNN5pvMN5lvMt9kvsl8k/km803mm8w3mW8yX3fky71fzfn9H1MchwrgOEwAx+ECOI4QwHGkAI6jBHAcLYDjGAEcxwrgmC+AY4EAjoUCOIYEcCwSwDEsgOM4ARzHC+A4QQDHiQI4ThLAcbIAjlMEcJwqgOM0ARynC+A4QwDHmQI4zhLAcbYAjnMEcJwrgKP9fA63c2wrgOOxAjgeJ4BjOwEcjxfAsb0Ajh0EcDxBAMeOAjh2EsCxswCOXQRw7CqAYzcBHLsL4NhDAMeeAjj2EsDxRAEcewvg2EcAx74COPYTwLG/AI4DBHAcKIDjIAEcBwvgOEQAx6ECOA4TwHG4AI4jBHAcKYDjKAEcRwvgOEYAx7ECOOYL4FgggGOhAI4hARyLBHAMC+A4TgDH8QI4ThDA0f59ALdzbCiAYyMBHBsL4Hi0AI5NBHBsKoBjMwEcjxHAsbkAji0EcGwpgGMrARxbC+BoCeCoBHD0CuDoE8DRL4BjjgCOuQI4BgRwDArgmCeAYxsBHNsK4HisAI7HCeDYTgDH4wVwbC+AYwcBHE8QwLGjAI6dBHDsLIBjFwEcuwrg2E0Ax+4COPYQwLGnAI69BHA8UQDH3gI49hHAsa8Ajv0EcLR/n9ztHBcI4LhQAMeTBXA8RQDHUwVwPE0Ax0UCOC4WwHGJAI5LBXA8XQDHMwRwPFMAx7MEcFwmgOPZAjguF8DxHAEcVwjguFIAx1UCOJ4rgONqARzPE8BxjQCOawVwPF8AxwsEcLxQAMeLBHC8WADHSwRwvFQAx8sEcLxcAMd1AjheIYDjlQI4XiWA49UCOF4jgOO1AjheJ4DjegEcrxfA8QYBHG8UwHGDAI43CeB4swCOtwjgeKsAjrcJ4Hi7AI53COB4pwCOdwngeLcAjvcI4HivAI73CeB4vwCODwjg+KAAjg8J4PiwAI4bBXB8RADHRwVwfEwAx8cFcHxCAMcnBXB8SgDHpwVwfEYAx2cFcHxOAMfnBXB8QQDHFwVwfEkAx5cFcNwkgOMrAji+KoDjawI4vi6A42YBHN8QwPFNARzfEsDxbQEctwjguFUAx3cEcNwmgOO7Aji+J4Dj+wI4fiCA44cCOG4XwPEjARw/FsDxEwEcPxXA8TMBHD8XwPELARy/FMBxhwCOXwng+LUAjt8I4LhTAMdvBXD8TgDHXQI4fi+A4w8COP4ogONuARx/EsDxZwEcfxHA8VcBHH8TwPF3ARz/EMDxTwEc/xLAcY8Ajn8L4OjJcj/HcgI4pgjgmCqAY5oAjukCOGYI4FheAMdMARyXV3A/x3MEcFwhgONKARxXCeB4rgCOqwVwPE8AxzUCOK4VwPF8ARwvEMDxQgEcLxLA8WIBHC8RwPFSARwvE8DxcgEc1wngeIUAjlcK4HiVAI5XC+B4jQCO1wrgeJ0AjusFcLxeAMcbBHC8UQDHDQI43iSA480CON4igOOtAjjeJoDj7QI43iGA450CON4lgOPdAjjeI4DjvQI43ieA4/0COD4ggOODAjg+JIDjwwI4bhTA8REBHB8VwPExARwfF8DxCQEcnxTA8SkBHJ8WwPEZARyfFcDxOQEcnxfA8QUBHF8UwPElARxfFsBxkwCOrwjg+KoAjq8J4Pi6AI6bBXB8QwDHNwVwfEsAx7cFcNwigONWARzfEcBxmwCO7wrg+J4Aju8L4PiBAI4fCuC4XQDHjwRw/FgAx08EcPxUAMfPBHD8XADHLwRw/FIAxx0COH4lgOPXAjh+I4DjTgEcvxXA8TsBHHcJ4Pi9AI4/COD4owCOuwVw/EkAx58FcPxFAMdfBXD8TQDH3wVw/EMAxz8FcPxLAMc9Ajj+LYCjp6L7OZYTwDFFAMdUARzTBHBMF8AxQwDH8gI4ZgrgWEEAx4oCOFYSwDFLAMfKAjhWEcCxqgCO1QRwrC6AYw0BHA8RwPFQARwPE8CxpgCOtQRwrC2AYx0BHA8XwPEIARyPFMCxrgCO9QRwPEoAx2wBHOsL4NhAAMeGAjg2EsCxsQCORwvg2EQAx6YCODYTwPEYARybC+DYQgDHlgI4thLAsbUAjpYAjkoAR68Ajj4BHP0COOYI4JgrgGNAAMegAI55Aji2EcCxrQCOxwrgeJwAju0EcDxeAMf2Ajh2EMDxBAEcOwrg2EkAx84COHYRwLGrAI7dBHDsLoBjDwEcewrg2EsAxxMFcOwtgGMfARz7CuDYTwDH/gI4DhDAcaAAjoMEcBwsgOMQARyHCuA4TADH4QI4jhDAcaQAjqMEcBwtgOMYARzHCuCYL4BjgQCOhQI4hgRwLBLAMSyA4zgBHMcL4DhBAMeJAjhOEsBxsgCOUwRwnCqA4zQBHKcL4DhDAMeZAjjOEsBxtgCOcwRwnCuA4zwBHE8SwHG+AY4meHbOMMPznyuFmfDFWfvz8lm5fn9RwFukfCrf8uYVBHMsf05BblAFVU4wJ+QN+nxFQX8wkFeQF7DylN9XpMI5eb6wzuySLD5etmFStYHsfLNLqYdEuXPW6TiPmUbAXeZyjGUeL6TMKYxlniCkzKmMZZ4opMxpjGWeVEZlthK71GTG+luXKmPAneKRwXOqEJ7ThPCcztjWMU/uPjmDkefLQvrkTI8MnrOE8JwthOccITznCuE5TwjPk4TwnC+E5wIhPBcK4XmyEJ6nCOF5qhCepwnhuUgIz8VCeC4RwnOpEJ6nC+F5hhCeZwrheZYQnsuE8DxbCM/lQnieI4TnCiE8VwrhuUoIz3OF8FwthOd5QniuEcJzrRCe5wvheYEQnhcK4XmREJ4XC+F5iRCelwrheZkQnpcL4blOCM8rhPC8UgjPq4TwvFoIz2uE8LxWCM/rhPBcL4Tn9UJ43iCE541CeG4QwvMmITxvFsLzFiE8bxXC8zYhPG8XwvMOITzvZObJ/qC/DI+nXwb/Gdq7UF6JnqHtl+H+OuxvoA7vZqzD/gLqcICBOryHsQ4HCKjDgQbq8F7GOhxo6MuW3GW+jy0vn7dvRuL1VxS2r8IwLjN3+7nfI2NMfUAIzweF8HxICM+HhfDcKITnI0J4PiqE52NCeD4uhOcTQng+KYTnU0J4Pi2E5zNCeD4rhOdzQng+L4TnC0J4viiE50tCeL4shOcmITxfEcLzVSE8XxPC83UhPDcL4fmGEJ5vCuH5lhCebwvhuUUIz61CeL4jhOc2ITzfFcLzPSE83xfC8wMhPD8UwnO7EJ4fCeH5sRCenwjh+akQnp8J4fm5EJ5fCOH5pRCeO4Tw/EoIz6+F8PxGCM+dQnh+K4Tnd0J47hLC83shPH8QwvNHITx3C+H5kxCePwvh+YsQnr8K4fmbEJ6/C+H5hxCefwrh+ZcQnnuE8PxbCE87Qwk8yxnimcLMMwXxTPT7MR2EfD8mlbHMzTNktMc0If0mXQjPDCE8ywvhmSmEZwUhPCsK4VlJCM8sITwrC+FZRQjPqkJ4VhPCs7oQnjWE8DxECM9DhfA8TAjPmkJ41hLCs7YQnnWE8DxcCM8jhPA8UgjPukJ41hPC8yghPLOF8KwvhGcDxFPlFfj8uYVF4Txfrj8nJwD/F+aGCoOqIJSbX1jgCxSECoLBYFFBQaiosMCb6y0KQg5eX74/vyhQUJCDeXLvpTZk3Eu9WsjvDTcqo739ROuzHGOZGwuJZxzN2B4vzpLRHpsI8WlNhfBsJoTnMUJ4NhfCs4UQni2F8GwlhGdrITwtITyVEJ5eITx9Qnj6hfDMEcIzVwjPgBCeQSE884TwbCOEZ1shPI8VwvM4ITzbCeF5vBCe7YXw7CCE5wlCeHYUwrOTEJ6dhfDsIoRnVyE8uwnh2V0Izx5CePYUwrOXEJ4nCuHZWwjPPkJ49hXCs58Qnv2F8BwghOdAITwHCeE5WAjPIUJ4DhXCc5gQnsOF8BwhhOdIITxHCeE5WgjPMUJ4jhXCM18IzwIhPAuF8AwJ4VkkhGdYCM9xQniOF8JzghCeE4XwnCSE52QhPKcI4TlVCM9pQnhOF8JzhhCeM4XwnCWE52whPOcI4TlXCM95QnieJITnfCE8FwjhuVAIz5OF8DxFCM9ThfA8TQjPRUJ4LhbCc4kQnkuF8DxdCM8zhPA8UwjPs4TwXCaE59lCeC4XwvMcITxXCOG5UgjPVUJ4niuE52ohPM8TwnONEJ5rhfA8XwjPC4TwvFAIz4uE8LxYCM9LhPC8VAjPy4TwvFwIz3VCeF4hhOeVQnheJYTn1UJ4XiOE57VCeF4nhOd6ITyvF8LzBiE8bxTCc4MQnjcJ4XmzEJ63COF5qxCetwnhebsQnncI4XmnEJ53CeF5txCe9wjhea8QnvcJ4Xm/EJ4PCOH5oBCeDwnh+bAQnhuF8HxECM9HhfB8TAjPx4XwfEIIzyeF8HxKCM+nhfB8RgjPZ4XwfE4Iz+eF8HxBCM8XhfB8SQjPl4Xw3CSE5ytCeL4qhOdrQni+LoTnZiE83xDC800hPN8SwvNtITy3COG5VQjPd4Tw3CaE57tCeL4nhOf7Qnh+IITnh0J4bhfC8yMhPD8WwvMTITw/FcLzMyE8PxfC8wshPL8UwnOHEJ5fCeH5tRCe3wjhuVMIz2+F8PxOCM9dQnh+L4TnD0J4/iiE524hPH8SwvNnITx/EcLzVyE8fxPC83chPP8QwvNPITz/EsJzjxCefwvh6UmRwbOcEJ4pQnimCuGZJoRnuhCeGUJ4lhfCM1MIzwpCeFYUwrOSEJ5ZQnhWFsKzihCeVYXwrCaEZ3UhPGsI4XmIEJ6HCuF5mBCeNYXwrCWEZ20hPOsI4Xm4EJ5HCOF5pBCedYXwrCeE51FCeGYL4VlfCM8GQng2FMKzkRCejYXwPFoIzyZCeDYVwrOZEJ7HCOHZXAjPFkJ4thTCs5UQnq2F8LSE8FRCeHqF8PQJ4ekXwjNHCM9cITwDQngGhfDME8KzjRCebYXwPFYIz+OE8GwnhOfxQni2F8KzgxCeJwjh2VEIz05CeHYWwrOLEJ5dhfDsJoRndyE8ewjh2VMIz15CeJ4ohGdvITz7COHZVwjPfkJ49hfCc4AQngOF8BwkhOdgITyHCOE5VAjPYUJ4DhfCc4QQniOF8BwlhOdoITzHCOE5VgjPfCE8C4TwLBTCMySEZ5EQnmEhPMcJ4TleCM8JQnhOFMJzkhCek4XwnGKIZ0oET5+V6/cXBbxFyqfyLW9eQTDH8ucU5AZVUOUEc0LeoM9XFPQHA3kFeQErT/l9RSqck+cL67yPZizz1DIqs5XYpaal8NXfJVlmypx2sJ19CfBUJ2VFlDkUf17zsw6qPxVvXguy+GxxVbUys8U+nlZ8ZV5Il9mKJ6+Ti6m/vHDseZ3CaIury9oW+3gGYy3zqSWVORBbXqeVWH/+cCx5LWK0xTX/ji328fRHX+bFpZc5J9q8lkRTf1Z0eS1ltMW1/6Yt9vG0oinz6dGWOVB6XmdEX3+FpeV1JqMtrvv3bbGPZ6DkMp8VW5m9JeW1LNb6CxSf19mMtljvFlvs4xkorszL4ylzkM7rnPjqL0jltYLRFte7yxZ7eeaGDy7zyvjLbEXmtSqR+vMemNe5jLa4wYW20DwtXObViZbZvz+v8xKvP6+T1xpGW9zoXlvs5Vm0j6ham8WRV9jOTZ3PlBfkpi5gtMUGl9vC4Xkh3/6AYlzfKrw+S7SMN5WRLazELsW4DlKM83h1HaMtbhZiC8b5nmKcr6gbGG1xixBbMI5ritEvq5sYbXGrEFtM59tDV4y+QDG2ZWXKFinMtpjBGCfonCEjbjUzhWm+FyoIlWSbROszle/3ONQsITHF2UJ4zhHCc64QnvOE8DxJCM/5QnguEMJzoRCeJwvheYoQnqcK4XmaEJ6LhPBcLITnEiE8lwrheboQnmcI4XmmEJ5nCeG5TAjPs4XwXC6E5zlCeK4QwnOlEJ6rhPA8VwjP1UJ4nieE5xohPNcK4Xm+EJ4XCOF5oRCeFwnhebEQnpcI4XmpEJ6XCeF5uRCe64TwvEIIzyuF8LxKCM+rhfC8RgjPa4XwvE4Iz/VCeF4vhOcNQnjeKITnBiE8bxLC82YhPG8RwvNWITxvE8LzdiE87xDC804hPO8SwvNuITzvEcLzXiE87xPC834hPB8QwvNBITwfEsLzYSE8Nwrh+YgQno8K4fmYEJ6PC+H5hBCeTwrh+ZQQnk8L4fmMEJ7PCuH5nBCezwvh+YIQni8K4fmSIZ4pETwT/c5qOmOZXxZS5gzGMm8SUubyjGV+RUiZMxnL/KqQMldgLPNrQspckbHMrwspcyXGMm8WUuYsxjK/IaTMlRnL/KaQMldhLPNbQspclbHMbwspczXGMm8RUubqjGXeKqTMNRjL/I6QMh/CWOZtQsp8KGOZ3xVS5sMYy/yekDLXZCzz+0LKXIuxzB8IKXNtxjJ/KKTMdRjLvF1ImQ9nLPNHQsp8BGOZPxZS5iMZy/yJkDLXZSzzp0LKXI+xzJ8JKfNRjGX+XEiZsxnL/IWQMtdnLPOXQsrcgLHMO4SUuSFjmb8SUuZGjGX+WkiZGzOW+RvGMtvnAZznqI9D5S+n6yBVp9vxczuebMdX7XijHX+z41F2fMaOV9j79/Z+tr2/a+932vt/9n6YvT9k75fY+wf2etpeX9rrLXv9Yc/H7fmpPV+z5y/2eG6Pb9kA2//Z/sDuH3Z7sevP/r3UJoCmgGaAYwDNAS0ALQGtAK3tOgEogNe2G8APyAHkAgKAICAP0AbQFnAs4DhAO8Dx2k4dACcAOgI6AToDugC6AroBugN6AHoCegFOBPQG9AH0BfQD9AcMAAwEDAIMBgwBDAUMAwwHjACMBIwCjAaMAYwF5AMKAIUA+2HeRYAwss+ZKfttNh4wATARMAkwGTAFMBUwDTAdMAMwEzALMBswBzAXMA9wEmA+YAFgIeBkwCmAUwGnARYBFgOWAJYCTgecYXMAnAVYBjgbsBxwDmAFYCVgFeBcwGrAeYA1gLWA8wEXAC4EXAS4GHAJ4FLAZYDLAesAVwCuBFwFuBpwDeBawHWA9YDrATcAbgRsANwEuBlwC+BWwG2A2wF3AO4E3AW4G3AP4F7AfYD7AQ8AHgQ8BHgYsBHwCOBRwGOAxwFPAJ4EPAV4GvAM4FnAc4DnAS8AXgS8BHgZsAnwCuBVwGuA1wGbAW8A3gS8BXgbsAWwFfAOYBvgXcB7gPcBHwA+BGwHfAT4GPAJ4FPAZ4DPAV8AvgTsAHwF+BrwDWAn4FvAd4BdgO8BPwB+BOwG/AT4GfAL4FfAb4DfAX8A/gT8BdgD+BtgO4NygBSA/ez3NEA6IANQHpAJqACoCKgEyAJUBlQBVAVUA1QH1AAcAjgUcBigJqAWoDagDuBwwBGAIwF1AfUARwGyAfUBDQANAY0AjQFHA5oAmgKaAY4BNAe0ALQEtAK0BthOTgG8AB/AD8gB5AICgCAgD9AG0BZwLOA4QDvA8YD2gA6AEwAdAZ0AnQFdAF0B3QDdAT0APQG9ACcCegP6APoC+gH6AwYABgIGAQYDhgCGAoYBhgNGAEYCRgFGA8YAxgLyAQWAQkAIUAQIA8YBxgMmACYCJgEmA6YApgKmAaYDZgBmAmYBZgPmAOYC5gFOAswHLAAsBJwMOAVwKuA0wCLAYsASwFLA6YAzAGcCzgIsA5wNWA44B7ACsBKwCnAuYDXgPMAawFrA+YALABcCLgJcDLgEcCngMsDlgHWAKwBXAq4CXA24BnAt4DrAesD1gBsANwI2AG4C3Ay4BXAr4DbA7YA7AHcC7gLcDbgHcC/gPsD9gAcADwIeAjwM2Ah4BPAo4DHA44AnAE8CngI8DXgG8CzgOcDzgBcALwJeArwM2AR4BfAq4DXA64DNgDcAbwLeArwN2ALYCngHsA3wLuA9wPuADwAfArYDPgJ8DPgE8CngM8DngC8AXwJ2AL4CfA34BrAT8C3gO8AuwPeAHwA/AnYDfgL8DPgF8CvgN8DvgD8AfwL+AuwB/A2wJwLlACmAVEAaIB2QASgPyARUAFQEVAJkASoDqgCqAqoBqgNqAA4BHAo4DFATUAtQG1AHcDjgCMCRgLqAeoCjANmA+oAGgIaARoDGgKMBTQBNAc0AxwCaA1oAWgJaAVoDLIACeAE+gB+QA8gFBABBQB6gDaAt4FjAcYB2gOPtuRagA+AEQEdAJ0BnQBdAV0A3QHdAD0BPQC/AiYDegD6AvoB+gP6AAYCBgEGAwYAhgKGAYYDhgBGAkYBRgNGAMYCxgHxAAaAQEAIUAcKAcYDxgAmAiYBJgMmAKQD7N+Ht31u3f9fG/j0V+/dF7N/bsH/Lwv6dCPs3GOzfN7B/O8B+Lr/9zHv7efL2s9rt56Dbzxi3n9+9CGA/d9p+prP9vGT7WcT2c37tOYj9fFr72a/2c1XtZ5bazwO1n7VpP8fSfkak/fxF+9mG9nMD7Wfy2c+7s58lZz+nzX4Gmv18MfvZXfZzsexnTtnPc7KflWQ/h8h+xo/9/JyrAPZzX+xnqtjPK7GfBWI/Z8N+hoX9fAj72Qv2cw3sZwbY38e3v+tuf4/c/o62/f1n+7vF9vd27e/E2t83tb/LaX9P0v4Oov39Pvu7c/b30uzvfNnfp7K/q2R/D8j+jo39/ZXHAfb3LuzvNNjfF7DP4tvn3O0z5Pb5bPvss32u2D6za5+Htc+H2ucl7fOD9nk6+3yZfd7KPn9kn8exz6fY5zXs8wt2PN+Ob9vxXjv+accD7fiYHS+y4yd2PMHeX7f3m+39V3s/0t6fs/er7P0bez/DXt/b6117/Wevh+z1ge3rnGvDfnHvXNu+8mfPLpoyfXb27GnZ+aFQ9rwJs8dnT5tbNDM8eZo9Jdw7L3KuBvq1+9QJsyfkT56wIH/2hGlTs8fnzxqfHZpWNCt76rTZ2VPyZxfaE9G9MybnsiLvLJppf9zMolmzsifsu2/2+KLswmlTZ8/ML5ydHSqaPnna/CJ7orp3JhUr6+9RqRvr174zp82dMHVc9vQ5BZMnFGbPzZ88pyh7wtTCyXNm2aUI50+YXLT353L+QDcfoV8L8ydP3vtps2YVzZw9Zkr+SWMKJsweMwtKYif/FfstttOM8ZbM2G+pFPstlWO/pWbst9SO/ZZ6sd+SHfstjWK/5ejYb2kd+y0q9lv8sd+SG/stx8d+S4fYb+ka+y3dY79lQOy3DIr9ltGx3zI29lsKY7+lKPZbpsZ+y/TYb5kb+y0nxX7LybHfcmrst5wV+y1nx37LithvWRX7LRfFfsslsd9yZey3XB37LTegW1ro1777Jguh/Nn52bNnFtkThlDRSXtnO1Ob6MmOPf2YCjMZ+/03MuSxgSGPpqn782ikX7tPhTnPhJAzAZpUNH9W9vgJU2dnh6f9Mxuz39csgXuPSeDeVujeaCd6OXHc0y6Oe+bFcc+G1IPt2DF/qj3Zhfa3bxqcPX2aXRP5s8Gg4QkwO54PrTO7YP7soln2LrbnE5RHlM34s9hv+SL2W3bEfsvO2G/5LvZbfo39lt9jv+Xv2G8plxbzLemx31I+9luqxX5LjdhvOTT2W2rGfkvt2G85PPZbjor9lvqx39IY3RKtz2mJ7ql/8D1T5kyePWH65PkH36jivTEnDpZ3o3vi9Yw7Y6/Q72K/5fvYb/kx9lt+if2W32K/JSU95lvSYr+lQuy3VIr9lqqx31I99lsOj/2WI2O/pV7st2THfkuD2G9pFPstzWK/pXnst7RGt0TrcwLonpgcXNt4bzw+DpYXZey/J17P+HpGzBX6Ruy3vBX7LVtiv+Xd2G95P/ZbPo/9li9jv2Vn7Ld8F/stP8Z+y0+x37In9lv2HhmK7ZaU2G9Ji/2WjNhvyYz9lsqx31I19lsOQbdE63OOQPfE5OCOivfGhnGw7BV7ZZwY+y39Y79lYOy3fIluidfLN8iM+WMbxX7L0bHf0jT2W1rEfkur2G8JxH5LXuy3tIv9lvax39Ip9lu6xH5Ln9hv6Rf7LQNiv2VQ7LcMif2WYbHfMjr2W8bGfksI3RKt/5yM7onJWU+P98bZcbB8Hd0Tr2esVCHmCq0c+y1VY7+leuy3HBb7LbVivyU79lsaxH5Lk9hvaRb7LS1jv6V17LcEY7+lTey3HBv7Le1iv6V97LecEPstXWO/pXvst5yIbonW5wxC98Tk4IbFe+OoOFieEcc9y2K8xz7FtFm/r8gT/70T0L119GuHmTPz5+uw5bQ5s7OnhbMLps2ZGpqFb5we740L42D7sz60lYfuJcw4a07BvkNpxWZwXKysnRs7xXvjoDiK+6u+1x/rhzo3dkjgQzvH+6GD4/jQFB1APxbdG5NhnQzax8raubFrvDcOiaO4FfS9MRvWuTEewzr3xmxY58Z4DFsjUcPWiNewNeI1bI0EDFsn0eLWibe4deItbp0Eils/3nZcP4F2XD/edlw/gXbcPFHDNo/XsM3jNWzzBAzrjdew3gQM643XsN4EDNs2UcO2jdewbeM1bNsEDHtCosU9Id7inhBvcU9IoLi99b1xTxidDGKeMDo3dor3xngmjH3j7bZ9E+i2fePttn0T6LbDE23Hw+Ntx8PjbcfDE2jH+fEaNj8Bw+bHa9j8BAw7MVHDTozXsBPjNezEBAw7I9Hizoi3uDPiLe6MBIo7P952PD+Bdjw/3nY8P4F2vDRRwy6N17BL4zXs0gQMuzxewy5PwLDL4zXs8gQMuzZRw66N17Br4zXs2gQMe2mixb003uJeGm9xL02guLfpe5uje52iD5g9bWb+uKLsWZMhtmXt/QosbG1Pm1cUapWN02bBPvIsiH7Nzp85Ozs8c9qUbNUK570h1gI5N94R740Px1ETK/V5+Zh7tHNjPD3auTfmHu3cGE+P3q7vjXuR4GQQ8yLBubFTvDfGs0j4Kl7DfpWAYb+K17BfJWDY3freuH2Xk0H7WFk7N3aN98Z4fNcfiRb3j3iL+0e8xf0jgeKm6PP0Mbdj58Z42rFzb8zt2Lkxnnacpe+N27BOBu1jZe3c2DXeG+Mx7BGJFveIeIt7RLzFPSKB4n6l7417+HEyiHn4cW7sFO+N8Qw/u+PttrsT6La74+22uxPotnsSbcd74m3He+Jtx3sSaMfp6QkW18mgfaysnRu7xntjPMXN0vfG3I6dG+Npx869Mbdj58Z42nHNRA1bM17D1ozXsDUTMGzjRIvbON7iNo63uI0TKO4r+nshcQ8/TgYxDz/OjZ3ivTGe4WervjfmbuvcGE+3de6Nuds6N8bTbT/W98bdjp0M2sfK2rmxa7w3xtOOdyRa3B3xFndHvMXdkUBxd8Xbjncl0I53xduOdyXQjn9P1LC/x2vY3+M17O8JGLZC+QSL62TQPlbWzo1d470xnuL21PfG3I6dG+Npx869Mbdj58Z42nGfRA3bJ17D9onXsH0SMOxR+nshcc8rnAxinlc4N3aK98Z45hXN9L0xt2PnxnjasXNvzO3YuTGeduzT98bdjp0M2sfK2rmxa7w3xtOO2yRa3DbxFrdNvMVtk0BxO8Tbjjsk0I47xNuOOyTQjnsmatie8Rq2Z7yG7ZmAYYcnWtzh8RZ3eLzFHZ5AcTP1F2niHn6cDGIefpwbO8V7YzzDTw19b8zd1rkxnm7r3Btzt3VujKfbHqnvjbsdOxm0j5W1c2PXeG+Mpx03TLS4DeMtbsN4i9swgeIeE287PiaBdnxMvO34mATasT9Rw/rjNaw/XsP6EzBsx0SL2zHe4naMt7gd4y1uZf2mhvrVzsd5QqydcZqH7xfF0PdFefMO+vMqePb/wpgJ3ulm8rbsVWtHPXdw+DufZdvGeRKo8x77pWoEF+dKQ+9PQfY0wj3o39vFMkzkbVk5e8seUS+2Li3z4DpK1zqHi/1vbS3bvwzXKeIeg/bMrew50CbOZ+ALpzs8KnrMtd9y6HOcz3c+y2knWbqu7Gtc0eyO+rcyuk+dNTt/amFROUQtPYI6TossauR77CuV0NlXZfR+bPLUiLzsHwO0TVg+c38+nF1y7/wWNZk09FlOU0tB78nMPLBunP8boHJWQE8e2dtN9f9OvnaXztByhczi70uLuK8aek8Guq98xH3lEe+97/XsH1js+rxSyzLdf8BrsEt7Dbq5A9x/OrKNfaWitI4RbZ0aGrDr6YSGi5qe/emdM/fn7ei6EG62K+Fmu0W4WVvX3WmPqH6wndM0B/vCQ1JFz4Hlaa//txK5gv58O+9KJvK2vEE8JFVAdeD0yYpI5/gJh4v972latt2sY4eWqE7Km+FdVBnZzIM+wxNhJ+dyeFT0GGv3e4ek8hGf73wWHpKcYRyGpH0/UtApf3b+wJlFRUP2/RoBHnuc/FoinfMaWd6WEZ9lX6kRfCLTI6dbVdH/GcW8hxpqq6H3O2kGp69WNHW9d8yLeE/5CI52eZ06ykS8zbTbfW2kQhS8K0a8x7mnPOLt8K2IeFcww9v+/c9/+n1JvLMi3lMJcXN4O3yzzPP2UZwo3pUj3pNF8HbK4rw3Fb0v0j+nonvx56cSdeLcY7Ae/FQZqXqoEvGeykQ9OOWpgtIqm+GtKnsO7C/OZ3gieDpXZYKTh4+PVcFz8FKVJ29vnvND4NGW1eFREd1nwl9Vjfh857Pw3KeamTqxf1/4n7ydz68WUX673qpH6PbucmvZWe8476mG+DvvqYHuS0f/d0P3VEef57zX0XkiPgOvSU5AeThtuQrKK3J9aN/TU8vmxtB9dVs5oo4iuaSj94xF/Ppo2a7v8oiro4scr6hxr0JEXVUj8sL9H8/vHU6ZSOfUKZ6zOu0hC+kc+2N/Xj2CL16LHDAvRrLz6tQZtqnjW3EbLY/K6egc/tURJzwHq4BeDfnYHMrv4zWS85lOWTIi3uPcm47eE9avNTwHXwZ9aAj7C6dNO/yqIr3znokl8KR8DzVmRvpH5x78uZWR7NSBSZ9ZNaIOHFvhunHeM6OEOqC2LPf6JCP7VN69T49ejj77n7aFPq+08YiyG64Ppx5wP8Rlwfc578d+zHl/ZD+gfObJ+pWq23jHA7fvEZ7t2a934x7hIi1Xivj8VCIfZ62bEZFPOnrPKpT3ai3j/ZJUtMd0BZHuXCXN9dLQHk0Fg/avGGF/57PSUPmd91SMsL/z/+WoPJWKsX8FZH+n3VTKLP6+9Ij7qqH3ZJbQbioQ9l+r5YqeA/0K57wZ29puZ0O1LDQUmfv/uBcdy34znlNG7jfjvc9yyM5GyqT2rUEzTeRteRWep3o8B5bJubBfwntQJvfMitvHc/qSPX8+DNnEJuHck+3o8GYfJhu5SRoZb8YLE7woMGkEzMn5DE8ET+fCRkg1wok2QmQ9OUZIQ6RJI+BokEM2IyLzyJl2NfR+J83kAYlYIwzF7XqX4+NkFbfLbmjXUOEVajR14PCohu4ri2hAcbPmZsY/22vhnY2SdlGc9yjEr6WWq3ro0SkD3e/oIvtA5I4BjkxWiOBRLoJLDsqrn8d0Xakwrisnb1xHjr4i4lVcfTrvaaNfi9tpMBKV1XavhPjgHa2KSO+8p10JPHFeTjkjRzhcL857qOhKWgQH03WQFUUdOO/pXEodREZqUqOog5IiNbjcuC+kePbXUyX0GZF5lYvg30u/4v6COaUXkzf228XZhXGcUNj/ViQ4mxw3cV079R3Zf0vq49iXOu9xzvcWt0MVeS/2/cNQmtSVV5pB3m46BIpXWZ2IUz2dI/LDByGNHw7VKy9DJ1pinm+65UQLtfJy7sl2dNQEp5zn4BOc6RGZY8eJO7mpVU7lCE7OZ3gieDpXKsHJ4+Gd8KcTn2Vm5WnFvfwv2xWyFfcKGXPyeHgH3NQSPsvEgidywm/3k8bGP1uRC55ILniRYSF+zqCMNwHSkS4y3ILbI14YZUbci9sDvjeSl7NYqhBxv8EjluQkOXKCiCeZzqIs2kkyFZKMXExkIdnjOfAYlvNefJwJT7Lxe3GfoybO+D4sV4i4B/u1isTnlC+hLJE2xe0xw1N8/TrvcY5jFLdgNLOZQreDyAUcbgddSuAZbTuInIhHHlfDxwjxMQt8xNdDvBe3gyz0udR9WI48+ofHjcwSPqeC58DyttevViIXTOgwpxT0uZhfagR3cwvqfROuSLtGLujxTmxke8fty3mP8/W54hZPkfficWQMKnMybHXA9X8ZtsKfk47eizdxsW/m3LRIR589HHHBx0yNzGn0ws7QJlnMR1groldTG/vURlrkcTxqYefck+3ocEgNk40mpBZ5rs+0EWJZMGAjmAypVSylnqiQGmmEyBETjxJO5pkRmRe3ajEZUoslnFRWITUqVGVmNbCvDip6oq8DPGOuWEq9cK8wI0ONOGRlMExEhlYiueDQih/xc8Jr+GAyPiQcucK07xmJ7omcbeFZbWQYzdEHUV4DjNePFcb1ExlGwzMSPKMrrg6d9ziP2SluVZRlpCz7VkWRh9CdsuHZrPOeDiXwxHk55Ywc1agZtnMPXhVFzopN10GVKOrAeU+3Uuog8jB3ahR1UIWog8oRHHC7iwyjVUafEZlXuQj+zpcHcH+JXB1TeWNfjVdokbsGZdQPFbU7EdnHSuqH1O6Pc1CwuNVa5L3YJ5fm3/Aqgdo5w7smb2pZ5sovR/0/rvxsOzmru04RB1fd+uV5W9cDfbaj64kONDu6Xs7BYqQ70TkcjHS9tQ5/qacPKrPz2lfrHL+DV7zOvVno8+xnhIzPnzC1e4haD0fO0iKviJwGF82cNWHaVHxX+ShzMnikyxfvka6KHnPRHGqnMnKtgufN+EtR2P+2Z+KDxxQ8hkUu1ipGcMT34UWtIVta1DgeWW8Gvzjmra7Li/uhx3PwESBDdrJwPePjInhXHbdZznUjnmumeQ7c9MDRKec9LfQrNa6neg5egzr804h6Uzm5RfkF4aC/yFeUn2OF/FaRz+ezvF5/2BvyFgVVrj8YDoeDYRUOFBWqgsLckDcY8BUW5ucW5eXkhQxFq0Pm5shWEf7Spwd9Br5wXeGIlKkvp5e0lkhBPJz2OGvfj1T2L8r/Z4DBWWCazmtkEXGT8xAydlHYzacS7y3pwkugyOrDn+v8j11gJEfTBzYiyxTtgQ1DQZyQ1L1GgwcWCkvajsTTvchAMrU0dt6DhzrnPfg5CHjJ2V2/VvPQz+yI7MY4qGlf9iSwI8rDsR+eNlOnEHshnSHXWEhtlzlczG9f7AvcOJ+/HpXdOW2KT+TiZXFxp5nxcjOyzUROAamT74nmnYXyrhCRt8F69FKcKN6RJ/IyCd6RWyJ4ihF56hgf/IgcMyLrxLnHYD34qDJS9RD5jaHyRD3gQLnHLG8/xYniHXnoMYPg7ZQl3TzvHIoTxTsyppdO8I78Zleqhz74Gdnu8OenEnVSBu0ulyojVQ+RW8ypRD3gbRKPWd4BihPFu7hnO2HeTlmqmOcdpDhRvIt73gPmHfl8jVTPgc9UcPKKbHf481M99Ja34XaXR5WRqofinmmB68Epj/Neg7zzKU4U78hnJFUjeDtlqW6edwHFieJdI+I91QneTlmc9+LDc/j5LpHtDm+HpBJ14tyDn02E12M1UD05OudRx3g+faiW8dbrYVrGW7TOljDeyq2lZezLaiPOjq4Okp3Xw7WM++ARWsbPRHKe546fxeLkjZ+35ZS9BtI5vA5BOof/oUjnlPMwpHPqA2+FO3VZC+mcuqyNdI7tcLkdux2OdE59HIF0Tn045XYOJEfOjw2uxUJ4fhW5XsBbV857btKvxYUbI+dqkVsg1Lw2cn6D56xlcIC+EM/VSqoD5z13llAH+BlJeOvRzDOSrJCd7WPos/+pS/R5xc2NS7JJ5IF86luE1Noqch6I16OR3+6jvhm7Ub8W94wkp09gfxWZH15rczzT5ymU7zP4cyPytdPfINKdq6R9H0nP9HkdlceNz/R5Xsumn+nj2Npuu/O1LDlEnmaQt5u+WYrH/mi+WYrD4DjvrqjfO7puRMi7O/psR9cD9XdH15MIefciQt4nEiHv3kTIu09EyBuHwZ15F/7WLF6fGrJXUax79Ni3mzy6E7nnERnLsOu6npb/eVZ7z6L5szpMDfXNnzl7Qv7kDqHQzIgntkeu/KOJ5mB9KqGzL7w6x7USzUnryN1qgxEZi5p9RNYsNWuM3Dmivg5oMpJEcaJ4FzeTxbzxj/YY5k3uGlO8iztggXlHPn0X7xpHfu0j1XNwwNu5J7JO8C6KoXrwUWWk6qG4rz3geoic9Rrk7ac4UbwjDxpWJHhHfs3SIO8cihPFu7hfBMC8I6MMeBeFilakRpTTuSeyTsqg3eVSZaTqoXLEe7I8B9cDHvE9ZnmTu8YU7+J2jTFv6hcBDPEmd40p3sXtGmPese4aR+6OO/dE1kkZtDty15iqh+J2jXE9ULvGhniTu8YU7+J2jTFvatfYEG9y15jiXdyuMeZN7RpH/joB1e7w56cSdVIG7a6QKiNVD4dEvKeG5+B6cMqDd3DxrzY4Oicdr7qcHV686nJWeXjV5ezw4lWXs8OLV13ODi/2wc4OL1514R1e59XZ4cW+40hUTkdXV8t4t9tZYeDdbqeO8G63U8e4rpw6wrvdTh3hFa9TR3i326kjvNvt1BHe7XbqCO92O3WE68KpI7zb7dTRkUjn1FFdpHPqyKkLO/9mWhb61fOQwd3rPJOHivHuCl6/2JfdLp0di54Ru2zUzgtut53Q7oeRnYagP8dgnecYPDGYi/ueB30GvtKQ7JaviOPIB/bXJf16oGMf+xX7lMjTc9iX9UDtyfFlPVF+jdA9vSJ29w5BunLoM9z+KwoNPfv1bvwVBcf3V/LQ+yKRj3KzxwdnjJs6bfaE8PyOM4vyZxeFek+bXYQbO27Q+Io8IoQ/zBNBAr8Xb0aVJ9LxVa6Uz8Xvc5wePlrm8RzoCPG39bzofQIHtLz/x2/URTtoZXoOnPBxfmsOfysNh/8N1UcOdrYe9Bn4woMNfnCtIfsratOYciDOZBW242EjfnD+5Amh/NkTpk3tXzRjTtGs2XivnfoirvNaXHFTkC61lHR84VPIkVWE84jMBz8GDZveUNTDiqaaS9qbT0PljXzcnukvWpePgndxe/OYN7U3b4i3N5pxsaS9ecw71r35tIhyOvdE1gneMzBUD+TePFUPxc03cT1E7s1X9hy8h4/XrdjVO+tWvGcQefIdDwl4SE8jPtcpA94ziDy5XMlz4LcwBA79fpPxQpP+Dg/9kbHTTM+BNu9IrBs6RqwbbDs6+xcwBPXPnxqaNqXLhKLJoWgiuJEXblW45VKPYyjSzUZkC8oP5hib0Hj93siH0plqQQ5/HN100jpGrCaLe1RDik5zJnydiTRnItmFSHMmlF2JNGdi2Y1Ic86jdCfSnNV1DyKN2u1x0pxVdS8izTmvciKR5pxb6U2kOedX+hBpzjmWvkRaP63rR6T117r+RNoArRtApA3UuoFE2iCtG0SkDda6wUTaEK0bQqQN1bqhRNowrRtGpA3XuuFE2gitG0GkjdS6kUTaKK0bRaSN1rrRRNoYrRtDpI3VurFEWr7W5RNpBVpXQKQVal0hkRbSuhCRVqR1RURaWOvCRNo4rRtHpI3XuvFE2gStm0CkTdS6iUTaJK2bRKRN1rrJRNoUrZtCpE3VuqlE2jStm0akTde66UTaDK2bQaTN1LqZRNosrZtFpM3WutlE2hytm0OkzdW6uUTaPK2bR6SdpHUnEWnztW4+kbZA6xYQaQu1biGRdrLWnUyknaJ1pxBpp2rdqUTaaVp3GpG2SOsWEWmLtW4xkbZE65YQaUu1bimRdrrWnU6knaF1ZxBpZ2rdmUTaWVp3FpG2TOuWEWlna93ZRNpyrVtOpJ2jdecQaSu0bgWRtlLrVhJpq7RuFZF2rtadS6St1rrVRNp5WncekbZG69YQaWu1bi2Rdr7WnU+kXaB1FxBpF2rdhUTaRVp3EZF2sdZdTKRdonWXEGmXat2lRNplWncZkXa51l1OpK3TunVE2hVadwWRdqXWXUmkXaV1VxFpV2vd1UTaNVp3DZF2rdZdS6Rdp3XXEWnrtW49kXa91l1PpN2gdTcQaTdq3Y1E2gat20Ck3aR1NxFpN2vdzUTaLVp3C5F2q9bdSqTdpnW3EWm3a93tRNodWncHkXan1t1JpN2ldXcRaXdr3d1E2j1adw+Rdq/W3Uuk3ad19xFp92vd/UTaA1r3AJH2oNY9SKQ9pHUPEWkPa93DRNpGrdtIpD2idY8QaY9q3aNE2mNa9xiR9rjWPU6kPaF1TxBpT2rdk0TaU1r3FJH2tNY9TaQ9o3XPEGnPat2zRNpzWvcckfa81j1PpL2gdS8QaS9q3YtE2kta9xKR9rLWvUykbdK6TUTaK1r3CpH2qta9SqS9pnWvEWmva93rRNpmrdtMpL2hdW8QaW9q3ZtE2lta9xaR9rbWvU2kbdG6LUTaVq3bSqS9o3XvEGnbtG4bkfau1r1LpL2nde8Rae9r3ftE2gda9wGR9qHWfUikbde67UTaR1r3EZH2sdZ9TKR9onWfEGmfat2nRNpnWvcZkfa51n1OpH2hdV8QaV9q3ZdE2g6t20GkfaV1XxFpX2vd10TaN1r3DZG2U+t2Emnfat23RNp3WvcdkbZL63YRad9r3fdE2g9a9wOR9qPW/Uik7da63UTaT1r3E5H2s9b9TKT9onW/EGm/at2vRNpvWvcbkfa71v1OpP2hdX8QaX9q3Z9E2l9a9xeRtkfr9hBpf2vd30TaAc/NjEgr5+iItBStSyHSUrUulUhL07o0Ii1d69KJtAytyyDSymtdeSItU+syibQKWleBSKuodRWJtEpaV4lIy9K6LCKtstZVJtKqaF0VIq2q1lUl0qppXTUirbrWVSfSamhdDSLtEK07hEg7VOsOJdIO07rDiLSaWleTSKuldbWItNpaV5tIq6N1dYi0w7XucCLtCK07gkg7UuuOJNLqal1dIq2e1tUj0o7SuqOItGytyybS6mtdfSKtgdY1INIaal1DIq2R1jUi0hprXWMi7WitO5pIa6J1TYi0plrXlEhrpnXNiLRjtO4YIq251jUn0lpoXQsiraXWtSTSWmldKyKttda1JtIsrbOINCd4pog0r9Z5iTSf1vmINL/W+Ym0HK3LIdJytS6XSAtoXYBIC2pdkEjL07o8Iq2N1rUh0tpqXVsi7VitO5ZIO07rjiPS2mldOyLteK07nkhrr3XtibQOWteBSDtB604g0jpqXUcirZPWdSLSOmtdZyKti9Z1IdK6al1XIq2b1nUj0rprXXcirYfW9SDSempdTyKtl9b1ItJO1LoTibTeWtebSOujdX2ItL5a15dI66d1/Yi0/lrXn0gboHUDiLSBWjeQSBukdYOItMFaN5hIG6J1Q4i0oVo3lEgbpnXDiLThWjecSBuhdSOItJFaN5JIG6V1o4i00Vo3mkgbo3VjiLSxWjeWSMvXunwirUDrCoi0Qq0rJNJCWhci0oq0rohIC2tdmEgbp3XjiLTxWjeeSJugdROItIlaN5FIm6R1k4i0yVo3mUibonVTiLSpWjeVSJumddOItOlaN51Im6F1M4i0mVo3k0ibpXWziLTZWjebSJujdXOItLlaN5dIm6d184i0k7TuJCJtvtbNJ9IWaN0CIm2h1i0k0k7WupOJtFO07hQi7VStO5VIO03rTiPSFmndIiJtsdYtJtKWaN0SIm2p1i0l0k7XutOJtDO07gwi7UytO5NIO0vrziLSlmndMiLtbK07m0hbrnXLibRztO4cIm2F1q0g0lZq3UoibZXWrSLSztW6c4m01Vq3mkg7T+vOI9LWaN0aIm2t1q0l0s7XuvOJtAu07gIi7UKtu5BIu0jrLiLSLta6i4m0S7TuEiLtUq27lEi7TOsuI9Iu17rLibR1WreOSLtC664g0q7UuiuJtKu07ioi7Wqtu5pIu0brriHSrtW6a4m067TuOiJtvdatJ9Ku17rribQbtO4GIu1GrbuRSNugdRuItJu07iYi7Watu5lIu0XrbiHSbtW6W4m027TuNiLtdq27nUi7Q+vuINLu1Lo7ibS7tO4uIu1urbubSLtH6+4h0u7VunuJtPu07j4i7X6tu59Ie0DrHiDSHtS6B4m0h7TuISLtYa17mEjbqHUbibRHtO4RIu1RrXuUSHtM6x4j0h7XuseJtCe07gki7Umte5JIe0rrniLSnta6p4m0Z7TuGSLtWa17lkh7TuueI9Ke17rnibQXtO4FIu1FrXuRSHtJ614i0l7WupeJtE1at4lIe0XrXiHSXtW6V4m017TuNSLtda17nUjbrHWbibQ3tO4NIu1NrXuTSHtL694i0t7WureJtC1at4VI26p1W4m0d7TuHSJtm9ZtI9Le1bp3ibT3tO49Iu19rXufSPtA6z4g0j7Uug+JtO1at51I+0jrPiLSPta6j4m0T7TuEyLtU637lEj7TOs+I9I+17rPibQvtO4LIu1LrfuSSNuhdTuItK+07isi7Wut+5pI+0brviHSdmrdTiLtW637lkj7Tuu+I9J2ad0uIu17rfueSPtB634g0n7Uuh+JtN1at5tI+0nrfiLSfta6n4m0X7TuFyLtV637lUj7Tet+I9J+17rfibQ/tO4PIu1PrfuTSPtL6/4i0vZo3R4i7W+t+5tIO+CxARFp5RwdkZaidSlEWqrWpRJpaVqXRqSla106kZahdRlEWnmtK0+kZWpdJpFWQesqEGkVta4ikVZJ6yoRaVlal0WkVda6ykRaFa2rQqRV1bqqRFo1ratGpFXXuupEWg2tq0GkHaJ1hxBph2rdoUTaYVp3GJFWU+tqEmm1tK4WkVZb62oTaXW0rg6RdrjWHU6kHaF1RxBpR2rdkURaXa2rS6TV07p6RNpRWncUkZatddlEWn2tq0+kNdC6BkRaQ61rSKQ10rpGRFpjrWtMpB2tdUcTaU20rgmR1lTrmhJpzbSuGZF2jNYdQ6Q117rmRFoLrWtBpLXUupZEWiuta0Wktda61kSapXUWkaa0ThFpXq3zEmk+rfMRaX6t8xNpOVqXQ6Tlal0ukRbQugCRFtS6IJGWp3V5RFobrWtDpLXVurZE2rFadyyRdpzWHUektdO6dkTa8Vp3PJHWXuvaE2kdtK4DkXaC1p1ApHXUuo5EWiet60Skdda6zkRaF63rQqR11bquRFo3retGpHXXuu5EWg+t60Gk9dS6nkRaL63rRaSdqHUnEmm9ta43kdZH6/oQaX21ri+R1k/r+hFp/bWuP5E2QOsGEGkDtW4gkTZI6wYRaYO1bjCRNkTrhhBpQ7VuKJE2TOuGEWnDtW44kTZC60YQaSO1biSRNkrrRhFpo7VuNJE2RuvGEGljtW4skZavdflEWoHWFRBphVpXSKSFtC5EpBVpXRGRFta6MJE2TuvGEWnjtW48kTZB6yYQaRO1biKRNknrJhFpk7VuMpE2ReumEGlTtW4qkTZN66YRadO1bjqRNkPrZhBpM7VuJpE2S+tmEWmztW42kTZH6+YQaXO1bi6RNk/r5hFpJ2ndSUTafK2bT6Qt0LoFRNpCrVtIpJ2sdScTaado3SlE2qladyqRdprWnUakLdK6RUTaYq1bTKQt0bolRNpSrVtKpJ2udaejtOKeFFjBY+gpEPrpFYaePbD3KFimmbwVftqdB30GvvAThhweFT3Gnoew90k8mRGfH/nbQvipgPhhWM7T5zKRznkiHn4qz5AUdI/WU7/947Qr+54CfY/91I4ztN65bBu5/Wl/+Sn79W582t9Q/Y/ztL/SfuHBflKK81TaoikTZneeWjhz/nT9tL9e08Z5Iq5UQsaf0z5lf3o6cY9j13KeA/uI44/w/c577bLobbK9r4dGpLfX/1uJXXuPhB5mJm8L+weH/2GoTKjYbJ+J6x4/SC4F6Zz0TMSlHD8XhbLc+5mR/hE/hbocwakiSuN+oGElM3kfYHOHfyXCDmlE2bGcgt5LpVO6ysTnHELo/gfFfG8IpoYMAA==","debug_symbols":"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","brillig_names":["get_contract_instance_internal","get_public_data_witness","lt_32_hint","decompose_hint","lte_16_hint","key_registry_get_stored_keys_hint","get_public_keys_and_partial_address","notify_created_note","get_key_validation_request","unsafe_rand","emit_encrypted_note_log","directive_invert","directive_integer_quotient"]}],"outputs":{"globals":{"notes":[{"fields":[{"kind":"integer","sign":false,"value":"00000000000000000000000000000000000000000000000000000000906cb9c3"},{"kind":"string","value":"EcdsaPublicKeyNote"}],"kind":"tuple"}],"storage":[{"fields":[{"name":"public_key","value":{"fields":[{"name":"slot","value":{"kind":"integer","sign":false,"value":"0000000000000000000000000000000000000000000000000000000000000001"}}],"kind":"struct"}}],"kind":"struct"}]},"structs":{"functions":[{"fields":[{"name":"parameters","type":{"fields":[{"name":"inner_hash","type":{"kind":"field"}}],"kind":"struct","path":"EcdsaRAccount::verify_private_authwit_parameters"}},{"name":"return_type","type":{"kind":"field"}}],"kind":"struct","path":"EcdsaRAccount::verify_private_authwit_abi"},{"fields":[{"name":"parameters","type":{"fields":[{"name":"signing_pub_key_x","type":{"kind":"array","length":32,"type":{"kind":"integer","sign":"unsigned","width":8}}},{"name":"signing_pub_key_y","type":{"kind":"array","length":32,"type":{"kind":"integer","sign":"unsigned","width":8}}}],"kind":"struct","path":"EcdsaRAccount::constructor_parameters"}}],"kind":"struct","path":"EcdsaRAccount::constructor_abi"},{"fields":[{"name":"parameters","type":{"fields":[{"name":"app_payload","type":{"fields":[{"name":"function_calls","type":{"kind":"array","length":4,"type":{"fields":[{"name":"args_hash","type":{"kind":"field"}},{"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":"target_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"is_public","type":{"kind":"boolean"}},{"name":"is_static","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::function_call::FunctionCall"}}},{"name":"nonce","type":{"kind":"field"}}],"kind":"struct","path":"authwit::entrypoint::app::AppPayload"}},{"name":"fee_payload","type":{"fields":[{"name":"function_calls","type":{"kind":"array","length":2,"type":{"fields":[{"name":"args_hash","type":{"kind":"field"}},{"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":"target_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"is_public","type":{"kind":"boolean"}},{"name":"is_static","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::function_call::FunctionCall"}}},{"name":"nonce","type":{"kind":"field"}},{"name":"is_fee_payer","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::fee::FeePayload"}},{"name":"cancellable","type":{"kind":"boolean"}}],"kind":"struct","path":"EcdsaRAccount::entrypoint_parameters"}}],"kind":"struct","path":"EcdsaRAccount::entrypoint_abi"}]}},"file_map":{"101":{"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::poseidon2_hash_with_separator,\n address::AztecAddress, header::Header, utils::field::full_field_less_than\n};\nuse dep::protocol_types::merkle_tree::root::root_from_sibling_path;\n\nuse crate::{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 index by siloing the storage slot with the contract address\n let public_data_tree_index = poseidon2_hash_with_separator(\n [contract_address.to_field(), storage_slot],\n GENERATOR_INDEX__PUBLIC_LEAF_INDEX\n );\n\n // 2) Get the membership witness for the tree index.\n let witness = unsafe {\n get_public_data_witness(\n self.global_variables.block_number as u32,\n public_data_tree_index\n )\n };\n\n // 3) The witness is made up of two parts: the preimage of the leaf and the proof that it exists in the tree.\n // We first prove that the witness is indeed valid for the public data tree, i.e. that the preimage is of a\n // value present in the tree. Note that `hash` returns not just the hash of the value but also the metadata\n // (slot, next index and next slot).\n assert(\n self.state.partial.public_data_tree.root\n == root_from_sibling_path(witness.leaf_preimage.hash(), witness.index, witness.path), \"Proving public value inclusion failed\"\n );\n\n // 4) Now that we know the preimage is valid, we determine the value that's represented by this tree entry. Here\n // we have two scenarios:\n // 1. The tree entry is initialized, and the value is the same as the one in the witness\n // 2. The entry was never initialized, and the value is default zero (the default)\n // The code below is based on the same checks in `validate_public_data_reads` in `base_rollup_inputs`.\n let preimage = witness.leaf_preimage;\n\n let is_less_than_slot = full_field_less_than(preimage.slot, public_data_tree_index);\n let is_next_greater_than = full_field_less_than(public_data_tree_index, 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_data_tree_index, \"Public data tree index doesn't match witness\");\n preimage.value\n };\n\n value\n }\n}\n"},"109":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/context/unconstrained_context.nr","source":"use dep::protocol_types::{address::AztecAddress, traits::Deserialize};\nuse crate::oracle::{execution::{get_chain_id, get_version, get_contract_address, get_block_number}, storage::storage_read};\n\nstruct UnconstrainedContext {\n block_number: u32,\n contract_address: AztecAddress,\n version: Field,\n chain_id: Field,\n}\n\nimpl UnconstrainedContext {\n unconstrained fn new() -> Self {\n // We could call these oracles on the getters instead of at creation, which makes sense given that they might\n // not even be accessed. However any performance gains are minimal, and we'd rather fail early if a user\n // incorrectly attempts to create an UnconstrainedContext in an environment in which these oracles are not\n // available.\n let block_number = get_block_number();\n let contract_address = get_contract_address();\n let chain_id = get_chain_id();\n let version = get_version();\n Self { block_number, contract_address, version, chain_id }\n }\n\n unconstrained fn at(contract_address: AztecAddress) -> Self {\n let block_number = get_block_number();\n let chain_id = get_chain_id();\n let version = get_version();\n Self { block_number, contract_address, version, chain_id }\n }\n\n unconstrained fn at_historical(contract_address: AztecAddress, block_number: u32) -> Self {\n let chain_id = get_chain_id();\n let version = get_version();\n Self { block_number, contract_address, version, chain_id }\n }\n\n fn block_number(self) -> u32 {\n self.block_number\n }\n\n fn this_address(self) -> AztecAddress {\n self.contract_address\n }\n\n fn version(self) -> Field {\n self.version\n }\n\n fn chain_id(self) -> Field {\n self.chain_id\n }\n\n unconstrained fn raw_storage_read<let N: u32>(self: Self, storage_slot: Field) -> [Field; N] {\n storage_read(self.this_address(), storage_slot, self.block_number())\n }\n\n unconstrained fn storage_read<T, let N: u32>(\n self,\n storage_slot: Field\n ) -> T where T: Deserialize<N> {\n T::deserialize(self.raw_storage_read(storage_slot))\n }\n}\n"},"115":{"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, hash::{hash_args_array, ArgsHasher},\n keys::constants::{NULLIFIER_INDEX, OUTGOING_INDEX, NUM_KEY_TYPES, sk_generators},\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::{emit_encrypted_note_log, emit_encrypted_event_log},\n enqueue_public_function_call::{\n enqueue_public_function_call_internal, notify_set_min_revertible_side_effect_counter,\n set_public_teardown_function_call_internal\n}\n}\n};\nuse dep::protocol_types::{\n abis::{\n call_context::CallContext, function_selector::FunctionSelector, gas::Gas,\n max_block_number::MaxBlockNumber,\n validation_requests::{KeyValidationRequest, KeyValidationRequestAndGenerator},\n private_call_request::PrivateCallRequest, private_circuit_public_inputs::PrivateCircuitPublicInputs,\n public_call_request::PublicCallRequest,\n public_call_stack_item_compressed::PublicCallStackItemCompressed, read_request::ReadRequest,\n note_hash::NoteHash, nullifier::Nullifier, log_hash::{LogHash, NoteLogHash, EncryptedLogHash}\n},\n address::{AztecAddress, EthAddress},\n constants::{\n MAX_NOTE_HASHES_PER_CALL, MAX_L2_TO_L1_MSGS_PER_CALL, MAX_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 header::Header, messaging::l2_to_l1_message::L2ToL1Message, utils::reader::Reader, traits::Empty\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 note_hashes: BoundedVec<NoteHash, MAX_NOTE_HASHES_PER_CALL>,\n nullifiers: BoundedVec<Nullifier, MAX_NULLIFIERS_PER_CALL>,\n\n private_call_requests : BoundedVec<PrivateCallRequest, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL>,\n public_call_requests : BoundedVec<PublicCallRequest, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL>,\n public_teardown_call_request: PublicCallRequest,\n l2_to_l1_msgs : BoundedVec<L2ToL1Message, MAX_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 note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n historical_header: inputs.historical_header,\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n 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_note_hash(&mut self, note_hash: Field) {\n self.note_hashes.push(NoteHash { value: note_hash, counter: self.next_counter() });\n }\n\n fn push_nullifier(&mut self, nullifier: Field) {\n self.nullifiers.push(Nullifier { value: nullifier, note_hash: 0, counter: self.next_counter() });\n }\n\n fn push_nullifier_for_note_hash(&mut self, nullifier: Field, nullified_note_hash: Field) {\n self.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 note_hashes: self.note_hashes.storage,\n nullifiers: self.nullifiers.storage,\n private_call_requests: self.private_call_requests.storage,\n public_call_requests: self.public_call_requests.storage,\n public_teardown_call_request: self.public_teardown_call_request,\n l2_to_l1_msgs: self.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 notify_set_min_revertible_side_effect_counter(self.min_revertible_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.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_nullifier(nullifier)\n }\n // docs:end:consume_l1_to_l2_message\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 emit_raw_event_log_with_masked_address<let M: u32>(\n &mut self,\n randomness: Field,\n log: [u8; M],\n log_hash: Field\n ) {\n let counter = self.next_counter();\n let contract_address = self.this_address();\n let len = log.len() as Field + 4;\n let side_effect = EncryptedLogHash { value: log_hash, counter, length: len, randomness };\n self.encrypted_logs_hashes.push(side_effect);\n\n emit_encrypted_event_log(contract_address, randomness, log, counter);\n }\n\n pub fn emit_raw_note_log<let M: u32>(&mut self, note_hash_counter: u32, log: [u8; M], log_hash: Field) {\n let counter = self.next_counter();\n let len = log.len() as Field + 4;\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 emit_encrypted_note_log(note_hash_counter, log, counter);\n }\n\n pub fn call_private_function<let ARGS_COUNT: u32>(\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<let ARGS_COUNT: u32>(\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<let ARGS_COUNT: u32>(\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(\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(\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(\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(\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 (end_side_effect_counter, returns_hash) = 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 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 let call_context = self.generate_call_context(\n contract_address,\n function_selector,\n is_static_call,\n is_delegate_call\n );\n\n self.private_call_requests.push(\n PrivateCallRequest {\n contract_address,\n call_context,\n args_hash,\n returns_hash,\n start_side_effect_counter,\n end_side_effect_counter\n }\n );\n\n PackedReturns::new(returns_hash)\n }\n\n pub fn call_public_function<let ARGS_COUNT: u32>(\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<let ARGS_COUNT: u32>(\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<let ARGS_COUNT: u32>(\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 counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n enqueue_public_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n is_delegate_call\n );\n\n let call_context = self.generate_call_context(\n contract_address,\n function_selector,\n is_static_call,\n is_delegate_call\n );\n\n let item = PublicCallStackItemCompressed {\n contract_address,\n call_context,\n args_hash,\n returns_hash: 0,\n revert_code: 0,\n start_gas_left: Gas::empty(),\n end_gas_left: Gas::empty()\n };\n\n let call_request = PublicCallRequest { item, counter };\n self.public_call_requests.push(call_request);\n }\n\n pub fn set_public_teardown_function<let ARGS_COUNT: u32>(\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(\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 counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n set_public_teardown_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n is_delegate_call\n );\n\n let call_context = self.generate_call_context(\n contract_address,\n function_selector,\n is_static_call,\n is_delegate_call\n );\n\n let item = PublicCallStackItemCompressed {\n contract_address,\n call_context,\n args_hash,\n returns_hash: 0,\n revert_code: 0,\n start_gas_left: Gas::empty(),\n end_gas_left: Gas::empty()\n };\n\n self.public_teardown_call_request = PublicCallRequest {\n item,\n counter,\n };\n }\n\n fn generate_call_context(\n self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n is_static_call: bool,\n is_delegate_call: bool\n ) -> CallContext {\n let msg_sender = if is_delegate_call {\n self.msg_sender()\n } else {\n self.this_address()\n };\n let storage_contract_address = if is_delegate_call {\n self.this_address()\n } else {\n contract_address\n };\n CallContext { msg_sender, storage_contract_address, function_selector, is_static_call, is_delegate_call }\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 note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n 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"},"123":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/payload.nr","source":"use dep::protocol_types::{address::AztecAddress, scalar::Scalar, point::Point};\nuse std::{\n embedded_curve_ops::fixed_base_scalar_mul as derive_public_key,\n hash::from_field_unsafe as fr_to_fq_unsafe, field::bn254::decompose\n};\n\nuse crate::{\n event::event_interface::EventInterface, oracle::unsafe_rand::unsafe_rand,\n utils::point::point_to_bytes, note::note_interface::NoteInterface,\n encrypted_logs::{\n header::EncryptedLogHeader, incoming_body::EncryptedLogIncomingBody,\n outgoing_body::EncryptedLogOutgoingBody\n},\n keys::public_keys::{OvpkM, IvpkM}\n};\n\npub fn compute_encrypted_event_log<Event, let NB: u32, let MB: u32, let OB: u32>(\n contract_address: AztecAddress,\n randomness: Field,\n ovsk_app: Field,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress,\n event: Event\n) -> [u8; OB] where Event: EventInterface<NB, MB> {\n let (eph_sk, eph_pk) = generate_ephemeral_key_pair();\n\n let header = EncryptedLogHeader::new(contract_address);\n\n let incoming_header_ciphertext: [u8; 48] = header.compute_ciphertext(eph_sk, ivpk);\n let outgoing_header_ciphertext: [u8; 48] = header.compute_ciphertext(eph_sk, ovpk);\n let incoming_body_ciphertext = EncryptedLogIncomingBody::from_event(event, randomness).compute_ciphertext(eph_sk, ivpk);\n let outgoing_body_ciphertext: [u8; 144] = EncryptedLogOutgoingBody::new(eph_sk, recipient, ivpk).compute_ciphertext(fr_to_fq(ovsk_app), eph_pk);\n\n let mut encrypted_bytes: [u8; OB] = [0; OB];\n // @todo We ignore the tags for now\n\n let eph_pk_bytes = point_to_bytes(eph_pk);\n for i in 0..32 {\n encrypted_bytes[64 + i] = eph_pk_bytes[i];\n }\n for i in 0..48 {\n encrypted_bytes[96 + i] = incoming_header_ciphertext[i];\n encrypted_bytes[144 + i] = outgoing_header_ciphertext[i];\n }\n for i in 0..144 {\n encrypted_bytes[192 + i] = outgoing_body_ciphertext[i];\n }\n // Then we fill in the rest as the incoming body ciphertext\n let size = OB - 336;\n assert_eq(size, incoming_body_ciphertext.len(), \"ciphertext length mismatch\");\n for i in 0..size {\n encrypted_bytes[336 + i] = incoming_body_ciphertext[i];\n }\n\n // Current unoptimized size of the encrypted log\n // incoming_tag (32 bytes)\n // outgoing_tag (32 bytes)\n // eph_pk (32 bytes)\n // incoming_header (48 bytes)\n // outgoing_header (48 bytes)\n // outgoing_body (144 bytes)\n // incoming_body_fixed (64 bytes)\n // incoming_body_variable (N * 32 bytes + 16 bytes padding)\n encrypted_bytes\n}\n\npub fn compute_encrypted_note_log<Note, let N: u32, let NB: u32, let M: u32>(\n contract_address: AztecAddress,\n storage_slot: Field,\n ovsk_app: Field,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress,\n note: Note\n) -> [u8; M] where Note: NoteInterface<N, NB> {\n let (eph_sk, eph_pk) = generate_ephemeral_key_pair();\n\n let header = EncryptedLogHeader::new(contract_address);\n\n let incoming_header_ciphertext: [u8; 48] = header.compute_ciphertext(eph_sk, ivpk);\n let outgoing_header_ciphertext: [u8; 48] = header.compute_ciphertext(eph_sk, ovpk);\n let incoming_body_ciphertext = EncryptedLogIncomingBody::from_note(note, storage_slot).compute_ciphertext(eph_sk, ivpk);\n let outgoing_body_ciphertext: [u8; 144] = EncryptedLogOutgoingBody::new(eph_sk, recipient, ivpk).compute_ciphertext(fr_to_fq(ovsk_app), eph_pk);\n\n let mut encrypted_bytes: [u8; M] = [0; M];\n // @todo We ignore the tags for now\n\n let eph_pk_bytes = point_to_bytes(eph_pk);\n for i in 0..32 {\n encrypted_bytes[64 + i] = eph_pk_bytes[i];\n }\n for i in 0..48 {\n encrypted_bytes[96 + i] = incoming_header_ciphertext[i];\n encrypted_bytes[144 + i] = outgoing_header_ciphertext[i];\n }\n for i in 0..144 {\n encrypted_bytes[192 + i] = outgoing_body_ciphertext[i];\n }\n // Then we fill in the rest as the incoming body ciphertext\n let size = M - 336;\n assert_eq(size, incoming_body_ciphertext.len(), \"ciphertext length mismatch\");\n for i in 0..size {\n encrypted_bytes[336 + i] = incoming_body_ciphertext[i];\n }\n\n // Current unoptimized size of the encrypted log\n // incoming_tag (32 bytes)\n // outgoing_tag (32 bytes)\n // eph_pk (32 bytes)\n // incoming_header (48 bytes)\n // outgoing_header (48 bytes)\n // outgoing_body (144 bytes)\n // incoming_body_fixed (64 bytes)\n // incoming_body_variable (N * 32 bytes + 16 bytes padding)\n encrypted_bytes\n}\n\n/// Converts a base field element to scalar field element.\n/// This is fine because modulus of the base field is smaller than the modulus of the scalar field.\nfn fr_to_fq(r: Field) -> Scalar {\n let (lo, hi) = decompose(r);\n\n Scalar { lo, hi }\n}\n\nfn generate_ephemeral_key_pair() -> (Scalar, Point) {\n // @todo Need to draw randomness from the full domain of Fq not only Fr\n // We use the unsafe version of `fr_to_fq` because multi_scalar_mul (called by derive_public_key) will constrain\n // the scalars.\n let eph_sk = fr_to_fq_unsafe(unsafe_rand());\n let eph_pk = derive_public_key(eph_sk);\n\n (eph_sk, eph_pk)\n}\n\nmod test {\n use crate::{\n encrypted_logs::payload::compute_encrypted_note_log, keys::public_keys::{OvpkM, IvpkM},\n test::mocks::mock_note::MockNoteBuilder\n };\n use dep::protocol_types::{address::AztecAddress, point::Point};\n use std::test::OracleMock;\n\n #[test]\n fn test_encrypted_note_log_matches_typescript() {\n // All the values in this test were copied over from `tagged_log.test.ts`\n let contract_address = AztecAddress::from_field(0x10f48cd9eff7ae5b209c557c70de2e657ee79166868676b787e9417e19260e04);\n let storage_slot = 0x0fe46be583b71f4ab5b70c2657ff1d05cccf1d292a9369628d1a194f944e6599;\n let ovsk_app = 0x03a6513d6def49f41d20373d2cec894c23e7492794b08fc50c0e8a1bd2512612;\n let ovpk_m = OvpkM {\n inner: Point {\n x: 0x1961448682803198631f299340e4206bb12809d4bebbf012b30f59af73ba1a15,\n y: 0x133674060c3925142aceb4f1dcd9f9137d0217d37ff8729ee5ceaa6e2790353d,\n is_infinite: false\n }\n };\n let ivpk_m = IvpkM {\n inner: Point {\n x: 0x260cd3904f6df16e974c29944fdc839e40fb5cf293f03df2eb370851d3a527bc,\n y: 0x0eef2964fe6640e84c82b5d2915892409b38e9e25d39f68dd79edb725c55387f,\n is_infinite: false\n }\n };\n\n let note_value = 0x301640ceea758391b2e161c92c0513f129020f4125256afdae2646ce31099f5c;\n let note = MockNoteBuilder::new(note_value).contract_address(contract_address).storage_slot(storage_slot).build();\n\n let eph_sk = 0x1358d15019d4639393d62b97e1588c095957ce74a1c32d6ec7d62fe6705d9538;\n let _ = OracleMock::mock(\"getRandomField\").returns(eph_sk);\n\n let recipient = AztecAddress::from_field(0x10ee41ee4b62703b16f61e03cb0d88c4b306a9eb4a6ceeb2aff13428541689a2);\n\n let log: [u8; 448] = compute_encrypted_note_log(\n contract_address,\n storage_slot,\n ovsk_app,\n ovpk_m,\n ivpk_m,\n recipient,\n note\n );\n\n // The following value was generated by `tagged_log.test.ts`\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let encrypted_note_log_from_typescript = [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 70, 12, 14, 67, 77, 132, 110, 193, 234, 40, 110, 64, 144, 235, 86, 55, 111, 242, 123, 221, 193, 170, 202, 225, 216, 86, 84, 159, 112, 31, 167, 126, 79, 51, 186, 47, 71, 253, 172, 99, 112, 241, 59, 197, 241, 107, 186, 232, 87, 187, 230, 171, 62, 228, 234, 42, 51, 145, 146, 238, 242, 42, 71, 206, 13, 244, 66, 111, 195, 20, 203, 98, 148, 204, 242, 145, 183, 156, 29, 141, 54, 44, 220, 194, 35, 229, 16, 32, 204, 211, 49, 142, 112, 82, 202, 116, 241, 254, 146, 42, 217, 20, 189, 70, 228, 182, 171, 205, 104, 27, 99, 171, 28, 91, 244, 21, 30, 130, 240, 5, 72, 174, 124, 97, 197, 157, 248, 193, 23, 193, 76, 46, 141, 144, 70, 211, 45, 67, 167, 218, 129, 140, 104, 190, 41, 110, 249, 209, 68, 106, 135, 164, 80, 235, 63, 101, 80, 32, 13, 38, 99, 145, 91, 11, 173, 151, 231, 247, 65, 153, 117, 229, 167, 64, 239, 182, 126, 235, 83, 4, 169, 8, 8, 160, 4, 235, 252, 21, 96, 84, 161, 69, 145, 145, 215, 254, 161, 117, 246, 198, 65, 89, 179, 194, 90, 19, 121, 12, 202, 114, 80, 195, 14, 60, 128, 105, 142, 100, 86, 90, 108, 157, 219, 22, 172, 20, 121, 195, 25, 159, 236, 2, 70, 75, 42, 37, 34, 2, 17, 149, 20, 176, 32, 18, 204, 56, 117, 121, 34, 15, 3, 88, 123, 64, 68, 74, 233, 63, 59, 131, 222, 194, 192, 167, 110, 217, 10, 128, 73, 129, 172, 205, 103, 212, 60, 151, 141, 10, 151, 222, 151, 180, 43, 91, 148, 201, 110, 165, 10, 238, 32, 134, 235, 99, 216, 200, 182, 31, 22, 156, 18, 209, 222, 172, 239, 193, 212, 86, 99, 62, 70, 182, 45, 175, 241, 91, 202, 179, 225, 236, 95, 71, 66, 151, 225, 203, 53, 216, 85, 102, 130, 6, 8, 25, 180, 86, 58, 140, 198, 105, 102, 177, 42, 94, 115, 247, 145, 147, 24, 231, 39, 73, 27, 10, 219, 130, 115, 188, 74, 114, 5, 177, 199, 83, 183, 106, 87, 204, 238, 231, 72, 45, 240, 39, 174, 25, 98, 53, 187, 156, 159, 244, 38\n ];\n for i in 0..encrypted_note_log_from_typescript.len() {\n assert_eq(log[i], encrypted_note_log_from_typescript[i]);\n }\n assert_eq(encrypted_note_log_from_typescript.len(), log.len());\n }\n}\n"},"124":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/encrypted_note_emission.nr","source":"use crate::{\n context::PrivateContext, note::{note_emission::NoteEmission, note_interface::NoteInterface},\n keys::{getters::get_current_public_keys, public_keys::{OvpkM, IvpkM}},\n encrypted_logs::payload::compute_encrypted_note_log, oracle::logs_traits::LensForEncryptedLog\n};\nuse dep::protocol_types::{hash::sha256_to_field, address::AztecAddress, abis::note_hash::NoteHash};\n\nunconstrained fn compute_unconstrained<Note, let N: u32, let NB: u32, let M: u32>(\n contract_address: AztecAddress,\n storage_slot: Field,\n ovsk_app: Field,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress,\n note: Note\n) -> ([u8; M], Field) where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n compute(\n contract_address,\n storage_slot,\n ovsk_app,\n ovpk,\n ivpk,\n recipient,\n note\n )\n}\n\nfn compute<Note, let N: u32, let NB: u32, let M: u32>(\n contract_address: AztecAddress,\n storage_slot: Field,\n ovsk_app: Field,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress,\n note: Note\n) -> ([u8; M], Field) where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n let encrypted_log: [u8; M] = compute_encrypted_note_log(\n contract_address,\n storage_slot,\n ovsk_app,\n ovpk,\n ivpk,\n recipient,\n note\n );\n let log_hash = sha256_to_field(encrypted_log);\n (encrypted_log, log_hash)\n}\n\nfn emit_with_keys<Note, let N: u32, let NB: u32, let M: u32>(\n context: &mut PrivateContext,\n note: Note,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress,\n inner_compute: fn(AztecAddress, Field, Field, OvpkM, IvpkM, AztecAddress, Note) -> ([u8; M], Field)\n) where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n let note_header = note.get_header();\n let note_hash_counter = note_header.note_hash_counter;\n let storage_slot = note_header.storage_slot;\n\n let note_exists = context.note_hashes.storage.any(|n: NoteHash| n.counter == note_hash_counter);\n assert(note_exists, \"Can only emit a note log for an existing note.\");\n\n let contract_address: AztecAddress = context.this_address();\n let ovsk_app: Field = context.request_ovsk_app(ovpk.hash());\n\n let (encrypted_log, log_hash) = inner_compute(\n contract_address,\n storage_slot,\n ovsk_app,\n ovpk,\n ivpk,\n recipient,\n note\n );\n\n context.emit_raw_note_log(note_hash_counter, encrypted_log, log_hash);\n}\n\npub fn encode_and_encrypt_note<Note, let N: u32, let NB: u32, let M: u32>(\n context: &mut PrivateContext,\n ov: AztecAddress,\n iv: AztecAddress\n) -> fn[(&mut PrivateContext, AztecAddress, AztecAddress)](NoteEmission<Note>) -> () where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n | e: NoteEmission<Note> | {\n let ovpk = get_current_public_keys(context, ov).ovpk_m;\n let ivpk = get_current_public_keys(context, iv).ivpk_m;\n emit_with_keys(context, e.note, ovpk, ivpk, iv, compute);\n }\n}\n\npub fn encode_and_encrypt_note_unconstrained<Note, let N: u32, let NB: u32, let M: u32>(\n context: &mut PrivateContext,\n ov: AztecAddress,\n iv: AztecAddress\n) -> fn[(&mut PrivateContext, AztecAddress, AztecAddress)](NoteEmission<Note>) -> () where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n | e: NoteEmission<Note> | {\n let ovpk = get_current_public_keys(context, ov).ovpk_m;\n let ivpk = get_current_public_keys(context, iv).ivpk_m;\n emit_with_keys(context, e.note, ovpk, ivpk, iv, compute_unconstrained);\n }\n}\n\npub fn encode_and_encrypt_note_with_keys<Note, let N: u32, let NB: u32, let M: u32>(\n context: &mut PrivateContext,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress\n) -> fn[(&mut PrivateContext, OvpkM, IvpkM, AztecAddress)](NoteEmission<Note>) -> () where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n | e: NoteEmission<Note> | {\n emit_with_keys(context, e.note, ovpk, ivpk, recipient, compute);\n }\n}\n\npub fn encode_and_encrypt_note_with_keys_unconstrained<Note, let N: u32, let NB: u32, let M: u32>(\n context: &mut PrivateContext,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress\n) -> fn[(&mut PrivateContext, OvpkM, IvpkM, AztecAddress)](NoteEmission<Note>) -> () where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n | e: NoteEmission<Note> | {\n emit_with_keys(context, e.note, ovpk, ivpk, recipient, compute_unconstrained);\n }\n}\n"},"125":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/outgoing_body.nr","source":"use dep::protocol_types::{\n address::AztecAddress, scalar::Scalar, point::Point, constants::GENERATOR_INDEX__SYMMETRIC_KEY,\n hash::poseidon2_hash_with_separator\n};\nuse std::aes128::aes128_encrypt;\n\nuse crate::{keys::public_keys::IvpkM, utils::point::point_to_bytes};\n\nstruct EncryptedLogOutgoingBody {\n eph_sk: Scalar,\n recipient: AztecAddress,\n recipient_ivpk: IvpkM,\n}\n\nimpl EncryptedLogOutgoingBody {\n pub fn new(eph_sk: Scalar, recipient: AztecAddress, recipient_ivpk: IvpkM) -> Self {\n Self { eph_sk, recipient, recipient_ivpk }\n }\n\n /// Encrypts ephemeral secret key and recipient's ivpk --> with this information the recipient of outgoing will\n /// be able to derive the key with which the incoming log can be decrypted.\n pub fn compute_ciphertext(self, ovsk_app: Scalar, eph_pk: Point) -> [u8; 144] {\n // Again, we could compute `eph_pk` here, but we keep the interface more similar\n // and also make it easier to optimise it later as we just pass it along\n\n let mut buffer = [0 as u8; 128];\n\n let serialized_eph_sk_high: [u8; 32] = self.eph_sk.hi.to_be_bytes();\n let serialized_eph_sk_low: [u8; 32] = self.eph_sk.lo.to_be_bytes();\n\n let address_bytes: [u8; 32] = self.recipient.to_field().to_be_bytes();\n let serialized_recipient_ivpk = point_to_bytes(self.recipient_ivpk.to_point());\n\n for i in 0..32 {\n buffer[i] = serialized_eph_sk_high[i];\n buffer[i + 32] = serialized_eph_sk_low[i];\n buffer[i + 64] = address_bytes[i];\n }\n for i in 0..32 {\n buffer[i + 96] = serialized_recipient_ivpk[i];\n }\n\n // We compute the symmetric key using poseidon.\n let full_key: [u8; 32] = poseidon2_hash_with_separator(\n [ovsk_app.hi, ovsk_app.lo, eph_pk.x, eph_pk.y],\n GENERATOR_INDEX__SYMMETRIC_KEY as Field\n ).to_be_bytes();\n\n let mut sym_key = [0; 16];\n let mut iv = [0; 16];\n\n for i in 0..16 {\n sym_key[i] = full_key[i];\n iv[i] = full_key[i + 16];\n }\n aes128_encrypt(buffer, iv, sym_key).as_array()\n }\n}\n\nmod test {\n use crate::{encrypted_logs::outgoing_body::EncryptedLogOutgoingBody, keys::public_keys::IvpkM};\n use dep::protocol_types::{address::AztecAddress, scalar::Scalar};\n use std::embedded_curve_ops::fixed_base_scalar_mul as derive_public_key;\n\n #[test]\n fn test_encrypted_log_outgoing_body_matches_typescript() {\n let eph_sk = Scalar {\n lo: 0x00000000000000000000000000000000d0d302ee245dfaf2807e604eec4715fe,\n hi: 0x000000000000000000000000000000000f096b423017226a18461115fa8d34bb\n };\n let recipient_ivsk = Scalar {\n lo: 0x000000000000000000000000000000004828f8f95676ebb481df163f87fd4022,\n hi: 0x000000000000000000000000000000000f4d97c25d578f9348251a71ca17ae31\n };\n let sender_ovsk_app = Scalar {\n lo: 0x0000000000000000000000000000000074d2e28c6bc5176ac02cf7c7d36a444e,\n hi: 0x00000000000000000000000000000000089c6887cb1446d86c64e81afc78048b\n };\n\n let eph_pk = derive_public_key(eph_sk);\n let recipient_ivpk = IvpkM { inner: derive_public_key(recipient_ivsk) };\n\n let recipient = AztecAddress::from_field(0xdeadbeef);\n\n let body = EncryptedLogOutgoingBody::new(eph_sk, recipient, recipient_ivpk);\n\n let ciphertext = body.compute_ciphertext(sender_ovsk_app, eph_pk);\n\n // The following value was generated by `encrypted_log_outgoing_body.test.ts`\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let outgoing_body_ciphertext_from_typescript = [\n 127, 182, 227, 75, 192, 197, 54, 47, 168, 134, 233, 148, 251, 46, 86, 12, 73, 50, 238, 50, 31, 174, 27, 202, 110, 77, 161, 197, 244, 124, 17, 100, 143, 150, 232, 14, 156, 248, 43, 177, 16, 82, 244, 103, 88, 74, 84, 200, 15, 65, 187, 14, 163, 60, 91, 22, 104, 31, 211, 190, 124, 121, 79, 92, 239, 65, 185, 106, 51, 178, 168, 137, 84, 43, 79, 158, 151, 152, 83, 42, 170, 13, 106, 209, 254, 74, 39, 145, 73, 215, 17, 234, 196, 89, 30, 58, 120, 127, 88, 69, 121, 61, 18, 206, 89, 118, 243, 238, 177, 71, 73, 47, 147, 4, 155, 25, 173, 248, 206, 52, 17, 180, 122, 186, 106, 191, 252, 102, 197, 91, 16, 39, 94, 91, 224, 30, 168, 177, 26, 144, 5, 124, 128, 6\n ];\n\n for i in 0..outgoing_body_ciphertext_from_typescript.len() {\n assert_eq(ciphertext[i], outgoing_body_ciphertext_from_typescript[i]);\n }\n assert_eq(outgoing_body_ciphertext_from_typescript.len(), ciphertext.len());\n }\n}\n"},"126":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/header.nr","source":"use dep::protocol_types::{address::AztecAddress, scalar::Scalar, point::Point};\n\nuse crate::keys::{point_to_symmetric_key::point_to_symmetric_key, public_keys::ToPoint};\n\nuse std::aes128::aes128_encrypt;\n\nstruct EncryptedLogHeader {\n address: AztecAddress,\n}\n\nimpl EncryptedLogHeader {\n fn new(address: AztecAddress) -> Self {\n EncryptedLogHeader { address }\n }\n\n fn compute_ciphertext<T>(self, secret: Scalar, pk: T) -> [u8; 48] where T: ToPoint {\n let full_key = point_to_symmetric_key(secret, pk.to_point());\n let mut sym_key = [0; 16];\n let mut iv = [0; 16];\n\n for i in 0..16 {\n sym_key[i] = full_key[i];\n iv[i] = full_key[i + 16];\n }\n\n let input: [u8; 32] = self.address.to_field().to_be_bytes();\n aes128_encrypt(input, iv, sym_key).as_array()\n }\n}\n\n#[test]\nfn test_encrypted_log_header_matches_noir() {\n let address = AztecAddress::from_field(0xdeadbeef);\n let header = EncryptedLogHeader::new(address);\n let secret = Scalar {\n lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06\n };\n let point = crate::keys::public_keys::IvpkM {\n inner: Point {\n x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n is_infinite: false\n }\n };\n\n let ciphertext = header.compute_ciphertext(secret, point);\n\n // The following value was generated by `encrypted_log_header.test.ts`.\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let expected_header_ciphertext_from_typescript = [\n 226, 240, 253, 6, 28, 52, 19, 131, 33, 132, 178, 212, 245, 62, 14, 190, 194, 44, 7, 131, 160, 83, 64, 181, 98, 38, 153, 214, 62, 171, 253, 161, 111, 191, 28, 247, 216, 26, 222, 171, 176, 218, 48, 209, 73, 89, 200, 209\n ];\n\n assert_eq(ciphertext, expected_header_ciphertext_from_typescript);\n}\n"},"127":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/incoming_body.nr","source":"use crate::note::note_interface::NoteInterface;\nuse crate::event::event_interface::EventInterface;\nuse dep::protocol_types::{scalar::Scalar};\n\nuse std::aes128::aes128_encrypt;\nuse crate::keys::{point_to_symmetric_key::point_to_symmetric_key, public_keys::IvpkM};\n\nstruct EncryptedLogIncomingBody<let M: u32> {\n plaintext: [u8; M]\n}\n\nimpl<let M: u32> EncryptedLogIncomingBody<M> {\n pub fn from_note<T, let N: u32>(note: T, storage_slot: Field) -> Self where T: NoteInterface<N, M> {\n let mut plaintext = note.to_be_bytes(storage_slot);\n EncryptedLogIncomingBody { plaintext }\n }\n\n pub fn from_event<T, let MR: u32>(\n event: T,\n randomness: Field\n ) -> Self where T: EventInterface<M, MR> {\n let mut plaintext = event.private_to_be_bytes(randomness);\n EncryptedLogIncomingBody { plaintext }\n }\n\n pub fn compute_ciphertext(self, eph_sk: Scalar, ivpk: IvpkM) -> [u8] {\n let full_key = point_to_symmetric_key(eph_sk, ivpk.to_point());\n let mut sym_key = [0; 16];\n let mut iv = [0; 16];\n\n for i in 0..16 {\n sym_key[i] = full_key[i];\n iv[i] = full_key[i + 16];\n }\n aes128_encrypt(self.plaintext, iv, sym_key)\n }\n}\n\nmod test {\n use dep::protocol_types::{\n address::AztecAddress, scalar::Scalar, point::Point, traits::Serialize,\n abis::event_selector::EventSelector\n };\n\n use crate::{\n note::{note_header::NoteHeader, note_interface::NoteInterface},\n encrypted_logs::incoming_body::EncryptedLogIncomingBody, event::event_interface::EventInterface,\n context::PrivateContext, keys::public_keys::IvpkM\n };\n\n struct AddressNote {\n address: AztecAddress,\n owner: AztecAddress,\n randomness: Field,\n header: NoteHeader,\n }\n\n global ADDRESS_NOTE_LEN: Field = 3;\n global ADDRESS_NOTE_BYTES_LEN = 32 * 3 + 64;\n\n impl NoteInterface<ADDRESS_NOTE_LEN, ADDRESS_NOTE_BYTES_LEN> for AddressNote {\n fn compute_note_hiding_point(_self: Self) -> Point {\n crate::generators::Ga1\n }\n\n fn get_note_type_id() -> Field {\n 1\n }\n\n fn get_header(self) -> NoteHeader {\n self.header\n }\n\n fn set_header(&mut self, header: NoteHeader) {\n self.header = header;\n }\n\n fn compute_nullifier(\n _self: Self,\n _context: &mut PrivateContext,\n _note_hash_for_nullify: Field\n ) -> Field {\n 1\n }\n\n fn compute_nullifier_without_context(_self: Self) -> Field {\n 1\n }\n\n fn serialize_content(self) -> [Field; ADDRESS_NOTE_LEN] {\n [self.address.to_field(), self.owner.to_field(), self.randomness]\n }\n\n fn deserialize_content(fields: [Field; ADDRESS_NOTE_LEN]) -> Self {\n AddressNote {\n address: AztecAddress::from_field(fields[0]),\n owner: AztecAddress::from_field(fields[1]),\n randomness: fields[2],\n header: NoteHeader::empty()\n }\n }\n\n fn to_be_bytes(self, storage_slot: Field) -> [u8; ADDRESS_NOTE_BYTES_LEN] {\n let serialized_note = self.serialize_content();\n\n let mut buffer: [u8; ADDRESS_NOTE_BYTES_LEN] = [0; ADDRESS_NOTE_BYTES_LEN];\n\n let storage_slot_bytes: [u8; 32] = storage_slot.to_be_bytes();\n let note_type_id_bytes: [u8; 32] = AddressNote::get_note_type_id().to_be_bytes();\n\n for i in 0..32 {\n buffer[i] = storage_slot_bytes[i];\n buffer[32 + i] = note_type_id_bytes[i];\n }\n\n for i in 0..serialized_note.len() {\n let bytes: [u8; 32] = serialized_note[i].to_be_bytes();\n for j in 0..32 {\n buffer[64 + i * 32 + j] = bytes[j];\n }\n }\n buffer\n }\n }\n\n impl AddressNote {\n pub fn new(address: AztecAddress, owner: AztecAddress, randomness: Field) -> Self {\n AddressNote { address, owner, randomness, header: NoteHeader::empty() }\n }\n }\n\n #[test]\n fn test_encrypted_note_log_incoming_body_matches_typescript() {\n // All the values in this test were copied over from `encrypted_note_log_incoming_body.test.ts`\n let note = AddressNote::new(\n AztecAddress::from_field(0x1),\n AztecAddress::from_field(0x2),\n 3\n );\n\n let storage_slot = 2;\n\n let eph_sk = Scalar {\n lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06\n };\n let ivpk = IvpkM {\n inner: Point {\n x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n is_infinite: false\n }\n };\n\n // 1. `EncryptedLogIncomingBody::from_note` calls `note.to_be_bytes(storage_slot)` function which serializes\n // the note to bytes - note that in the case of `AddressNote` the `to_be_bytes` function was automatically\n // implemented by Aztec macros.\n let body = EncryptedLogIncomingBody::from_note(note, storage_slot);\n\n // 2. `body.compute_ciphertext(...)` function then derives symmetric key from `eph_sk` and `ivpk` and encrypts\n // the note plaintext using AES-128.\n let ciphertext = body.compute_ciphertext(eph_sk, ivpk);\n\n // The following value was generated by `encrypted_note_log_incoming_body.test.ts`.\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let note_body_ciphertext_from_typescript = [\n 226, 240, 253, 6, 28, 52, 19, 131, 33, 132, 178, 212, 245, 62, 14, 190, 147, 228, 160, 190, 146, 61, 95, 203, 124, 153, 68, 168, 17, 150, 92, 0, 99, 214, 85, 64, 191, 78, 157, 131, 149, 96, 236, 253, 96, 172, 157, 30, 27, 176, 228, 74, 242, 190, 138, 48, 33, 93, 46, 37, 223, 130, 25, 245, 188, 163, 159, 223, 187, 24, 139, 206, 131, 154, 159, 130, 37, 17, 158, 114, 242, 141, 124, 193, 232, 54, 146, 96, 145, 100, 125, 234, 57, 43, 95, 115, 183, 39, 121, 232, 134, 229, 148, 25, 46, 77, 87, 127, 95, 7, 77, 188, 37, 234, 245, 142, 232, 87, 252, 28, 67, 67, 90, 214, 254, 89, 47, 68, 66, 187, 227, 8, 59, 162, 25, 141, 97, 141, 217, 197, 115, 15, 212, 202, 157, 41, 150, 62, 219, 57, 224, 92, 185, 212, 142, 94, 146, 41, 178, 145, 68, 169, 23, 185, 206, 138, 70, 47, 176, 210, 165, 236, 23, 206, 229, 108\n ];\n\n assert_eq(note_body_ciphertext_from_typescript.len(), ciphertext.len());\n\n for i in 0..note_body_ciphertext_from_typescript.len() {\n assert_eq(ciphertext[i], note_body_ciphertext_from_typescript[i]);\n }\n }\n\n struct TestEvent {\n value0: Field,\n value1: Field,\n value2: Field,\n }\n\n impl Serialize<3> for TestEvent {\n fn serialize(self) -> [Field; 3] {\n [self.value0, self.value1, self.value2]\n }\n }\n\n global TEST_EVENT_LEN: Field = 3;\n global TEST_EVENT_BYTES_LEN = 32 * 3 + 64;\n global TEST_EVENT_BYTES_LEN_WITHOUT_RANDOMNESS = 32 * 3 + 32;\n\n impl EventInterface<TEST_EVENT_BYTES_LEN, TEST_EVENT_BYTES_LEN_WITHOUT_RANDOMNESS> for TestEvent {\n fn get_event_type_id() -> EventSelector {\n comptime\n {\n EventSelector::from_signature(\"TestEvent(Field,Field,Field)\")\n }\n }\n\n fn private_to_be_bytes(self, randomness: Field) -> [u8; TEST_EVENT_BYTES_LEN] {\n let mut buffer: [u8; TEST_EVENT_BYTES_LEN] = [0; TEST_EVENT_BYTES_LEN];\n\n let randomness_bytes: [u8; 32] = randomness.to_be_bytes();\n let event_type_id_bytes: [u8; 32] = TestEvent::get_event_type_id().to_field().to_be_bytes();\n\n for i in 0..32 {\n buffer[i] = randomness_bytes[i];\n buffer[32 + i] = event_type_id_bytes[i];\n }\n\n let serialized_event = self.serialize();\n\n for i in 0..serialized_event.len() {\n let bytes: [u8; 32] = serialized_event[i].to_be_bytes();\n for j in 0..32 {\n buffer[64 + i * 32 + j] = bytes[j];\n }\n }\n\n buffer\n }\n\n fn to_be_bytes(self) -> [u8; TEST_EVENT_BYTES_LEN_WITHOUT_RANDOMNESS] {\n let mut buffer: [u8; TEST_EVENT_BYTES_LEN_WITHOUT_RANDOMNESS] = [0; TEST_EVENT_BYTES_LEN_WITHOUT_RANDOMNESS];\n\n let event_type_id_bytes: [u8; 32] = TestEvent::get_event_type_id().to_field().to_be_bytes();\n\n for i in 0..32 {\n buffer[i] = event_type_id_bytes[i];\n }\n\n let serialized_event = self.serialize();\n\n for i in 0..serialized_event.len() {\n let bytes: [u8; 32] = serialized_event[i].to_be_bytes();\n for j in 0..32 {\n buffer[32 + i * 32 + j] = bytes[j];\n }\n }\n\n buffer\n }\n\n fn emit<Env>(self, _emit: fn[Env](Self) -> ()) {\n _emit(self);\n }\n }\n\n #[test]\n fn test_encrypted_log_event_incoming_body() {\n let test_event = TestEvent { value0: 1, value1: 2, value2: 3 };\n\n let eph_sk = Scalar {\n lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06\n };\n\n let ivpk = IvpkM {\n inner: Point {\n x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n is_infinite: false\n }\n };\n\n let randomness = 2;\n\n let body = EncryptedLogIncomingBody::from_event(test_event, randomness);\n\n let ciphertext = body.compute_ciphertext(eph_sk, ivpk);\n\n // The following value was generated by `encrypted_event_log_incoming_body.test.ts`\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let event_body_ciphertext_from_typescript = [\n 226, 240, 253, 6, 28, 52, 19, 131, 33, 132, 178, 212, 245, 62, 14, 190, 147, 228, 160, 190, 146, 61, 95, 203, 124, 153, 68, 168, 17, 150, 92, 0, 99, 214, 85, 64, 191, 78, 157, 131, 149, 96, 236, 253, 96, 172, 157, 30, 185, 29, 14, 152, 216, 130, 219, 151, 80, 185, 43, 223, 167, 8, 89, 189, 88, 188, 101, 137, 255, 136, 84, 252, 79, 18, 52, 3, 110, 54, 54, 206, 244, 209, 246, 226, 207, 247, 143, 253, 211, 75, 160, 224, 172, 41, 45, 7, 208, 137, 90, 56, 59, 4, 234, 48, 53, 23, 130, 230, 49, 249, 142, 243, 170, 72, 183, 242, 49, 124, 46, 52, 198, 75, 55, 102, 56, 89, 254, 67, 59, 157, 249, 120, 184, 67, 154, 16, 148, 227, 93, 37, 120, 199, 93, 166, 80, 127, 173, 52, 80, 135, 87, 1, 168, 164, 51, 48, 126, 120, 47, 102, 211, 227, 234, 170, 208, 99, 111, 198, 170, 226, 156, 244, 241, 174, 206, 30\n ];\n\n assert_eq(event_body_ciphertext_from_typescript.len(), ciphertext.len());\n\n for i in 0..event_body_ciphertext_from_typescript.len() {\n assert_eq(ciphertext[i], event_body_ciphertext_from_typescript[i]);\n }\n }\n}\n"},"131":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/note/note_getter/mod.nr","source":"use dep::protocol_types::{constants::{MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, GET_NOTES_ORACLE_RETURN_LENGTH}};\nuse crate::context::PrivateContext;\nuse crate::note::{\n constants::{GET_NOTE_ORACLE_RETURN_LENGTH, VIEW_NOTE_ORACLE_RETURN_LENGTH},\n note_getter_options::{NoteGetterOptions, Select, Sort, SortOrder, NoteStatus, PropertySelector},\n note_interface::NoteInterface, note_viewer_options::NoteViewerOptions,\n utils::compute_note_hash_for_read_request\n};\nuse crate::oracle;\nuse crate::utils::comparison::compare;\n\npub use crate::note::constants::MAX_NOTES_PER_PAGE;\n\nmod test;\n\nfn extract_property_value_from_selector<let N: u32>(\n serialized_note: [Field; N],\n selector: PropertySelector\n) -> Field {\n // Selectors use PropertySelectors in order to locate note properties inside the serialized note.\n // This allows easier packing and custom (de)serialization schemas. A note property is located\n // inside the serialized note using the index inside the array, a byte offset and a length.\n let value: [u8; 32] = serialized_note[selector.index].to_be_bytes();\n let offset = selector.offset;\n let length = selector.length;\n let mut value_field = 0 as Field;\n let mut acc: Field = 1;\n for i in 0..32 {\n if i < length {\n value_field += value[31 + offset - i] as Field * acc;\n acc = acc * 256;\n }\n }\n value_field\n}\n\nfn check_note_header<Note, let N: u32, let M: u32>(\n context: PrivateContext,\n storage_slot: Field,\n note: Note\n) where Note: NoteInterface<N, M> {\n let header = note.get_header();\n let contract_address = context.this_address();\n assert(header.contract_address.eq(contract_address), \"Mismatch note header contract address.\");\n assert(header.storage_slot == storage_slot, \"Mismatch note header storage slot.\");\n}\n\nfn check_note_fields<let N: u32>(\n serialized_note: [Field; N],\n selects: BoundedVec<Option<Select>, N>\n) {\n for i in 0..selects.len {\n let select = selects.get_unchecked(i).unwrap_unchecked();\n let value_field = extract_property_value_from_selector(serialized_note, select.property_selector);\n\n assert(\n compare(value_field, select.comparator, select.value.to_field()), \"Mismatch return note field.\"\n );\n }\n}\n\nfn check_notes_order<let N: u32>(\n fields_0: [Field; N],\n fields_1: [Field; N],\n sorts: BoundedVec<Option<Sort>, N>\n) {\n for i in 0..sorts.len {\n let sort = sorts.get_unchecked(i).unwrap_unchecked();\n let field_0 = extract_property_value_from_selector(fields_0, sort.property_selector);\n let field_1 = extract_property_value_from_selector(fields_1, sort.property_selector);\n let eq = field_0 == field_1;\n let lt = field_0.lt(field_1);\n if sort.order == SortOrder.ASC {\n assert(eq | lt, \"Return notes not sorted in ascending order.\");\n } else if !eq {\n assert(!lt, \"Return notes not sorted in descending order.\");\n }\n }\n}\n\npub fn get_note<Note, let N: u32, let M: u32>(\n context: &mut PrivateContext,\n storage_slot: Field\n) -> (Note, Field) where Note: NoteInterface<N, M> {\n let note = unsafe {\n get_note_internal(storage_slot)\n };\n\n // Constraining that we got a valid note from the oracle is fairly straightforward: all we need to do is check that\n // the metadata is correct, and that the note exists.\n check_note_header(*context, storage_slot, note);\n\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n context.push_note_hash_read_request(note_hash_for_read_request);\n\n (note, note_hash_for_read_request)\n}\n\npub fn get_notes<Note, let N: u32, let M: u32, PREPROCESSOR_ARGS, FILTER_ARGS>(\n context: &mut PrivateContext,\n storage_slot: Field,\n options: NoteGetterOptions<Note, N, M, PREPROCESSOR_ARGS, FILTER_ARGS>\n) -> (BoundedVec<Note, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>, BoundedVec<Field, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>) where Note: NoteInterface<N, M> + Eq {\n let opt_notes = unsafe {\n get_notes_internal(storage_slot, options)\n };\n\n // We apply the constraints in a separate function instead of inlining them here to make it easier to test that\n // these checks correctly reject bad notes.\n constrain_get_notes_internal(context, storage_slot, opt_notes, options)\n}\n\nunconstrained fn apply_preprocessor<Note, PREPROCESSOR_ARGS>(\n notes: [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n preprocessor: fn([Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL], PREPROCESSOR_ARGS) -> [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n preprocessor_args: PREPROCESSOR_ARGS\n) -> [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL] {\n preprocessor(notes, preprocessor_args)\n}\n\nfn constrain_get_notes_internal<Note, let N: u32, let M: u32, PREPROCESSOR_ARGS, FILTER_ARGS>(\n context: &mut PrivateContext,\n storage_slot: Field,\n opt_notes: [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n options: NoteGetterOptions<Note, N, M, PREPROCESSOR_ARGS, FILTER_ARGS>\n) -> (BoundedVec<Note, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>, BoundedVec<Field, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>) where Note: NoteInterface<N, M> + Eq {\n // The filter is applied first to avoid pushing note read requests for notes we're not interested in. Note that\n // while the filter function can technically mutate the contents of the notes (as opposed to simply removing some),\n // the private kernel will later validate that these note actually exist, so transformations would cause for that\n // check to fail.\n let filter_fn = options.filter;\n let filter_args = options.filter_args;\n let filtered_notes = filter_fn(opt_notes, filter_args);\n\n let notes = crate::utils::collapse_array(filtered_notes);\n let mut note_hashes: BoundedVec<Field, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL> = BoundedVec::new();\n\n // We have now collapsed the sparse array of Options into a BoundedVec. This is a more ergonomic type and also\n // results in reduced gate counts when setting a limit value, since we guarantee that the limit is an upper bound\n // for the runtime length, and can therefore have fewer loop iterations.\n assert(notes.len() <= options.limit, \"Got more notes than limit.\");\n\n let mut prev_fields = [0; N];\n for i in 0..options.limit {\n if i < notes.len() {\n let note = notes.get_unchecked(i);\n let fields = note.serialize_content();\n check_note_header(*context, storage_slot, note);\n check_note_fields(fields, options.selects);\n if i != 0 {\n check_notes_order(prev_fields, fields, options.sorts);\n }\n prev_fields = fields;\n\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1410): test to ensure\n // failure if malicious oracle injects 0 nonce here for a \"pre-existing\" note.\n context.push_note_hash_read_request(note_hash_for_read_request);\n note_hashes.push(note_hash_for_read_request);\n };\n }\n\n (notes, note_hashes)\n}\n\nunconstrained fn get_note_internal<Note, let N: u32, let M: u32>(storage_slot: Field) -> Note where Note: NoteInterface<N, M> {\n let placeholder_note = [Option::none()];\n let placeholder_fields = [0; GET_NOTE_ORACLE_RETURN_LENGTH];\n let placeholder_note_length = [0; N];\n oracle::notes::get_notes(\n storage_slot,\n 0,\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n 1, // limit\n 0, // offset\n NoteStatus.ACTIVE,\n placeholder_note,\n placeholder_fields,\n placeholder_note_length\n )[0].unwrap() // Notice: we don't allow dummies to be returned from get_note (singular).\n}\n\nunconstrained fn get_notes_internal<Note, let N: u32, let M: u32, PREPROCESSOR_ARGS, FILTER_ARGS>(\n storage_slot: Field,\n options: NoteGetterOptions<Note, N, M, PREPROCESSOR_ARGS, FILTER_ARGS>\n) -> [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL] where Note: NoteInterface<N, M> {\n // This function simply performs some transformations from NoteGetterOptions into the types required by the oracle.\n\n let (num_selects, select_by_indexes, select_by_offsets, select_by_lengths, select_values, select_comparators, sort_by_indexes, sort_by_offsets, sort_by_lengths, sort_order) = flatten_options(options.selects, options.sorts);\n let placeholder_opt_notes = [Option::none(); MAX_NOTE_HASH_READ_REQUESTS_PER_CALL];\n let placeholder_fields = [0; GET_NOTES_ORACLE_RETURN_LENGTH];\n let placeholder_note_length = [0; N];\n\n let opt_notes = oracle::notes::get_notes(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n options.limit,\n options.offset,\n options.status,\n placeholder_opt_notes,\n placeholder_fields,\n placeholder_note_length\n );\n\n apply_preprocessor(opt_notes, options.preprocessor, options.preprocessor_args)\n}\n\nunconstrained pub fn view_notes<Note, let N: u32, let M: u32>(\n storage_slot: Field,\n options: NoteViewerOptions<Note, N, M>\n) -> BoundedVec<Note, MAX_NOTES_PER_PAGE> where Note: NoteInterface<N, M> {\n let (num_selects, select_by_indexes, select_by_offsets, select_by_lengths, select_values, select_comparators, sort_by_indexes, sort_by_offsets, sort_by_lengths, sort_order) = flatten_options(options.selects, options.sorts);\n let placeholder_opt_notes = [Option::none(); MAX_NOTES_PER_PAGE];\n let placeholder_fields = [0; VIEW_NOTE_ORACLE_RETURN_LENGTH];\n let placeholder_note_length = [0; N];\n\n let notes_array = oracle::notes::get_notes(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n options.limit,\n options.offset,\n options.status,\n placeholder_opt_notes,\n placeholder_fields,\n placeholder_note_length\n );\n\n let mut notes = BoundedVec::new();\n for i in 0..notes_array.len() {\n if notes_array[i].is_some() {\n notes.push(notes_array[i].unwrap_unchecked());\n }\n }\n\n notes\n}\n\nunconstrained fn flatten_options<let N: u32>(\n selects: BoundedVec<Option<Select>, N>,\n sorts: BoundedVec<Option<Sort>, N>\n) -> (u8, [u8; N], [u8; N], [u8; N], [Field; N], [u8; N], [u8; N], [u8; N], [u8; N], [u8; N]) {\n let mut num_selects = 0;\n let mut select_by_indexes = [0; N];\n let mut select_by_offsets = [0; N];\n let mut select_by_lengths = [0; N];\n let mut select_values = [0; N];\n let mut select_comparators = [0; N];\n\n for i in 0..selects.len {\n let select = selects.get(i);\n if select.is_some() {\n select_by_indexes[num_selects] = select.unwrap_unchecked().property_selector.index;\n select_by_offsets[num_selects] = select.unwrap_unchecked().property_selector.offset;\n select_by_lengths[num_selects] = select.unwrap_unchecked().property_selector.length;\n select_values[num_selects] = select.unwrap_unchecked().value;\n select_comparators[num_selects] = select.unwrap_unchecked().comparator;\n num_selects += 1;\n };\n }\n\n let mut sort_by_indexes = [0; N];\n let mut sort_by_offsets = [0; N];\n let mut sort_by_lengths = [0; N];\n let mut sort_order = [0; N];\n for i in 0..sorts.len {\n let sort = sorts.get(i);\n if sort.is_some() {\n sort_by_indexes[i] = sort.unwrap_unchecked().property_selector.index;\n sort_by_offsets[i] = sort.unwrap_unchecked().property_selector.offset;\n sort_by_lengths[i] = sort.unwrap_unchecked().property_selector.length;\n sort_order[i] = sort.unwrap_unchecked().order;\n };\n }\n\n (\n num_selects, select_by_indexes, select_by_offsets, select_by_lengths, select_values, select_comparators, sort_by_indexes, sort_by_offsets, sort_by_lengths, sort_order\n )\n}\n"},"133":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/note/utils.nr","source":"use crate::{context::PrivateContext, note::{note_header::NoteHeader, note_interface::NoteInterface}};\n\nuse dep::protocol_types::{\n hash::{\n compute_unique_note_hash, compute_siloed_note_hash as compute_siloed_note_hash,\n compute_siloed_nullifier as compute_siloed_nullifier_from_preimage\n},\n utils::arr_copy_slice\n};\n\npub fn compute_siloed_nullifier<Note, let N: u32, let M: u32>(\n note_with_header: Note,\n context: &mut PrivateContext\n) -> Field where Note: NoteInterface<N, M> {\n let header = note_with_header.get_header();\n let note_hash_for_nullify = compute_note_hash_for_nullify(note_with_header);\n let inner_nullifier = note_with_header.compute_nullifier(context, note_hash_for_nullify);\n\n compute_siloed_nullifier_from_preimage(header.contract_address, inner_nullifier)\n}\n\n// TODO(#7775): make this not impossible to understand\npub fn compute_note_hash_for_read_request<Note, let N: u32, let M: u32>(note: Note) -> Field where Note: NoteInterface<N, M> {\n // TODO(#7771): inject compute_note_hash(...) func to notes with macros.\n let note_hash = note.compute_note_hiding_point().x;\n let nonce = note.get_header().nonce;\n let counter = note.get_header().note_hash_counter;\n\n if counter != 0 {\n note_hash\n } else {\n compute_unique_note_hash(nonce, note_hash)\n }\n}\n\n// TODO(#7775): make this not impossible to understand\npub fn compute_note_hash_for_nullify_internal<Note, let N: u32, let M: u32>(\n note: Note,\n note_hash_for_read_request: Field\n) -> Field where Note: NoteInterface<N, M> {\n let header = note.get_header();\n\n if header.note_hash_counter != 0 {\n if header.nonce == 0 {\n // Case 1: Transient note\n note_hash_for_read_request\n } else {\n // Case 2: Non-revertible note, nullified by a revertible nullifier\n let unique_note_hash = compute_unique_note_hash(header.nonce, note_hash_for_read_request);\n compute_siloed_note_hash(header.contract_address, unique_note_hash)\n }\n } else {\n // Case 3: Note from a previous transaction\n // note_hash_for_read_request is already the unique_note_hash in this case\n compute_siloed_note_hash(header.contract_address, note_hash_for_read_request)\n }\n}\n\n// TODO(#7775): nuke this commented out code - kept it around as it contains comments which might be helpful when tackling #7775\n// pub fn compute_note_hash_for_nullify<Note, let N: u32, let M: u32>(note: Note) -> Field where Note: NoteInterface<N, M> {\n// let header = note.get_header();\n// // There are 3 cases for reading a note intended for consumption:\n// // 1. The note was inserted in this transaction, is revertible, or is not nullified by a revertible nullifier in \n// // the same transaction: (note_hash_counter != 0) & (nonce == 0)\n// // 2. The note was inserted in this transaction, is non-revertible, and is nullified by a revertible nullifier in \n// // the same transaction: (note_hash_counter != 0) & (nonce != 0)\n// // 3. The note was inserted in a previous transaction: (note_hash_counter == 0) & (nonce != 0)\n\n// // TODO(#7771): inject compute_note_hash(...) func to notes with macros.\n// let note_hash = note.compute_note_hiding_point().x;\n\n// if header.nonce == 0 {\n// // Case 1.\n// // If a note is transient, we just read the note_hash (kernel will hash it with nonce and silo by contract address).\n// note_hash\n// } else {\n// // Case 2: If a note is non-revertible, and is nullified by a revertible nullifier, we cannot squash them in the \n// // private reset circuit. Because if the tx reverts, we will have to keep the note hash and throw away the \n// // nullifier.\n// // And if the tx does not revert, both will be emitted. In which case, the nullifier must be created in the app\n// // from the siloed note hash.\n// // The kernel circuit will check that a nullifier with non-zero note_nonce is linked to a note hash, whose\n// // siloed note hash matches the note hash specified in the nullifier.\n\n// // Case 3: If a note is not from the current transaction, that means we are reading a settled note (from \n// // tree) created in a previous TX. So we need the siloed_note_hash which has already been hashed with\n// // nonce and then contract address. This hash will match the existing leaf in the note hash\n// // tree, so the kernel can just perform a membership check directly on this hash/leaf.\n// let unique_note_hash = compute_unique_note_hash(header.nonce, note_hash);\n// compute_siloed_note_hash(header.contract_address, unique_note_hash)\n// // IMPORTANT NOTE ON REDUNDANT SILOING BY CONTRACT ADDRESS: The note hash computed above is\n// // \"siloed\" by contract address. When a note hash is computed solely for the purpose of\n// // nullification, it is not strictly necessary to silo the note hash before computing\n// // its nullifier. In other words, it is NOT NECESSARY for protocol security that a nullifier\n// // be computed from a siloed note hash. After all, persistable note hashes and nullifiers are\n// // siloed by the kernel circuit. That being said, the siloed note hash computed above CAN be\n// // used for nullifier computation, and this achieves the (arguably unnecessary) property that\n// // nullifiers are computed from a note hash's fully-computed note hash tree leaf.\n// }\n// }\n\npub fn compute_note_hash_for_nullify<Note, let N: u32, let M: u32>(note: Note) -> Field where Note: NoteInterface<N, M> {\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n compute_note_hash_for_nullify_internal(note, note_hash_for_read_request)\n}\n\npub fn compute_note_hash_and_optionally_a_nullifier<T, let N: u32, let M: u32, let S: u32>(\n deserialize_content: fn([Field; N]) -> T,\n note_header: NoteHeader,\n compute_nullifier: bool,\n serialized_note: [Field; S]\n) -> [Field; 4] where T: NoteInterface<N, M> {\n let mut note = deserialize_content(arr_copy_slice(serialized_note, [0; N], 0));\n note.set_header(note_header);\n\n // TODO(#7771): inject compute_note_hash(...) func to notes with macros.\n let note_hash = note.compute_note_hiding_point().x;\n let unique_note_hash = compute_unique_note_hash(note_header.nonce, note_hash);\n let siloed_note_hash = compute_siloed_note_hash(note_header.contract_address, unique_note_hash);\n\n let inner_nullifier = if compute_nullifier {\n note.compute_nullifier_without_context()\n } else {\n 0\n };\n // docs:start:compute_note_hash_and_optionally_a_nullifier_returns\n [note_hash, unique_note_hash, siloed_note_hash, inner_nullifier]\n // docs:end:compute_note_hash_and_optionally_a_nullifier_returns\n}\n"},"134":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/note/lifecycle.nr","source":"use crate::context::{PrivateContext, PublicContext};\nuse crate::note::{\n note_header::NoteHeader, note_interface::NoteInterface,\n utils::{compute_note_hash_for_read_request, compute_note_hash_for_nullify_internal},\n note_emission::NoteEmission\n};\nuse crate::oracle::notes::{notify_created_note, notify_nullified_note};\n\npub fn create_note<Note, N, M>(\n context: &mut PrivateContext,\n storage_slot: Field,\n note: &mut Note\n) -> NoteEmission<Note> where Note: NoteInterface<N, M> {\n let contract_address = (*context).this_address();\n let note_hash_counter = context.side_effect_counter;\n\n let header = NoteHeader { contract_address, storage_slot, nonce: 0, note_hash_counter };\n note.set_header(header);\n // TODO(#7771): inject compute_note_hash(...) func to notes with macros.\n let note_hash = note.compute_note_hiding_point().x;\n\n let serialized_note = Note::serialize_content(*note);\n assert(\n notify_created_note(\n storage_slot,\n Note::get_note_type_id(),\n serialized_note,\n note_hash,\n note_hash_counter\n )\n == 0\n );\n\n context.push_note_hash(note_hash);\n\n NoteEmission::new(*note)\n}\n\npub fn create_note_hash_from_public<Note, N, M>(\n context: &mut PublicContext,\n storage_slot: Field,\n note: &mut Note\n) where Note: NoteInterface<N, M> {\n let contract_address = (*context).this_address();\n // Public note hashes are transient, but have no side effect counters, so we just need note_hash_counter != 0\n let header = NoteHeader { contract_address, storage_slot, nonce: 0, note_hash_counter: 1 };\n note.set_header(header);\n // TODO(#7771): inject compute_note_hash(...) func to notes with macros.\n let note_hash = note.compute_note_hiding_point().x;\n\n context.push_note_hash(note_hash);\n}\n\n// Note: This function is currently totally unused.\npub fn destroy_note<Note, N, M>(\n context: &mut PrivateContext,\n note: Note\n) where Note: NoteInterface<N, M> {\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n\n destroy_note_unsafe(context, note, note_hash_for_read_request)\n}\n\npub fn destroy_note_unsafe<Note, N, M>(\n context: &mut PrivateContext,\n note: Note,\n note_hash_for_read_request: Field\n) where Note: NoteInterface<N, M> {\n let note_hash_for_nullify = compute_note_hash_for_nullify_internal(note, note_hash_for_read_request);\n let nullifier = note.compute_nullifier(context, note_hash_for_nullify);\n\n let note_hash_counter = note.get_header().note_hash_counter;\n let notification_note_hash = if (note_hash_counter == 0) {\n // Counter is zero, so we're nullifying a settled note and we don't populate the note_hash with real value.\n 0\n } else {\n // A non-zero note hash counter implies that we're nullifying a pending note (i.e. one that has not yet been\n // persisted in the trees and is instead in the pending new note hashes array). In such a case we populate its\n // hash with real value to inform the kernel which note we're nullifyng so that it can either squash both\n // the note and the nullifier if it's an inner note hash, or check that the it matches a pending note if it's\n // a siloed note hash.\n note_hash_for_nullify\n };\n\n let nullifier_counter = context.side_effect_counter;\n assert(notify_nullified_note(nullifier, notification_note_hash, nullifier_counter) == 0);\n\n context.push_nullifier_for_note_hash(nullifier, notification_note_hash)\n}\n\n"},"135":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/note/note_emission.nr","source":"/**\n * A note emission struct containing the information required for emitting a note.\n * The exact `emit` logic is passed in by the application code\n */\nstruct NoteEmission<Note> {\n note: Note\n}\n\nimpl<Note> NoteEmission<Note> {\n pub fn new(note: Note) -> Self {\n Self { note }\n }\n\n pub fn emit<Env>(self, _emit: fn[Env](Self) -> ()) {\n _emit(self);\n }\n\n pub fn discard(_self: Self) {}\n}\n\n/**\n * A struct wrapping note emission in `Option<T>`.\n * This is the struct provided to application codes, which can be used to emit\n * only when a note was actually inserted.\n * It is fairly common to have cases where a function conditionally inserts,\n * and this allows us to keep the same API for emission in both cases (e.g. inserting \n * a change note in a token's transfer function only when there is \"change\" left).\n */\nstruct OuterNoteEmission<Note> {\n emission: Option<NoteEmission<Note>>,\n}\n\nimpl<Note> OuterNoteEmission<Note> {\n pub fn new(emission: Option<NoteEmission<Note>>) -> Self {\n Self { emission }\n }\n\n pub fn emit<Env>(self, _emit: fn[Env](NoteEmission<Note>) -> ()) {\n if self.emission.is_some() {\n _emit(self.emission.unwrap());\n }\n }\n\n pub fn discard(_self: Self) {}\n}\n"},"143":{"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, MAX_ARGS_LENGTH\n},\n point::Point, traits::Hash, hash::{sha256_to_field, poseidon2_hash_with_separator}\n};\nuse crate::oracle::logs_traits::ToBytesForUnencryptedLog;\n\npub use dep::protocol_types::hash::{compute_siloed_nullifier, pedersen_hash};\n\npub fn pedersen_commitment<let N: u32>(inputs: [Field; N], hash_index: u32) -> Point {\n std::hash::pedersen_commitment_with_separator(inputs, hash_index)\n}\n\npub fn compute_secret_hash(secret: Field) -> Field {\n poseidon2_hash_with_separator([secret], GENERATOR_INDEX__SECRET_HASH)\n}\n\npub fn compute_unencrypted_log_hash<T, let N: u32, let M: u32>(\n contract_address: AztecAddress,\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 len_bytes: [u8; 4] = (n as Field).to_be_bytes();\n for i in 0..4 {\n hash_bytes[32 + i] = len_bytes[i];\n }\n for i in 0..n {\n hash_bytes[36 + 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: [u8; 32] = sender.to_field().to_be_bytes();\n let chain_id_bytes: [u8; 32] = chain_id.to_be_bytes();\n let recipient_bytes: [u8; 32] = recipient.to_field().to_be_bytes();\n let version_bytes: [u8; 32] = version.to_be_bytes();\n let content_bytes: [u8; 32] = content.to_be_bytes();\n let secret_hash_bytes: [u8; 32] = secret_hash.to_be_bytes();\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 poseidon2_hash_with_separator(\n [message_hash, secret, leaf_index],\n GENERATOR_INDEX__MESSAGE_NULLIFIER\n )\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<let N: u32>(&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<let N: u32>(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() <= MAX_ARGS_LENGTH, \"Args length exceeds maximum\");\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] = poseidon2_hash_with_separator(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] = poseidon2_hash_with_separator(current_chunk_values, GENERATOR_INDEX__FUNCTION_ARGS);\n }\n poseidon2_hash_with_separator(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..MAX_ARGS_LENGTH {\n input.add(i as Field);\n }\n let hash = input.hash();\n assert(hash == 0x1cce4dbf69f14c44865919991ee1057922e34d7310ba237d71759aa422621ca9);\n}\n\n#[test]\nfn compute_unenc_log_hash_array() {\n let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6);\n let log = [\n 0x20660de09f35f876e3e69d227b2a35166ad05f09d82d06366ec9b6f65a51fec2,\n 0x1b52bfe3b8689761916f76dc3d38aa8810860db325cd39ca611eed980091f01c,\n 0x2e559c4045c378a56ad13b9edb1e8de4e7ad3b3aa35cc7ba9ec77f7a68fa43a4,\n 0x25d0f689c4a4178a29d59306f2675824d19be6d25e44fa03b03f49c263053dd2,\n 0x2d513a722d6f352dc0961f156afdc5e31495b9f0e35cb069261a8e55e2df67fd\n ];\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x0095b2d17ab72f4b27a341f7ac63e49ec73935ae8c9181a0ac02023eb12f3284);\n}\n\n#[test]\nfn compute_unenc_log_hash_addr() {\n let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6);\n let log = AztecAddress::from_field(0x26aa302d4715fd8a687453cb26d616b0768027bd54bcae56b09d908ecd9f8303);\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x0083ab647dfb26e7ddee90a0f4209d049d4660cab42000c544b986aaa84c55a3);\n}\n\n#[test]\nfn compute_unenc_log_hash_str() {\n let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8);\n let log = \"dummy\";\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x00629e88ebd6374f44aa6cfe07e251ecf07213ebc7267e8f6b578ae57ffd6c20);\n}\n\n#[test]\nfn compute_unenc_log_hash_longer_str() {\n let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8);\n let log = \"Hello this is a string\";\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x0098637962f7d34fa202b7ffad8a07a238c5d1fd897b82a108f7f467fa73b841);\n}\n"},"144":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/initializer.nr","source":"use dep::protocol_types::{\n address::AztecAddress, hash::poseidon2_hash_with_separator, constants::GENERATOR_INDEX__CONSTRUCTOR,\n abis::function_selector::FunctionSelector\n};\n\nuse crate::{\n context::{PrivateContext, PublicContext}, oracle::get_contract_instance::get_contract_instance,\n oracle::get_contract_instance::get_contract_instance_avm\n};\n\npub fn mark_as_initialized_public(context: &mut PublicContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier((*context).this_address());\n context.push_nullifier(init_nullifier);\n}\n\npub fn mark_as_initialized_private(context: &mut PrivateContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier((*context).this_address());\n context.push_nullifier(init_nullifier);\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_private(context: &mut PrivateContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier(context.this_address());\n context.push_nullifier_read_request(init_nullifier);\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 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 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 poseidon2_hash_with_separator(\n [init_selector.to_field(), init_args_hash],\n GENERATOR_INDEX__CONSTRUCTOR\n )\n}\n"},"146":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/logs.nr","source":"use dep::protocol_types::{address::AztecAddress, point::Point};\n\n// = 480 + 32 * N bytes\n#[oracle(emitEncryptedNoteLog)]\nunconstrained fn emit_encrypted_note_log_oracle<let M: u32>(_note_hash_counter: u32, _encrypted_note: [u8; M], _counter: u32) {}\n\nunconstrained pub fn emit_encrypted_note_log<let M: u32>(\n note_hash_counter: u32,\n encrypted_note: [u8; M],\n counter: u32\n) {\n emit_encrypted_note_log_oracle(note_hash_counter, encrypted_note, counter)\n}\n\n#[oracle(emitEncryptedEventLog)]\nunconstrained fn emit_encrypted_event_log_oracle<let M: u32>(_contract_address: AztecAddress, _randomness: Field, _encrypted_event: [u8; M], _counter: u32) {}\n\nunconstrained pub fn emit_encrypted_event_log<let M: u32>(\n contract_address: AztecAddress,\n randomness: Field,\n encrypted_event: [u8; M],\n counter: u32\n) {\n emit_encrypted_event_log_oracle(contract_address, randomness, encrypted_event, counter)\n}\n\n// = 480 + 32 * N bytes\n#[oracle(computeEncryptedNoteLog)]\nunconstrained fn compute_encrypted_note_log_oracle<let N: u32, let M: u32>(\n _contract_address: AztecAddress,\n _storage_slot: Field,\n _note_type_id: Field,\n _ovsk_app: Field,\n _ovpk_m: Point,\n _ivpk_m: Point,\n _recipient: AztecAddress,\n _preimage: [Field; N]\n) -> [u8; M] {}\n\nunconstrained pub fn compute_encrypted_note_log<let N: u32, let M: u32>(\n contract_address: AztecAddress,\n storage_slot: Field,\n note_type_id: Field,\n ovsk_app: Field,\n ovpk_m: Point,\n ivpk_m: Point,\n recipient: AztecAddress,\n preimage: [Field; N]\n) -> [u8; M] {\n compute_encrypted_note_log_oracle(\n contract_address,\n storage_slot,\n note_type_id,\n ovsk_app,\n ovpk_m,\n ivpk_m,\n recipient,\n preimage\n )\n}\n\n// = 480 + 32 * N bytes\n#[oracle(computeEncryptedEventLog)]\nunconstrained fn compute_encrypted_event_log_oracle<let N: u32, let M: u32>(\n _contract_address: AztecAddress,\n _randomness: Field,\n _event_type_id: Field,\n _ovsk_app: Field,\n _ovpk_m: Point,\n _ivpk_m: Point,\n _recipient: AztecAddress,\n _preimage: [Field; N]\n) -> [u8; M] {}\n\nunconstrained pub fn compute_encrypted_event_log<let N: u32, let M: u32>(\n contract_address: AztecAddress,\n randomness: Field,\n event_type_id: Field,\n ovsk_app: Field,\n ovpk_m: Point,\n ivpk_m: Point,\n recipient: AztecAddress,\n preimage: [Field; N]\n) -> [u8; M] {\n compute_encrypted_event_log_oracle(\n contract_address,\n randomness,\n event_type_id,\n ovsk_app,\n ovpk_m,\n ivpk_m,\n recipient,\n preimage\n )\n}\n\n#[oracle(emitUnencryptedLog)]\nunconstrained fn emit_unencrypted_log_oracle_private<T>(_contract_address: AztecAddress, _message: T, _counter: u32) -> Field {}\n\nunconstrained pub fn emit_unencrypted_log_private_internal<T>(\n contract_address: AztecAddress,\n message: T,\n counter: u32\n) -> Field {\n emit_unencrypted_log_oracle_private(contract_address, message, counter)\n}\n\n#[oracle(emitContractClassUnencryptedLog)]\nunconstrained fn emit_contract_class_unencrypted_log_private<let N: u32>(\n contract_address: AztecAddress,\n message: [Field; N],\n counter: u32\n) -> Field {}\n\nunconstrained pub fn emit_contract_class_unencrypted_log_private_internal<let N: u32>(contract_address: AztecAddress, message: [Field; N], counter: u32) -> Field {\n emit_contract_class_unencrypted_log_private(contract_address, message, counter)\n}\n"},"148":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/returns.nr","source":"#[oracle(packReturns)]\nunconstrained fn pack_returns_oracle(_returns: [Field]) -> Field {}\n\nunconstrained pub fn pack_returns(returns: [Field]) {\n let _unused = pack_returns_oracle(returns);\n}\n\n#[oracle(unpackReturns)]\nunconstrained fn unpack_returns_oracle<let N: u32>(_return_hash: Field) -> [Field; N] {}\n\nunconstrained pub fn unpack_returns<let N: u32>(return_hash: Field) -> [Field; N] {\n unpack_returns_oracle(return_hash)\n}\n"},"149":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/get_public_data_witness.nr","source":"use dep::protocol_types::{constants::PUBLIC_DATA_TREE_HEIGHT, data::PublicDataTreeLeafPreimage, utils::arr_copy_slice};\n\nglobal LEAF_PREIMAGE_LENGTH: u32 = 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)]\nunconstrained fn get_public_data_witness_oracle(\n _block_number: u32,\n _public_data_tree_index: Field\n) -> [Field; PUBLIC_DATA_WITNESS] {}\n\nunconstrained pub fn get_public_data_witness(\n block_number: u32,\n public_data_tree_index: Field\n) -> PublicDataWitness {\n let fields = get_public_data_witness_oracle(block_number, public_data_tree_index);\n PublicDataWitness {\n index: fields[0],\n leaf_preimage: PublicDataTreeLeafPreimage { slot: fields[1], value: fields[2], next_index: fields[3] as u32, next_slot: fields[4] },\n path: arr_copy_slice(fields, [0; PUBLIC_DATA_TREE_HEIGHT], 1 + LEAF_PREIMAGE_LENGTH)\n }\n}\n"},"150":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/key_validation_request.nr","source":"use dep::protocol_types::abis::validation_requests::{KeyValidationRequest, key_validation_request::KEY_VALIDATION_REQUEST_LENGTH};\n\n#[oracle(getKeyValidationRequest)]\nunconstrained fn get_key_validation_request_oracle(\n _pk_m_hash: Field,\n _key_index: Field\n) -> [Field; KEY_VALIDATION_REQUEST_LENGTH] {}\n\nunconstrained fn get_key_validation_request_internal(\n npk_m_hash: Field,\n key_index: Field\n) -> KeyValidationRequest {\n let result = get_key_validation_request_oracle(npk_m_hash, key_index);\n KeyValidationRequest::deserialize(result)\n}\n\nunconstrained pub fn get_key_validation_request(\n pk_m_hash: Field,\n key_index: Field\n) -> KeyValidationRequest {\n get_key_validation_request_internal(pk_m_hash, key_index)\n}\n"},"153":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/storage.nr","source":"use dep::protocol_types::{address::AztecAddress, traits::Deserialize};\n\n#[oracle(storageRead)]\nunconstrained fn storage_read_oracle<let N: u32>(address: Field, storage_slot: Field, block_number: Field, length: Field) -> [Field; N] {}\n\nunconstrained pub fn raw_storage_read<let N: u32>(\n address: AztecAddress,\n storage_slot: Field,\n block_number: u32\n) -> [Field; N] {\n storage_read_oracle(\n address.to_field(),\n storage_slot,\n block_number as Field,\n N as Field\n )\n}\n\nunconstrained pub fn storage_read<T, let N: u32>(\n address: AztecAddress,\n storage_slot: Field,\n block_number: u32\n) -> T where T: Deserialize<N> {\n T::deserialize(raw_storage_read(address, storage_slot, block_number))\n}\n\nmod tests {\n use crate::oracle::storage::{raw_storage_read, storage_read};\n use dep::protocol_types::address::AztecAddress;\n\n use std::test::OracleMock;\n use crate::test::mocks::mock_struct::MockStruct;\n\n global address = AztecAddress::from_field(29);\n global slot = 7;\n global block_number = 17;\n\n #[test]\n fn test_raw_storage_read() {\n let written = MockStruct { a: 13, b: 42 };\n\n let _ = OracleMock::mock(\"storageRead\").returns(written.serialize());\n\n let read: [Field; 2] = raw_storage_read(address, slot, block_number);\n assert_eq(read[0], 13);\n assert_eq(read[1], 42);\n }\n\n #[test]\n fn test_storage_read() {\n let written = MockStruct { a: 13, b: 42 };\n\n let _ = OracleMock::mock(\"storageRead\").returns(written.serialize());\n\n let read: MockStruct = storage_read(address, slot, block_number);\n assert_eq(read.a, 13);\n assert_eq(read.b, 42);\n }\n}\n"},"154":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/unsafe_rand.nr","source":"#[oracle(getRandomField)]\nunconstrained fn rand_oracle() -> Field {}\n\n// Called `unsafe_rand` because we do not constrain in circuit that we are dealing with an actual random value.\n// Instead we just trust our PXE.\nunconstrained pub fn unsafe_rand() -> Field {\n rand_oracle()\n}\n"},"156":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/call_private_function.nr","source":"use dep::protocol_types::{abis::function_selector::FunctionSelector, address::AztecAddress, utils::reader::Reader};\n\n#[oracle(callPrivateFunction)]\nunconstrained fn call_private_function_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _start_side_effect_counter: u32,\n _is_static_call: bool,\n _is_delegate_call: bool\n) -> [Field; 2] {}\n\nunconstrained pub fn call_private_function_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n start_side_effect_counter: u32,\n is_static_call: bool,\n is_delegate_call: bool\n) -> (u32, Field) {\n let fields = call_private_function_oracle(\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 let mut reader = Reader::new(fields);\n let end_side_effect_counter = reader.read_u32();\n let returns_hash = reader.read();\n\n (end_side_effect_counter, returns_hash)\n}\n"},"157":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/keys.nr","source":"use crate::keys::{PublicKeys, public_keys::{NpkM, IvpkM, OvpkM, TpkM}};\nuse dep::protocol_types::{address::{AztecAddress, PartialAddress}, point::Point};\n\n#[oracle(getPublicKeysAndPartialAddress)]\nunconstrained fn get_public_keys_and_partial_address_oracle(_address: AztecAddress) -> [Field; 13] {}\n\nunconstrained pub fn get_public_keys_and_partial_address(address: AztecAddress) -> (PublicKeys, PartialAddress) {\n let result = get_public_keys_and_partial_address_oracle(address);\n\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: result[0], y: result[1], is_infinite: result[2] as bool } },\n ivpk_m: IvpkM { inner: Point { x: result[3], y: result[4], is_infinite: result[5] as bool } },\n ovpk_m: OvpkM { inner: Point { x: result[6], y: result[7], is_infinite: result[8] as bool } },\n tpk_m: TpkM { inner: Point { x: result[9], y: result[10], is_infinite: result[11] as bool } }\n };\n\n let partial_address = PartialAddress::from_field(result[12]);\n\n (keys, partial_address)\n}\n"},"159":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/notes.nr","source":"use crate::note::{note_header::NoteHeader, note_interface::NoteInterface};\n\nuse dep::protocol_types::{address::AztecAddress, utils::arr_copy_slice};\n\n#[oracle(notifyCreatedNote)]\nunconstrained fn notify_created_note_oracle<let N: u32>(\n _storage_slot: Field,\n _note_type_id: Field,\n _serialized_note: [Field; N],\n _note_hash: Field,\n _counter: u32\n) -> Field {}\n\nunconstrained pub fn notify_created_note<let N: u32>(\n storage_slot: Field,\n note_type_id: Field,\n serialized_note: [Field; N],\n note_hash: Field,\n counter: u32\n) -> Field {\n notify_created_note_oracle(storage_slot, note_type_id, serialized_note, note_hash, counter)\n}\n\n#[oracle(notifyNullifiedNote)]\nunconstrained fn notify_nullified_note_oracle(_nullifier: Field, _note_hash: Field, _counter: u32) -> Field {}\n\nunconstrained pub fn notify_nullified_note(nullifier: Field, note_hash: Field, counter: u32) -> Field {\n notify_nullified_note_oracle(nullifier, note_hash, counter)\n}\n\n#[oracle(getNotes)]\nunconstrained fn get_notes_oracle<let N: u32, let S: u32>(\n _storage_slot: Field,\n _num_selects: u8,\n _select_by_indexes: [u8; N],\n _select_by_offsets: [u8; N],\n _select_by_lengths: [u8; N],\n _select_values: [Field; N],\n _select_comparators: [u8; N],\n _sort_by_indexes: [u8; N],\n _sort_by_offsets: [u8; N],\n _sort_by_lengths: [u8; N],\n _sort_order: [u8; N],\n _limit: u32,\n _offset: u32,\n _status: u8,\n _return_size: u32,\n _placeholder_fields: [Field; S]\n) -> [Field; S] {}\n\nunconstrained fn get_notes_oracle_wrapper<let N: u32, let S: u32>(\n storage_slot: Field,\n num_selects: u8,\n select_by_indexes: [u8; N],\n select_by_offsets: [u8; N],\n select_by_lengths: [u8; N],\n select_values: [Field; N],\n select_comparators: [u8; N],\n sort_by_indexes: [u8; N],\n sort_by_offsets: [u8; N],\n sort_by_lengths: [u8; N],\n sort_order: [u8; N],\n limit: u32,\n offset: u32,\n status: u8,\n mut placeholder_fields: [Field; S]\n) -> [Field; S] {\n let return_size = placeholder_fields.len() as u32;\n get_notes_oracle(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n limit,\n offset,\n status,\n return_size,\n placeholder_fields\n )\n}\n\nunconstrained pub fn get_notes<Note, let N: u32, let NB: u32, let M: u32, let S: u32, let NS: u32>(\n storage_slot: Field,\n num_selects: u8,\n select_by_indexes: [u8; M],\n select_by_offsets: [u8; M],\n select_by_lengths: [u8; M],\n select_values: [Field; M],\n select_comparators: [u8; M],\n sort_by_indexes: [u8; M],\n sort_by_offsets: [u8; M],\n sort_by_lengths: [u8; M],\n sort_order: [u8; M],\n limit: u32,\n offset: u32,\n status: u8,\n mut placeholder_opt_notes: [Option<Note>; S], // TODO: Remove it and use `limit` to initialize the note array.\n placeholder_fields: [Field; NS], // TODO: Remove it and use `limit` to initialize the note array.\n _placeholder_note_length: [Field; N] // Turbofish hack? Compiler breaks calculating read_offset unless we add this parameter\n) -> [Option<Note>; S] where Note: NoteInterface<N, NB> {\n let fields = get_notes_oracle_wrapper(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n limit,\n offset,\n status,\n placeholder_fields\n );\n let num_notes = fields[0] as u32;\n let contract_address = AztecAddress::from_field(fields[1]);\n for i in 0..placeholder_opt_notes.len() {\n if i < num_notes {\n // lengths named as per typescript.\n let return_header_length: u32 = 2; // num_notes & contract_address.\n let extra_preimage_length: u32 = 2; // nonce & note_hash_counter.\n let read_offset: u32 = return_header_length + i * (N + extra_preimage_length);\n let nonce = fields[read_offset];\n let note_hash_counter = fields[read_offset + 1] as u32;\n let header = NoteHeader { contract_address, nonce, storage_slot, note_hash_counter };\n let serialized_note = arr_copy_slice(fields, [0; N], read_offset + 2);\n let mut note = Note::deserialize_content(serialized_note);\n note.set_header(header);\n placeholder_opt_notes[i] = Option::some(note);\n };\n }\n placeholder_opt_notes\n}\n\n// Only ever use this in private!\n#[oracle(checkNullifierExists)]\nunconstrained fn check_nullifier_exists_oracle(_inner_nullifier: Field) -> Field {}\n\n// Only ever use this in private!\nunconstrained pub fn check_nullifier_exists(inner_nullifier: Field) -> bool {\n check_nullifier_exists_oracle(inner_nullifier) == 1\n}\n"},"160":{"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, constants::CONTRACT_INSTANCE_LENGTH,\n utils::reader::Reader\n};\n\n#[oracle(getContractInstance)]\nunconstrained fn 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)]\nunconstrained fn 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 pub 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 = unsafe {\n ContractInstance::deserialize(get_contract_instance_internal(address))\n };\n // The to_address function combines all values in the instance object to produce an address, so by checking that we\n // get the expected address we validate the entire struct.\n assert_eq(instance.to_address(), address);\n\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"},"161":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/enqueue_public_function_call.nr","source":"use dep::protocol_types::{abis::{function_selector::FunctionSelector}, address::AztecAddress};\n\n#[oracle(enqueuePublicFunctionCall)]\nunconstrained fn 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) {}\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) {\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)]\nunconstrained fn 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) {}\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) {\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\n#[oracle(notifySetMinRevertibleSideEffectCounter)]\nunconstrained fn notify_set_min_revertible_side_effect_counter_oracle(_counter: u32) {}\n\nunconstrained pub fn notify_set_min_revertible_side_effect_counter(counter: u32) {\n notify_set_min_revertible_side_effect_counter_oracle(counter);\n}\n"},"163":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/execution.nr","source":"use dep::protocol_types::address::AztecAddress;\n\n#[oracle(getContractAddress)]\nunconstrained fn get_contract_address_oracle() -> AztecAddress {}\n\n#[oracle(getBlockNumber)]\nunconstrained fn get_block_number_oracle() -> u32 {}\n\n#[oracle(getChainId)]\nunconstrained fn get_chain_id_oracle() -> Field {}\n\n#[oracle(getVersion)]\nunconstrained fn get_version_oracle() -> Field {}\n\nunconstrained pub fn get_contract_address() -> AztecAddress {\n get_contract_address_oracle()\n}\n\nunconstrained pub fn get_block_number() -> u32 {\n get_block_number_oracle()\n}\n\nunconstrained pub fn get_chain_id() -> Field {\n get_chain_id_oracle()\n}\n\nunconstrained pub fn get_version() -> Field {\n get_version_oracle()\n}\n"},"166":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/state_vars/map.nr","source":"use dep::protocol_types::{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\n"},"168":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/state_vars/public_mutable.nr","source":"use crate::context::{PublicContext, UnconstrainedContext};\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, T_SERIALIZED_LEN> PublicMutable<T, &mut PublicContext> where T: Serialize<T_SERIALIZED_LEN> + Deserialize<T_SERIALIZED_LEN> {\n // docs:start:public_mutable_struct_read\n pub fn read(self) -> T {\n self.context.storage_read(self.storage_slot)\n }\n // docs:end:public_mutable_struct_read\n\n // docs:start:public_mutable_struct_write\n pub fn write(self, value: T) {\n self.context.storage_write(self.storage_slot, value);\n }\n // docs:end:public_mutable_struct_write\n}\n\nimpl<T, T_SERIALIZED_LEN> PublicMutable<T, UnconstrainedContext> where T: Deserialize<T_SERIALIZED_LEN> {\n unconstrained pub fn read(self) -> T {\n self.context.storage_read(self.storage_slot)\n }\n}\n"},"184":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/state_vars/private_immutable.nr","source":"use dep::protocol_types::{constants::GENERATOR_INDEX__INITIALIZATION_NULLIFIER, hash::poseidon2_hash_with_separator};\n\nuse crate::context::{PrivateContext, UnconstrainedContext};\nuse crate::note::{\n lifecycle::create_note, note_getter::{get_note, view_notes}, note_interface::NoteInterface,\n note_viewer_options::NoteViewerOptions, note_emission::NoteEmission\n};\nuse crate::oracle::notes::check_nullifier_exists;\nuse crate::state_vars::storage::Storage;\n\n// docs:start:struct\nstruct PrivateImmutable<Note, Context> {\n context: Context,\n storage_slot: Field,\n}\n// docs:end:struct\n\nimpl<T, Context> Storage<T> for PrivateImmutable<T, Context> {}\n\nimpl<Note, Context> PrivateImmutable<Note, Context> {\n // docs:start:new\n pub fn new(context: Context, storage_slot: Field) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n Self { context, storage_slot }\n }\n // docs:end:new\n\n // The following computation is leaky, in that it doesn't hide the storage slot that has been initialized, nor does it hide the contract address of this contract.\n // When this initialization nullifier is emitted, an observer could do a dictionary or rainbow attack to learn the preimage of this nullifier to deduce the storage slot and contract address.\n // For some applications, leaking the details that a particular state variable of a particular contract has been initialized will be unacceptable.\n // Under such circumstances, such application developers might wish to _not_ use this state variable type.\n // This is especially dangerous for initial assignment to elements of a `Map<AztecAddress, PrivateImmutable>` type (for example), because the storage slot often also identifies an actor.\n // e.g. the initial assignment to `my_map.at(msg.sender)` will leak: `msg.sender`, the fact that an element of `my_map` was assigned-to for the first time, and the contract_address.\n pub fn compute_initialization_nullifier(self) -> Field {\n poseidon2_hash_with_separator(\n [self.storage_slot],\n GENERATOR_INDEX__INITIALIZATION_NULLIFIER\n )\n }\n}\n\nimpl<Note> PrivateImmutable<Note, &mut PrivateContext> {\n // docs:start:initialize\n pub fn initialize<N, M>(\n self,\n note: &mut Note\n ) -> NoteEmission<Note> where Note: NoteInterface<N, M> {\n // Nullify the storage slot.\n let nullifier = self.compute_initialization_nullifier();\n self.context.push_nullifier(nullifier);\n\n create_note(self.context, self.storage_slot, note)\n }\n // docs:end:initialize\n\n // docs:start:get_note\n pub fn get_note<N, M>(self) -> Note where Note: NoteInterface<N, M> {\n let storage_slot = self.storage_slot;\n get_note(self.context, storage_slot).0\n }\n // docs:end:get_note\n}\n\nimpl<Note> PrivateImmutable<Note, UnconstrainedContext> {\n // docs:start:is_initialized\n unconstrained pub fn is_initialized(self) -> bool {\n let nullifier = self.compute_initialization_nullifier();\n check_nullifier_exists(nullifier)\n }\n // docs:end:is_initialized\n\n // view_note does not actually use the context, but it calls oracles that are only available in private\n // docs:start:view_note\n unconstrained pub fn view_note<N, M>(self) -> Note where Note: NoteInterface<N, M> {\n let mut options = NoteViewerOptions::new();\n view_notes(self.storage_slot, options.set_limit(1)).get(0)\n }\n // docs:end:view_note\n}\n"},"188":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/utils/point.nr","source":"use dep::protocol_types::point::Point;\n\n// I am storing the modulus divided by 2 plus 1 here because full modulus would throw \"String literal too large\" error\n// Full modulus is 21888242871839275222246405745257275088548364400416034343698204186575808495617\nglobal BN254_FR_MODULUS_DIV_2: Field = 10944121435919637611123202872628637544274182200208017171849102093287904247808;\n\n/// Converts a public key to a byte array.\n///\n/// We don't serialize the point at infinity flag because this function is used in situations where we do not want\n/// to waste the extra byte (encrypted log).\npub fn point_to_bytes(pk: Point) -> [u8; 32] {\n // Note that there is 1 more free bit in the 32 bytes (254 bits currently occupied by the x coordinate, 1 bit for\n // the \"sign\") so it's possible to use that last bit as an \"is_infinite\" flag if desired in the future.\n assert(!pk.is_infinite, \"Cannot serialize point at infinity as bytes.\");\n\n let mut result: [u8; 32] = pk.x.to_be_bytes();\n\n // We store only a \"sign\" of the y coordinate because the rest can be derived from the x coordinate. To get\n // the sign we check if the y coordinate is less or equal than the curve's order minus 1 divided by 2.\n // Ideally we'd do `y <= MOD_DIV_2`, but there's no `lte` function, so instead we do `!(y > MOD_DIV_2)`, which is\n // equivalent, and then rewrite that as `!(MOD_DIV_2 < y)`, since we also have no `gt` function.\n if !BN254_FR_MODULUS_DIV_2.lt(pk.y) {\n // y is <= (modulus - 1) / 2 so we set the sign bit to 1\n // Here we leverage that field fits into 254 bits (log2(Fr.MODULUS) < 254) and given that we serialize Fr to 32\n // bytes and we use big-endian the 2 most significant bits are never populated. Hence we can use one of\n // the bits as a sign bit.\n result[0] += 128;\n }\n\n result\n}\n\nmod test {\n use dep::protocol_types::point::Point;\n use crate::utils::point::point_to_bytes;\n\n #[test]\n fn test_point_to_bytes_positive_sign() {\n let p = Point {\n x: 0x1af41f5de96446dc3776a1eb2d98bb956b7acd9979a67854bec6fa7c2973bd73,\n y: 0x07fc22c7f2c7057571f137fe46ea9c95114282bc95d37d71ec4bfb88de457d4a,\n is_infinite: false\n };\n\n let compressed_point = point_to_bytes(p);\n\n let expected_compressed_point_positive_sign = [\n 154, 244, 31, 93, 233, 100, 70, 220, 55, 118, 161, 235, 45, 152, 187, 149, 107, 122, 205, 153, 121, 166, 120, 84, 190, 198, 250, 124, 41, 115, 189, 115\n ];\n\n assert_eq(expected_compressed_point_positive_sign.len(), compressed_point.len());\n for i in 0..expected_compressed_point_positive_sign.len() {\n assert_eq(compressed_point[i], expected_compressed_point_positive_sign[i]);\n }\n }\n\n #[test]\n fn test_point_to_bytes_negative_sign() {\n let p = Point {\n x: 0x247371652e55dd74c9af8dbe9fb44931ba29a9229994384bd7077796c14ee2b5,\n y: 0x26441aec112e1ae4cee374f42556932001507ad46e255ffb27369c7e3766e5c0,\n is_infinite: false\n };\n\n let compressed_point = point_to_bytes(p);\n\n let expected_compressed_point_negative_sign = [\n 36, 115, 113, 101, 46, 85, 221, 116, 201, 175, 141, 190, 159, 180, 73, 49, 186, 41, 169, 34, 153, 148, 56, 75, 215, 7, 119, 150, 193, 78, 226, 181\n ];\n\n assert_eq(expected_compressed_point_negative_sign.len(), compressed_point.len());\n for i in 0..expected_compressed_point_negative_sign.len() {\n assert_eq(compressed_point[i], expected_compressed_point_negative_sign[i]);\n }\n }\n}\n"},"205":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/key_validation_request.nr","source":"use crate::{traits::{Empty, Serialize, Deserialize}, point::Point};\npub use crate::constants::KEY_VALIDATION_REQUEST_LENGTH;\n\nstruct KeyValidationRequest {\n pk_m: Point,\n sk_app: Field, // not a grumpkin scalar because it's output of poseidon2\n}\n\nimpl Eq for KeyValidationRequest {\n fn eq(self, request: KeyValidationRequest) -> bool {\n (request.pk_m.eq(self.pk_m)) & (request.sk_app.eq(self.sk_app))\n }\n}\n\nimpl Empty for KeyValidationRequest {\n fn empty() -> Self {\n KeyValidationRequest { pk_m: Point::empty(), sk_app: 0 }\n }\n}\n\nimpl Serialize<KEY_VALIDATION_REQUEST_LENGTH> for KeyValidationRequest {\n fn serialize(self) -> [Field; KEY_VALIDATION_REQUEST_LENGTH] {\n [\n self.pk_m.x,\n self.pk_m.y,\n self.pk_m.is_infinite as Field,\n self.sk_app\n ]\n }\n}\n\nimpl Deserialize<KEY_VALIDATION_REQUEST_LENGTH> for KeyValidationRequest {\n fn deserialize(fields: [Field; KEY_VALIDATION_REQUEST_LENGTH]) -> Self {\n Self { pk_m: Point { x: fields[0], y: fields[1], is_infinite: fields[2] as bool }, sk_app: fields[3] }\n }\n}\n\n"},"24":{"path":"std/embedded_curve_ops.nr","source":"use crate::ops::arith::{Add, Sub, Neg};\nuse crate::cmp::Eq;\n\n/// A point on the embedded elliptic curve\n/// By definition, the base field of the embedded curve is the scalar field of the proof system curve, i.e the Noir Field.\n/// x and y denotes the Weierstrass coordinates of the point, if is_infinite is false.\nstruct EmbeddedCurvePoint {\n x: Field,\n y: Field,\n is_infinite: bool\n}\n\nimpl EmbeddedCurvePoint {\n /// Elliptic curve point doubling operation\n /// returns the doubled point of a point P, i.e P+P\n fn double(self) -> EmbeddedCurvePoint {\n embedded_curve_add(self, self)\n }\n\n /// Returns the null element of the curve; 'the point at infinity'\n fn point_at_infinity() -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: 0, y: 0, is_infinite: true }\n }\n}\n\nimpl Add for EmbeddedCurvePoint {\n /// Adds two points P+Q, using the curve addition formula, and also handles point at infinity\n fn add(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n embedded_curve_add(self, other)\n }\n}\n\nimpl Sub for EmbeddedCurvePoint {\n /// Points subtraction operation, using addition and negation\n fn sub(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n self + other.neg()\n }\n}\n\nimpl Neg for EmbeddedCurvePoint {\n /// Negates a point P, i.e returns -P, by negating the y coordinate.\n /// If the point is at infinity, then the result is also at infinity.\n fn neg(self) -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: self.x, y: -self.y, is_infinite: self.is_infinite }\n }\n}\n\nimpl Eq for EmbeddedCurvePoint {\n /// Checks whether two points are equal\n fn eq(self: Self, b: EmbeddedCurvePoint) -> bool {\n (self.is_infinite & b.is_infinite)\n | ((self.is_infinite == b.is_infinite) & (self.x == b.x) & (self.y == b.y))\n }\n}\n\n/// Scalar for the embedded curve represented as low and high limbs\n/// By definition, the scalar field of the embedded curve is base field of the proving system curve.\n/// It may not fit into a Field element, so it is represented with two Field elements; its low and high limbs.\nstruct EmbeddedCurveScalar {\n lo: Field,\n hi: Field,\n}\n\nimpl EmbeddedCurveScalar {\n pub fn new(lo: Field, hi: Field) -> Self {\n EmbeddedCurveScalar { lo, hi }\n }\n\n #[field(bn254)]\n fn from_field(scalar: Field) -> EmbeddedCurveScalar {\n let (a,b) = crate::field::bn254::decompose(scalar);\n EmbeddedCurveScalar { lo: a, hi: b }\n }\n}\n\nimpl Eq for EmbeddedCurveScalar {\n fn eq(self, other: Self) -> bool {\n (other.hi == self.hi) & (other.lo == self.lo)\n }\n}\n\n// Computes a multi scalar multiplication over the embedded curve.\n// For bn254, We have Grumpkin and Baby JubJub.\n// For bls12-381, we have JubJub and Bandersnatch.\n//\n// The embedded curve being used is decided by the \n// underlying proof system.\n// docs:start:multi_scalar_mul\npub fn multi_scalar_mul<let N: u32>(\n points: [EmbeddedCurvePoint; N],\n scalars: [EmbeddedCurveScalar; N]\n) -> EmbeddedCurvePoint\n// docs:end:multi_scalar_mul\n{\n let point_array = multi_scalar_mul_array_return(points, scalars);\n EmbeddedCurvePoint { x: point_array[0], y: point_array[1], is_infinite: point_array[2] as bool }\n}\n\n#[foreign(multi_scalar_mul)]\nfn multi_scalar_mul_array_return<let N: u32>(points: [EmbeddedCurvePoint; N], scalars: [EmbeddedCurveScalar; N]) -> [Field; 3] {}\n\n#[foreign(multi_scalar_mul)]\npub(crate) fn multi_scalar_mul_slice(points: [EmbeddedCurvePoint], scalars: [EmbeddedCurveScalar]) -> [Field; 3] {}\n\n// docs:start:fixed_base_scalar_mul\npub fn fixed_base_scalar_mul(scalar: EmbeddedCurveScalar) -> EmbeddedCurvePoint\n// docs:end:fixed_base_scalar_mul\n{\n let g1 = EmbeddedCurvePoint { x: 1, y: 17631683881184975370165255887551781615748388533673675138860, is_infinite: false };\n multi_scalar_mul([g1], [scalar])\n}\n\n// This is a hack as returning an `EmbeddedCurvePoint` from a foreign function in brillig returns a [BrilligVariable::SingleAddr; 2] rather than BrilligVariable::BrilligArray\n// as is defined in the brillig bytecode format. This is a workaround which allows us to fix this without modifying the serialization format.\n// docs:start:embedded_curve_add\nfn embedded_curve_add(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint\n) -> EmbeddedCurvePoint\n// docs:end:embedded_curve_add\n{\n let point_array = embedded_curve_add_array_return(point1, point2);\n let x = point_array[0];\n let y = point_array[1];\n EmbeddedCurvePoint { x, y, is_infinite: point_array[2] == 1 }\n}\n\n#[foreign(embedded_curve_add)]\nfn embedded_curve_add_array_return(_point1: EmbeddedCurvePoint, _point2: EmbeddedCurvePoint) -> [Field; 3] {}\n"},"25":{"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: [u8; 32] = x.to_le_bytes();\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 pub(crate) 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: [u8; 32] = x.to_le_bytes();\n let y_bytes: [u8; 32] = y.to_le_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 unsafe {\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\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 unsafe {\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}\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 unsafe {\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}\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, compute_lt, assert_gt, gt, 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"},"251":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/data/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 : u32,\n}\n\nimpl Empty for PublicDataTreeLeafPreimage {\n fn empty() -> Self {\n Self { slot: 0, value: 0, next_slot: 0, next_index: 0 }\n }\n}\n\nimpl Hash for PublicDataTreeLeafPreimage {\n fn hash(self) -> Field {\n if self.is_empty() {\n 0\n } else {\n crate::hash::poseidon2_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"},"258":{"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\nmod test {\n use crate::{address::AztecAddress, storage::map::derive_storage_slot_in_map};\n\n #[test]\n fn test_derive_storage_slot_in_map_matches_typescript() {\n let map_slot = 0x132258fb6962c4387ba659d9556521102d227549a386d39f0b22d1890d59c2b5;\n let key = AztecAddress::from_field(0x302dbc2f9b50a73283d5fb2f35bc01eae8935615817a0b4219a057b2ba8a5a3f);\n\n let slot = derive_storage_slot_in_map(map_slot, key);\n\n // The following value was generated by `map_slot.test.ts`\n let slot_from_typescript = 0x2499880e2b1b831785c17286f99a0d5122fee784ce7b1c04e380c4a991da819a;\n\n assert_eq(slot, slot_from_typescript);\n }\n}\n"},"26":{"path":"std/field/mod.nr","source":"mod bn254;\nuse bn254::lt as bn254_lt;\n\nimpl Field {\n /// Asserts that `self` can be represented in `bit_size` bits.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{bit_size}`.\n // docs:start:assert_max_bit_size\n pub fn assert_max_bit_size(self, bit_size: u32) {\n // docs:end:assert_max_bit_size\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 #[builtin(apply_range_constraint)]\n fn __assert_max_bit_size(self, bit_size: u32) {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n /// \n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_le_bits)]\n // docs:start:to_le_bits\n pub fn to_le_bits<let N: u32>(self: Self) -> [u1; N] {}\n // docs:end:to_le_bits\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n /// \n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_be_bits)]\n // docs:start:to_be_bits\n pub fn to_be_bits<let N: u32>(self: Self) -> [u1; N] {}\n // docs:end:to_be_bits\n\n /// Decomposes `self` into its little endian byte decomposition as a `[u8]` slice of length `byte_size`.\n /// This slice will be zero padded should not all bytes be necessary to represent `self`.\n /// \n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{8*byte_size}` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `byte_size` equal to or greater than the number of bytes necessary to represent the `Field` modulus\n /// (e.g. 32 for the BN254 field) allow for multiple byte decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n // docs:start:to_le_bytes\n pub fn to_le_bytes<let N: u32>(self: Self) -> [u8; N] {\n self.to_le_radix(256)\n }\n // docs:end:to_le_bytes\n\n /// Decomposes `self` into its big endian byte decomposition as a `[u8]` slice of length `byte_size`.\n /// This slice will be zero padded should not all bytes be necessary to represent `self`.\n /// \n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{8*byte_size}` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `byte_size` equal to or greater than the number of bytes necessary to represent the `Field` modulus\n /// (e.g. 32 for the BN254 field) allow for multiple byte decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n // docs:start:to_be_bytes\n pub fn to_be_bytes<let N: u32>(self: Self) -> [u8; N] {\n self.to_be_radix(256)\n }\n // docs:end:to_be_bytes\n\n // docs:start:to_le_radix\n pub fn to_le_radix<let N: u32>(self: Self, radix: u32) -> [u8; N] {\n crate::assert_constant(radix);\n self.__to_le_radix(radix)\n }\n // docs:end:to_le_radix\n\n // docs:start:to_be_radix\n pub fn to_be_radix<let N: u32>(self: Self, radix: u32) -> [u8; N] {\n crate::assert_constant(radix);\n self.__to_be_radix(radix)\n }\n // docs:end:to_be_radix\n\n // `_radix` must be less than 256\n #[builtin(to_le_radix)]\n fn __to_le_radix<let N: u32>(self, radix: u32) -> [u8; N] {}\n\n #[builtin(to_be_radix)]\n fn __to_be_radix<let N: u32>(self, radix: u32) -> [u8; N] {}\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: [u1; 32] = exponent.to_le_bits();\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 comptime fn modulus_num_bits() -> u64 {}\n\n#[builtin(modulus_be_bits)]\npub comptime fn modulus_be_bits() -> [u1] {}\n\n#[builtin(modulus_le_bits)]\npub comptime fn modulus_le_bits() -> [u1] {}\n\n#[builtin(modulus_be_bytes)]\npub comptime fn modulus_be_bytes() -> [u8] {}\n\n#[builtin(modulus_le_bytes)]\npub comptime fn modulus_le_bytes() -> [u8] {}\n\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 x_bytes: [u8; 32] = x.to_le_bytes();\n let y_bytes: [u8; 32] = y.to_le_bytes();\n let mut x_is_lt = false;\n let mut done = false;\n for i in 0..32 {\n if (!done) {\n let x_byte = x_bytes[32 - 1 - i] as u8;\n let y_byte = y_bytes[32 - 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\nmod tests {\n #[test]\n // docs:start:to_be_bits_example\n fn test_to_be_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_be_bits();\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 1, 0]);\n }\n // docs:end:to_be_bits_example\n\n #[test]\n // docs:start:to_le_bits_example\n fn test_to_le_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_le_bits();\n assert_eq(bits, [0, 1, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_bits_example\n\n #[test]\n // docs:start:to_be_bytes_example\n fn test_to_be_bytes() {\n let field = 2;\n let bits: [u8; 8] = field.to_be_bytes();\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 0, 2]);\n }\n // docs:end:to_be_bytes_example\n\n #[test]\n // docs:start:to_le_bytes_example\n fn test_to_le_bytes() {\n let field = 2;\n let bits: [u8; 8] = field.to_le_bytes();\n assert_eq(bits, [2, 0, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_bytes_example\n\n #[test]\n // docs:start:to_be_radix_example\n fn test_to_be_radix() {\n let field = 2;\n let bits: [u8; 8] = field.to_be_radix(256);\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 0, 2]);\n }\n // docs:end:to_be_radix_example\n\n #[test]\n // docs:start:to_le_radix_example\n fn test_to_le_radix() {\n let field = 2;\n let bits: [u8; 8] = field.to_le_radix(256);\n assert_eq(bits, [2, 0, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_radix_example\n}\n"},"264":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/traits.nr","source":"use 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 {\n fn empty() -> Self {\n 0\n }\n}\n\nimpl Empty for u1 {\n fn empty() -> Self {\n 0\n }\n}\nimpl Empty for u8 {\n fn empty() -> Self {\n 0\n }\n}\nimpl Empty for u32 {\n fn empty() -> Self {\n 0\n }\n}\nimpl Empty for u64 {\n fn empty() -> Self {\n 0\n }\n}\nimpl Empty for U128 {\n fn empty() -> Self {\n U128::from_integer(0)\n }\n}\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, let N: u32>(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 {\n fn to_field(self) -> Field {\n self as Field\n }\n}\nimpl ToField for u1 {\n fn to_field(self) -> Field {\n self as Field\n }\n}\nimpl ToField for u8 {\n fn to_field(self) -> Field {\n self as Field\n }\n}\nimpl ToField for u32 {\n fn to_field(self) -> Field {\n self as Field\n }\n}\nimpl ToField for u64 {\n fn to_field(self) -> Field {\n self as Field\n }\n}\nimpl ToField for U128 {\n fn to_field(self) -> Field {\n self.to_integer()\n }\n}\nimpl<let N: u32> 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 {\n fn from_field(value: Field) -> Self {\n value as bool\n }\n}\nimpl FromField for u1 {\n fn from_field(value: Field) -> Self {\n value as u1\n }\n}\nimpl FromField for u8 {\n fn from_field(value: Field) -> Self {\n value as u8\n }\n}\nimpl FromField for u32 {\n fn from_field(value: Field) -> Self {\n value as u32\n }\n}\nimpl FromField for u64 {\n fn from_field(value: Field) -> Self {\n value as u64\n }\n}\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<let N: u32> {\n fn serialize(self) -> [Field; N];\n}\n// docs:end:serialize\n\nimpl<let N: u32> Serialize<N> for [Field; N] {\n fn serialize(self) -> [Field; N] {\n self\n }\n}\nimpl<let N: u32> 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<let N: u32> {\n fn deserialize(fields: [Field; N]) -> Self;\n}\n// docs:end:deserialize\n\nimpl<let N: u32> Deserialize<N> for [Field; N] {\n fn deserialize(fields: [Field; N]) -> Self {\n fields\n }\n}\n"},"265":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/debug_log.nr","source":"// Utility function to console.log data in the acir simulator\n// WARNING: sometimes when using debug logs the ACVM errors with: `thrown: \"solver opcode resolution error: cannot solve opcode: expression has too many unknowns x155\"`\n\n#[oracle(debugLog)]\nunconstrained fn debug_log_oracle<let M: u32>(_msg: str<M>, args: [Field]) {}\n\n/// NOTE: call this with a str<N> msg of form\n/// \"some string with {0} and {1} ... {N}\"\n/// and an array of N field which will be formatted\n/// into the string in the simulator.\n/// Example:\n/// debug_log_format(\"get_2(slot:{0}) =>\\n\\t0:{1}\\n\\t1:{2}\", [storage_slot, note0_hash, note1_hash]);\n/// debug_log_format(\"whole array: {}\", [e1, e2, e3, e4]);\nunconstrained pub fn debug_log_format<let M: u32, let N: u32>(msg: str<M>, args: [Field; N]) {\n debug_log_oracle(msg, args.as_slice());\n}\n\n/// NOTE: call this with a str<N> msg of length > 1\n/// Example:\n/// `debug_log(\"blah blah this is a debug string\");`\nunconstrained pub fn debug_log<let N: u32>(msg: str<N>) {\n debug_log_format(msg, []);\n}\n"},"269":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr","source":"use crate::{\n abis::{\n contract_class_function_leaf_preimage::ContractClassFunctionLeafPreimage,\n function_selector::FunctionSelector, log_hash::{LogHash, ScopedLogHash, ScopedEncryptedLogHash},\n note_hash::ScopedNoteHash, nullifier::ScopedNullifier\n},\n address::{AztecAddress, EthAddress},\n 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},\n merkle_tree::root::root_from_sibling_path,\n messaging::l2_to_l1_message::{L2ToL1Message, ScopedL2ToL1Message},\n recursion::verification_key::VerificationKey, traits::{is_empty, ToField},\n utils::field::field_from_bytes_32_trunc\n};\n\npub fn sha256_to_field<let N: u32>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = std::hash::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\nfn compute_note_hash_nonce(tx_hash: Field, note_index_in_tx: u32) -> Field {\n // Hashing tx hash with note index in tx is guaranteed to be unique\n poseidon2_hash_with_separator(\n [\n tx_hash,\n note_index_in_tx 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 let inputs = [nonce, note_hash];\n poseidon2_hash_with_separator(inputs, GENERATOR_INDEX__UNIQUE_NOTE_HASH)\n}\n\npub fn compute_siloed_note_hash(app: AztecAddress, unique_note_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [\n app.to_field(),\n unique_note_hash\n ],\n GENERATOR_INDEX__SILOED_NOTE_HASH\n )\n}\n\n/// Siloing in the context of Aztec refers to the process of hashing a note hash with a contract address (this way\n/// the note hash is scoped to a specific contract). This is used to prevent intermingling of notes between contracts.\npub fn silo_note_hash(note_hash: ScopedNoteHash, tx_hash: Field, note_index_in_tx: u32) -> Field {\n if note_hash.contract_address.is_zero() {\n 0\n } else {\n let nonce = compute_note_hash_nonce(tx_hash, note_index_in_tx);\n let unique_note_hash = compute_unique_note_hash(nonce, note_hash.value());\n compute_siloed_note_hash(note_hash.contract_address, unique_note_hash)\n }\n}\n\npub fn compute_siloed_nullifier(app: AztecAddress, nullifier: Field) -> Field {\n poseidon2_hash_with_separator(\n [\n app.to_field(),\n nullifier\n ],\n GENERATOR_INDEX__OUTER_NULLIFIER\n )\n}\n\npub fn silo_nullifier(nullifier: ScopedNullifier) -> Field {\n if nullifier.contract_address.is_zero() {\n nullifier.value() // Return value instead of 0 because the first nullifier's contract address is zero.\n } else {\n compute_siloed_nullifier(nullifier.contract_address, nullifier.value())\n }\n}\n\npub fn silo_encrypted_log_hash(log_hash: ScopedLogHash) -> Field {\n // We assume contract address has already been masked\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n accumulate_sha256([log_hash.contract_address.to_field(), log_hash.log_hash.value])\n }\n}\n\npub fn mask_encrypted_log_hash(scoped_log: ScopedEncryptedLogHash) -> AztecAddress {\n if scoped_log.contract_address.is_zero() {\n AztecAddress::from_field(0)\n } else if (scoped_log.log_hash.randomness == 0) {\n scoped_log.contract_address\n } else {\n AztecAddress::from_field(\n poseidon2_hash_with_separator(\n [scoped_log.contract_address.to_field(), scoped_log.log_hash.randomness],\n 0\n )\n )\n }\n}\n\nfn compute_siloed_unencrypted_log_hash(address: AztecAddress, log_hash: Field) -> Field {\n accumulate_sha256([address.to_field(), log_hash])\n}\n\npub fn silo_unencrypted_log_hash(log_hash: ScopedLogHash) -> Field {\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n compute_siloed_unencrypted_log_hash(log_hash.contract_address, log_hash.value())\n }\n}\n\npub fn merkle_hash(left: Field, right: Field) -> Field {\n poseidon2_hash([left, right])\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 recipient: EthAddress,\n content: Field,\n rollup_version_id: Field,\n chain_id: Field\n) -> Field {\n let mut bytes: BoundedVec<u8, 160> = BoundedVec::new();\n\n let inputs = [contract_address.to_field(), rollup_version_id, recipient.to_field(), chain_id, content];\n for i in 0..inputs.len() {\n // TODO are bytes be in fr.to_buffer() ?\n let item_bytes: [u8; 32] = inputs[i].to_be_bytes();\n for j in 0..32 {\n bytes.push(item_bytes[j]);\n }\n }\n\n sha256_to_field(bytes.storage)\n}\n\npub fn silo_l2_to_l1_message(msg: ScopedL2ToL1Message, rollup_version_id: Field, chain_id: Field) -> Field {\n if msg.contract_address.is_zero() {\n 0\n } else {\n compute_l2_to_l1_hash(\n msg.contract_address,\n msg.message.recipient,\n msg.message.content,\n rollup_version_id,\n chain_id\n )\n }\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: [u8; 32] = input[offset].to_be_bytes();\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: [u8; 32] = logs[offset].value.to_be_bytes();\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: [u8; 32] = logs[offset].value.to_be_bytes();\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<let N: u32>(inputs: [Field; N], hash_index: u32) -> Field {\n std::hash::pedersen_hash_with_separator(inputs, hash_index)\n}\n\npub fn poseidon2_hash<let N: u32>(inputs: [Field; N]) -> Field {\n std::hash::poseidon2::Poseidon2::hash(inputs, N)\n}\n\n#[no_predicates]\npub fn poseidon2_hash_with_separator<let N: u32, T>(\n inputs: [Field; N],\n separator: T\n) -> Field where T: ToField {\n // We manually hash the inputs here, since we cannot express with the type system a constant size inputs array of N + 1\n let in_len = N + 1;\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = std::hash::poseidon2::Poseidon2::new(iv);\n sponge.absorb(separator.to_field());\n\n for i in 0..inputs.len() {\n sponge.absorb(inputs[i]);\n }\n\n sponge.squeeze()\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 = std::hash::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), EthAddress::zero(), 0, 0, 0);\n assert(hash_result == 0xb393978842a0fa3d3e1470196f098f473f9678e72463cb65ec4ab5581856c2);\n\n // Non-zero case\n let hash_result = compute_l2_to_l1_hash(AztecAddress::from_field(1), EthAddress::from_field(3), 5, 2, 4);\n assert(hash_result == 0x3f88c1044a05e5340ed20466276500f6d45ca5603913b9091e957161734e16);\n}\n\n#[test]\nfn silo_l2_to_l1_message_matches_typescript() {\n let version = 4;\n let chainId = 5;\n\n let hash = silo_l2_to_l1_message(\n ScopedL2ToL1Message {\n message: L2ToL1Message { recipient: EthAddress::from_field(1), content: 2, counter: 0 },\n contract_address: AztecAddress::from_field(3)\n },\n version,\n chainId\n );\n\n // The following value was generated by `l2_to_l1_message.test.ts`\n let hash_from_typescript = 0x00c6155d69febb9d5039b374dd4f77bf57b7c881709aa524a18acaa0bd57476a;\n\n assert_eq(hash, hash_from_typescript);\n}\n"},"275":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/point.nr","source":"pub use dep::std::embedded_curve_ops::EmbeddedCurvePoint as Point;\nuse crate::{traits::{Empty, Hash, Serialize}, hash::poseidon2_hash};\n\nglobal POINT_LENGTH: Field = 3;\n\nimpl Serialize<POINT_LENGTH> for Point {\n fn serialize(self: Self) -> [Field; POINT_LENGTH] {\n [self.x, self.y, self.is_infinite as Field]\n }\n}\n\nimpl Hash for Point {\n fn hash(self) -> Field {\n poseidon2_hash(self.serialize())\n }\n}\n\nimpl Empty for Point {\n /// Note: Does not return a valid point on curve - instead represents an empty/\"unpopulated\" point struct (e.g.\n /// empty/unpopulated value in an array of points).\n fn empty() -> Self {\n Point { x: 0, y: 0, is_infinite: false }\n }\n}\n"},"276":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/contract_instance.nr","source":"use crate::{\n address::{aztec_address::AztecAddress, partial_address::PartialAddress, public_keys_hash::PublicKeysHash},\n contract_class_id::ContractClassId, constants::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"},"288":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/merkle_tree/root.nr","source":"use crate::{hash::merkle_hash, merkle_tree::merkle_tree::MerkleTree};\n\n// Calculate the Merkle tree root from the sibling path and leaf.\n//\n// The leaf is hashed with its sibling, and then the result is hashed\n// with the next sibling etc in the path. The last hash is the root.\n//\n// TODO(David/Someone): The cpp code is using a uint256, whereas its\n// TODO a bit simpler in Noir to just have a bit array.\n// TODO: I'd generally like to avoid u256 for algorithms like\n// this because it means we never even need to consider cases where\n// the index is greater than p.\npub fn root_from_sibling_path<let N: u32>(\n leaf: Field,\n leaf_index: Field,\n sibling_path: [Field; N]\n) -> Field {\n let mut node = leaf;\n let indices: [u1; N] = leaf_index.to_le_bits();\n\n for i in 0..N {\n let (hash_left, hash_right) = if indices[i] == 1 {\n (sibling_path[i], node)\n } else {\n (node, sibling_path[i])\n };\n node = merkle_hash(hash_left, hash_right);\n }\n node\n}\n\npub fn calculate_subtree_root<let N: u32>(leaves: [Field; N]) -> Field {\n MerkleTree::new(leaves).get_root()\n}\n\n// These values are precomputed and we run tests to ensure that they\n// are correct. The values themselves were computed from the cpp code.\n//\n// Would be good if we could use width since the compute_subtree\n// algorithm uses depth.\npub fn calculate_empty_tree_root(depth: u32) -> Field {\n if depth == 0 {\n 0\n } else if depth == 1 {\n 0x0b63a53787021a4a962a452c2921b3663aff1ffd8d5510540f8e659e782956f1\n } else if depth == 2 {\n 0x0e34ac2c09f45a503d2908bcb12f1cbae5fa4065759c88d501c097506a8b2290\n } else if depth == 3 {\n 0x21f9172d72fdcdafc312eee05cf5092980dda821da5b760a9fb8dbdf607c8a20\n } else if depth == 4 {\n 0x2373ea368857ec7af97e7b470d705848e2bf93ed7bef142a490f2119bcf82d8e\n } else if depth == 5 {\n 0x120157cfaaa49ce3da30f8b47879114977c24b266d58b0ac18b325d878aafddf\n } else if depth == 6 {\n 0x01c28fe1059ae0237b72334700697bdf465e03df03986fe05200cadeda66bd76\n } else if depth == 7 {\n 0x2d78ed82f93b61ba718b17c2dfe5b52375b4d37cbbed6f1fc98b47614b0cf21b\n } else if depth == 8 {\n 0x067243231eddf4222f3911defbba7705aff06ed45960b27f6f91319196ef97e1\n } else if depth == 9 {\n 0x1849b85f3c693693e732dfc4577217acc18295193bede09ce8b97ad910310972\n } else if depth == 10 {\n 0x2a775ea761d20435b31fa2c33ff07663e24542ffb9e7b293dfce3042eb104686\n } else {\n assert(false, \"depth should be between 0 and 10\");\n 0\n }\n}\n\n#[test]\nfn test_merkle_root_interop_test() {\n // This is a test to ensure that we match the cpp implementation.\n // You can grep for `TEST_F(root_rollup_tests, noir_interop_test)`\n // to find the test that matches this.\n let root = calculate_subtree_root([1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]);\n assert(0x1a09d935ae110b4c861fcec8f9099ec30b4485022aeb3d3cf9d7168e38fdc231 == root);\n\n let empty_root = calculate_subtree_root([0; 16]);\n assert(0x2373ea368857ec7af97e7b470d705848e2bf93ed7bef142a490f2119bcf82d8e == empty_root);\n}\n\n#[test]\nfn test_empty_subroot() {\n assert(calculate_empty_tree_root(0) == 0);\n\n let expected_empty_root_2 = calculate_subtree_root([0; 2]);\n assert(calculate_empty_tree_root(1) == expected_empty_root_2);\n\n let expected_empty_root_4 = calculate_subtree_root([0; 4]);\n assert(calculate_empty_tree_root(2) == expected_empty_root_4);\n\n let expected_empty_root_8 = calculate_subtree_root([0; 8]);\n assert(calculate_empty_tree_root(3) == expected_empty_root_8);\n\n let expected_empty_root_16 = calculate_subtree_root([0; 16]);\n assert(calculate_empty_tree_root(4) == expected_empty_root_16);\n\n let expected_empty_root_32 = calculate_subtree_root([0; 32]);\n assert(calculate_empty_tree_root(5) == expected_empty_root_32);\n\n let expected_empty_root_64 = calculate_subtree_root([0; 64]);\n assert(calculate_empty_tree_root(6) == expected_empty_root_64);\n\n let expected_empty_root_128 = calculate_subtree_root([0; 128]);\n assert(calculate_empty_tree_root(7) == expected_empty_root_128);\n\n let expected_empty_root_256 = calculate_subtree_root([0; 256]);\n assert(calculate_empty_tree_root(8) == expected_empty_root_256);\n\n let expected_empty_root_512 = calculate_subtree_root([0; 512]);\n assert(calculate_empty_tree_root(9) == expected_empty_root_512);\n\n let expected_empty_root_1024 = calculate_subtree_root([0; 1024]);\n assert(calculate_empty_tree_root(10) == expected_empty_root_1024);\n}\n"},"29":{"path":"std/hash/mod.nr","source":"mod poseidon;\nmod mimc;\nmod poseidon2;\nmod keccak;\nmod sha256;\nmod sha512;\n\nuse crate::default::Default;\nuse crate::uint128::U128;\nuse crate::collections::vec::Vec;\nuse crate::embedded_curve_ops::{EmbeddedCurvePoint, EmbeddedCurveScalar, multi_scalar_mul, multi_scalar_mul_slice};\nuse crate::meta::derive_via;\n\n// Kept for backwards compatibility\npub use sha256::{digest, sha256, sha256_compression, sha256_var};\n\n#[foreign(blake2s)]\n// docs:start:blake2s\npub fn blake2s<let N: u32>(input: [u8; N]) -> [u8; 32]\n// docs:end:blake2s\n{}\n\n#[foreign(blake3)]\n// docs:start:blake3\npub fn blake3<let N: u32>(input: [u8; N]) -> [u8; 32]\n// docs:end:blake3\n{}\n\n// docs:start:pedersen_commitment\npub fn pedersen_commitment<let N: u32>(input: [Field; N]) -> EmbeddedCurvePoint {\n // docs:end:pedersen_commitment\n pedersen_commitment_with_separator(input, 0)\n}\n\npub fn pedersen_hash_with_separator<let N: u32>(input: [Field; N], separator: u32) -> Field {\n __pedersen_hash_with_separator(input, separator)\n}\n\nfn pedersen_commitment_with_separator<let N: u32>(input: [Field; N], separator: u32) -> EmbeddedCurvePoint {\n let value = __pedersen_commitment_with_separator(input, separator);\n if (value[0] == 0) & (value[1] == 0) {\n EmbeddedCurvePoint { x: 0, y: 0, is_infinite: true }\n } else {\n EmbeddedCurvePoint { x: value[0], y: value[1], is_infinite: false }\n }\n}\n\n#[no_predicates]\nfn pedersen_commitment_with_separator_noir<let N: u32>(input: [Field; N], separator: u32) -> EmbeddedCurvePoint {\n let mut points = [EmbeddedCurveScalar { lo: 0, hi: 0 }; N];\n for i in 0..N {\n // we use the unsafe version because the multi_scalar_mul will constrain the scalars.\n points[i] = from_field_unsafe(input[i]);\n }\n let generators = derive_generators(\"DEFAULT_DOMAIN_SEPARATOR\".as_bytes(), separator);\n multi_scalar_mul(generators, points)\n}\n\n#[no_predicates]\nfn pedersen_hash_with_separator_noir<let N: u32>(input: [Field; N], separator: u32) -> Field {\n let mut scalars: Vec<EmbeddedCurveScalar> = Vec::from_slice([EmbeddedCurveScalar { lo: 0, hi: 0 }; N].as_slice()); //Vec::new();\n\n for i in 0..N {\n scalars.set(i, from_field_unsafe(input[i]));\n }\n scalars.push(EmbeddedCurveScalar { lo: N as Field, hi: 0 as Field });\n let domain_generators :[EmbeddedCurvePoint; N]= derive_generators(\"DEFAULT_DOMAIN_SEPARATOR\".as_bytes(), separator);\n let mut vec_generators = Vec::new();\n for i in 0..N {\n vec_generators.push(domain_generators[i]);\n }\n let length_generator : [EmbeddedCurvePoint; 1] = derive_generators(\"pedersen_hash_length\".as_bytes(), 0);\n vec_generators.push(length_generator[0]);\n multi_scalar_mul_slice(vec_generators.slice, scalars.slice)[0]\n}\n\n// docs:start:pedersen_hash\npub fn pedersen_hash<let N: u32>(input: [Field; N]) -> Field\n// docs:end:pedersen_hash\n{\n __pedersen_hash_with_separator(input, 0)\n}\n\n#[foreign(pedersen_hash)]\nfn __pedersen_hash_with_separator<let N: u32>(input: [Field; N], separator: u32) -> Field {}\n\n#[foreign(pedersen_commitment)]\nfn __pedersen_commitment_with_separator<let N: u32>(input: [Field; N], separator: u32) -> [Field; 2] {}\n\n#[field(bn254)]\nfn derive_generators<let N: u32, let M: u32>(domain_separator_bytes: [u8; M], starting_index: u32) -> [EmbeddedCurvePoint; N] {\n crate::assert_constant(domain_separator_bytes);\n // TODO(https://github.com/noir-lang/noir/issues/5672): Add back assert_constant on starting_index\n __derive_generators(domain_separator_bytes, starting_index)\n}\n\n#[builtin(derive_pedersen_generators)]\n#[field(bn254)]\nfn __derive_generators<let N: u32, let M: u32>(\n domain_separator_bytes: [u8; M],\n starting_index: u32\n) -> [EmbeddedCurvePoint; N] {}\n\n#[field(bn254)]\n // Same as from_field but:\n // does not assert the limbs are 128 bits\n // does not assert the decomposition does not overflow the EmbeddedCurveScalar\n fn from_field_unsafe(scalar: Field) -> EmbeddedCurveScalar {\n let (xlo, xhi) = unsafe {\n crate::field::bn254::decompose_hint(scalar)\n };\n // Check that the decomposition is correct\n assert_eq(scalar, xlo + crate::field::bn254::TWO_POW_128 * xhi);\n EmbeddedCurveScalar { lo: xlo, hi: xhi }\n}\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();\n sum += crate::field::bytes32_to_field(blake2s(input_bytes));\n }\n\n sum\n}\n\n// docs:start:keccak256\npub fn keccak256<let N: u32>(input: [u8; N], message_size: u32) -> [u8; 32]\n// docs:end:keccak256\n{\n crate::hash::keccak::keccak256(input, message_size)\n}\n\n#[foreign(poseidon2_permutation)]\npub fn poseidon2_permutation<let N: u32>(_input: [Field; N], _state_length: u32) -> [Field; N] {}\n\n// Generic hashing support. \n// Partially ported and impacted by rust.\n\n// Hash trait shall be implemented per type.\n#[derive_via(derive_hash)]\ntrait Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher;\n}\n\n// docs:start:derive_hash\ncomptime fn derive_hash(s: StructDefinition) -> Quoted {\n let name = quote { Hash };\n let signature = quote { fn hash<H>(_self: Self, _state: &mut H) where H: std::hash::Hasher };\n let for_each_field = |name| quote { _self.$name.hash(_state); };\n crate::meta::make_trait_impl(s, name, signature, for_each_field, quote {}, |fields| fields)\n}\n// docs:end:derive_hash\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 fn build_hasher(_self: Self) -> H {\n H::default()\n }\n}\n\nimpl<H> Default for BuildHasherDefault<H>\nwhere \n H: Hasher + Default {\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 u1 {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n H::write(state, self as Field);\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 u16 {\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 i16 {\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, let N: u32> 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\n// Some test vectors for Pedersen hash and Pedersen Commitment.\n// They have been generated using the same functions so the tests are for now useless\n// but they will be useful when we switch to Noir implementation.\n#[test]\nfn assert_pedersen() {\n assert_eq(\n pedersen_hash_with_separator([1], 1), 0x1b3f4b1a83092a13d8d1a59f7acb62aba15e7002f4440f2275edb99ebbc2305f\n );\n assert_eq(\n pedersen_commitment_with_separator([1], 1), EmbeddedCurvePoint {\n x: 0x054aa86a73cb8a34525e5bbed6e43ba1198e860f5f3950268f71df4591bde402,\n y: 0x209dcfbf2cfb57f9f6046f44d71ac6faf87254afc7407c04eb621a6287cac126,\n is_infinite: false\n }\n );\n\n assert_eq(\n pedersen_hash_with_separator([1, 2], 2), 0x26691c129448e9ace0c66d11f0a16d9014a9e8498ee78f4d69f0083168188255\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2], 2), EmbeddedCurvePoint {\n x: 0x2e2b3b191e49541fe468ec6877721d445dcaffe41728df0a0eafeb15e87b0753,\n y: 0x2ff4482400ad3a6228be17a2af33e2bcdf41be04795f9782bd96efe7e24f8778,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3], 3), 0x0bc694b7a1f8d10d2d8987d07433f26bd616a2d351bc79a3c540d85b6206dbe4\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3], 3), EmbeddedCurvePoint {\n x: 0x1fee4e8cf8d2f527caa2684236b07c4b1bad7342c01b0f75e9a877a71827dc85,\n y: 0x2f9fedb9a090697ab69bf04c8bc15f7385b3e4b68c849c1536e5ae15ff138fd1,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4], 4), 0xdae10fb32a8408521803905981a2b300d6a35e40e798743e9322b223a5eddc\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4], 4), EmbeddedCurvePoint {\n x: 0x07ae3e202811e1fca39c2d81eabe6f79183978e6f12be0d3b8eda095b79bdbc9,\n y: 0x0afc6f892593db6fbba60f2da558517e279e0ae04f95758587760ba193145014,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5], 5), 0xfc375b062c4f4f0150f7100dfb8d9b72a6d28582dd9512390b0497cdad9c22\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5], 5), EmbeddedCurvePoint {\n x: 0x1754b12bd475a6984a1094b5109eeca9838f4f81ac89c5f0a41dbce53189bb29,\n y: 0x2da030e3cfcdc7ddad80eaf2599df6692cae0717d4e9f7bfbee8d073d5d278f7,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6], 6), 0x1696ed13dc2730062a98ac9d8f9de0661bb98829c7582f699d0273b18c86a572\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6], 6), EmbeddedCurvePoint {\n x: 0x190f6c0e97ad83e1e28da22a98aae156da083c5a4100e929b77e750d3106a697,\n y: 0x1f4b60f34ef91221a0b49756fa0705da93311a61af73d37a0c458877706616fb,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7], 7), 0x128c0ff144fc66b6cb60eeac8a38e23da52992fc427b92397a7dffd71c45ede3\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7], 7), EmbeddedCurvePoint {\n x: 0x015441e9d29491b06563fac16fc76abf7a9534c715421d0de85d20dbe2965939,\n y: 0x1d2575b0276f4e9087e6e07c2cb75aa1baafad127af4be5918ef8a2ef2fea8fc,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8], 8), 0x2f960e117482044dfc99d12fece2ef6862fba9242be4846c7c9a3e854325a55c\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8], 8), EmbeddedCurvePoint {\n x: 0x1657737676968887fceb6dd516382ea13b3a2c557f509811cd86d5d1199bc443,\n y: 0x1f39f0cb569040105fa1e2f156521e8b8e08261e635a2b210bdc94e8d6d65f77,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9], 9), 0x0c96db0790602dcb166cc4699e2d306c479a76926b81c2cb2aaa92d249ec7be7\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9], 9), EmbeddedCurvePoint {\n x: 0x0a3ceae42d14914a432aa60ec7fded4af7dad7dd4acdbf2908452675ec67e06d,\n y: 0xfc19761eaaf621ad4aec9a8b2e84a4eceffdba78f60f8b9391b0bd9345a2f2,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 10), 0x2cd37505871bc460a62ea1e63c7fe51149df5d0801302cf1cbc48beb8dff7e94\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 10), EmbeddedCurvePoint {\n x: 0x2fb3f8b3d41ddde007c8c3c62550f9a9380ee546fcc639ffbb3fd30c8d8de30c,\n y: 0x300783be23c446b11a4c0fabf6c91af148937cea15fcf5fb054abf7f752ee245,\n is_infinite: false\n }\n );\n}\n\n"},"292":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/utils/reader.nr","source":"struct Reader<let N: u32> {\n data: [Field; N],\n offset: u32,\n}\n\nimpl<let N: u32> 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<let K: u32>(&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, let K: u32>(&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, let K: u32, let C: u32>(&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"},"3":{"path":"std/array/mod.nr","source":"use crate::cmp::{Eq, Ord};\nuse crate::convert::From;\nuse crate::runtime::is_unconstrained;\n\nmod check_shuffle;\nmod quicksort;\n\nimpl<T, let N: u32> [T; N] {\n /// Returns the length of the slice.\n #[builtin(array_len)]\n pub fn len(self) -> u32 {}\n\n #[builtin(as_slice)]\n pub fn as_slice(self) -> [T] {}\n\n // Apply a function to each element of an array, returning a new array\n // containing the mapped elements.\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> [U; N] {\n let first_elem = f(self[0]);\n let mut ret = [first_elem; N];\n\n for i in 1..self.len() {\n ret[i] = f(self[i]);\n }\n\n ret\n }\n\n // Apply a function to each element of the array and an accumulator value,\n // returning the final accumulated value. This function is also sometimes\n // called `foldl`, `fold_left`, `reduce`, or `inject`.\n pub fn fold<U, Env>(self, mut accumulator: U, f: fn[Env](U, T) -> U) -> U {\n for elem in self {\n accumulator = f(accumulator, elem);\n }\n accumulator\n }\n\n // Apply a function to each element of the array and an accumulator value,\n // returning the final accumulated value. Unlike fold, reduce uses the first\n // element of the given array as its starting accumulator value.\n pub fn reduce<Env>(self, f: fn[Env](T, T) -> T) -> T {\n let mut accumulator = self[0];\n for i in 1..self.len() {\n accumulator = f(accumulator, self[i]);\n }\n accumulator\n }\n\n // Returns true if all elements in the array satisfy the predicate\n pub fn all<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = true;\n for elem in self {\n ret &= predicate(elem);\n }\n ret\n }\n\n // Returns true if any element in the array satisfies the predicate\n pub fn any<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n for elem in self {\n ret |= predicate(elem);\n }\n ret\n }\n}\n\nimpl<T, let N: u32> [T; N] where T: Ord + Eq {\n pub fn sort(self) -> Self {\n self.sort_via(|a: T, b: T| a <= b)\n }\n}\n\nimpl<T, let N: u32> [T; N] where T: Eq {\n\n /// Sorts the array using a custom predicate function `ordering`.\n ///\n /// The `ordering` function must be designed to return `true` for equal valued inputs\n /// If this is not done, `sort_via` will fail to sort inputs with duplicated elements.\n pub fn sort_via<Env>(self, ordering: fn[Env](T, T) -> bool) -> Self {\n unsafe {\n // Safety: `sorted` array is checked to be:\n // a. a permutation of `input`'s elements\n // b. satisfying the predicate `ordering`\n let sorted = quicksort::quicksort(self, ordering);\n\n if !is_unconstrained() {\n for i in 0..N - 1 {\n assert(\n ordering(sorted[i], sorted[i + 1]), \"Array has not been sorted correctly according to `ordering`.\"\n );\n }\n check_shuffle::check_shuffle(self, sorted);\n }\n sorted\n }\n }\n}\n\nimpl<let N: u32> [u8; N] {\n /// Convert a sequence of bytes as-is into a string.\n /// This function performs no UTF-8 validation or similar.\n #[builtin(array_as_str_unchecked)]\n pub fn as_str_unchecked(self) -> str<N> {}\n}\n\nimpl<let N: u32> From<str<N>> for [u8; N] {\n fn from(s: str<N>) -> Self {\n s.as_bytes()\n }\n}\n"},"310":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/utils/field.nr","source":"pub fn field_from_bytes<let N: u32>(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: [u8; 31] = field.to_be_bytes();\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: [u8; 31] = field.to_be_bytes();\n\n for i in 0..31 {\n assert_eq(return_bytes2[i], return_bytes[i]);\n }\n assert_eq(field2, field);\n}\n\n#[test]\nunconstrained fn max_field_test() {\n // Tests the hardcoded value in constants.nr vs underlying modulus\n // NB: We can't use 0-1 in constants.nr as it will be transpiled incorrectly to ts and sol constants files\n let max_value = crate::constants::MAX_FIELD_VALUE;\n assert_eq(max_value, 0 - 1);\n // modulus == 0 is tested elsewhere, so below is more of a sanity check\n let max_bytes: [u8; 32] = max_value.to_be_bytes();\n let mod_bytes = std::field::modulus_be_bytes();\n for i in 0..31 {\n assert_eq(max_bytes[i], mod_bytes[i]);\n }\n assert_eq(max_bytes[31], mod_bytes[31] - 1);\n}\n"},"312":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/utils/mod.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, let N: u32, let M: u32>(src: [T; N], mut dst: [T; M], offset: u32) -> [T; M] {\n let iterator_len = if N > M { M } else { N };\n for i in 0..iterator_len {\n dst[i] = src[i + offset];\n }\n dst\n}\n"},"325":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/aztec_address.nr","source":"use crate::{\n crate::address::{partial_address::PartialAddress, public_keys_hash::PublicKeysHash},\n constants::{AZTEC_ADDRESS_LENGTH, GENERATOR_INDEX__CONTRACT_ADDRESS_V1},\n hash::poseidon2_hash_with_separator, traits::{Empty, FromField, ToField, Serialize, Deserialize},\n 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 { inner: 0 }\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_with_separator(\n [pub_keys_hash.to_field(), partial_address.to_field()],\n GENERATOR_INDEX__CONTRACT_ADDRESS_V1\n )\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 = 0x23ce9be3fa3c846b0f9245cc796902e731d04f086e8a42473bb29e405fc98075;\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"},"327":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/partial_address.nr","source":"use crate::{\n address::{salted_initialization_hash::SaltedInitializationHash, aztec_address::AztecAddress},\n constants::GENERATOR_INDEX__PARTIAL_ADDRESS, contract_class_id::ContractClassId,\n hash::poseidon2_hash_with_separator, traits::{ToField, 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 poseidon2_hash_with_separator(\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"},"328":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/salted_initialization_hash.nr","source":"use crate::{\n address::{aztec_address::AztecAddress}, constants::GENERATOR_INDEX__PARTIAL_ADDRESS,\n hash::poseidon2_hash_with_separator, 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 poseidon2_hash_with_separator(\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"},"34":{"path":"std/hash/poseidon2.nr","source":"use crate::hash::Hasher;\nuse crate::default::Default;\n\ncomptime global 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 #[no_predicates]\n pub fn hash<let N: u32>(input: [Field; N], message_size: u32) -> 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) {\n // add the cache into sponge state\n for i in 0..RATE {\n // We effectively zero-pad the cache by only adding to the state\n // cache that is less than the specified `cache_size`\n if i < self.cache_size {\n self.state[i] += self.cache[i];\n }\n }\n self.state = crate::hash::poseidon2_permutation(self.state, 4);\n }\n\n fn absorb(&mut self, input: Field) {\n assert(!self.squeeze_mode);\n if self.cache_size == RATE {\n // If we're absorbing, and the cache is full, apply the sponge permutation to compress the cache\n self.perform_duplex();\n self.cache[0] = input;\n self.cache_size = 1;\n } else {\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 }\n }\n\n fn squeeze(&mut self) -> Field {\n assert(!self.squeeze_mode);\n // If we're in absorb mode, apply sponge permutation to compress the cache.\n self.perform_duplex();\n self.squeeze_mode = true;\n\n // Pop one item off the top of the permutation and return it.\n self.state[0]\n }\n\n fn hash_internal<let N: u32>(input: [Field; N], in_len: u32, 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 { _state: &[] }\n }\n}\n"},"390":{"path":"/usr/src/noir-projects/noir-contracts/contracts/ecdsa_public_key_note/src/lib.nr","source":"use dep::aztec::prelude::{AztecAddress, FunctionSelector, NoteHeader, NoteInterface, NoteGetterOptions, PrivateContext};\n\nuse dep::aztec::{\n note::utils::compute_note_hash_for_nullify, keys::getters::get_nsk_app,\n protocol_types::{constants::GENERATOR_INDEX__NOTE_NULLIFIER, hash::poseidon2_hash_with_separator}\n};\n\nglobal ECDSA_PUBLIC_KEY_NOTE_LEN: Field = 5;\n// ECDSA_PUBLIC_KEY_NOTE_LEN * 32 + 32(storage_slot as bytes) + 32(note_type_id as bytes)\nglobal ECDSA_PUBLIC_KEY_NOTE_BYTES_LEN: Field = 5 * 32 + 64;\n\n// Stores an ECDSA public key composed of two 32-byte elements\n// TODO: Do we need to include a nonce, in case we want to read/nullify/recreate with the same pubkey value?\n#[aztec(note)]\nstruct EcdsaPublicKeyNote {\n x: [u8; 32],\n y: [u8; 32],\n // We store the npk_m_hash only to get the secret key to compute the nullifier\n npk_m_hash: Field,\n}\n\nimpl NoteInterface<ECDSA_PUBLIC_KEY_NOTE_LEN, ECDSA_PUBLIC_KEY_NOTE_BYTES_LEN> for EcdsaPublicKeyNote {\n // Cannot use the automatic serialization since x and y don't fit. Serialize the note as 5 fields where:\n // [0] = x[0..31] (upper bound excluded)\n // [1] = x[31]\n // [2] = y[0..31]\n // [3] = y[31]\n // [4] = npk_m_hash\n fn serialize_content(self) -> [Field; ECDSA_PUBLIC_KEY_NOTE_LEN] {\n let mut x: Field = 0;\n let mut y: Field = 0;\n let mut mul: Field = 1;\n\n for i in 1..32 {\n let byte_x: Field = self.x[31 - i] as Field;\n x = x + (byte_x * mul);\n let byte_y: Field = self.y[31 - i] as Field;\n y = y + (byte_y * mul);\n mul *= 256;\n }\n\n let last_x = self.x[31] as Field;\n let last_y = self.y[31] as Field;\n\n [x, last_x, y, last_y, self.npk_m_hash]\n }\n\n // Cannot use the automatic deserialization for the aforementioned reasons\n fn deserialize_content(serialized_note: [Field; ECDSA_PUBLIC_KEY_NOTE_LEN]) -> EcdsaPublicKeyNote {\n let mut x: [u8; 32] = [0; 32];\n let mut y: [u8; 32] = [0; 32];\n\n let part_x:[u8; 32] = serialized_note[0].to_be_bytes();\n for i in 0..31 {\n x[i] = part_x[i + 1];\n }\n x[31] = serialized_note[1].to_be_bytes::<32>()[31];\n\n let part_y:[u8; 32] = serialized_note[2].to_be_bytes();\n for i in 0..31 {\n y[i] = part_y[i + 1];\n }\n y[31] = serialized_note[3].to_be_bytes::<32>()[31];\n\n EcdsaPublicKeyNote { x, y, npk_m_hash: serialized_note[4], header: NoteHeader::empty() }\n }\n\n fn compute_nullifier(self, context: &mut PrivateContext, note_hash_for_nullify: Field) -> Field {\n let secret = context.request_nsk_app(self.npk_m_hash);\n poseidon2_hash_with_separator([\n note_hash_for_nullify,\n secret\n ],\n GENERATOR_INDEX__NOTE_NULLIFIER as Field,\n )\n }\n\n fn compute_nullifier_without_context(self) -> Field {\n let note_hash_for_nullify = compute_note_hash_for_nullify(self);\n let secret = get_nsk_app(self.npk_m_hash);\n poseidon2_hash_with_separator([\n note_hash_for_nullify,\n secret,\n ],\n GENERATOR_INDEX__NOTE_NULLIFIER as Field,\n )\n }\n}\n\nimpl EcdsaPublicKeyNote {\n pub fn new(x: [u8; 32], y: [u8; 32], npk_m_hash: Field) -> Self {\n EcdsaPublicKeyNote { x, y, npk_m_hash, header: NoteHeader::empty() }\n }\n}\n"},"391":{"path":"/usr/src/noir-projects/noir-contracts/contracts/ecdsa_r_account_contract/src/main.nr","source":"// Account contract that uses ECDSA signatures for authentication on random version of the p256 curve (to use with touchID).\ncontract EcdsaRAccount {\n use dep::aztec::prelude::{PrivateContext, PrivateImmutable};\n use dep::aztec::{\n encrypted_logs::encrypted_note_emission::encode_and_encrypt_note_with_keys,\n keys::getters::get_current_public_keys\n };\n\n use dep::authwit::{\n entrypoint::{app::AppPayload, fee::FeePayload}, account::AccountActions,\n auth_witness::get_auth_witness\n };\n\n use dep::ecdsa_public_key_note::EcdsaPublicKeyNote;\n\n #[aztec(storage)]\n struct Storage {\n public_key: PrivateImmutable<EcdsaPublicKeyNote>,\n }\n\n // Creates a new account out of an ECDSA public key to use for signature verification\n #[aztec(private)]\n #[aztec(initializer)]\n fn constructor(signing_pub_key_x: [u8; 32], signing_pub_key_y: [u8; 32]) {\n let this = context.this_address();\n let this_keys = get_current_public_keys(&mut context, this);\n // Not emitting outgoing for msg_sender here to not have to register keys for the contract through which we\n // deploy this (typically MultiCallEntrypoint). I think it's ok here as I feel the outgoing here is not that\n // important.\n\n let mut pub_key_note = EcdsaPublicKeyNote::new(signing_pub_key_x, signing_pub_key_y, this_keys.npk_m.hash());\n storage.public_key.initialize(&mut pub_key_note).emit(encode_and_encrypt_note_with_keys(&mut context, this_keys.ovpk_m, this_keys.ivpk_m, this));\n }\n\n // Note: If you globally change the entrypoint signature don't forget to update account_entrypoint.ts\n #[aztec(private)]\n fn entrypoint(app_payload: AppPayload, fee_payload: FeePayload, cancellable: bool) {\n let actions = AccountActions::init(&mut context, is_valid_impl);\n actions.entrypoint(app_payload, fee_payload, cancellable);\n }\n\n #[aztec(private)]\n #[aztec(noinitcheck)]\n #[aztec(view)]\n fn verify_private_authwit(inner_hash: Field) -> Field {\n let actions = AccountActions::init(&mut context, is_valid_impl);\n actions.verify_private_authwit(inner_hash)\n }\n\n #[contract_library_method]\n fn is_valid_impl(context: &mut PrivateContext, outer_hash: Field) -> bool {\n // Load public key from storage\n let storage = Storage::init(context);\n let public_key = storage.public_key.get_note();\n\n // Load auth witness\n let witness: [Field; 64] = unsafe {\n get_auth_witness(outer_hash)\n };\n let mut signature: [u8; 64] = [0; 64];\n for i in 0..64 {\n signature[i] = witness[i] as u8;\n }\n\n // Verify payload signature using Ethereum's signing scheme\n // Note that noir expects the hash of the message/challenge as input to the ECDSA verification.\n let outer_hash_bytes: [u8; 32] = outer_hash.to_be_bytes();\n let hashed_message: [u8; 32] = std::hash::sha256(outer_hash_bytes);\n std::ecdsa_secp256r1::verify_signature(public_key.x, public_key.y, signature, hashed_message)\n }\n}\n"},"57":{"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::mem::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<let N: u32, 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<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 if other._is_some {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n}\n"},"7":{"path":"std/collections/bounded_vec.nr","source":"use crate::{cmp::Eq, convert::From};\n\n/// A `BoundedVec<T, MaxLen>` is a growable storage similar to a `Vec<T>` except that it\n/// is bounded with a maximum possible length. Unlike `Vec`, `BoundedVec` is not implemented\n/// via slices and thus is not subject to the same restrictions slices are (notably, nested\n/// slices - and thus nested vectors as well - are disallowed).\n/// \n/// Since a BoundedVec is backed by a normal array under the hood, growing the BoundedVec by\n/// pushing an additional element is also more efficient - the length only needs to be increased\n/// by one.\n/// \n/// For these reasons `BoundedVec<T, N>` should generally be preferred over `Vec<T>` when there\n/// is a reasonable maximum bound that can be placed on the vector.\n/// \n/// Example:\n/// \n/// ```noir\n/// let mut vector: BoundedVec<Field, 10> = BoundedVec::new();\n/// for i in 0..5 {\n/// vector.push(i);\n/// }\n/// assert(vector.len() == 5);\n/// assert(vector.max_len() == 10);\n/// ```\nstruct BoundedVec<T, let MaxLen: u32> {\n storage: [T; MaxLen],\n len: u32,\n}\n\nimpl<T, let MaxLen: u32> BoundedVec<T, MaxLen> {\n /// Creates a new, empty vector of length zero.\n ///\n /// Since this container is backed by an array internally, it still needs an initial value\n /// to give each element. To resolve this, each element is zeroed internally. This value\n /// is guaranteed to be inaccessible unless `get_unchecked` is used.\n ///\n /// Example:\n ///\n /// ```noir\n /// let empty_vector: BoundedVec<Field, 10> = BoundedVec::new();\n /// assert(empty_vector.len() == 0);\n /// ```\n ///\n /// Note that whenever calling `new` the maximum length of the vector should always be specified\n /// via a type signature:\n ///\n /// ```noir\n /// fn good() -> BoundedVec<Field, 10> {\n /// // Ok! MaxLen is specified with a type annotation\n /// let v1: BoundedVec<Field, 3> = BoundedVec::new();\n /// let v2 = BoundedVec::new();\n ///\n /// // Ok! MaxLen is known from the type of `good`'s return value\n /// v2\n /// }\n ///\n /// fn bad() {\n /// // Error: Type annotation needed\n /// // The compiller can't infer `MaxLen` from the following code:\n /// let mut v3 = BoundedVec::new();\n /// v3.push(5);\n /// }\n /// ```\n ///\n /// This defaulting of `MaxLen` (and numeric generics in general) to zero may change in future noir versions\n /// but for now make sure to use type annotations when using bounded vectors. Otherwise, you will receive a \n /// constraint failure at runtime when the vec is pushed to.\n pub fn new() -> Self {\n let zeroed = crate::mem::zeroed();\n BoundedVec { storage: [zeroed; MaxLen], len: 0 }\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero.\n /// \n /// If the given index is equal to or greater than the length of the vector, this\n /// will issue a constraint failure.\n /// \n /// Example:\n /// \n /// ```noir\n /// fn foo<let N: u32>(v: BoundedVec<u32, N>) {\n /// let first = v.get(0);\n /// let last = v.get(v.len() - 1);\n /// assert(first != last);\n /// }\n /// ```\n pub fn get(self, index: u32) -> T {\n assert(index < self.len, \"Attempted to read past end of BoundedVec\");\n self.get_unchecked(index)\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero, without\n /// performing a bounds check.\n /// \n /// Since this function does not perform a bounds check on length before accessing the element,\n /// it is unsafe! Use at your own risk!\n /// \n /// Example:\n /// \n /// ```noir\n /// fn sum_of_first_three<let N: u32>(v: BoundedVec<u32, N>) -> u32 {\n /// // Always ensure the length is larger than the largest\n /// // index passed to get_unchecked\n /// assert(v.len() > 2);\n /// let first = v.get_unchecked(0);\n /// let second = v.get_unchecked(1);\n /// let third = v.get_unchecked(2);\n /// first + second + third\n /// }\n /// ```\n pub fn get_unchecked(self, index: u32) -> T {\n self.storage[index]\n }\n\n /// Writes an element to the vector at the given index, starting from zero.\n /// \n /// If the given index is equal to or greater than the length of the vector, this will issue a constraint failure.\n /// \n /// Example:\n /// \n /// ```noir\n /// fn foo<let N: u32>(v: BoundedVec<u32, N>) {\n /// let first = v.get(0);\n /// assert(first != 42);\n /// v.set(0, 42);\n /// let new_first = v.get(0);\n /// assert(new_first == 42);\n /// }\n /// ```\n pub fn set(&mut self, index: u32, value: T) {\n assert(index < self.len, \"Attempted to write past end of BoundedVec\");\n self.set_unchecked(index, value)\n }\n\n /// Writes an element to the vector at the given index, starting from zero, without performing a bounds check.\n /// \n /// Since this function does not perform a bounds check on length before accessing the element, it is unsafe! Use at your own risk!\n /// \n /// Example:\n /// \n /// ```noir\n /// fn set_unchecked_example() {\n /// let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n /// vec.extend_from_array([1, 2]);\n /// \n /// // Here we're safely writing within the valid range of `vec`\n /// // `vec` now has the value [42, 2]\n /// vec.set_unchecked(0, 42);\n /// \n /// // We can then safely read this value back out of `vec`.\n /// // Notice that we use the checked version of `get` which would prevent reading unsafe values.\n /// assert_eq(vec.get(0), 42);\n /// \n /// // We've now written past the end of `vec`.\n /// // As this index is still within the maximum potential length of `v`,\n /// // it won't cause a constraint failure. \n /// vec.set_unchecked(2, 42);\n /// println(vec);\n /// \n /// // This will write past the end of the maximum potential length of `vec`,\n /// // it will then trigger a constraint failure.\n /// vec.set_unchecked(5, 42);\n /// println(vec);\n /// }\n /// ```\n pub fn set_unchecked(&mut self, index: u32, value: T) {\n self.storage[index] = value;\n }\n\n /// Pushes an element to the end of the vector. This increases the length\n /// of the vector by one.\n /// \n /// Panics if the new length of the vector will be greater than the max length.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 2> = BoundedVec::new();\n /// \n /// v.push(1);\n /// v.push(2);\n /// \n /// // Panics with failed assertion \"push out of bounds\"\n /// v.push(3);\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 /// Returns the current length of this vector\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 4> = BoundedVec::new();\n /// assert(v.len() == 0);\n /// \n /// v.push(100);\n /// assert(v.len() == 1);\n /// \n /// v.push(200);\n /// v.push(300);\n /// v.push(400);\n /// assert(v.len() == 4);\n /// \n /// let _ = v.pop();\n /// let _ = v.pop();\n /// assert(v.len() == 2);\n /// ```\n pub fn len(self) -> u32 {\n self.len\n }\n\n /// Returns the maximum length of this vector. This is always\n /// equal to the `MaxLen` parameter this vector was initialized with.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 5> = BoundedVec::new();\n /// \n /// assert(v.max_len() == 5);\n /// v.push(10);\n /// assert(v.max_len() == 5);\n /// ```\n pub fn max_len(_self: BoundedVec<T, MaxLen>) -> u32 {\n MaxLen\n }\n\n /// Returns the internal array within this vector.\n /// \n /// Since arrays in Noir are immutable, mutating the returned storage array will not mutate\n /// the storage held internally by this vector.\n /// \n /// Note that uninitialized elements may be zeroed out!\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 5> = BoundedVec::new();\n /// \n /// assert(v.storage() == [0, 0, 0, 0, 0]);\n /// \n /// v.push(57);\n /// assert(v.storage() == [57, 0, 0, 0, 0]);\n /// ```\n pub fn storage(self) -> [T; MaxLen] {\n self.storage\n }\n\n /// Pushes each element from the given array to this vector.\n /// \n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut vec: BoundedVec<Field, 3> = BoundedVec::new();\n /// vec.extend_from_array([2, 4]);\n /// \n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_array<let Len: u32>(&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 /// Pushes each element from the given slice to this vector.\n /// \n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut vec: BoundedVec<Field, 3> = BoundedVec::new();\n /// vec.extend_from_slice(&[2, 4]);\n /// \n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\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 /// Pushes each element from the other vector to this vector. The length of\n /// the other vector is left unchanged.\n /// \n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n /// \n /// ```noir\n /// let mut v1: BoundedVec<Field, 5> = BoundedVec::new();\n /// let mut v2: BoundedVec<Field, 7> = BoundedVec::new();\n /// \n /// v2.extend_from_array([1, 2, 3]);\n /// v1.extend_from_bounded_vec(v2);\n /// \n /// assert(v1.storage() == [1, 2, 3, 0, 0]);\n /// assert(v2.storage() == [1, 2, 3, 0, 0, 0, 0]);\n /// ```\n pub fn extend_from_bounded_vec<let Len: u32>(&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 /// Creates a new vector, populating it with values derived from an array input. \n /// The maximum length of the vector is determined based on the type signature.\n /// \n /// Example:\n /// \n /// ```noir\n /// let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from_array([1, 2, 3])\n /// ```\n pub fn from_array<let Len: u32>(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 /// Pops the element at the end of the vector. This will decrease the length\n /// of the vector by one.\n /// \n /// Panics if the vector is empty.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 2> = BoundedVec::new();\n /// v.push(1);\n /// v.push(2);\n /// \n /// let two = v.pop();\n /// let one = v.pop();\n /// \n /// assert(two == 2);\n /// assert(one == 1);\n ///\n /// // error: cannot pop from an empty vector\n /// let _ = v.pop();\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::mem::zeroed();\n elem\n }\n\n /// Returns true if the given predicate returns true for any element\n /// in this vector.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<u32, 3> = BoundedVec::new();\n /// v.extend_from_array([2, 4, 6]);\n /// \n /// let all_even = !v.any(|elem: u32| elem % 2 != 0);\n /// assert(all_even);\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 /// Creates a new vector of equal size by calling a closure on each element in this vector. \n /// \n /// Example:\n /// \n /// ```noir\n /// let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n /// let result = vec.map(|value| value * 2);\n /// \n /// let expected = BoundedVec::from_array([2, 4, 6, 8]);\n /// assert_eq(result, expected);\n /// ```\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> BoundedVec<U, MaxLen> {\n let mut ret = BoundedVec::new();\n ret.len = self.len();\n for i in 0..MaxLen {\n if i < self.len() {\n ret.storage[i] = f(self.get_unchecked(i));\n }\n }\n ret\n }\n}\n\nimpl<T, let MaxLen: u32> 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, let MaxLen: u32, let Len: u32> 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\n mod get {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test(should_fail_with = \"Attempted to read past end of BoundedVec\")]\n fn panics_when_reading_elements_past_end_of_vec() {\n let vec: BoundedVec<Field, 5> = BoundedVec::new();\n\n crate::println(vec.get(0));\n }\n }\n\n mod set {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn set_updates_values_properly() {\n let mut vec = BoundedVec::from_array([0, 0, 0, 0, 0]);\n\n vec.set(0, 42);\n assert_eq(vec.storage, [42, 0, 0, 0, 0]);\n\n vec.set(1, 43);\n assert_eq(vec.storage, [42, 43, 0, 0, 0]);\n\n vec.set(2, 44);\n assert_eq(vec.storage, [42, 43, 44, 0, 0]);\n\n vec.set(1, 10);\n assert_eq(vec.storage, [42, 10, 44, 0, 0]);\n\n vec.set(0, 0);\n assert_eq(vec.storage, [0, 10, 44, 0, 0]);\n }\n\n #[test(should_fail_with = \"Attempted to write past end of BoundedVec\")]\n fn panics_when_writing_elements_past_end_of_vec() {\n let mut vec: BoundedVec<Field, 5> = BoundedVec::new();\n vec.set(0, 42);\n\n // Need to use println to avoid DIE removing the write operation.\n crate::println(vec.get(0));\n }\n }\n\n mod map {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn applies_function_correctly() {\n // docs:start:bounded-vec-map-example\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| value * 2);\n // docs:end:bounded-vec-map-example\n let expected = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| (value * 2) as Field);\n let expected: BoundedVec<Field, 4> = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([0, 1]);\n let result = vec.map(|value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.storage()[2], 0);\n }\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 mod trait_eq {\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}\n"},"72":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/auth_witness.nr","source":"#[oracle(getAuthWitness)]\nunconstrained fn get_auth_witness_oracle<let N: u32>(_message_hash: Field) -> [Field; N] {}\n\n/**\n * Oracle wrapper to fetch an `auth_witness` for a given `message_hash` from the PXE.\n * \n * @param message_hash The hash of the message for which the `auth_witness` is to be fetched.\n * @return The `auth_witness` for the given `message_hash` as Field array.\n */\nunconstrained pub fn get_auth_witness<let N: u32>(message_hash: Field) -> [Field; N] {\n get_auth_witness_oracle(message_hash)\n}\n"},"73":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/auth.nr","source":"use dep::aztec::protocol_types::{\n abis::function_selector::FunctionSelector, address::AztecAddress,\n constants::{\n GENERATOR_INDEX__AUTHWIT_INNER, GENERATOR_INDEX__AUTHWIT_OUTER, GENERATOR_INDEX__AUTHWIT_NULLIFIER,\n CANONICAL_AUTH_REGISTRY_ADDRESS\n},\n hash::poseidon2_hash_with_separator\n};\nuse dep::aztec::{prelude::Deserialize, context::{PrivateContext, PublicContext, gas::GasOpts}, hash::hash_args_array};\n\n/**\n * Authenticaion witness helper library\n *\n * Authentication Witness is a scheme for authenticating actions on Aztec, so users can allow third-parties\n * (e.g. protocols or other users) to execute an action on their behalf.\n *\n * This library provides helper functions to manage such witnesses.\n * The authentication witness, is some \"witness\" (data) that authenticates a `message_hash`.\n * The simplest example of an authentication witness, is a signature. The signature is the \"evidence\",\n * that the signer has seen the message, agrees with it, and has allowed it.\n * It does not need to be a signature. It could be any kind of \"proof\" that the message is allowed.\n * Another proof could be knowing some kind of secret, or having some kind of \"token\" that allows the message.\n *\n * The `message_hash` is a hash of the following structure:\n * hash(consumer, chain_id, version, inner_hash)\n * - consumer: the address of the contract that is \"consuming\" the message,\n * - chain_id: the chain id of the chain that the message is being consumed on,\n * - version: the version of the chain that the message is being consumed on,\n * - inner_hash: the hash of the \"inner\" message that is being consumed, this is the \"actual\" message or action.\n *\n * While the `inner_hash` could be anything, such as showing you signed a specific message, it will often be\n * a hash of the \"action\" to approve, along with who made the call. As part of this library, we provide a few\n * helper functions to deal with such messages.\n *\n * For example, we provide helper function that is used for checking that the message is an encoding of the current call.\n * This can be used to let some contract \"allow\" another contract to act on its behalf, as long as it can\n * show that it is acting on behalf of the contract.\n *\n * If we take a case of allowing a contract to transfer tokens on behalf of an account, the `inner_hash` can be\n * derived as:\n * inner_hash = hash(caller, \"transfer\", hash(to, amount))\n *\n * Where the `caller` would be the address of the contract that is trying to transfer the tokens, and `to` and `amount`\n * the arguments for the transfer.\n *\n * Note that we have both a `caller` and a `consumer`, the `consumer` will be the contract that is consuming the message,\n * in the case of the transfer, it would be the `Token` contract itself, while the caller, will be the actor that is\n * allowed to transfer the tokens.\n *\n *\n * The authentication mechanism works differently in public and private contexts. In private, we recall that everything\n * is executed on the user's device, so we can use `oracles` to \"ask\" the user (not contract) for information. In public\n * we cannot do this, since it is executed by the sequencer (someone else). Therefore we can instead use a \"registry\"\n * to store the messages that we have approved.\n *\n * A simple example would be a \"token\" that is being \"pulled\" from one account into another. We will first outline\n * how this would look in private, and then in public later.\n *\n * Say that a user `Alice` wants to deposit some tokens into a DeFi protocol (say a DEX).\n * `Alice` would make a `deposit` transaction, that she is executing using her account contract.\n * The account would call the `DeFi` contract to execute `deposit`, which would try to pull funds from the `Token`\n * contract. Since the `DeFi` contract is trying to pull funds from an account that is not its own, it needs to\n * convince the `Token` contract that it is allowed to do so.\n *\n * This is where the authentication witness comes in The `Token` contract computes a `message_hash` from the\n * `transfer` call, and then asks `Alice Account` contract to verify that the `DeFi` contract is allowed to\n * execute that call.\n *\n * `Alice Account` contract can then ask `Alice` if she wants to allow the `DeFi` contract to pull funds from her\n * account. If she does, she will sign the `message_hash` and return the signature to the `Alice Account` which\n * will validate it and return success to the `Token` contract which will then allow the `DeFi` contract to pull\n * funds from `Alice`.\n *\n * To ensure that the same \"approval\" cannot be used multiple times, we also compute a `nullifier` for the\n * authentication witness, and emit it from the `Token` contract (consumer).\n *\n * Note that we can do this flow as we are in private were we can do oracle calls out from contracts.\n *\n *\n * Person Contract Contract Contract\n * Alice Alice Account Token DeFi\n * | | | |\n * | Defi.deposit(Token, 1000) | |\n * |----------------->| | |\n * | | deposit(Token, 1000) |\n * | |---------------------------------------->|\n * | | | |\n * | | | transfer(Alice, Defi, 1000)\n * | | |<---------------------|\n * | | | |\n * | | Check if Defi may call transfer(Alice, Defi, 1000)\n * | |<-----------------| |\n * | | | |\n * | Please give me AuthWit for DeFi | |\n * | calling transfer(Alice, Defi, 1000) | |\n * |<-----------------| | |\n * | | | |\n * | | | |\n * | AuthWit for transfer(Alice, Defi, 1000) |\n * |----------------->| | |\n * | | AuthWit validity | |\n * | |----------------->| |\n * | | | |\n * | | throw if invalid AuthWit |\n * | | | |\n * | | emit AuthWit nullifier |\n * | | | |\n * | | transfer(Alice, Defi, 1000) |\n * | | | |\n * | | | |\n * | | | success |\n * | | |--------------------->|\n * | | | |\n * | | | |\n * | | | deposit(Token, 1000)\n * | | | |\n * | | | |\n *\n *\n * If we instead were in public, we cannot do the same flow. Instead we would use an authentication registry to store\n * the messages that we have approved.\n *\n * To approve a message, `Alice Account` can make a `set_authorized` call to the registry, to set a `message_hash`\n * as authorized. This is essentially a mapping from `message_hash` to `true` for `Alice Contract`. Every account\n * has its own map in the registry, so `Alice` cannot approve a message for `Bob`.\n *\n * The `Token` contract can then try to \"spend\" the approval by calling `consume` on the registry. If the message\n * was approved, the value is updated to `false`, and we return the success flag. For more information on the\n * registry, see `main.nr` in `auth_registry_contract`.\n *\n * Person Contract Contract Contract Contract\n * Alice Alice Account Registry Token DeFi\n * | | | | |\n * | Registry.set_authorized(..., true) | | |\n * |----------------->| | | |\n * | | set_authorized(..., true) | |\n * | |------------------->| | |\n * | | | | |\n * | | set authorized to true | |\n * | | | | |\n * | | | | |\n * | Defi.deposit(Token, 1000) | | |\n * |----------------->| | | |\n * | | deposit(Token, 1000) | |\n * | |-------------------------------------------------------------->|\n * | | | | |\n * | | | transfer(Alice, Defi, 1000) |\n * | | | |<---------------------|\n * | | | | |\n * | | | Check if Defi may call transfer(Alice, Defi, 1000)\n * | | |<------------------| |\n * | | | | |\n * | | throw if invalid AuthWit | |\n * | | | | |\n * | | | | |\n * | | set authorized to false | |\n * | | | | |\n * | | | | |\n * | | | AuthWit validity | |\n * | | |------------------>| |\n * | | | | |\n * | | | | transfer(Alice, Defi, 1000)\n * | | | |<-------------------->|\n * | | | | |\n * | | | | success |\n * | | | |--------------------->|\n * | | | | |\n * | | | | deposit(Token, 1000)\n * | | | | |\n *\n *\n * --- FAQ ---\n * Q: Why are we using a success flag of `keccak256(\"IS_VALID()\")` instead of just returning a boolean?\n * A: We want to make sure that we don't accidentally return `true` if there is a collision in the function selector.\n * By returning a hash of `IS_VALID()`, it becomes very unlikely that there is both a collision and we return\n * a success flag.\n *\n * Q: Why are we using static calls?\n * A: We are using static calls to ensure that the account contract cannot re-enter. If it was a normal call, it\n * could make a new call and do a re-entry attack. Using a static ensures that it cannot update any state.\n *\n * Q: Would it not be cheaper to use a nullifier instead of updating state in public?\n * A: At a quick glance, a public state update + nullifier is 96 bytes, but two state updates are 128, so it would be\n * cheaper to use a nullifier, if this is the way it would always be done. However, if both the approval and the\n * consumption is done in the same transaction, then we will be able to squash the updates (only final tx state diff is posted to DA), and now it is cheaper.\n *\n * Q: Why is the chain id and the version part of the message hash?\n * A: The chain id and the version is part of the message hash to ensure that the message is only valid on a specific\n * chain to avoid a case where the same message could be used across multiple chains.\n */\n\nglobal IS_VALID_SELECTOR = 0xabf64ad4; // 4 first bytes of keccak256(\"IS_VALID()\")\n\n/**\n * Assert that `on_behalf_of` have authorized the current call with a valid authentication witness\n *\n * Computing the `inner_hash` using the `msg_sender`, `selector` and `args_hash` and then making a call out to the\n * `on_behalf_of` contract to verify that the `inner_hash` is valid.\n *\n * @param on_behalf_of The address that have authorized the current call\n */\n// docs:start:assert_current_call_valid_authwit\npub fn assert_current_call_valid_authwit(context: &mut PrivateContext, on_behalf_of: AztecAddress) {\n let inner_hash = compute_inner_authwit_hash([context.msg_sender().to_field(), context.selector().to_field(), context.args_hash]);\n assert_inner_hash_valid_authwit(context, on_behalf_of, inner_hash);\n}\n// docs:end:assert_current_call_valid_authwit\n\n/**\n * Assert that a specific `inner_hash` is valid for the `on_behalf_of` address\n *\n * Used as an internal function for `assert_current_call_valid_authwit` and can be used as a standalone function when\n * the `inner_hash` is from a different source, e.g., say a block of text etc.\n *\n * @param on_behalf_of The address that have authorized the current call\n * @param inner_hash The hash of the message to authorize\n */\npub fn assert_inner_hash_valid_authwit(\n context: &mut PrivateContext,\n on_behalf_of: AztecAddress,\n inner_hash: Field\n) {\n // We perform a static call here and not a standard one to ensure that the account contract cannot re-enter.\n let result: Field = context.static_call_private_function(\n on_behalf_of,\n comptime {\n FunctionSelector::from_signature(\"verify_private_authwit(Field)\")\n },\n [inner_hash]\n ).unpack_into();\n assert(result == IS_VALID_SELECTOR, \"Message not authorized by account\");\n // Compute the nullifier, similar computation to the outer hash, but without the chain_id and version.\n // Those should already be handled in the verification, so we just need something to nullify, that allow same inner_hash for multiple actors.\n let nullifier = compute_authwit_nullifier(on_behalf_of, inner_hash);\n context.push_nullifier(nullifier);\n}\n\n/**\n * Assert that `on_behalf_of` have authorized the current call in the authentication registry\n *\n * Computing the `inner_hash` using the `msg_sender`, `selector` and `args_hash` and then making a call out to the\n * `on_behalf_of` contract to verify that the `inner_hash` is valid.\n *\n * Note that the authentication registry will take the `msg_sender` into account as the consumer, so this will only\n * work if the `msg_sender` is the same as the `consumer` when the `message_hash` was inserted into the registry.\n *\n * @param on_behalf_of The address that have authorized the current call\n */\n// docs:start:assert_current_call_valid_authwit_public\npub fn assert_current_call_valid_authwit_public(context: &mut PublicContext, on_behalf_of: AztecAddress) {\n let inner_hash = compute_inner_authwit_hash(\n [(*context).msg_sender().to_field(), (*context).selector().to_field(), (*context).get_args_hash()]\n );\n assert_inner_hash_valid_authwit_public(context, on_behalf_of, inner_hash);\n}\n// docs:end:assert_current_call_valid_authwit_public\n\n/**\n * Assert that `on_behalf_of` have authorized a speicifc `inner_hash` in the authentication registry\n *\n * Computing the `inner_hash` using the `msg_sender`, `selector` and `args_hash` and then making a call out to the\n * `on_behalf_of` contract to verify that the `inner_hash` is valid.\n *\n * Note that the authentication registry will take the `msg_sender` into account as the consumer, so this will only\n * work if the `msg_sender` is the same as the `consumer` when the `message_hash` was inserted into the registry.\n *\n * @param on_behalf_of The address that have authorized the `inner_hash`\n */\npub fn assert_inner_hash_valid_authwit_public(\n context: &mut PublicContext,\n on_behalf_of: AztecAddress,\n inner_hash: Field\n) {\n let result: Field = context.call_public_function(\n CANONICAL_AUTH_REGISTRY_ADDRESS,\n comptime {\n FunctionSelector::from_signature(\"consume((Field),Field)\")\n },\n [on_behalf_of.to_field(), inner_hash].as_slice(),\n GasOpts::default()\n ).deserialize_into();\n assert(result == IS_VALID_SELECTOR, \"Message not authorized by account\");\n}\n\n/**\n * Compute the `message_hash` from a function call to be used by an authentication witness\n *\n * Useful for when you need a non-account contract to approve during execution. For example if you need a contract\n * to make a call to nested contract, e.g., contract A wants to exit token T to L1 using bridge B, so it needs to allow\n * B to transfer T on its behalf.\n *\n * @param caller The address of the contract that is calling the function, in the example above, this would be B\n * @param consumer The address of the contract that is consuming the message, in the example above, this would be T\n * @param chain_id The chain id of the chain that the message is being consumed on\n * @param version The version of the chain that the message is being consumed on\n * @param selector The function selector of the function that is being called\n * @param args The arguments of the function that is being called\n */\n// docs:start:compute_authwit_message_hash_from_call\npub fn compute_authwit_message_hash_from_call<let N: u32>(\n caller: AztecAddress,\n consumer: AztecAddress,\n chain_id: Field,\n version: Field,\n selector: FunctionSelector,\n args: [Field; N]\n) -> Field {\n let args_hash = hash_args_array(args);\n let inner_hash = compute_inner_authwit_hash([caller.to_field(), selector.to_field(), args_hash]);\n compute_authwit_message_hash(consumer, chain_id, version, inner_hash)\n}\n// docs:end:compute_authwit_message_hash_from_call\n\n/**\n * Computes the `inner_hash` of the authentication witness\n *\n * This is used internally, but also useful in cases where you want to compute the `inner_hash` for a specific message\n * that is not necessarily a call, but just some \"bytes\" or text.\n *\n * @param args The arguments to hash\n */\npub fn compute_inner_authwit_hash<let N: u32>(args: [Field; N]) -> Field {\n poseidon2_hash_with_separator(args, GENERATOR_INDEX__AUTHWIT_INNER)\n}\n\n/**\n * Computs the `authwit_nullifier` for a specific `on_behalf_of` and `inner_hash`\n *\n * Using the `on_behalf_of` and the `inner_hash` to ensure that the nullifier is siloed for a specific `on_behalf_of`.\n *\n * @param on_behalf_of The address that have authorized the `inner_hash`\n * @param inner_hash The hash of the message to authorize\n */\npub fn compute_authwit_nullifier(on_behalf_of: AztecAddress, inner_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [on_behalf_of.to_field(), inner_hash],\n GENERATOR_INDEX__AUTHWIT_NULLIFIER\n )\n}\n\n/**\n * Computes the `message_hash` for the authentication witness\n *\n * @param consumer The address of the contract that is consuming the message\n * @param chain_id The chain id of the chain that the message is being consumed on\n * @param version The version of the chain that the message is being consumed on\n * @param inner_hash The hash of the \"inner\" message that is being consumed\n */\npub fn compute_authwit_message_hash(\n consumer: AztecAddress,\n chain_id: Field,\n version: Field,\n inner_hash: Field\n) -> Field {\n poseidon2_hash_with_separator(\n [\n consumer.to_field(),\n chain_id,\n version,\n inner_hash\n ],\n GENERATOR_INDEX__AUTHWIT_OUTER\n )\n}\n\n/**\n * Helper function to set the authorization status of a message hash\n *\n * Wraps a public call to the authentication registry to set the authorization status of a `message_hash`\n *\n * @param message_hash The hash of the message to authorize\n * @param authorize True if the message should be authorized, false if it should be revoked\n */\npub fn set_authorized(context: &mut PublicContext, message_hash: Field, authorize: bool) {\n context.call_public_function(\n CANONICAL_AUTH_REGISTRY_ADDRESS,\n comptime {\n FunctionSelector::from_signature(\"set_authorized(Field,bool)\")\n },\n [message_hash, authorize as Field].as_slice(),\n GasOpts::default()\n ).assert_empty();\n}\n\n/**\n * Helper function to reject all authwits\n *\n * Wraps a public call to the authentication registry to set the `reject_all` flag\n *\n * @param reject True if all authwits should be rejected, false otherwise\n */\npub fn set_reject_all(context: &mut PublicContext, reject: bool) {\n context.call_public_function(\n CANONICAL_AUTH_REGISTRY_ADDRESS,\n comptime {\n FunctionSelector::from_signature(\"set_reject_all(bool)\")\n },\n [context.this_address().to_field(), reject as Field].as_slice(),\n GasOpts::default()\n ).assert_empty();\n}\n"},"74":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/account.nr","source":"use dep::aztec::{\n context::PrivateContext,\n protocol_types::constants::{GENERATOR_INDEX__COMBINED_PAYLOAD, GENERATOR_INDEX__TX_NULLIFIER},\n hash::poseidon2_hash_with_separator\n};\n\nuse crate::entrypoint::{app::AppPayload, fee::FeePayload};\nuse crate::auth::{IS_VALID_SELECTOR, compute_authwit_message_hash};\n\nstruct AccountActions<Context> {\n context: Context,\n is_valid_impl: fn(&mut PrivateContext, Field) -> bool,\n}\n\nimpl<Context> AccountActions<Context> {\n pub fn init(context: Context, is_valid_impl: fn(&mut PrivateContext, Field) -> bool) -> Self {\n AccountActions { context, is_valid_impl }\n }\n}\n\n/**\n * An implementation of the Account Action struct for the private context.\n *\n * Implements logic to verify authorization and execute payloads.\n */\nimpl AccountActions<&mut PrivateContext> {\n\n /**\n * Verifies that the `app_hash` and `fee_hash` are authorized and then executes them.\n *\n * Executes the `fee_payload` and `app_payload` in sequence.\n * Will execute the `fee_payload` as part of the setup, and then enter the app phase.\n *\n * @param app_payload The payload that contains the calls to be executed in the app phase.\n * @param fee_payload The payload that contains the calls to be executed in the setup phase.\n */\n // docs:start:entrypoint\n pub fn entrypoint(self, app_payload: AppPayload, fee_payload: FeePayload, cancellable: bool) {\n let valid_fn = self.is_valid_impl;\n\n let combined_payload_hash = poseidon2_hash_with_separator(\n [app_payload.hash(), fee_payload.hash()],\n GENERATOR_INDEX__COMBINED_PAYLOAD\n );\n assert(valid_fn(self.context, combined_payload_hash));\n\n fee_payload.execute_calls(self.context);\n self.context.end_setup();\n app_payload.execute_calls(self.context);\n if cancellable {\n let tx_nullifier = poseidon2_hash_with_separator([app_payload.nonce], GENERATOR_INDEX__TX_NULLIFIER);\n self.context.push_nullifier(tx_nullifier);\n }\n }\n // docs:end:entrypoint\n\n /**\n * Verifies that the `msg_sender` is authorized to consume `inner_hash` by the account.\n *\n * Computes the `message_hash` using the `msg_sender`, `chain_id`, `version` and `inner_hash`.\n * Then executes the `is_valid_impl` function to verify that the message is authorized.\n *\n * Will revert if the message is not authorized.\n *\n * @param inner_hash The hash of the message that the `msg_sender` is trying to consume.\n */\n // docs:start:verify_private_authwit\n pub fn verify_private_authwit(self, inner_hash: Field) -> Field {\n // The `inner_hash` is \"siloed\" with the `msg_sender` to ensure that only it can\n // consume the message.\n // This ensures that contracts cannot consume messages that are not intended for them.\n let message_hash = compute_authwit_message_hash(\n self.context.msg_sender(),\n self.context.chain_id(),\n self.context.version(),\n inner_hash\n );\n let valid_fn = self.is_valid_impl;\n assert(valid_fn(self.context, message_hash) == true, \"Message not authorized by account\");\n IS_VALID_SELECTOR\n }\n // docs:end:verify_private_authwit\n}\n"},"75":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/entrypoint/app.nr","source":"use dep::aztec::prelude::PrivateContext;\nuse dep::aztec::protocol_types::{\n constants::GENERATOR_INDEX__SIGNATURE_PAYLOAD, hash::poseidon2_hash_with_separator,\n traits::{Hash, Serialize}\n};\n\nuse crate::entrypoint::function_call::{FunctionCall, FUNCTION_CALL_SIZE_IN_BYTES};\n\n// FUNCTION_CALL_SIZE * ACCOUNT_MAX_CALLS + 1\nglobal APP_PAYLOAD_SIZE: u64 = 21;\n// FUNCTION_CALL_SIZE_IN_BYTES * ACCOUNT_MAX_CALLS + 32\nglobal APP_PAYLOAD_SIZE_IN_BYTES: u64 = 424;\n\nglobal ACCOUNT_MAX_CALLS: u64 = 4;\n\n// Note: If you change the following struct you have to update default_entrypoint.ts\n// docs:start:app-payload-struct\nstruct AppPayload {\n function_calls: [FunctionCall; ACCOUNT_MAX_CALLS],\n nonce: Field,\n}\n// docs:end:app-payload-struct\n\nimpl Serialize<APP_PAYLOAD_SIZE> for AppPayload {\n // Serializes the entrypoint struct\n fn serialize(self) -> [Field; APP_PAYLOAD_SIZE] {\n let mut fields: BoundedVec<Field, APP_PAYLOAD_SIZE> = BoundedVec::new();\n for call in self.function_calls {\n fields.extend_from_array(call.serialize());\n }\n fields.push(self.nonce);\n fields.storage\n }\n}\n\nimpl Hash for AppPayload {\n fn hash(self) -> Field {\n poseidon2_hash_with_separator(self.serialize(), GENERATOR_INDEX__SIGNATURE_PAYLOAD)\n }\n}\n\nimpl AppPayload {\n // Serializes the payload as an array of bytes. Useful for hashing with sha256.\n fn to_be_bytes(self) -> [u8; APP_PAYLOAD_SIZE_IN_BYTES] {\n let mut bytes: BoundedVec<u8, APP_PAYLOAD_SIZE_IN_BYTES> = BoundedVec::new();\n\n for i in 0..ACCOUNT_MAX_CALLS {\n bytes.extend_from_array(self.function_calls[i].to_be_bytes());\n }\n bytes.extend_from_array(self.nonce.to_be_bytes::<32>());\n\n bytes.storage\n }\n\n // Executes all private and public calls\n // docs:start:entrypoint-execute-calls\n fn execute_calls(self, context: &mut PrivateContext) {\n for call in self.function_calls {\n if !call.target_address.is_zero() {\n if call.is_public {\n context.call_public_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n false\n );\n } else {\n let _result = context.call_private_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n false\n );\n }\n }\n }\n }\n // docs:end:entrypoint-execute-calls\n}\n"},"77":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/entrypoint/fee.nr","source":"use dep::aztec::prelude::PrivateContext;\nuse dep::aztec::protocol_types::{\n constants::GENERATOR_INDEX__FEE_PAYLOAD, hash::poseidon2_hash_with_separator,\n traits::{Hash, Serialize}\n};\nuse crate::entrypoint::function_call::FunctionCall;\n\n// 2 * 5 (FUNCTION_CALL_SIZE) + 2\nglobal FEE_PAYLOAD_SIZE: Field = 12;\n\n// 2 * 98 (FUNCTION_CALL_SIZE_IN_BYTES) + 32\nglobal FEE_PAYLOAD_SIZE_IN_BYTES: Field = 228;\n\nglobal MAX_FEE_FUNCTION_CALLS = 2;\n\n// docs:start:fee-payload-struct\nstruct FeePayload {\n function_calls: [FunctionCall; MAX_FEE_FUNCTION_CALLS],\n nonce: Field,\n is_fee_payer: bool,\n}\n// docs:end:fee-payload-struct\n\nimpl Serialize<FEE_PAYLOAD_SIZE> for FeePayload {\n // Serializes the entrypoint struct\n fn serialize(self) -> [Field; FEE_PAYLOAD_SIZE] {\n let mut fields: BoundedVec<Field, FEE_PAYLOAD_SIZE> = BoundedVec::new();\n for i in 0..MAX_FEE_FUNCTION_CALLS {\n fields.extend_from_array(self.function_calls[i].serialize());\n }\n fields.push(self.nonce);\n fields.push(self.is_fee_payer as Field);\n fields.storage\n }\n}\n\nimpl Hash for FeePayload {\n fn hash(self) -> Field {\n poseidon2_hash_with_separator(self.serialize(), GENERATOR_INDEX__FEE_PAYLOAD)\n }\n}\n\nimpl FeePayload {\n fn to_be_bytes(self) -> [u8; FEE_PAYLOAD_SIZE_IN_BYTES] {\n let mut bytes: BoundedVec<u8, FEE_PAYLOAD_SIZE_IN_BYTES> = BoundedVec::new();\n\n for i in 0..MAX_FEE_FUNCTION_CALLS {\n bytes.extend_from_array(self.function_calls[i].to_be_bytes());\n }\n bytes.extend_from_array(self.nonce.to_be_bytes::<32>());\n bytes.push(self.is_fee_payer as u8);\n\n bytes.storage\n }\n\n fn execute_calls(self, context: &mut PrivateContext) {\n for call in self.function_calls {\n if !call.target_address.is_zero() {\n if call.is_public {\n context.call_public_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n false\n );\n } else {\n let _result = context.call_private_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n false\n );\n }\n }\n }\n if self.is_fee_payer {\n context.set_as_fee_payer();\n }\n }\n}\n"},"83":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/keys/point_to_symmetric_key.nr","source":"use dep::protocol_types::{constants::GENERATOR_INDEX__SYMMETRIC_KEY, scalar::Scalar, point::Point, utils::arr_copy_slice};\nuse crate::utils::point::point_to_bytes;\nuse std::{hash::sha256, embedded_curve_ops::multi_scalar_mul};\n\n// TODO(#5726): This function is called deriveAESSecret in TS. I don't like point_to_symmetric_key name much since\n// point is not the only input of the function. Unify naming with TS once we have a better name.\npub fn point_to_symmetric_key(secret: Scalar, point: Point) -> [u8; 32] {\n let shared_secret: Point = multi_scalar_mul([point], [secret]);\n let shared_secret = point_to_bytes(shared_secret);\n let mut shared_secret_bytes_with_separator = [0 as u8; 33];\n shared_secret_bytes_with_separator = arr_copy_slice(shared_secret, shared_secret_bytes_with_separator, 0);\n shared_secret_bytes_with_separator[32] = GENERATOR_INDEX__SYMMETRIC_KEY;\n sha256(shared_secret_bytes_with_separator)\n}\n\n#[test]\nfn test_point_to_symmetric_key_matches_noir() {\n // Value taken from \"derive shared secret\" test in encrypt_buffer.test.ts\n let secret = Scalar {\n lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06\n };\n let point = Point {\n x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n is_infinite: false\n };\n\n let key = point_to_symmetric_key(secret, point);\n\n // The following value was generated by `encrypt_buffer.test.ts`.\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let key_from_typescript = [\n 251, 232, 177, 34, 2, 174, 35, 92, 165, 118, 168, 3, 153, 140, 46, 210, 203, 154, 184, 158, 236, 33, 95, 77, 93, 120, 72, 88, 190, 209, 64, 159\n ];\n assert_eq(key, key_from_typescript);\n}\n"},"84":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/keys/stored_keys.nr","source":"use crate::keys::public_keys::{PublicKeys, PUBLIC_KEYS_LENGTH};\nuse dep::protocol_types::traits::{Serialize, Deserialize};\n\n// This struct represents how public keys are stored in the key registry. We store not just the keys themselves but also\n// their hash, so that when reading in private we can perform a historical read for the hash and then show that it\n// corresponds to a preimage obtained from an unconstrained hint. We do store the keys keys regardless as they might be\n// needed during public execution, and since we need to broadcast and produce hints in some standardized way.\n// While it might seem odd to create a struct for what is effectively some data and a pure function called on it, state\n// variables rely on serializable structs in order to persist data to storage, so we must use this abstraction.\nstruct StoredKeys {\n public_keys: PublicKeys,\n hash: Field,\n}\n\nimpl StoredKeys {\n // Instances of StoredKeys are expected to only be created by calling this function so that we guarantee that the\n // hash field does indeed correspond to the hash of the keys. Ideally we'd forbid direct access to the struct, but \n // Noir doesn't yet support private members.\n fn new(public_keys: PublicKeys) -> Self {\n Self { public_keys, hash: public_keys.hash().inner }\n }\n}\n\n// Our serialization is the concatenation of the public keys serialization plush the hash, so we need one extra field.\nglobal STORED_KEYS_LENGTH: u32 = PUBLIC_KEYS_LENGTH + 1;\n\nimpl Serialize<STORED_KEYS_LENGTH> for StoredKeys {\n fn serialize(self) -> [Field; STORED_KEYS_LENGTH] {\n // The code below is equivalent to:\n // [ ...self.public_keys.serialize(), self.hash ]\n\n let mut array = [0; STORED_KEYS_LENGTH];\n\n let serialized_keys = self.public_keys.serialize();\n for i in 0..serialized_keys.len() {\n array[i] = serialized_keys[i];\n }\n\n array[PUBLIC_KEYS_LENGTH] = self.hash;\n\n array\n }\n}\n\nimpl Deserialize<STORED_KEYS_LENGTH> for StoredKeys {\n fn deserialize(array: [Field; STORED_KEYS_LENGTH]) -> Self {\n // The code below is equivalent to:\n // Self { public_keys: PublicKeys::deserialize(array[0 : PUBLIC_KEYS_LENGTH]), hash: array[PUBLIC_KEYS_LENGTH] }\n\n let mut serialized_keys = [0; PUBLIC_KEYS_LENGTH];\n for i in 0..serialized_keys.len() {\n serialized_keys[i] = array[i];\n }\n\n let hash = array[PUBLIC_KEYS_LENGTH];\n\n Self { public_keys: PublicKeys::deserialize(serialized_keys), hash }\n }\n}\n"},"85":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/keys/public_keys.nr","source":"use dep::protocol_types::{\n address::PublicKeysHash, constants::GENERATOR_INDEX__PUBLIC_KEYS_HASH,\n hash::poseidon2_hash_with_separator, point::{Point, POINT_LENGTH},\n traits::{Deserialize, Serialize, Empty, is_empty, Hash}\n};\n\nglobal PUBLIC_KEYS_LENGTH: u32 = 12;\n\nstruct PublicKeys {\n npk_m: NpkM,\n ivpk_m: IvpkM,\n ovpk_m: OvpkM,\n tpk_m: TpkM,\n}\n\ntrait ToPoint {\n fn to_point(self) -> Point;\n}\n\nstruct NpkM {\n inner: Point\n}\n\nimpl ToPoint for NpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for NpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\n// Note: If we store npk_m_hash directly we can remove this trait implementation. See #8091\nimpl Hash for NpkM {\n fn hash(self) -> Field {\n self.inner.hash()\n }\n}\n\nstruct IvpkM {\n inner: Point\n}\n\nimpl ToPoint for IvpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for IvpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\nstruct OvpkM {\n inner: Point\n}\n\nimpl Hash for OvpkM {\n fn hash(self) -> Field {\n self.inner.hash()\n }\n}\n\nimpl ToPoint for OvpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for OvpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\nstruct TpkM {\n inner: Point\n}\n\nimpl ToPoint for TpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Empty for PublicKeys {\n fn empty() -> Self {\n PublicKeys {\n npk_m: NpkM { inner: Point::empty() },\n ivpk_m: IvpkM { inner: Point::empty() },\n ovpk_m: OvpkM { inner: Point::empty() },\n tpk_m: TpkM { inner: Point::empty() }\n }\n }\n}\n\nimpl Eq for PublicKeys {\n fn eq(self, other: PublicKeys) -> bool {\n (self.npk_m.inner == other.npk_m.inner)\n & (self.ivpk_m.inner == other.ivpk_m.inner)\n & (self.ovpk_m.inner == other.ovpk_m.inner)\n & (self.tpk_m.inner == other.tpk_m.inner)\n }\n}\n\nimpl PublicKeys {\n pub fn hash(self) -> PublicKeysHash {\n PublicKeysHash::from_field(\n if is_empty(self) {\n 0\n } else {\n poseidon2_hash_with_separator(self.serialize(), GENERATOR_INDEX__PUBLIC_KEYS_HASH as Field)\n }\n )\n }\n}\n\nimpl Serialize<PUBLIC_KEYS_LENGTH> for PublicKeys {\n fn serialize(self) -> [Field; PUBLIC_KEYS_LENGTH] {\n [\n self.npk_m.inner.x,\n self.npk_m.inner.y,\n self.npk_m.inner.is_infinite as Field,\n self.ivpk_m.inner.x,\n self.ivpk_m.inner.y,\n self.ivpk_m.inner.is_infinite as Field,\n self.ovpk_m.inner.x,\n self.ovpk_m.inner.y,\n self.ovpk_m.inner.is_infinite as Field,\n self.tpk_m.inner.x,\n self.tpk_m.inner.y,\n self.tpk_m.inner.is_infinite as Field\n ]\n }\n}\n\nimpl Deserialize<PUBLIC_KEYS_LENGTH> for PublicKeys {\n fn deserialize(serialized: [Field; PUBLIC_KEYS_LENGTH]) -> PublicKeys {\n PublicKeys {\n npk_m: NpkM { inner: Point { x: serialized[0], y: serialized[1], is_infinite: serialized[2] as bool } },\n ivpk_m: IvpkM { inner: Point { x: serialized[3], y: serialized[4], is_infinite: serialized[5] as bool } },\n ovpk_m: OvpkM { inner: Point { x: serialized[6], y: serialized[7], is_infinite: serialized[8] as bool } },\n tpk_m: TpkM { inner: Point { x: serialized[9], y: serialized[10], is_infinite: serialized[11] as bool } }\n }\n }\n}\n\n#[test]\nfn compute_public_keys_hash() {\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: 1, y: 2, is_infinite: false } },\n ivpk_m: IvpkM { inner: Point { x: 3, y: 4, is_infinite: false } },\n ovpk_m: OvpkM { inner: Point { x: 5, y: 6, is_infinite: false } },\n tpk_m: TpkM { inner: Point { x: 7, y: 8, is_infinite: false } }\n };\n\n let actual = keys.hash();\n let expected_public_keys_hash = 0x0fecd9a32db731fec1fded1b9ff957a1625c069245a3613a2538bd527068b0ad;\n\n assert(actual.to_field() == expected_public_keys_hash);\n}\n\n#[test]\nfn compute_empty_hash() {\n let keys = PublicKeys::empty();\n\n let actual = keys.hash();\n let test_data_empty_hash = 0x0000000000000000000000000000000000000000000000000000000000000000;\n\n assert(actual.to_field() == test_data_empty_hash);\n}\n\n#[test]\nfn test_public_keys_serialization() {\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: 1, y: 2, is_infinite: false } },\n ivpk_m: IvpkM { inner: Point { x: 3, y: 4, is_infinite: false } },\n ovpk_m: OvpkM { inner: Point { x: 5, y: 6, is_infinite: false } },\n tpk_m: TpkM { inner: Point { x: 7, y: 8, is_infinite: false } }\n };\n\n let serialized = keys.serialize();\n let deserialized = PublicKeys::deserialize(serialized);\n\n assert_eq(keys.npk_m.inner.x, deserialized.npk_m.inner.x);\n assert_eq(keys.npk_m.inner.y, deserialized.npk_m.inner.y);\n assert_eq(keys.ivpk_m.inner.x, deserialized.ivpk_m.inner.x);\n assert_eq(keys.ivpk_m.inner.y, deserialized.ivpk_m.inner.y);\n assert_eq(keys.ovpk_m.inner.x, deserialized.ovpk_m.inner.x);\n assert_eq(keys.ovpk_m.inner.y, deserialized.ovpk_m.inner.y);\n assert_eq(keys.tpk_m.inner.x, deserialized.tpk_m.inner.x);\n assert_eq(keys.tpk_m.inner.y, deserialized.tpk_m.inner.y);\n}\n"},"87":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/keys/getters/mod.nr","source":"use dep::protocol_types::{\n header::Header, address::AztecAddress, constants::CANONICAL_KEY_REGISTRY_ADDRESS,\n storage::map::derive_storage_slot_in_map\n};\nuse crate::{\n context::{PrivateContext, UnconstrainedContext},\n oracle::{keys::get_public_keys_and_partial_address, key_validation_request::get_key_validation_request},\n keys::{public_keys::{PublicKeys, PUBLIC_KEYS_LENGTH}, stored_keys::StoredKeys, constants::NULLIFIER_INDEX},\n state_vars::{public_mutable::PublicMutable, map::Map}\n};\n\nmod test;\n\n// This is the number of blocks that must pass after a key rotation event until the old keys are fully phased out and\n// become invalid.\nglobal KEY_REGISTRY_UPDATE_BLOCKS = 5;\n\nglobal KEY_REGISTRY_STORAGE_SLOT = 1;\n\nunconstrained pub fn get_nsk_app(npk_m_hash: Field) -> Field {\n get_key_validation_request(npk_m_hash, NULLIFIER_INDEX).sk_app\n}\n\n// Returns all current public keys for a given account, applying proper constraints to the context. We read all\n// keys at once since the constraints for reading them all are actually fewer than if we read them one at a time - any\n// read keys that are not required by the caller can simply be discarded.\npub fn get_current_public_keys(context: &mut PrivateContext, account: AztecAddress) -> PublicKeys {\n // We're going to perform historical reads from public storage, and so need to constrain the caller so that they\n // cannot use very old blocks when constructing proofs, and hence e.g. read very old keys. We are lax and allow\n // _any_ recent block number to be used, regardless of whether there may have been a recent key rotation. This means\n // that multiple sets of keys are valid for a while immediately after rotation, until the old keys become phased\n // out. We *must* be lax to prevent denial of service and transaction fingerprinting attacks by accounts that rotate\n // their keys frequently.\n // Note that we constrain the max block number even if the registry ends up being empty: this ensures that proof of\n // an empty registry is also fresh.\n let current_header = context.get_header();\n context.set_tx_max_block_number(current_header.global_variables.block_number as u32 + KEY_REGISTRY_UPDATE_BLOCKS);\n\n get_historical_public_keys(current_header, account)\n}\n\n// Returns historical public keys for a given account at some block determined by a block header. We read all keys at\n// once since the constraints for reading them all are actually fewer than if we read them one at a time - any read keys\n// that are not required by the caller can simply be discarded.\n// WARNING: if called with a historical header created from a fixed block this function will explicitly ignore key\n// rotation! This means that callers of this may force a user to use old keys, potentially leaking privacy (e.g. if the\n// old keys were leaked). Only call this function with a header from a fixed block if you understand the implications of\n// breaking key rotation very well.\npub fn get_historical_public_keys(historical_header: Header, account: AztecAddress) -> PublicKeys {\n // TODO: improve this so that we always hint the correct set of keys (either registry or canonical) and hash them\n // once instead of having two different hints and twice as many constraints due to the double hashing.\n\n // The key registry is the primary source of information for keys, as that's where accounts store their new keys\n // when they perform rotation. The key registry conveniently stores a hash of each user's keys, so we can read that\n // single field and then prove that we know its preimage (i.e. the current set of keys).\n let key_registry_hash = key_registry_hash_public_historical_read(historical_header, account);\n if key_registry_hash != 0 {\n let hinted_registry_public_keys = key_registry_get_stored_keys_hint(\n account,\n historical_header.global_variables.block_number as u32\n );\n assert_eq(hinted_registry_public_keys.hash().to_field(), key_registry_hash);\n\n hinted_registry_public_keys\n } else {\n // If nothing was written to the registry, we may still be able to produce the correct keys if we happen to know\n // the canonical set (i.e. the ones that are part of the account's preimage).\n let (hinted_canonical_public_keys, partial_address) = get_public_keys_and_partial_address(account);\n assert_eq(\n account, AztecAddress::compute(hinted_canonical_public_keys.hash(), partial_address), \"Invalid public keys hint for address\"\n );\n\n hinted_canonical_public_keys\n }\n}\n\nfn key_registry_hash_public_historical_read(historical_header: Header, account: AztecAddress) -> Field {\n // The keys are stored in a Map that is keyed with the address of each account, so we first derive the corresponding\n // slot for this account.\n let keys_storage_slot = derive_storage_slot_in_map(KEY_REGISTRY_STORAGE_SLOT, account);\n\n // The keys are stored as [ ...serialized_keys, hash ], and since arrays get allocated sequential storage slots\n // (prior to siloing!), we simply add the length to the base slot to get the last element.\n let hash_storage_slot = keys_storage_slot + PUBLIC_KEYS_LENGTH as Field;\n\n historical_header.public_storage_historical_read(hash_storage_slot, CANONICAL_KEY_REGISTRY_ADDRESS)\n}\n\nunconstrained fn key_registry_get_stored_keys_hint(account: AztecAddress, block_number: u32) -> PublicKeys {\n // This is equivalent to the key registry contract having an unconstrained getter that we call from an oracle, but\n // PXE does not yet support that functionality so we do this manually instad. Note that this would be a *historical*\n // call!\n\n // TODO (#7524): call the unconstrained KeyRegistry.get_current_keys() function instead\n\n let context = UnconstrainedContext::at_historical(CANONICAL_KEY_REGISTRY_ADDRESS, block_number);\n let keys_storage = Map::new(\n context,\n KEY_REGISTRY_STORAGE_SLOT,\n |context, slot| { PublicMutable::new(context, slot) }\n );\n\n let stored_keys: StoredKeys = keys_storage.at(account).read();\n stored_keys.public_keys\n}\n"}}}